diff options
Diffstat (limited to 'include')
220 files changed, 2842 insertions, 1115 deletions
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index 0b54e9a4a8a1..6dca3d542080 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h | |||
@@ -269,7 +269,7 @@ struct acpi_device_wakeup_state { | |||
269 | 269 | ||
270 | struct acpi_device_wakeup { | 270 | struct acpi_device_wakeup { |
271 | acpi_handle gpe_device; | 271 | acpi_handle gpe_device; |
272 | acpi_integer gpe_number;; | 272 | acpi_integer gpe_number; |
273 | acpi_integer sleep_state; | 273 | acpi_integer sleep_state; |
274 | struct acpi_handle_list resources; | 274 | struct acpi_handle_list resources; |
275 | struct acpi_device_wakeup_state state; | 275 | struct acpi_device_wakeup_state state; |
@@ -330,6 +330,7 @@ int acpi_bus_register_driver(struct acpi_driver *driver); | |||
330 | int acpi_bus_unregister_driver(struct acpi_driver *driver); | 330 | int acpi_bus_unregister_driver(struct acpi_driver *driver); |
331 | int acpi_bus_add(struct acpi_device **child, struct acpi_device *parent, | 331 | int acpi_bus_add(struct acpi_device **child, struct acpi_device *parent, |
332 | acpi_handle handle, int type); | 332 | acpi_handle handle, int type); |
333 | int acpi_bus_trim(struct acpi_device *start, int rmdevice); | ||
333 | int acpi_bus_start(struct acpi_device *device); | 334 | int acpi_bus_start(struct acpi_device *device); |
334 | 335 | ||
335 | int acpi_match_ids(struct acpi_device *device, char *ids); | 336 | int acpi_match_ids(struct acpi_device *device, char *ids); |
diff --git a/include/asm-alpha/io.h b/include/asm-alpha/io.h index 871dd7ad909d..3ebbeee753e9 100644 --- a/include/asm-alpha/io.h +++ b/include/asm-alpha/io.h | |||
@@ -534,9 +534,6 @@ extern void outsl (unsigned long port, const void *src, unsigned long count); | |||
534 | #define eth_io_copy_and_sum(skb,src,len,unused) \ | 534 | #define eth_io_copy_and_sum(skb,src,len,unused) \ |
535 | memcpy_fromio((skb)->data,src,len) | 535 | memcpy_fromio((skb)->data,src,len) |
536 | 536 | ||
537 | #define isa_eth_io_copy_and_sum(skb,src,len,unused) \ | ||
538 | isa_memcpy_fromio((skb)->data,src,len) | ||
539 | |||
540 | static inline int | 537 | static inline int |
541 | check_signature(const volatile void __iomem *io_addr, | 538 | check_signature(const volatile void __iomem *io_addr, |
542 | const unsigned char *signature, int length) | 539 | const unsigned char *signature, int length) |
@@ -550,87 +547,6 @@ check_signature(const volatile void __iomem *io_addr, | |||
550 | return 1; | 547 | return 1; |
551 | } | 548 | } |
552 | 549 | ||
553 | |||
554 | /* | ||
555 | * ISA space is mapped to some machine-specific location on Alpha. | ||
556 | * Call into the existing hooks to get the address translated. | ||
557 | */ | ||
558 | |||
559 | static inline u8 | ||
560 | isa_readb(unsigned long offset) | ||
561 | { | ||
562 | void __iomem *addr = ioremap(offset, 1); | ||
563 | u8 ret = readb(addr); | ||
564 | iounmap(addr); | ||
565 | return ret; | ||
566 | } | ||
567 | |||
568 | static inline u16 | ||
569 | isa_readw(unsigned long offset) | ||
570 | { | ||
571 | void __iomem *addr = ioremap(offset, 2); | ||
572 | u16 ret = readw(addr); | ||
573 | iounmap(addr); | ||
574 | return ret; | ||
575 | } | ||
576 | |||
577 | static inline u32 | ||
578 | isa_readl(unsigned long offset) | ||
579 | { | ||
580 | void __iomem *addr = ioremap(offset, 2); | ||
581 | u32 ret = readl(addr); | ||
582 | iounmap(addr); | ||
583 | return ret; | ||
584 | } | ||
585 | |||
586 | static inline void | ||
587 | isa_writeb(u8 b, unsigned long offset) | ||
588 | { | ||
589 | void __iomem *addr = ioremap(offset, 2); | ||
590 | writeb(b, addr); | ||
591 | iounmap(addr); | ||
592 | } | ||
593 | |||
594 | static inline void | ||
595 | isa_writew(u16 w, unsigned long offset) | ||
596 | { | ||
597 | void __iomem *addr = ioremap(offset, 2); | ||
598 | writew(w, addr); | ||
599 | iounmap(addr); | ||
600 | } | ||
601 | |||
602 | static inline void | ||
603 | isa_writel(u32 l, unsigned long offset) | ||
604 | { | ||
605 | void __iomem *addr = ioremap(offset, 2); | ||
606 | writel(l, addr); | ||
607 | iounmap(addr); | ||
608 | } | ||
609 | |||
610 | static inline void | ||
611 | isa_memset_io(unsigned long offset, u8 val, long n) | ||
612 | { | ||
613 | void __iomem *addr = ioremap(offset, n); | ||
614 | memset_io(addr, val, n); | ||
615 | iounmap(addr); | ||
616 | } | ||
617 | |||
618 | static inline void | ||
619 | isa_memcpy_fromio(void *dest, unsigned long offset, long n) | ||
620 | { | ||
621 | void __iomem *addr = ioremap(offset, n); | ||
622 | memcpy_fromio(dest, addr, n); | ||
623 | iounmap(addr); | ||
624 | } | ||
625 | |||
626 | static inline void | ||
627 | isa_memcpy_toio(unsigned long offset, const void *src, long n) | ||
628 | { | ||
629 | void __iomem *addr = ioremap(offset, n); | ||
630 | memcpy_toio(addr, src, n); | ||
631 | iounmap(addr); | ||
632 | } | ||
633 | |||
634 | /* | 550 | /* |
635 | * The Alpha Jensen hardware for some rather strange reason puts | 551 | * The Alpha Jensen hardware for some rather strange reason puts |
636 | * the RTC clock at 0x170 instead of 0x70. Probably due to some | 552 | * the RTC clock at 0x170 instead of 0x70. Probably due to some |
diff --git a/include/asm-alpha/mmu_context.h b/include/asm-alpha/mmu_context.h index 6f92482cc96c..0c017fc181c1 100644 --- a/include/asm-alpha/mmu_context.h +++ b/include/asm-alpha/mmu_context.h | |||
@@ -231,9 +231,8 @@ init_new_context(struct task_struct *tsk, struct mm_struct *mm) | |||
231 | { | 231 | { |
232 | int i; | 232 | int i; |
233 | 233 | ||
234 | for (i = 0; i < NR_CPUS; i++) | 234 | for_each_online_cpu(i) |
235 | if (cpu_online(i)) | 235 | mm->context[i] = 0; |
236 | mm->context[i] = 0; | ||
237 | if (tsk != current) | 236 | if (tsk != current) |
238 | task_thread_info(tsk)->pcb.ptbr | 237 | task_thread_info(tsk)->pcb.ptbr |
239 | = ((unsigned long)mm->pgd - IDENT_ADDR) >> PAGE_SHIFT; | 238 | = ((unsigned long)mm->pgd - IDENT_ADDR) >> PAGE_SHIFT; |
diff --git a/include/asm-alpha/poll.h b/include/asm-alpha/poll.h index 34f333b762a0..95707182b3ed 100644 --- a/include/asm-alpha/poll.h +++ b/include/asm-alpha/poll.h | |||
@@ -13,6 +13,8 @@ | |||
13 | #define POLLWRBAND (1 << 9) | 13 | #define POLLWRBAND (1 << 9) |
14 | #define POLLMSG (1 << 10) | 14 | #define POLLMSG (1 << 10) |
15 | #define POLLREMOVE (1 << 11) | 15 | #define POLLREMOVE (1 << 11) |
16 | #define POLLRDHUP (1 << 12) | ||
17 | |||
16 | 18 | ||
17 | struct pollfd { | 19 | struct pollfd { |
18 | int fd; | 20 | int fd; |
diff --git a/include/asm-alpha/topology.h b/include/asm-alpha/topology.h index eb740e280d9c..420ccde6b916 100644 --- a/include/asm-alpha/topology.h +++ b/include/asm-alpha/topology.h | |||
@@ -27,8 +27,8 @@ static inline cpumask_t node_to_cpumask(int node) | |||
27 | cpumask_t node_cpu_mask = CPU_MASK_NONE; | 27 | cpumask_t node_cpu_mask = CPU_MASK_NONE; |
28 | int cpu; | 28 | int cpu; |
29 | 29 | ||
30 | for(cpu = 0; cpu < NR_CPUS; cpu++) { | 30 | for_each_online_cpu(cpu) { |
31 | if (cpu_online(cpu) && (cpu_to_node(cpu) == node)) | 31 | if (cpu_to_node(cpu) == node) |
32 | cpu_set(cpu, node_cpu_mask); | 32 | cpu_set(cpu, node_cpu_mask); |
33 | } | 33 | } |
34 | 34 | ||
diff --git a/include/asm-arm/arch-at91rm9200/at91rm9200_emac.h b/include/asm-arm/arch-at91rm9200/at91rm9200_emac.h new file mode 100644 index 000000000000..fbc091e61e2f --- /dev/null +++ b/include/asm-arm/arch-at91rm9200/at91rm9200_emac.h | |||
@@ -0,0 +1,138 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-at91rm9200/at91rm9200_emac.h | ||
3 | * | ||
4 | * Copyright (C) 2005 Ivan Kokshaysky | ||
5 | * Copyright (C) SAN People | ||
6 | * | ||
7 | * Ethernet MAC registers. | ||
8 | * Based on AT91RM9200 datasheet revision E. | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License as published by | ||
12 | * the Free Software Foundation; either version 2 of the License, or | ||
13 | * (at your option) any later version. | ||
14 | */ | ||
15 | |||
16 | #ifndef AT91RM9200_EMAC_H | ||
17 | #define AT91RM9200_EMAC_H | ||
18 | |||
19 | #define AT91_EMAC_CTL 0x00 /* Control Register */ | ||
20 | #define AT91_EMAC_LB (1 << 0) /* Loopback */ | ||
21 | #define AT91_EMAC_LBL (1 << 1) /* Loopback Local */ | ||
22 | #define AT91_EMAC_RE (1 << 2) /* Receive Enable */ | ||
23 | #define AT91_EMAC_TE (1 << 3) /* Transmit Enable */ | ||
24 | #define AT91_EMAC_MPE (1 << 4) /* Management Port Enable */ | ||
25 | #define AT91_EMAC_CSR (1 << 5) /* Clear Statistics Registers */ | ||
26 | #define AT91_EMAC_INCSTAT (1 << 6) /* Increment Statistics Registers */ | ||
27 | #define AT91_EMAC_WES (1 << 7) /* Write Enable for Statistics Registers */ | ||
28 | #define AT91_EMAC_BP (1 << 8) /* Back Pressure */ | ||
29 | |||
30 | #define AT91_EMAC_CFG 0x04 /* Configuration Register */ | ||
31 | #define AT91_EMAC_SPD (1 << 0) /* Speed */ | ||
32 | #define AT91_EMAC_FD (1 << 1) /* Full Duplex */ | ||
33 | #define AT91_EMAC_BR (1 << 2) /* Bit Rate */ | ||
34 | #define AT91_EMAC_CAF (1 << 4) /* Copy All Frames */ | ||
35 | #define AT91_EMAC_NBC (1 << 5) /* No Broadcast */ | ||
36 | #define AT91_EMAC_MTI (1 << 6) /* Multicast Hash Enable */ | ||
37 | #define AT91_EMAC_UNI (1 << 7) /* Unicast Hash Enable */ | ||
38 | #define AT91_EMAC_BIG (1 << 8) /* Receive 1522 Bytes */ | ||
39 | #define AT91_EMAC_EAE (1 << 9) /* External Address Match Enable */ | ||
40 | #define AT91_EMAC_CLK (3 << 10) /* MDC Clock Divisor */ | ||
41 | #define AT91_EMAC_CLK_DIV8 (0 << 10) | ||
42 | #define AT91_EMAC_CLK_DIV16 (1 << 10) | ||
43 | #define AT91_EMAC_CLK_DIV32 (2 << 10) | ||
44 | #define AT91_EMAC_CLK_DIV64 (3 << 10) | ||
45 | #define AT91_EMAC_RTY (1 << 12) /* Retry Test */ | ||
46 | #define AT91_EMAC_RMII (1 << 13) /* Reduce MII (RMII) */ | ||
47 | |||
48 | #define AT91_EMAC_SR 0x08 /* Status Register */ | ||
49 | #define AT91_EMAC_SR_LINK (1 << 0) /* Link */ | ||
50 | #define AT91_EMAC_SR_MDIO (1 << 1) /* MDIO pin */ | ||
51 | #define AT91_EMAC_SR_IDLE (1 << 2) /* PHY idle */ | ||
52 | |||
53 | #define AT91_EMAC_TAR 0x0c /* Transmit Address Register */ | ||
54 | |||
55 | #define AT91_EMAC_TCR 0x10 /* Transmit Control Register */ | ||
56 | #define AT91_EMAC_LEN (0x7ff << 0) /* Transmit Frame Length */ | ||
57 | #define AT91_EMAC_NCRC (1 << 15) /* No CRC */ | ||
58 | |||
59 | #define AT91_EMAC_TSR 0x14 /* Transmit Status Register */ | ||
60 | #define AT91_EMAC_TSR_OVR (1 << 0) /* Transmit Buffer Overrun */ | ||
61 | #define AT91_EMAC_TSR_COL (1 << 1) /* Collision Occurred */ | ||
62 | #define AT91_EMAC_TSR_RLE (1 << 2) /* Retry Limit Exceeded */ | ||
63 | #define AT91_EMAC_TSR_IDLE (1 << 3) /* Transmitter Idle */ | ||
64 | #define AT91_EMAC_TSR_BNQ (1 << 4) /* Transmit Buffer not Queued */ | ||
65 | #define AT91_EMAC_TSR_COMP (1 << 5) /* Transmit Complete */ | ||
66 | #define AT91_EMAC_TSR_UND (1 << 6) /* Transmit Underrun */ | ||
67 | |||
68 | #define AT91_EMAC_RBQP 0x18 /* Receive Buffer Queue Pointer */ | ||
69 | |||
70 | #define AT91_EMAC_RSR 0x20 /* Receive Status Register */ | ||
71 | #define AT91_EMAC_RSR_BNA (1 << 0) /* Buffer Not Available */ | ||
72 | #define AT91_EMAC_RSR_REC (1 << 1) /* Frame Received */ | ||
73 | #define AT91_EMAC_RSR_OVR (1 << 2) /* RX Overrun */ | ||
74 | |||
75 | #define AT91_EMAC_ISR 0x24 /* Interrupt Status Register */ | ||
76 | #define AT91_EMAC_DONE (1 << 0) /* Management Done */ | ||
77 | #define AT91_EMAC_RCOM (1 << 1) /* Receive Complete */ | ||
78 | #define AT91_EMAC_RBNA (1 << 2) /* Receive Buffer Not Available */ | ||
79 | #define AT91_EMAC_TOVR (1 << 3) /* Transmit Buffer Overrun */ | ||
80 | #define AT91_EMAC_TUND (1 << 4) /* Transmit Buffer Underrun */ | ||
81 | #define AT91_EMAC_RTRY (1 << 5) /* Retry Limit */ | ||
82 | #define AT91_EMAC_TBRE (1 << 6) /* Transmit Buffer Register Empty */ | ||
83 | #define AT91_EMAC_TCOM (1 << 7) /* Transmit Complete */ | ||
84 | #define AT91_EMAC_TIDLE (1 << 8) /* Transmit Idle */ | ||
85 | #define AT91_EMAC_LINK (1 << 9) /* Link */ | ||
86 | #define AT91_EMAC_ROVR (1 << 10) /* RX Overrun */ | ||
87 | #define AT91_EMAC_ABT (1 << 11) /* Abort */ | ||
88 | |||
89 | #define AT91_EMAC_IER 0x28 /* Interrupt Enable Register */ | ||
90 | #define AT91_EMAC_IDR 0x2c /* Interrupt Disable Register */ | ||
91 | #define AT91_EMAC_IMR 0x30 /* Interrupt Mask Register */ | ||
92 | |||
93 | #define AT91_EMAC_MAN 0x34 /* PHY Maintenance Register */ | ||
94 | #define AT91_EMAC_DATA (0xffff << 0) /* MDIO Data */ | ||
95 | #define AT91_EMAC_REGA (0x1f << 18) /* MDIO Register */ | ||
96 | #define AT91_EMAC_PHYA (0x1f << 23) /* MDIO PHY Address */ | ||
97 | #define AT91_EMAC_RW (3 << 28) /* Read/Write operation */ | ||
98 | #define AT91_EMAC_RW_W (1 << 28) | ||
99 | #define AT91_EMAC_RW_R (2 << 28) | ||
100 | #define AT91_EMAC_MAN_802_3 0x40020000 /* IEEE 802.3 value */ | ||
101 | |||
102 | /* | ||
103 | * Statistics Registers. | ||
104 | */ | ||
105 | #define AT91_EMAC_FRA 0x40 /* Frames Transmitted OK */ | ||
106 | #define AT91_EMAC_SCOL 0x44 /* Single Collision Frame */ | ||
107 | #define AT91_EMAC_MCOL 0x48 /* Multiple Collision Frame */ | ||
108 | #define AT91_EMAC_OK 0x4c /* Frames Received OK */ | ||
109 | #define AT91_EMAC_SEQE 0x50 /* Frame Check Sequence Error */ | ||
110 | #define AT91_EMAC_ALE 0x54 /* Alignmemt Error */ | ||
111 | #define AT91_EMAC_DTE 0x58 /* Deffered Transmission Frame */ | ||
112 | #define AT91_EMAC_LCOL 0x5c /* Late Collision */ | ||
113 | #define AT91_EMAC_ECOL 0x60 /* Excessive Collision */ | ||
114 | #define AT91_EMAC_TUE 0x64 /* Transmit Underrun Error */ | ||
115 | #define AT91_EMAC_CSE 0x68 /* Carrier Sense Error */ | ||
116 | #define AT91_EMAC_DRFC 0x6c /* Discard RX Frame */ | ||
117 | #define AT91_EMAC_ROV 0x70 /* Receive Overrun */ | ||
118 | #define AT91_EMAC_CDE 0x74 /* Code Error */ | ||
119 | #define AT91_EMAC_ELR 0x78 /* Excessive Length Error */ | ||
120 | #define AT91_EMAC_RJB 0x7c /* Receive Jabber */ | ||
121 | #define AT91_EMAC_USF 0x80 /* Undersize Frame */ | ||
122 | #define AT91_EMAC_SQEE 0x84 /* SQE Test Error */ | ||
123 | |||
124 | /* | ||
125 | * Address Registers. | ||
126 | */ | ||
127 | #define AT91_EMAC_HSL 0x90 /* Hash Address Low [31:0] */ | ||
128 | #define AT91_EMAC_HSH 0x94 /* Hash Address High [63:32] */ | ||
129 | #define AT91_EMAC_SA1L 0x98 /* Specific Address 1 Low, bytes 0-3 */ | ||
130 | #define AT91_EMAC_SA1H 0x9c /* Specific Address 1 High, bytes 4-5 */ | ||
131 | #define AT91_EMAC_SA2L 0xa0 /* Specific Address 2 Low, bytes 0-3 */ | ||
132 | #define AT91_EMAC_SA2H 0xa4 /* Specific Address 2 High, bytes 4-5 */ | ||
133 | #define AT91_EMAC_SA3L 0xa8 /* Specific Address 3 Low, bytes 0-3 */ | ||
134 | #define AT91_EMAC_SA3H 0xac /* Specific Address 3 High, bytes 4-5 */ | ||
135 | #define AT91_EMAC_SA4L 0xb0 /* Specific Address 4 Low, bytes 0-3 */ | ||
136 | #define AT91_EMAC_SA4H 0xb4 /* Specific Address 4 High, bytes 4-5 */ | ||
137 | |||
138 | #endif | ||
diff --git a/include/asm-arm/io.h b/include/asm-arm/io.h index fd0147e52dbb..b3479fc1cc8f 100644 --- a/include/asm-arm/io.h +++ b/include/asm-arm/io.h | |||
@@ -226,42 +226,6 @@ out: | |||
226 | #endif /* __mem_pci */ | 226 | #endif /* __mem_pci */ |
227 | 227 | ||
228 | /* | 228 | /* |
229 | * If this architecture has ISA IO, then define the isa_read/isa_write | ||
230 | * macros. | ||
231 | */ | ||
232 | #ifdef __mem_isa | ||
233 | |||
234 | #define isa_readb(addr) __raw_readb(__mem_isa(addr)) | ||
235 | #define isa_readw(addr) __raw_readw(__mem_isa(addr)) | ||
236 | #define isa_readl(addr) __raw_readl(__mem_isa(addr)) | ||
237 | #define isa_writeb(val,addr) __raw_writeb(val,__mem_isa(addr)) | ||
238 | #define isa_writew(val,addr) __raw_writew(val,__mem_isa(addr)) | ||
239 | #define isa_writel(val,addr) __raw_writel(val,__mem_isa(addr)) | ||
240 | #define isa_memset_io(a,b,c) _memset_io(__mem_isa(a),(b),(c)) | ||
241 | #define isa_memcpy_fromio(a,b,c) _memcpy_fromio((a),__mem_isa(b),(c)) | ||
242 | #define isa_memcpy_toio(a,b,c) _memcpy_toio(__mem_isa((a)),(b),(c)) | ||
243 | |||
244 | #define isa_eth_io_copy_and_sum(a,b,c,d) \ | ||
245 | eth_copy_and_sum((a),__mem_isa(b),(c),(d)) | ||
246 | |||
247 | #else /* __mem_isa */ | ||
248 | |||
249 | #define isa_readb(addr) (__readwrite_bug("isa_readb"),0) | ||
250 | #define isa_readw(addr) (__readwrite_bug("isa_readw"),0) | ||
251 | #define isa_readl(addr) (__readwrite_bug("isa_readl"),0) | ||
252 | #define isa_writeb(val,addr) __readwrite_bug("isa_writeb") | ||
253 | #define isa_writew(val,addr) __readwrite_bug("isa_writew") | ||
254 | #define isa_writel(val,addr) __readwrite_bug("isa_writel") | ||
255 | #define isa_memset_io(a,b,c) __readwrite_bug("isa_memset_io") | ||
256 | #define isa_memcpy_fromio(a,b,c) __readwrite_bug("isa_memcpy_fromio") | ||
257 | #define isa_memcpy_toio(a,b,c) __readwrite_bug("isa_memcpy_toio") | ||
258 | |||
259 | #define isa_eth_io_copy_and_sum(a,b,c,d) \ | ||
260 | __readwrite_bug("isa_eth_io_copy_and_sum") | ||
261 | |||
262 | #endif /* __mem_isa */ | ||
263 | |||
264 | /* | ||
265 | * ioremap and friends. | 229 | * ioremap and friends. |
266 | * | 230 | * |
267 | * ioremap takes a PCI memory address, as specified in | 231 | * ioremap takes a PCI memory address, as specified in |
diff --git a/include/asm-arm/poll.h b/include/asm-arm/poll.h index 2744ca831f5d..5030b2b232a3 100644 --- a/include/asm-arm/poll.h +++ b/include/asm-arm/poll.h | |||
@@ -16,6 +16,7 @@ | |||
16 | #define POLLWRBAND 0x0200 | 16 | #define POLLWRBAND 0x0200 |
17 | #define POLLMSG 0x0400 | 17 | #define POLLMSG 0x0400 |
18 | #define POLLREMOVE 0x1000 | 18 | #define POLLREMOVE 0x1000 |
19 | #define POLLRDHUP 0x2000 | ||
19 | 20 | ||
20 | struct pollfd { | 21 | struct pollfd { |
21 | int fd; | 22 | int fd; |
diff --git a/include/asm-arm26/poll.h b/include/asm-arm26/poll.h index fdfdab064a65..9ccb7f4190ca 100644 --- a/include/asm-arm26/poll.h +++ b/include/asm-arm26/poll.h | |||
@@ -15,6 +15,7 @@ | |||
15 | #define POLLWRNORM 0x0100 | 15 | #define POLLWRNORM 0x0100 |
16 | #define POLLWRBAND 0x0200 | 16 | #define POLLWRBAND 0x0200 |
17 | #define POLLMSG 0x0400 | 17 | #define POLLMSG 0x0400 |
18 | #define POLLRDHUP 0x2000 | ||
18 | 19 | ||
19 | struct pollfd { | 20 | struct pollfd { |
20 | int fd; | 21 | int fd; |
diff --git a/include/asm-cris/poll.h b/include/asm-cris/poll.h index 1c0efc3e4be7..1b25d4cf498c 100644 --- a/include/asm-cris/poll.h +++ b/include/asm-cris/poll.h | |||
@@ -15,6 +15,7 @@ | |||
15 | #define POLLWRBAND 512 | 15 | #define POLLWRBAND 512 |
16 | #define POLLMSG 1024 | 16 | #define POLLMSG 1024 |
17 | #define POLLREMOVE 4096 | 17 | #define POLLREMOVE 4096 |
18 | #define POLLRDHUP 8192 | ||
18 | 19 | ||
19 | struct pollfd { | 20 | struct pollfd { |
20 | int fd; | 21 | int fd; |
diff --git a/include/asm-cris/system.h b/include/asm-cris/system.h index d48670107a85..1d63c2aa8ec2 100644 --- a/include/asm-cris/system.h +++ b/include/asm-cris/system.h | |||
@@ -71,4 +71,6 @@ static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int siz | |||
71 | 71 | ||
72 | #define arch_align_stack(x) (x) | 72 | #define arch_align_stack(x) (x) |
73 | 73 | ||
74 | void default_idle(void); | ||
75 | |||
74 | #endif | 76 | #endif |
diff --git a/include/asm-frv/poll.h b/include/asm-frv/poll.h index 8cbcd60e334f..c8fe8801d075 100644 --- a/include/asm-frv/poll.h +++ b/include/asm-frv/poll.h | |||
@@ -12,6 +12,7 @@ | |||
12 | #define POLLRDBAND 128 | 12 | #define POLLRDBAND 128 |
13 | #define POLLWRBAND 256 | 13 | #define POLLWRBAND 256 |
14 | #define POLLMSG 0x0400 | 14 | #define POLLMSG 0x0400 |
15 | #define POLLRDHUP 0x2000 | ||
15 | 16 | ||
16 | struct pollfd { | 17 | struct pollfd { |
17 | int fd; | 18 | int fd; |
diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h index 400c2b41896e..1a565a9d2fa7 100644 --- a/include/asm-generic/bug.h +++ b/include/asm-generic/bug.h | |||
@@ -7,7 +7,7 @@ | |||
7 | #ifdef CONFIG_BUG | 7 | #ifdef CONFIG_BUG |
8 | #ifndef HAVE_ARCH_BUG | 8 | #ifndef HAVE_ARCH_BUG |
9 | #define BUG() do { \ | 9 | #define BUG() do { \ |
10 | printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ | 10 | printk("BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __FUNCTION__); \ |
11 | panic("BUG!"); \ | 11 | panic("BUG!"); \ |
12 | } while (0) | 12 | } while (0) |
13 | #endif | 13 | #endif |
@@ -19,7 +19,7 @@ | |||
19 | #ifndef HAVE_ARCH_WARN_ON | 19 | #ifndef HAVE_ARCH_WARN_ON |
20 | #define WARN_ON(condition) do { \ | 20 | #define WARN_ON(condition) do { \ |
21 | if (unlikely((condition)!=0)) { \ | 21 | if (unlikely((condition)!=0)) { \ |
22 | printk("Badness in %s at %s:%d\n", __FUNCTION__, __FILE__, __LINE__); \ | 22 | printk("BUG: warning at %s:%d/%s()\n", __FILE__, __LINE__, __FUNCTION__); \ |
23 | dump_stack(); \ | 23 | dump_stack(); \ |
24 | } \ | 24 | } \ |
25 | } while (0) | 25 | } while (0) |
diff --git a/include/asm-generic/percpu.h b/include/asm-generic/percpu.h index 9044aeb37828..78cf45547e31 100644 --- a/include/asm-generic/percpu.h +++ b/include/asm-generic/percpu.h | |||
@@ -19,10 +19,9 @@ extern unsigned long __per_cpu_offset[NR_CPUS]; | |||
19 | #define percpu_modcopy(pcpudst, src, size) \ | 19 | #define percpu_modcopy(pcpudst, src, size) \ |
20 | do { \ | 20 | do { \ |
21 | unsigned int __i; \ | 21 | unsigned int __i; \ |
22 | for (__i = 0; __i < NR_CPUS; __i++) \ | 22 | for_each_cpu(__i) \ |
23 | if (cpu_possible(__i)) \ | 23 | memcpy((pcpudst)+__per_cpu_offset[__i], \ |
24 | memcpy((pcpudst)+__per_cpu_offset[__i], \ | 24 | (src), (size)); \ |
25 | (src), (size)); \ | ||
26 | } while (0) | 25 | } while (0) |
27 | #else /* ! SMP */ | 26 | #else /* ! SMP */ |
28 | 27 | ||
diff --git a/include/asm-h8300/poll.h b/include/asm-h8300/poll.h index bf49ab8ad6da..fc52103b276a 100644 --- a/include/asm-h8300/poll.h +++ b/include/asm-h8300/poll.h | |||
@@ -12,6 +12,7 @@ | |||
12 | #define POLLRDBAND 128 | 12 | #define POLLRDBAND 128 |
13 | #define POLLWRBAND 256 | 13 | #define POLLWRBAND 256 |
14 | #define POLLMSG 0x0400 | 14 | #define POLLMSG 0x0400 |
15 | #define POLLRDHUP 0x2000 | ||
15 | 16 | ||
16 | struct pollfd { | 17 | struct pollfd { |
17 | int fd; | 18 | int fd; |
diff --git a/include/asm-i386/alternative.h b/include/asm-i386/alternative.h new file mode 100644 index 000000000000..e201decea0c9 --- /dev/null +++ b/include/asm-i386/alternative.h | |||
@@ -0,0 +1,129 @@ | |||
1 | #ifndef _I386_ALTERNATIVE_H | ||
2 | #define _I386_ALTERNATIVE_H | ||
3 | |||
4 | #ifdef __KERNEL__ | ||
5 | |||
6 | struct alt_instr { | ||
7 | u8 *instr; /* original instruction */ | ||
8 | u8 *replacement; | ||
9 | u8 cpuid; /* cpuid bit set for replacement */ | ||
10 | u8 instrlen; /* length of original instruction */ | ||
11 | u8 replacementlen; /* length of new instruction, <= instrlen */ | ||
12 | u8 pad; | ||
13 | }; | ||
14 | |||
15 | extern void apply_alternatives(struct alt_instr *start, struct alt_instr *end); | ||
16 | |||
17 | struct module; | ||
18 | extern void alternatives_smp_module_add(struct module *mod, char *name, | ||
19 | void *locks, void *locks_end, | ||
20 | void *text, void *text_end); | ||
21 | extern void alternatives_smp_module_del(struct module *mod); | ||
22 | extern void alternatives_smp_switch(int smp); | ||
23 | |||
24 | #endif | ||
25 | |||
26 | /* | ||
27 | * Alternative instructions for different CPU types or capabilities. | ||
28 | * | ||
29 | * This allows to use optimized instructions even on generic binary | ||
30 | * kernels. | ||
31 | * | ||
32 | * length of oldinstr must be longer or equal the length of newinstr | ||
33 | * It can be padded with nops as needed. | ||
34 | * | ||
35 | * For non barrier like inlines please define new variants | ||
36 | * without volatile and memory clobber. | ||
37 | */ | ||
38 | #define alternative(oldinstr, newinstr, feature) \ | ||
39 | asm volatile ("661:\n\t" oldinstr "\n662:\n" \ | ||
40 | ".section .altinstructions,\"a\"\n" \ | ||
41 | " .align 4\n" \ | ||
42 | " .long 661b\n" /* label */ \ | ||
43 | " .long 663f\n" /* new instruction */ \ | ||
44 | " .byte %c0\n" /* feature bit */ \ | ||
45 | " .byte 662b-661b\n" /* sourcelen */ \ | ||
46 | " .byte 664f-663f\n" /* replacementlen */ \ | ||
47 | ".previous\n" \ | ||
48 | ".section .altinstr_replacement,\"ax\"\n" \ | ||
49 | "663:\n\t" newinstr "\n664:\n" /* replacement */\ | ||
50 | ".previous" :: "i" (feature) : "memory") | ||
51 | |||
52 | /* | ||
53 | * Alternative inline assembly with input. | ||
54 | * | ||
55 | * Pecularities: | ||
56 | * No memory clobber here. | ||
57 | * Argument numbers start with 1. | ||
58 | * Best is to use constraints that are fixed size (like (%1) ... "r") | ||
59 | * If you use variable sized constraints like "m" or "g" in the | ||
60 | * replacement maake sure to pad to the worst case length. | ||
61 | */ | ||
62 | #define alternative_input(oldinstr, newinstr, feature, input...) \ | ||
63 | asm volatile ("661:\n\t" oldinstr "\n662:\n" \ | ||
64 | ".section .altinstructions,\"a\"\n" \ | ||
65 | " .align 4\n" \ | ||
66 | " .long 661b\n" /* label */ \ | ||
67 | " .long 663f\n" /* new instruction */ \ | ||
68 | " .byte %c0\n" /* feature bit */ \ | ||
69 | " .byte 662b-661b\n" /* sourcelen */ \ | ||
70 | " .byte 664f-663f\n" /* replacementlen */ \ | ||
71 | ".previous\n" \ | ||
72 | ".section .altinstr_replacement,\"ax\"\n" \ | ||
73 | "663:\n\t" newinstr "\n664:\n" /* replacement */\ | ||
74 | ".previous" :: "i" (feature), ##input) | ||
75 | |||
76 | /* | ||
77 | * Alternative inline assembly for SMP. | ||
78 | * | ||
79 | * alternative_smp() takes two versions (SMP first, UP second) and is | ||
80 | * for more complex stuff such as spinlocks. | ||
81 | * | ||
82 | * The LOCK_PREFIX macro defined here replaces the LOCK and | ||
83 | * LOCK_PREFIX macros used everywhere in the source tree. | ||
84 | * | ||
85 | * SMP alternatives use the same data structures as the other | ||
86 | * alternatives and the X86_FEATURE_UP flag to indicate the case of a | ||
87 | * UP system running a SMP kernel. The existing apply_alternatives() | ||
88 | * works fine for patching a SMP kernel for UP. | ||
89 | * | ||
90 | * The SMP alternative tables can be kept after boot and contain both | ||
91 | * UP and SMP versions of the instructions to allow switching back to | ||
92 | * SMP at runtime, when hotplugging in a new CPU, which is especially | ||
93 | * useful in virtualized environments. | ||
94 | * | ||
95 | * The very common lock prefix is handled as special case in a | ||
96 | * separate table which is a pure address list without replacement ptr | ||
97 | * and size information. That keeps the table sizes small. | ||
98 | */ | ||
99 | |||
100 | #ifdef CONFIG_SMP | ||
101 | #define alternative_smp(smpinstr, upinstr, args...) \ | ||
102 | asm volatile ("661:\n\t" smpinstr "\n662:\n" \ | ||
103 | ".section .smp_altinstructions,\"a\"\n" \ | ||
104 | " .align 4\n" \ | ||
105 | " .long 661b\n" /* label */ \ | ||
106 | " .long 663f\n" /* new instruction */ \ | ||
107 | " .byte 0x68\n" /* X86_FEATURE_UP */ \ | ||
108 | " .byte 662b-661b\n" /* sourcelen */ \ | ||
109 | " .byte 664f-663f\n" /* replacementlen */ \ | ||
110 | ".previous\n" \ | ||
111 | ".section .smp_altinstr_replacement,\"awx\"\n" \ | ||
112 | "663:\n\t" upinstr "\n" /* replacement */ \ | ||
113 | "664:\n\t.fill 662b-661b,1,0x42\n" /* space for original */ \ | ||
114 | ".previous" : args) | ||
115 | |||
116 | #define LOCK_PREFIX \ | ||
117 | ".section .smp_locks,\"a\"\n" \ | ||
118 | " .align 4\n" \ | ||
119 | " .long 661f\n" /* address */ \ | ||
120 | ".previous\n" \ | ||
121 | "661:\n\tlock; " | ||
122 | |||
123 | #else /* ! CONFIG_SMP */ | ||
124 | #define alternative_smp(smpinstr, upinstr, args...) \ | ||
125 | asm volatile (upinstr : args) | ||
126 | #define LOCK_PREFIX "" | ||
127 | #endif | ||
128 | |||
129 | #endif /* _I386_ALTERNATIVE_H */ | ||
diff --git a/include/asm-i386/arch_hooks.h b/include/asm-i386/arch_hooks.h index 28b96a6fb9fa..238cf4275b96 100644 --- a/include/asm-i386/arch_hooks.h +++ b/include/asm-i386/arch_hooks.h | |||
@@ -24,4 +24,7 @@ extern void trap_init_hook(void); | |||
24 | extern void time_init_hook(void); | 24 | extern void time_init_hook(void); |
25 | extern void mca_nmi_hook(void); | 25 | extern void mca_nmi_hook(void); |
26 | 26 | ||
27 | extern int setup_early_printk(char *); | ||
28 | extern void early_printk(const char *fmt, ...) __attribute__((format(printf,1,2))); | ||
29 | |||
27 | #endif | 30 | #endif |
diff --git a/include/asm-i386/atomic.h b/include/asm-i386/atomic.h index de649d3aa2d4..22d80ece95cb 100644 --- a/include/asm-i386/atomic.h +++ b/include/asm-i386/atomic.h | |||
@@ -10,12 +10,6 @@ | |||
10 | * resource counting etc.. | 10 | * resource counting etc.. |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #ifdef CONFIG_SMP | ||
14 | #define LOCK "lock ; " | ||
15 | #else | ||
16 | #define LOCK "" | ||
17 | #endif | ||
18 | |||
19 | /* | 13 | /* |
20 | * Make sure gcc doesn't try to be clever and move things around | 14 | * Make sure gcc doesn't try to be clever and move things around |
21 | * on us. We need to use _exactly_ the address the user gave us, | 15 | * on us. We need to use _exactly_ the address the user gave us, |
@@ -52,7 +46,7 @@ typedef struct { volatile int counter; } atomic_t; | |||
52 | static __inline__ void atomic_add(int i, atomic_t *v) | 46 | static __inline__ void atomic_add(int i, atomic_t *v) |
53 | { | 47 | { |
54 | __asm__ __volatile__( | 48 | __asm__ __volatile__( |
55 | LOCK "addl %1,%0" | 49 | LOCK_PREFIX "addl %1,%0" |
56 | :"=m" (v->counter) | 50 | :"=m" (v->counter) |
57 | :"ir" (i), "m" (v->counter)); | 51 | :"ir" (i), "m" (v->counter)); |
58 | } | 52 | } |
@@ -67,7 +61,7 @@ static __inline__ void atomic_add(int i, atomic_t *v) | |||
67 | static __inline__ void atomic_sub(int i, atomic_t *v) | 61 | static __inline__ void atomic_sub(int i, atomic_t *v) |
68 | { | 62 | { |
69 | __asm__ __volatile__( | 63 | __asm__ __volatile__( |
70 | LOCK "subl %1,%0" | 64 | LOCK_PREFIX "subl %1,%0" |
71 | :"=m" (v->counter) | 65 | :"=m" (v->counter) |
72 | :"ir" (i), "m" (v->counter)); | 66 | :"ir" (i), "m" (v->counter)); |
73 | } | 67 | } |
@@ -86,7 +80,7 @@ static __inline__ int atomic_sub_and_test(int i, atomic_t *v) | |||
86 | unsigned char c; | 80 | unsigned char c; |
87 | 81 | ||
88 | __asm__ __volatile__( | 82 | __asm__ __volatile__( |
89 | LOCK "subl %2,%0; sete %1" | 83 | LOCK_PREFIX "subl %2,%0; sete %1" |
90 | :"=m" (v->counter), "=qm" (c) | 84 | :"=m" (v->counter), "=qm" (c) |
91 | :"ir" (i), "m" (v->counter) : "memory"); | 85 | :"ir" (i), "m" (v->counter) : "memory"); |
92 | return c; | 86 | return c; |
@@ -101,7 +95,7 @@ static __inline__ int atomic_sub_and_test(int i, atomic_t *v) | |||
101 | static __inline__ void atomic_inc(atomic_t *v) | 95 | static __inline__ void atomic_inc(atomic_t *v) |
102 | { | 96 | { |
103 | __asm__ __volatile__( | 97 | __asm__ __volatile__( |
104 | LOCK "incl %0" | 98 | LOCK_PREFIX "incl %0" |
105 | :"=m" (v->counter) | 99 | :"=m" (v->counter) |
106 | :"m" (v->counter)); | 100 | :"m" (v->counter)); |
107 | } | 101 | } |
@@ -115,7 +109,7 @@ static __inline__ void atomic_inc(atomic_t *v) | |||
115 | static __inline__ void atomic_dec(atomic_t *v) | 109 | static __inline__ void atomic_dec(atomic_t *v) |
116 | { | 110 | { |
117 | __asm__ __volatile__( | 111 | __asm__ __volatile__( |
118 | LOCK "decl %0" | 112 | LOCK_PREFIX "decl %0" |
119 | :"=m" (v->counter) | 113 | :"=m" (v->counter) |
120 | :"m" (v->counter)); | 114 | :"m" (v->counter)); |
121 | } | 115 | } |
@@ -133,7 +127,7 @@ static __inline__ int atomic_dec_and_test(atomic_t *v) | |||
133 | unsigned char c; | 127 | unsigned char c; |
134 | 128 | ||
135 | __asm__ __volatile__( | 129 | __asm__ __volatile__( |
136 | LOCK "decl %0; sete %1" | 130 | LOCK_PREFIX "decl %0; sete %1" |
137 | :"=m" (v->counter), "=qm" (c) | 131 | :"=m" (v->counter), "=qm" (c) |
138 | :"m" (v->counter) : "memory"); | 132 | :"m" (v->counter) : "memory"); |
139 | return c != 0; | 133 | return c != 0; |
@@ -152,7 +146,7 @@ static __inline__ int atomic_inc_and_test(atomic_t *v) | |||
152 | unsigned char c; | 146 | unsigned char c; |
153 | 147 | ||
154 | __asm__ __volatile__( | 148 | __asm__ __volatile__( |
155 | LOCK "incl %0; sete %1" | 149 | LOCK_PREFIX "incl %0; sete %1" |
156 | :"=m" (v->counter), "=qm" (c) | 150 | :"=m" (v->counter), "=qm" (c) |
157 | :"m" (v->counter) : "memory"); | 151 | :"m" (v->counter) : "memory"); |
158 | return c != 0; | 152 | return c != 0; |
@@ -172,7 +166,7 @@ static __inline__ int atomic_add_negative(int i, atomic_t *v) | |||
172 | unsigned char c; | 166 | unsigned char c; |
173 | 167 | ||
174 | __asm__ __volatile__( | 168 | __asm__ __volatile__( |
175 | LOCK "addl %2,%0; sets %1" | 169 | LOCK_PREFIX "addl %2,%0; sets %1" |
176 | :"=m" (v->counter), "=qm" (c) | 170 | :"=m" (v->counter), "=qm" (c) |
177 | :"ir" (i), "m" (v->counter) : "memory"); | 171 | :"ir" (i), "m" (v->counter) : "memory"); |
178 | return c; | 172 | return c; |
@@ -195,7 +189,7 @@ static __inline__ int atomic_add_return(int i, atomic_t *v) | |||
195 | /* Modern 486+ processor */ | 189 | /* Modern 486+ processor */ |
196 | __i = i; | 190 | __i = i; |
197 | __asm__ __volatile__( | 191 | __asm__ __volatile__( |
198 | LOCK "xaddl %0, %1;" | 192 | LOCK_PREFIX "xaddl %0, %1;" |
199 | :"=r"(i) | 193 | :"=r"(i) |
200 | :"m"(v->counter), "0"(i)); | 194 | :"m"(v->counter), "0"(i)); |
201 | return i + __i; | 195 | return i + __i; |
@@ -231,8 +225,14 @@ static __inline__ int atomic_sub_return(int i, atomic_t *v) | |||
231 | ({ \ | 225 | ({ \ |
232 | int c, old; \ | 226 | int c, old; \ |
233 | c = atomic_read(v); \ | 227 | c = atomic_read(v); \ |
234 | while (c != (u) && (old = atomic_cmpxchg((v), c, c + (a))) != c) \ | 228 | for (;;) { \ |
229 | if (unlikely(c == (u))) \ | ||
230 | break; \ | ||
231 | old = atomic_cmpxchg((v), c, c + (a)); \ | ||
232 | if (likely(old == c)) \ | ||
233 | break; \ | ||
235 | c = old; \ | 234 | c = old; \ |
235 | } \ | ||
236 | c != (u); \ | 236 | c != (u); \ |
237 | }) | 237 | }) |
238 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) | 238 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) |
@@ -242,11 +242,11 @@ static __inline__ int atomic_sub_return(int i, atomic_t *v) | |||
242 | 242 | ||
243 | /* These are x86-specific, used by some header files */ | 243 | /* These are x86-specific, used by some header files */ |
244 | #define atomic_clear_mask(mask, addr) \ | 244 | #define atomic_clear_mask(mask, addr) \ |
245 | __asm__ __volatile__(LOCK "andl %0,%1" \ | 245 | __asm__ __volatile__(LOCK_PREFIX "andl %0,%1" \ |
246 | : : "r" (~(mask)),"m" (*addr) : "memory") | 246 | : : "r" (~(mask)),"m" (*addr) : "memory") |
247 | 247 | ||
248 | #define atomic_set_mask(mask, addr) \ | 248 | #define atomic_set_mask(mask, addr) \ |
249 | __asm__ __volatile__(LOCK "orl %0,%1" \ | 249 | __asm__ __volatile__(LOCK_PREFIX "orl %0,%1" \ |
250 | : : "r" (mask),"m" (*(addr)) : "memory") | 250 | : : "r" (mask),"m" (*(addr)) : "memory") |
251 | 251 | ||
252 | /* Atomic operations are already serializing on x86 */ | 252 | /* Atomic operations are already serializing on x86 */ |
diff --git a/include/asm-i386/bitops.h b/include/asm-i386/bitops.h index 88e6ca248cd7..7d20b95edb3b 100644 --- a/include/asm-i386/bitops.h +++ b/include/asm-i386/bitops.h | |||
@@ -7,6 +7,7 @@ | |||
7 | 7 | ||
8 | #include <linux/config.h> | 8 | #include <linux/config.h> |
9 | #include <linux/compiler.h> | 9 | #include <linux/compiler.h> |
10 | #include <asm/alternative.h> | ||
10 | 11 | ||
11 | /* | 12 | /* |
12 | * These have to be done with inline assembly: that way the bit-setting | 13 | * These have to be done with inline assembly: that way the bit-setting |
@@ -16,12 +17,6 @@ | |||
16 | * bit 0 is the LSB of addr; bit 32 is the LSB of (addr+1). | 17 | * bit 0 is the LSB of addr; bit 32 is the LSB of (addr+1). |
17 | */ | 18 | */ |
18 | 19 | ||
19 | #ifdef CONFIG_SMP | ||
20 | #define LOCK_PREFIX "lock ; " | ||
21 | #else | ||
22 | #define LOCK_PREFIX "" | ||
23 | #endif | ||
24 | |||
25 | #define ADDR (*(volatile long *) addr) | 20 | #define ADDR (*(volatile long *) addr) |
26 | 21 | ||
27 | /** | 22 | /** |
diff --git a/include/asm-i386/cache.h b/include/asm-i386/cache.h index 615911e5bd24..ca15c9c665cf 100644 --- a/include/asm-i386/cache.h +++ b/include/asm-i386/cache.h | |||
@@ -10,4 +10,6 @@ | |||
10 | #define L1_CACHE_SHIFT (CONFIG_X86_L1_CACHE_SHIFT) | 10 | #define L1_CACHE_SHIFT (CONFIG_X86_L1_CACHE_SHIFT) |
11 | #define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) | 11 | #define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) |
12 | 12 | ||
13 | #define __read_mostly __attribute__((__section__(".data.read_mostly"))) | ||
14 | |||
13 | #endif | 15 | #endif |
diff --git a/include/asm-i386/cpufeature.h b/include/asm-i386/cpufeature.h index c4ec2a4d8fdf..5c0b5876b931 100644 --- a/include/asm-i386/cpufeature.h +++ b/include/asm-i386/cpufeature.h | |||
@@ -70,6 +70,7 @@ | |||
70 | #define X86_FEATURE_P3 (3*32+ 6) /* P3 */ | 70 | #define X86_FEATURE_P3 (3*32+ 6) /* P3 */ |
71 | #define X86_FEATURE_P4 (3*32+ 7) /* P4 */ | 71 | #define X86_FEATURE_P4 (3*32+ 7) /* P4 */ |
72 | #define X86_FEATURE_CONSTANT_TSC (3*32+ 8) /* TSC ticks at a constant rate */ | 72 | #define X86_FEATURE_CONSTANT_TSC (3*32+ 8) /* TSC ticks at a constant rate */ |
73 | #define X86_FEATURE_UP (3*32+ 9) /* smp kernel running on up */ | ||
73 | 74 | ||
74 | /* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */ | 75 | /* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */ |
75 | #define X86_FEATURE_XMM3 (4*32+ 0) /* Streaming SIMD Extensions-3 */ | 76 | #define X86_FEATURE_XMM3 (4*32+ 0) /* Streaming SIMD Extensions-3 */ |
diff --git a/include/asm-i386/dmi.h b/include/asm-i386/dmi.h new file mode 100644 index 000000000000..38d4eeb7fc7e --- /dev/null +++ b/include/asm-i386/dmi.h | |||
@@ -0,0 +1,11 @@ | |||
1 | #ifndef _ASM_DMI_H | ||
2 | #define _ASM_DMI_H 1 | ||
3 | |||
4 | #include <asm/io.h> | ||
5 | |||
6 | /* Use early IO mappings for DMI because it's initialized early */ | ||
7 | #define dmi_ioremap bt_ioremap | ||
8 | #define dmi_iounmap bt_iounmap | ||
9 | #define dmi_alloc alloc_bootmem | ||
10 | |||
11 | #endif | ||
diff --git a/include/asm-i386/io.h b/include/asm-i386/io.h index 03233c2ab820..79670bb4b0c7 100644 --- a/include/asm-i386/io.h +++ b/include/asm-i386/io.h | |||
@@ -219,23 +219,11 @@ static inline void memcpy_toio(volatile void __iomem *dst, const void *src, int | |||
219 | */ | 219 | */ |
220 | #define __ISA_IO_base ((char __iomem *)(PAGE_OFFSET)) | 220 | #define __ISA_IO_base ((char __iomem *)(PAGE_OFFSET)) |
221 | 221 | ||
222 | #define isa_readb(a) readb(__ISA_IO_base + (a)) | ||
223 | #define isa_readw(a) readw(__ISA_IO_base + (a)) | ||
224 | #define isa_readl(a) readl(__ISA_IO_base + (a)) | ||
225 | #define isa_writeb(b,a) writeb(b,__ISA_IO_base + (a)) | ||
226 | #define isa_writew(w,a) writew(w,__ISA_IO_base + (a)) | ||
227 | #define isa_writel(l,a) writel(l,__ISA_IO_base + (a)) | ||
228 | #define isa_memset_io(a,b,c) memset_io(__ISA_IO_base + (a),(b),(c)) | ||
229 | #define isa_memcpy_fromio(a,b,c) memcpy_fromio((a),__ISA_IO_base + (b),(c)) | ||
230 | #define isa_memcpy_toio(a,b,c) memcpy_toio(__ISA_IO_base + (a),(b),(c)) | ||
231 | |||
232 | |||
233 | /* | 222 | /* |
234 | * Again, i386 does not require mem IO specific function. | 223 | * Again, i386 does not require mem IO specific function. |
235 | */ | 224 | */ |
236 | 225 | ||
237 | #define eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),(void __force *)(b),(c),(d)) | 226 | #define eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),(void __force *)(b),(c),(d)) |
238 | #define isa_eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),(void __force *)(__ISA_IO_base + (b)),(c),(d)) | ||
239 | 227 | ||
240 | /** | 228 | /** |
241 | * check_signature - find BIOS signatures | 229 | * check_signature - find BIOS signatures |
diff --git a/include/asm-i386/mach-default/do_timer.h b/include/asm-i386/mach-default/do_timer.h index 56211414fc95..6312c3e79814 100644 --- a/include/asm-i386/mach-default/do_timer.h +++ b/include/asm-i386/mach-default/do_timer.h | |||
@@ -18,7 +18,7 @@ static inline void do_timer_interrupt_hook(struct pt_regs *regs) | |||
18 | { | 18 | { |
19 | do_timer(regs); | 19 | do_timer(regs); |
20 | #ifndef CONFIG_SMP | 20 | #ifndef CONFIG_SMP |
21 | update_process_times(user_mode(regs)); | 21 | update_process_times(user_mode_vm(regs)); |
22 | #endif | 22 | #endif |
23 | /* | 23 | /* |
24 | * In the SMP case we use the local APIC timer interrupt to do the | 24 | * In the SMP case we use the local APIC timer interrupt to do the |
diff --git a/include/asm-i386/mach-es7000/mach_mpparse.h b/include/asm-i386/mach-es7000/mach_mpparse.h index 4a0637a3e208..99f66be240be 100644 --- a/include/asm-i386/mach-es7000/mach_mpparse.h +++ b/include/asm-i386/mach-es7000/mach_mpparse.h | |||
@@ -30,7 +30,8 @@ static inline int mps_oem_check(struct mp_config_table *mpc, char *oem, | |||
30 | return 0; | 30 | return 0; |
31 | } | 31 | } |
32 | 32 | ||
33 | static inline int es7000_check_dsdt() | 33 | #ifdef CONFIG_ACPI |
34 | static inline int es7000_check_dsdt(void) | ||
34 | { | 35 | { |
35 | struct acpi_table_header *header = NULL; | 36 | struct acpi_table_header *header = NULL; |
36 | if(!acpi_get_table_header_early(ACPI_DSDT, &header)) | 37 | if(!acpi_get_table_header_early(ACPI_DSDT, &header)) |
@@ -54,6 +55,11 @@ static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) | |||
54 | } | 55 | } |
55 | return 0; | 56 | return 0; |
56 | } | 57 | } |
57 | 58 | #else | |
59 | static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) | ||
60 | { | ||
61 | return 0; | ||
62 | } | ||
63 | #endif | ||
58 | 64 | ||
59 | #endif /* __ASM_MACH_MPPARSE_H */ | 65 | #endif /* __ASM_MACH_MPPARSE_H */ |
diff --git a/include/asm-i386/mach-visws/do_timer.h b/include/asm-i386/mach-visws/do_timer.h index 92d638fc8b11..95568e6ca91c 100644 --- a/include/asm-i386/mach-visws/do_timer.h +++ b/include/asm-i386/mach-visws/do_timer.h | |||
@@ -11,7 +11,7 @@ static inline void do_timer_interrupt_hook(struct pt_regs *regs) | |||
11 | 11 | ||
12 | do_timer(regs); | 12 | do_timer(regs); |
13 | #ifndef CONFIG_SMP | 13 | #ifndef CONFIG_SMP |
14 | update_process_times(user_mode(regs)); | 14 | update_process_times(user_mode_vm(regs)); |
15 | #endif | 15 | #endif |
16 | /* | 16 | /* |
17 | * In the SMP case we use the local APIC timer interrupt to do the | 17 | * In the SMP case we use the local APIC timer interrupt to do the |
diff --git a/include/asm-i386/mach-voyager/do_timer.h b/include/asm-i386/mach-voyager/do_timer.h index ae510e5d0d78..eaf518098981 100644 --- a/include/asm-i386/mach-voyager/do_timer.h +++ b/include/asm-i386/mach-voyager/do_timer.h | |||
@@ -5,7 +5,7 @@ static inline void do_timer_interrupt_hook(struct pt_regs *regs) | |||
5 | { | 5 | { |
6 | do_timer(regs); | 6 | do_timer(regs); |
7 | #ifndef CONFIG_SMP | 7 | #ifndef CONFIG_SMP |
8 | update_process_times(user_mode(regs)); | 8 | update_process_times(user_mode_vm(regs)); |
9 | #endif | 9 | #endif |
10 | 10 | ||
11 | voyager_timer_interrupt(regs); | 11 | voyager_timer_interrupt(regs); |
diff --git a/include/asm-i386/mpspec.h b/include/asm-i386/mpspec.h index 64a0b8e6afeb..62113d3bfdc2 100644 --- a/include/asm-i386/mpspec.h +++ b/include/asm-i386/mpspec.h | |||
@@ -22,7 +22,6 @@ extern int mp_bus_id_to_type [MAX_MP_BUSSES]; | |||
22 | extern int mp_irq_entries; | 22 | extern int mp_irq_entries; |
23 | extern struct mpc_config_intsrc mp_irqs [MAX_IRQ_SOURCES]; | 23 | extern struct mpc_config_intsrc mp_irqs [MAX_IRQ_SOURCES]; |
24 | extern int mpc_default_type; | 24 | extern int mpc_default_type; |
25 | extern int mp_bus_id_to_pci_bus [MAX_MP_BUSSES]; | ||
26 | extern unsigned long mp_lapic_addr; | 25 | extern unsigned long mp_lapic_addr; |
27 | extern int pic_mode; | 26 | extern int pic_mode; |
28 | extern int using_apic_timer; | 27 | extern int using_apic_timer; |
diff --git a/include/asm-i386/mtrr.h b/include/asm-i386/mtrr.h index 5b6ceda68c5f..64cf937c7e33 100644 --- a/include/asm-i386/mtrr.h +++ b/include/asm-i386/mtrr.h | |||
@@ -25,6 +25,7 @@ | |||
25 | 25 | ||
26 | #include <linux/config.h> | 26 | #include <linux/config.h> |
27 | #include <linux/ioctl.h> | 27 | #include <linux/ioctl.h> |
28 | #include <linux/errno.h> | ||
28 | 29 | ||
29 | #define MTRR_IOCTL_BASE 'M' | 30 | #define MTRR_IOCTL_BASE 'M' |
30 | 31 | ||
diff --git a/include/asm-i386/mutex.h b/include/asm-i386/mutex.h index 9b2199e829f3..05a538531229 100644 --- a/include/asm-i386/mutex.h +++ b/include/asm-i386/mutex.h | |||
@@ -9,6 +9,8 @@ | |||
9 | #ifndef _ASM_MUTEX_H | 9 | #ifndef _ASM_MUTEX_H |
10 | #define _ASM_MUTEX_H | 10 | #define _ASM_MUTEX_H |
11 | 11 | ||
12 | #include "asm/alternative.h" | ||
13 | |||
12 | /** | 14 | /** |
13 | * __mutex_fastpath_lock - try to take the lock by moving the count | 15 | * __mutex_fastpath_lock - try to take the lock by moving the count |
14 | * from 1 to a 0 value | 16 | * from 1 to a 0 value |
@@ -27,7 +29,7 @@ do { \ | |||
27 | typecheck_fn(fastcall void (*)(atomic_t *), fail_fn); \ | 29 | typecheck_fn(fastcall void (*)(atomic_t *), fail_fn); \ |
28 | \ | 30 | \ |
29 | __asm__ __volatile__( \ | 31 | __asm__ __volatile__( \ |
30 | LOCK " decl (%%eax) \n" \ | 32 | LOCK_PREFIX " decl (%%eax) \n" \ |
31 | " js 2f \n" \ | 33 | " js 2f \n" \ |
32 | "1: \n" \ | 34 | "1: \n" \ |
33 | \ | 35 | \ |
@@ -83,7 +85,7 @@ do { \ | |||
83 | typecheck_fn(fastcall void (*)(atomic_t *), fail_fn); \ | 85 | typecheck_fn(fastcall void (*)(atomic_t *), fail_fn); \ |
84 | \ | 86 | \ |
85 | __asm__ __volatile__( \ | 87 | __asm__ __volatile__( \ |
86 | LOCK " incl (%%eax) \n" \ | 88 | LOCK_PREFIX " incl (%%eax) \n" \ |
87 | " jle 2f \n" \ | 89 | " jle 2f \n" \ |
88 | "1: \n" \ | 90 | "1: \n" \ |
89 | \ | 91 | \ |
diff --git a/include/asm-i386/pgtable-2level.h b/include/asm-i386/pgtable-2level.h index 74ef721b534d..27bde973abc7 100644 --- a/include/asm-i386/pgtable-2level.h +++ b/include/asm-i386/pgtable-2level.h | |||
@@ -61,4 +61,6 @@ static inline int pte_exec_kernel(pte_t pte) | |||
61 | #define __pte_to_swp_entry(pte) ((swp_entry_t) { (pte).pte_low }) | 61 | #define __pte_to_swp_entry(pte) ((swp_entry_t) { (pte).pte_low }) |
62 | #define __swp_entry_to_pte(x) ((pte_t) { (x).val }) | 62 | #define __swp_entry_to_pte(x) ((pte_t) { (x).val }) |
63 | 63 | ||
64 | void vmalloc_sync_all(void); | ||
65 | |||
64 | #endif /* _I386_PGTABLE_2LEVEL_H */ | 66 | #endif /* _I386_PGTABLE_2LEVEL_H */ |
diff --git a/include/asm-i386/pgtable-3level.h b/include/asm-i386/pgtable-3level.h index f1a8b454920a..36a5aa63cbbf 100644 --- a/include/asm-i386/pgtable-3level.h +++ b/include/asm-i386/pgtable-3level.h | |||
@@ -152,4 +152,6 @@ static inline pmd_t pfn_pmd(unsigned long page_nr, pgprot_t pgprot) | |||
152 | 152 | ||
153 | #define __pmd_free_tlb(tlb, x) do { } while (0) | 153 | #define __pmd_free_tlb(tlb, x) do { } while (0) |
154 | 154 | ||
155 | #define vmalloc_sync_all() ((void)0) | ||
156 | |||
155 | #endif /* _I386_PGTABLE_3LEVEL_H */ | 157 | #endif /* _I386_PGTABLE_3LEVEL_H */ |
diff --git a/include/asm-i386/poll.h b/include/asm-i386/poll.h index aecc80a15d36..2cd4929abd40 100644 --- a/include/asm-i386/poll.h +++ b/include/asm-i386/poll.h | |||
@@ -16,6 +16,7 @@ | |||
16 | #define POLLWRBAND 0x0200 | 16 | #define POLLWRBAND 0x0200 |
17 | #define POLLMSG 0x0400 | 17 | #define POLLMSG 0x0400 |
18 | #define POLLREMOVE 0x1000 | 18 | #define POLLREMOVE 0x1000 |
19 | #define POLLRDHUP 0x2000 | ||
19 | 20 | ||
20 | struct pollfd { | 21 | struct pollfd { |
21 | int fd; | 22 | int fd; |
diff --git a/include/asm-i386/rwlock.h b/include/asm-i386/rwlock.h index b57cc7afdf7e..94f00195d543 100644 --- a/include/asm-i386/rwlock.h +++ b/include/asm-i386/rwlock.h | |||
@@ -21,21 +21,23 @@ | |||
21 | #define RW_LOCK_BIAS_STR "0x01000000" | 21 | #define RW_LOCK_BIAS_STR "0x01000000" |
22 | 22 | ||
23 | #define __build_read_lock_ptr(rw, helper) \ | 23 | #define __build_read_lock_ptr(rw, helper) \ |
24 | asm volatile(LOCK "subl $1,(%0)\n\t" \ | 24 | alternative_smp("lock; subl $1,(%0)\n\t" \ |
25 | "jns 1f\n" \ | 25 | "jns 1f\n" \ |
26 | "call " helper "\n\t" \ | 26 | "call " helper "\n\t" \ |
27 | "1:\n" \ | 27 | "1:\n", \ |
28 | ::"a" (rw) : "memory") | 28 | "subl $1,(%0)\n\t", \ |
29 | :"a" (rw) : "memory") | ||
29 | 30 | ||
30 | #define __build_read_lock_const(rw, helper) \ | 31 | #define __build_read_lock_const(rw, helper) \ |
31 | asm volatile(LOCK "subl $1,%0\n\t" \ | 32 | alternative_smp("lock; subl $1,%0\n\t" \ |
32 | "jns 1f\n" \ | 33 | "jns 1f\n" \ |
33 | "pushl %%eax\n\t" \ | 34 | "pushl %%eax\n\t" \ |
34 | "leal %0,%%eax\n\t" \ | 35 | "leal %0,%%eax\n\t" \ |
35 | "call " helper "\n\t" \ | 36 | "call " helper "\n\t" \ |
36 | "popl %%eax\n\t" \ | 37 | "popl %%eax\n\t" \ |
37 | "1:\n" \ | 38 | "1:\n", \ |
38 | :"=m" (*(volatile int *)rw) : : "memory") | 39 | "subl $1,%0\n\t", \ |
40 | "=m" (*(volatile int *)rw) : : "memory") | ||
39 | 41 | ||
40 | #define __build_read_lock(rw, helper) do { \ | 42 | #define __build_read_lock(rw, helper) do { \ |
41 | if (__builtin_constant_p(rw)) \ | 43 | if (__builtin_constant_p(rw)) \ |
@@ -45,21 +47,23 @@ | |||
45 | } while (0) | 47 | } while (0) |
46 | 48 | ||
47 | #define __build_write_lock_ptr(rw, helper) \ | 49 | #define __build_write_lock_ptr(rw, helper) \ |
48 | asm volatile(LOCK "subl $" RW_LOCK_BIAS_STR ",(%0)\n\t" \ | 50 | alternative_smp("lock; subl $" RW_LOCK_BIAS_STR ",(%0)\n\t" \ |
49 | "jz 1f\n" \ | 51 | "jz 1f\n" \ |
50 | "call " helper "\n\t" \ | 52 | "call " helper "\n\t" \ |
51 | "1:\n" \ | 53 | "1:\n", \ |
52 | ::"a" (rw) : "memory") | 54 | "subl $" RW_LOCK_BIAS_STR ",(%0)\n\t", \ |
55 | :"a" (rw) : "memory") | ||
53 | 56 | ||
54 | #define __build_write_lock_const(rw, helper) \ | 57 | #define __build_write_lock_const(rw, helper) \ |
55 | asm volatile(LOCK "subl $" RW_LOCK_BIAS_STR ",%0\n\t" \ | 58 | alternative_smp("lock; subl $" RW_LOCK_BIAS_STR ",%0\n\t" \ |
56 | "jz 1f\n" \ | 59 | "jz 1f\n" \ |
57 | "pushl %%eax\n\t" \ | 60 | "pushl %%eax\n\t" \ |
58 | "leal %0,%%eax\n\t" \ | 61 | "leal %0,%%eax\n\t" \ |
59 | "call " helper "\n\t" \ | 62 | "call " helper "\n\t" \ |
60 | "popl %%eax\n\t" \ | 63 | "popl %%eax\n\t" \ |
61 | "1:\n" \ | 64 | "1:\n", \ |
62 | :"=m" (*(volatile int *)rw) : : "memory") | 65 | "subl $" RW_LOCK_BIAS_STR ",%0\n\t", \ |
66 | "=m" (*(volatile int *)rw) : : "memory") | ||
63 | 67 | ||
64 | #define __build_write_lock(rw, helper) do { \ | 68 | #define __build_write_lock(rw, helper) do { \ |
65 | if (__builtin_constant_p(rw)) \ | 69 | if (__builtin_constant_p(rw)) \ |
diff --git a/include/asm-i386/semaphore.h b/include/asm-i386/semaphore.h index 6a42b2142fd6..f7a0f310c524 100644 --- a/include/asm-i386/semaphore.h +++ b/include/asm-i386/semaphore.h | |||
@@ -99,7 +99,7 @@ static inline void down(struct semaphore * sem) | |||
99 | might_sleep(); | 99 | might_sleep(); |
100 | __asm__ __volatile__( | 100 | __asm__ __volatile__( |
101 | "# atomic down operation\n\t" | 101 | "# atomic down operation\n\t" |
102 | LOCK "decl %0\n\t" /* --sem->count */ | 102 | LOCK_PREFIX "decl %0\n\t" /* --sem->count */ |
103 | "js 2f\n" | 103 | "js 2f\n" |
104 | "1:\n" | 104 | "1:\n" |
105 | LOCK_SECTION_START("") | 105 | LOCK_SECTION_START("") |
@@ -123,7 +123,7 @@ static inline int down_interruptible(struct semaphore * sem) | |||
123 | might_sleep(); | 123 | might_sleep(); |
124 | __asm__ __volatile__( | 124 | __asm__ __volatile__( |
125 | "# atomic interruptible down operation\n\t" | 125 | "# atomic interruptible down operation\n\t" |
126 | LOCK "decl %1\n\t" /* --sem->count */ | 126 | LOCK_PREFIX "decl %1\n\t" /* --sem->count */ |
127 | "js 2f\n\t" | 127 | "js 2f\n\t" |
128 | "xorl %0,%0\n" | 128 | "xorl %0,%0\n" |
129 | "1:\n" | 129 | "1:\n" |
@@ -148,7 +148,7 @@ static inline int down_trylock(struct semaphore * sem) | |||
148 | 148 | ||
149 | __asm__ __volatile__( | 149 | __asm__ __volatile__( |
150 | "# atomic interruptible down operation\n\t" | 150 | "# atomic interruptible down operation\n\t" |
151 | LOCK "decl %1\n\t" /* --sem->count */ | 151 | LOCK_PREFIX "decl %1\n\t" /* --sem->count */ |
152 | "js 2f\n\t" | 152 | "js 2f\n\t" |
153 | "xorl %0,%0\n" | 153 | "xorl %0,%0\n" |
154 | "1:\n" | 154 | "1:\n" |
@@ -173,7 +173,7 @@ static inline void up(struct semaphore * sem) | |||
173 | { | 173 | { |
174 | __asm__ __volatile__( | 174 | __asm__ __volatile__( |
175 | "# atomic up operation\n\t" | 175 | "# atomic up operation\n\t" |
176 | LOCK "incl %0\n\t" /* ++sem->count */ | 176 | LOCK_PREFIX "incl %0\n\t" /* ++sem->count */ |
177 | "jle 2f\n" | 177 | "jle 2f\n" |
178 | "1:\n" | 178 | "1:\n" |
179 | LOCK_SECTION_START("") | 179 | LOCK_SECTION_START("") |
diff --git a/include/asm-i386/spinlock.h b/include/asm-i386/spinlock.h index 23604350cdf4..d76b7693cf1d 100644 --- a/include/asm-i386/spinlock.h +++ b/include/asm-i386/spinlock.h | |||
@@ -35,31 +35,41 @@ | |||
35 | #define __raw_spin_lock_string_flags \ | 35 | #define __raw_spin_lock_string_flags \ |
36 | "\n1:\t" \ | 36 | "\n1:\t" \ |
37 | "lock ; decb %0\n\t" \ | 37 | "lock ; decb %0\n\t" \ |
38 | "jns 4f\n\t" \ | 38 | "jns 5f\n" \ |
39 | "2:\t" \ | 39 | "2:\t" \ |
40 | "testl $0x200, %1\n\t" \ | 40 | "testl $0x200, %1\n\t" \ |
41 | "jz 3f\n\t" \ | 41 | "jz 4f\n\t" \ |
42 | "sti\n\t" \ | 42 | "sti\n" \ |
43 | "3:\t" \ | 43 | "3:\t" \ |
44 | "rep;nop\n\t" \ | 44 | "rep;nop\n\t" \ |
45 | "cmpb $0, %0\n\t" \ | 45 | "cmpb $0, %0\n\t" \ |
46 | "jle 3b\n\t" \ | 46 | "jle 3b\n\t" \ |
47 | "cli\n\t" \ | 47 | "cli\n\t" \ |
48 | "jmp 1b\n" \ | 48 | "jmp 1b\n" \ |
49 | "4:\n\t" | 49 | "4:\t" \ |
50 | "rep;nop\n\t" \ | ||
51 | "cmpb $0, %0\n\t" \ | ||
52 | "jg 1b\n\t" \ | ||
53 | "jmp 4b\n" \ | ||
54 | "5:\n\t" | ||
55 | |||
56 | #define __raw_spin_lock_string_up \ | ||
57 | "\n\tdecb %0" | ||
50 | 58 | ||
51 | static inline void __raw_spin_lock(raw_spinlock_t *lock) | 59 | static inline void __raw_spin_lock(raw_spinlock_t *lock) |
52 | { | 60 | { |
53 | __asm__ __volatile__( | 61 | alternative_smp( |
54 | __raw_spin_lock_string | 62 | __raw_spin_lock_string, |
55 | :"=m" (lock->slock) : : "memory"); | 63 | __raw_spin_lock_string_up, |
64 | "=m" (lock->slock) : : "memory"); | ||
56 | } | 65 | } |
57 | 66 | ||
58 | static inline void __raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long flags) | 67 | static inline void __raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long flags) |
59 | { | 68 | { |
60 | __asm__ __volatile__( | 69 | alternative_smp( |
61 | __raw_spin_lock_string_flags | 70 | __raw_spin_lock_string_flags, |
62 | :"=m" (lock->slock) : "r" (flags) : "memory"); | 71 | __raw_spin_lock_string_up, |
72 | "=m" (lock->slock) : "r" (flags) : "memory"); | ||
63 | } | 73 | } |
64 | 74 | ||
65 | static inline int __raw_spin_trylock(raw_spinlock_t *lock) | 75 | static inline int __raw_spin_trylock(raw_spinlock_t *lock) |
@@ -178,12 +188,12 @@ static inline int __raw_write_trylock(raw_rwlock_t *lock) | |||
178 | 188 | ||
179 | static inline void __raw_read_unlock(raw_rwlock_t *rw) | 189 | static inline void __raw_read_unlock(raw_rwlock_t *rw) |
180 | { | 190 | { |
181 | asm volatile("lock ; incl %0" :"=m" (rw->lock) : : "memory"); | 191 | asm volatile(LOCK_PREFIX "incl %0" :"=m" (rw->lock) : : "memory"); |
182 | } | 192 | } |
183 | 193 | ||
184 | static inline void __raw_write_unlock(raw_rwlock_t *rw) | 194 | static inline void __raw_write_unlock(raw_rwlock_t *rw) |
185 | { | 195 | { |
186 | asm volatile("lock ; addl $" RW_LOCK_BIAS_STR ", %0" | 196 | asm volatile(LOCK_PREFIX "addl $" RW_LOCK_BIAS_STR ", %0" |
187 | : "=m" (rw->lock) : : "memory"); | 197 | : "=m" (rw->lock) : : "memory"); |
188 | } | 198 | } |
189 | 199 | ||
diff --git a/include/asm-i386/system.h b/include/asm-i386/system.h index 399145a247f2..19cc79c9a35d 100644 --- a/include/asm-i386/system.h +++ b/include/asm-i386/system.h | |||
@@ -352,67 +352,6 @@ static inline unsigned long long __cmpxchg64(volatile void *ptr, unsigned long l | |||
352 | 352 | ||
353 | #endif | 353 | #endif |
354 | 354 | ||
355 | #ifdef __KERNEL__ | ||
356 | struct alt_instr { | ||
357 | __u8 *instr; /* original instruction */ | ||
358 | __u8 *replacement; | ||
359 | __u8 cpuid; /* cpuid bit set for replacement */ | ||
360 | __u8 instrlen; /* length of original instruction */ | ||
361 | __u8 replacementlen; /* length of new instruction, <= instrlen */ | ||
362 | __u8 pad; | ||
363 | }; | ||
364 | #endif | ||
365 | |||
366 | /* | ||
367 | * Alternative instructions for different CPU types or capabilities. | ||
368 | * | ||
369 | * This allows to use optimized instructions even on generic binary | ||
370 | * kernels. | ||
371 | * | ||
372 | * length of oldinstr must be longer or equal the length of newinstr | ||
373 | * It can be padded with nops as needed. | ||
374 | * | ||
375 | * For non barrier like inlines please define new variants | ||
376 | * without volatile and memory clobber. | ||
377 | */ | ||
378 | #define alternative(oldinstr, newinstr, feature) \ | ||
379 | asm volatile ("661:\n\t" oldinstr "\n662:\n" \ | ||
380 | ".section .altinstructions,\"a\"\n" \ | ||
381 | " .align 4\n" \ | ||
382 | " .long 661b\n" /* label */ \ | ||
383 | " .long 663f\n" /* new instruction */ \ | ||
384 | " .byte %c0\n" /* feature bit */ \ | ||
385 | " .byte 662b-661b\n" /* sourcelen */ \ | ||
386 | " .byte 664f-663f\n" /* replacementlen */ \ | ||
387 | ".previous\n" \ | ||
388 | ".section .altinstr_replacement,\"ax\"\n" \ | ||
389 | "663:\n\t" newinstr "\n664:\n" /* replacement */ \ | ||
390 | ".previous" :: "i" (feature) : "memory") | ||
391 | |||
392 | /* | ||
393 | * Alternative inline assembly with input. | ||
394 | * | ||
395 | * Pecularities: | ||
396 | * No memory clobber here. | ||
397 | * Argument numbers start with 1. | ||
398 | * Best is to use constraints that are fixed size (like (%1) ... "r") | ||
399 | * If you use variable sized constraints like "m" or "g" in the | ||
400 | * replacement maake sure to pad to the worst case length. | ||
401 | */ | ||
402 | #define alternative_input(oldinstr, newinstr, feature, input...) \ | ||
403 | asm volatile ("661:\n\t" oldinstr "\n662:\n" \ | ||
404 | ".section .altinstructions,\"a\"\n" \ | ||
405 | " .align 4\n" \ | ||
406 | " .long 661b\n" /* label */ \ | ||
407 | " .long 663f\n" /* new instruction */ \ | ||
408 | " .byte %c0\n" /* feature bit */ \ | ||
409 | " .byte 662b-661b\n" /* sourcelen */ \ | ||
410 | " .byte 664f-663f\n" /* replacementlen */ \ | ||
411 | ".previous\n" \ | ||
412 | ".section .altinstr_replacement,\"ax\"\n" \ | ||
413 | "663:\n\t" newinstr "\n664:\n" /* replacement */ \ | ||
414 | ".previous" :: "i" (feature), ##input) | ||
415 | |||
416 | /* | 355 | /* |
417 | * Force strict CPU ordering. | 356 | * Force strict CPU ordering. |
418 | * And yes, this is required on UP too when we're talking | 357 | * And yes, this is required on UP too when we're talking |
@@ -558,5 +497,8 @@ static inline void sched_cacheflush(void) | |||
558 | } | 497 | } |
559 | 498 | ||
560 | extern unsigned long arch_align_stack(unsigned long sp); | 499 | extern unsigned long arch_align_stack(unsigned long sp); |
500 | extern void free_init_pages(char *what, unsigned long begin, unsigned long end); | ||
501 | |||
502 | void default_idle(void); | ||
561 | 503 | ||
562 | #endif | 504 | #endif |
diff --git a/include/asm-i386/uaccess.h b/include/asm-i386/uaccess.h index 3f1337c34208..371457b1ceb6 100644 --- a/include/asm-i386/uaccess.h +++ b/include/asm-i386/uaccess.h | |||
@@ -197,13 +197,15 @@ extern void __put_user_8(void); | |||
197 | 197 | ||
198 | #define put_user(x,ptr) \ | 198 | #define put_user(x,ptr) \ |
199 | ({ int __ret_pu; \ | 199 | ({ int __ret_pu; \ |
200 | __typeof__(*(ptr)) __pu_val; \ | ||
200 | __chk_user_ptr(ptr); \ | 201 | __chk_user_ptr(ptr); \ |
202 | __pu_val = x; \ | ||
201 | switch(sizeof(*(ptr))) { \ | 203 | switch(sizeof(*(ptr))) { \ |
202 | case 1: __put_user_1(x, ptr); break; \ | 204 | case 1: __put_user_1(__pu_val, ptr); break; \ |
203 | case 2: __put_user_2(x, ptr); break; \ | 205 | case 2: __put_user_2(__pu_val, ptr); break; \ |
204 | case 4: __put_user_4(x, ptr); break; \ | 206 | case 4: __put_user_4(__pu_val, ptr); break; \ |
205 | case 8: __put_user_8(x, ptr); break; \ | 207 | case 8: __put_user_8(__pu_val, ptr); break; \ |
206 | default:__put_user_X(x, ptr); break; \ | 208 | default:__put_user_X(__pu_val, ptr); break; \ |
207 | } \ | 209 | } \ |
208 | __ret_pu; \ | 210 | __ret_pu; \ |
209 | }) | 211 | }) |
diff --git a/include/asm-i386/unistd.h b/include/asm-i386/unistd.h index dc81a55dd94d..d8afd0e3b81a 100644 --- a/include/asm-i386/unistd.h +++ b/include/asm-i386/unistd.h | |||
@@ -347,9 +347,9 @@ __syscall_return(type,__res); \ | |||
347 | type name(type1 arg1) \ | 347 | type name(type1 arg1) \ |
348 | { \ | 348 | { \ |
349 | long __res; \ | 349 | long __res; \ |
350 | __asm__ volatile ("int $0x80" \ | 350 | __asm__ volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" \ |
351 | : "=a" (__res) \ | 351 | : "=a" (__res) \ |
352 | : "0" (__NR_##name),"b" ((long)(arg1)) : "memory"); \ | 352 | : "0" (__NR_##name),"ri" ((long)(arg1)) : "memory"); \ |
353 | __syscall_return(type,__res); \ | 353 | __syscall_return(type,__res); \ |
354 | } | 354 | } |
355 | 355 | ||
@@ -357,9 +357,10 @@ __syscall_return(type,__res); \ | |||
357 | type name(type1 arg1,type2 arg2) \ | 357 | type name(type1 arg1,type2 arg2) \ |
358 | { \ | 358 | { \ |
359 | long __res; \ | 359 | long __res; \ |
360 | __asm__ volatile ("int $0x80" \ | 360 | __asm__ volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" \ |
361 | : "=a" (__res) \ | 361 | : "=a" (__res) \ |
362 | : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)) : "memory"); \ | 362 | : "0" (__NR_##name),"ri" ((long)(arg1)),"c" ((long)(arg2)) \ |
363 | : "memory"); \ | ||
363 | __syscall_return(type,__res); \ | 364 | __syscall_return(type,__res); \ |
364 | } | 365 | } |
365 | 366 | ||
@@ -367,9 +368,9 @@ __syscall_return(type,__res); \ | |||
367 | type name(type1 arg1,type2 arg2,type3 arg3) \ | 368 | type name(type1 arg1,type2 arg2,type3 arg3) \ |
368 | { \ | 369 | { \ |
369 | long __res; \ | 370 | long __res; \ |
370 | __asm__ volatile ("int $0x80" \ | 371 | __asm__ volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" \ |
371 | : "=a" (__res) \ | 372 | : "=a" (__res) \ |
372 | : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \ | 373 | : "0" (__NR_##name),"ri" ((long)(arg1)),"c" ((long)(arg2)), \ |
373 | "d" ((long)(arg3)) : "memory"); \ | 374 | "d" ((long)(arg3)) : "memory"); \ |
374 | __syscall_return(type,__res); \ | 375 | __syscall_return(type,__res); \ |
375 | } | 376 | } |
@@ -378,9 +379,9 @@ __syscall_return(type,__res); \ | |||
378 | type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ | 379 | type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ |
379 | { \ | 380 | { \ |
380 | long __res; \ | 381 | long __res; \ |
381 | __asm__ volatile ("int $0x80" \ | 382 | __asm__ volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" \ |
382 | : "=a" (__res) \ | 383 | : "=a" (__res) \ |
383 | : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \ | 384 | : "0" (__NR_##name),"ri" ((long)(arg1)),"c" ((long)(arg2)), \ |
384 | "d" ((long)(arg3)),"S" ((long)(arg4)) : "memory"); \ | 385 | "d" ((long)(arg3)),"S" ((long)(arg4)) : "memory"); \ |
385 | __syscall_return(type,__res); \ | 386 | __syscall_return(type,__res); \ |
386 | } | 387 | } |
@@ -390,10 +391,12 @@ __syscall_return(type,__res); \ | |||
390 | type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \ | 391 | type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \ |
391 | { \ | 392 | { \ |
392 | long __res; \ | 393 | long __res; \ |
393 | __asm__ volatile ("int $0x80" \ | 394 | __asm__ volatile ("push %%ebx ; movl %2,%%ebx ; movl %1,%%eax ; " \ |
395 | "int $0x80 ; pop %%ebx" \ | ||
394 | : "=a" (__res) \ | 396 | : "=a" (__res) \ |
395 | : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \ | 397 | : "i" (__NR_##name),"ri" ((long)(arg1)),"c" ((long)(arg2)), \ |
396 | "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5)) : "memory"); \ | 398 | "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5)) \ |
399 | : "memory"); \ | ||
397 | __syscall_return(type,__res); \ | 400 | __syscall_return(type,__res); \ |
398 | } | 401 | } |
399 | 402 | ||
@@ -402,11 +405,14 @@ __syscall_return(type,__res); \ | |||
402 | type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5,type6 arg6) \ | 405 | type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5,type6 arg6) \ |
403 | { \ | 406 | { \ |
404 | long __res; \ | 407 | long __res; \ |
405 | __asm__ volatile ("push %%ebp ; movl %%eax,%%ebp ; movl %1,%%eax ; int $0x80 ; pop %%ebp" \ | 408 | struct { long __a1; long __a6; } __s = { (long)arg1, (long)arg6 }; \ |
409 | __asm__ volatile ("push %%ebp ; push %%ebx ; movl 4(%2),%%ebp ; " \ | ||
410 | "movl 0(%2),%%ebx ; movl %1,%%eax ; int $0x80 ; " \ | ||
411 | "pop %%ebx ; pop %%ebp" \ | ||
406 | : "=a" (__res) \ | 412 | : "=a" (__res) \ |
407 | : "i" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \ | 413 | : "i" (__NR_##name),"0" ((long)(&__s)),"c" ((long)(arg2)), \ |
408 | "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5)), \ | 414 | "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5)) \ |
409 | "0" ((long)(arg6)) : "memory"); \ | 415 | : "memory"); \ |
410 | __syscall_return(type,__res); \ | 416 | __syscall_return(type,__res); \ |
411 | } | 417 | } |
412 | 418 | ||
diff --git a/include/asm-ia64/acpi.h b/include/asm-ia64/acpi.h index f7a517654308..d734585a23cf 100644 --- a/include/asm-ia64/acpi.h +++ b/include/asm-ia64/acpi.h | |||
@@ -111,7 +111,11 @@ extern int additional_cpus; | |||
111 | 111 | ||
112 | #ifdef CONFIG_ACPI_NUMA | 112 | #ifdef CONFIG_ACPI_NUMA |
113 | /* Proximity bitmap length; _PXM is at most 255 (8 bit)*/ | 113 | /* Proximity bitmap length; _PXM is at most 255 (8 bit)*/ |
114 | #ifdef CONFIG_IA64_NR_NODES | ||
115 | #define MAX_PXM_DOMAINS CONFIG_IA64_NR_NODES | ||
116 | #else | ||
114 | #define MAX_PXM_DOMAINS (256) | 117 | #define MAX_PXM_DOMAINS (256) |
118 | #endif | ||
115 | extern int __devinitdata pxm_to_nid_map[MAX_PXM_DOMAINS]; | 119 | extern int __devinitdata pxm_to_nid_map[MAX_PXM_DOMAINS]; |
116 | extern int __initdata nid_to_pxm_map[MAX_NUMNODES]; | 120 | extern int __initdata nid_to_pxm_map[MAX_NUMNODES]; |
117 | #endif | 121 | #endif |
diff --git a/include/asm-ia64/asmmacro.h b/include/asm-ia64/asmmacro.h index 77af457f4ad7..d4cec32083d8 100644 --- a/include/asm-ia64/asmmacro.h +++ b/include/asm-ia64/asmmacro.h | |||
@@ -51,6 +51,17 @@ name: | |||
51 | [99:] x | 51 | [99:] x |
52 | 52 | ||
53 | /* | 53 | /* |
54 | * Tag MCA recoverable instruction ranges. | ||
55 | */ | ||
56 | |||
57 | .section "__mca_table", "a" // declare section & section attributes | ||
58 | .previous | ||
59 | |||
60 | # define MCA_RECOVER_RANGE(y) \ | ||
61 | .xdata4 "__mca_table", y-., 99f-.; \ | ||
62 | [99:] | ||
63 | |||
64 | /* | ||
54 | * Mark instructions that need a load of a virtual address patched to be | 65 | * Mark instructions that need a load of a virtual address patched to be |
55 | * a load of a physical address. We use this either in critical performance | 66 | * a load of a physical address. We use this either in critical performance |
56 | * path (ivt.S - TLB miss processing) or in places where it might not be | 67 | * path (ivt.S - TLB miss processing) or in places where it might not be |
diff --git a/include/asm-ia64/atomic.h b/include/asm-ia64/atomic.h index d3e0dfa99e1f..569ec7574baf 100644 --- a/include/asm-ia64/atomic.h +++ b/include/asm-ia64/atomic.h | |||
@@ -95,8 +95,14 @@ ia64_atomic64_sub (__s64 i, atomic64_t *v) | |||
95 | ({ \ | 95 | ({ \ |
96 | int c, old; \ | 96 | int c, old; \ |
97 | c = atomic_read(v); \ | 97 | c = atomic_read(v); \ |
98 | while (c != (u) && (old = atomic_cmpxchg((v), c, c + (a))) != c) \ | 98 | for (;;) { \ |
99 | if (unlikely(c == (u))) \ | ||
100 | break; \ | ||
101 | old = atomic_cmpxchg((v), c, c + (a)); \ | ||
102 | if (likely(old == c)) \ | ||
103 | break; \ | ||
99 | c = old; \ | 104 | c = old; \ |
105 | } \ | ||
100 | c != (u); \ | 106 | c != (u); \ |
101 | }) | 107 | }) |
102 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) | 108 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) |
diff --git a/include/asm-ia64/cache.h b/include/asm-ia64/cache.h index 40dd25195d65..f0a104db8f20 100644 --- a/include/asm-ia64/cache.h +++ b/include/asm-ia64/cache.h | |||
@@ -25,4 +25,6 @@ | |||
25 | # define SMP_CACHE_BYTES (1 << 3) | 25 | # define SMP_CACHE_BYTES (1 << 3) |
26 | #endif | 26 | #endif |
27 | 27 | ||
28 | #define __read_mostly __attribute__((__section__(".data.read_mostly"))) | ||
29 | |||
28 | #endif /* _ASM_IA64_CACHE_H */ | 30 | #endif /* _ASM_IA64_CACHE_H */ |
diff --git a/include/asm-ia64/linkage.h b/include/asm-ia64/linkage.h index 14cd72cd8007..ef22a45c1890 100644 --- a/include/asm-ia64/linkage.h +++ b/include/asm-ia64/linkage.h | |||
@@ -1,6 +1,14 @@ | |||
1 | #ifndef __ASM_LINKAGE_H | 1 | #ifndef __ASM_LINKAGE_H |
2 | #define __ASM_LINKAGE_H | 2 | #define __ASM_LINKAGE_H |
3 | 3 | ||
4 | #ifndef __ASSEMBLY__ | ||
5 | |||
4 | #define asmlinkage CPP_ASMLINKAGE __attribute__((syscall_linkage)) | 6 | #define asmlinkage CPP_ASMLINKAGE __attribute__((syscall_linkage)) |
5 | 7 | ||
8 | #else | ||
9 | |||
10 | #include <asm/asmmacro.h> | ||
11 | |||
12 | #endif | ||
13 | |||
6 | #endif | 14 | #endif |
diff --git a/include/asm-ia64/machvec_dig.h b/include/asm-ia64/machvec_dig.h index 4dc8522c974f..8a0752f40987 100644 --- a/include/asm-ia64/machvec_dig.h +++ b/include/asm-ia64/machvec_dig.h | |||
@@ -2,7 +2,6 @@ | |||
2 | #define _ASM_IA64_MACHVEC_DIG_h | 2 | #define _ASM_IA64_MACHVEC_DIG_h |
3 | 3 | ||
4 | extern ia64_mv_setup_t dig_setup; | 4 | extern ia64_mv_setup_t dig_setup; |
5 | extern ia64_mv_irq_init_t dig_irq_init; | ||
6 | 5 | ||
7 | /* | 6 | /* |
8 | * This stuff has dual use! | 7 | * This stuff has dual use! |
@@ -13,6 +12,5 @@ extern ia64_mv_irq_init_t dig_irq_init; | |||
13 | */ | 12 | */ |
14 | #define platform_name "dig" | 13 | #define platform_name "dig" |
15 | #define platform_setup dig_setup | 14 | #define platform_setup dig_setup |
16 | #define platform_irq_init dig_irq_init | ||
17 | 15 | ||
18 | #endif /* _ASM_IA64_MACHVEC_DIG_h */ | 16 | #endif /* _ASM_IA64_MACHVEC_DIG_h */ |
diff --git a/include/asm-ia64/numa.h b/include/asm-ia64/numa.h index 3ae128fe0823..dae6aeb7b119 100644 --- a/include/asm-ia64/numa.h +++ b/include/asm-ia64/numa.h | |||
@@ -23,7 +23,7 @@ | |||
23 | 23 | ||
24 | #include <asm/mmzone.h> | 24 | #include <asm/mmzone.h> |
25 | 25 | ||
26 | extern u8 cpu_to_node_map[NR_CPUS] __cacheline_aligned; | 26 | extern u16 cpu_to_node_map[NR_CPUS] __cacheline_aligned; |
27 | extern cpumask_t node_to_cpu_mask[MAX_NUMNODES] __cacheline_aligned; | 27 | extern cpumask_t node_to_cpu_mask[MAX_NUMNODES] __cacheline_aligned; |
28 | 28 | ||
29 | /* Stuff below this line could be architecture independent */ | 29 | /* Stuff below this line could be architecture independent */ |
diff --git a/include/asm-ia64/numnodes.h b/include/asm-ia64/numnodes.h index 21cff4da5485..e9d356f549d9 100644 --- a/include/asm-ia64/numnodes.h +++ b/include/asm-ia64/numnodes.h | |||
@@ -3,13 +3,18 @@ | |||
3 | 3 | ||
4 | #ifdef CONFIG_IA64_DIG | 4 | #ifdef CONFIG_IA64_DIG |
5 | /* Max 8 Nodes */ | 5 | /* Max 8 Nodes */ |
6 | #define NODES_SHIFT 3 | 6 | # define NODES_SHIFT 3 |
7 | #elif defined(CONFIG_IA64_HP_ZX1) || defined(CONFIG_IA64_HP_ZX1_SWIOTLB) | 7 | #elif defined(CONFIG_IA64_HP_ZX1) || defined(CONFIG_IA64_HP_ZX1_SWIOTLB) |
8 | /* Max 32 Nodes */ | 8 | /* Max 32 Nodes */ |
9 | #define NODES_SHIFT 5 | 9 | # define NODES_SHIFT 5 |
10 | #elif defined(CONFIG_IA64_SGI_SN2) || defined(CONFIG_IA64_GENERIC) | 10 | #elif defined(CONFIG_IA64_SGI_SN2) || defined(CONFIG_IA64_GENERIC) |
11 | /* Max 256 Nodes */ | 11 | # if CONFIG_IA64_NR_NODES == 256 |
12 | #define NODES_SHIFT 8 | 12 | # define NODES_SHIFT 8 |
13 | # elif CONFIG_IA64_NR_NODES <= 512 | ||
14 | # define NODES_SHIFT 9 | ||
15 | # elif CONFIG_IA64_NR_NODES <= 1024 | ||
16 | # define NODES_SHIFT 10 | ||
17 | # endif | ||
13 | #endif | 18 | #endif |
14 | 19 | ||
15 | #endif /* _ASM_MAX_NUMNODES_H */ | 20 | #endif /* _ASM_MAX_NUMNODES_H */ |
diff --git a/include/asm-ia64/page.h b/include/asm-ia64/page.h index 3ab27333dae4..6e9aa23250c4 100644 --- a/include/asm-ia64/page.h +++ b/include/asm-ia64/page.h | |||
@@ -149,7 +149,7 @@ typedef union ia64_va { | |||
149 | | (REGION_OFFSET(x) >> (HPAGE_SHIFT-PAGE_SHIFT))) | 149 | | (REGION_OFFSET(x) >> (HPAGE_SHIFT-PAGE_SHIFT))) |
150 | # define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT) | 150 | # define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT) |
151 | # define is_hugepage_only_range(mm, addr, len) \ | 151 | # define is_hugepage_only_range(mm, addr, len) \ |
152 | (REGION_NUMBER(addr) == RGN_HPAGE && \ | 152 | (REGION_NUMBER(addr) == RGN_HPAGE || \ |
153 | REGION_NUMBER((addr)+(len)-1) == RGN_HPAGE) | 153 | REGION_NUMBER((addr)+(len)-1) == RGN_HPAGE) |
154 | extern unsigned int hpage_shift; | 154 | extern unsigned int hpage_shift; |
155 | #endif | 155 | #endif |
diff --git a/include/asm-ia64/pal.h b/include/asm-ia64/pal.h index 7708ec669a33..4e7e6f23b08c 100644 --- a/include/asm-ia64/pal.h +++ b/include/asm-ia64/pal.h | |||
@@ -1640,8 +1640,7 @@ ia64_pal_logical_to_phys(u64 proc_number, pal_logical_to_physical_t *mapping) | |||
1640 | 1640 | ||
1641 | if (iprv.status == PAL_STATUS_SUCCESS) | 1641 | if (iprv.status == PAL_STATUS_SUCCESS) |
1642 | { | 1642 | { |
1643 | if (proc_number == 0) | 1643 | mapping->overview.overview_data = iprv.v0; |
1644 | mapping->overview.overview_data = iprv.v0; | ||
1645 | mapping->ppli1.ppli1_data = iprv.v1; | 1644 | mapping->ppli1.ppli1_data = iprv.v1; |
1646 | mapping->ppli2.ppli2_data = iprv.v2; | 1645 | mapping->ppli2.ppli2_data = iprv.v2; |
1647 | } | 1646 | } |
diff --git a/include/asm-ia64/poll.h b/include/asm-ia64/poll.h index 160258a0528d..bcaf9f140242 100644 --- a/include/asm-ia64/poll.h +++ b/include/asm-ia64/poll.h | |||
@@ -21,6 +21,7 @@ | |||
21 | #define POLLWRBAND 0x0200 | 21 | #define POLLWRBAND 0x0200 |
22 | #define POLLMSG 0x0400 | 22 | #define POLLMSG 0x0400 |
23 | #define POLLREMOVE 0x1000 | 23 | #define POLLREMOVE 0x1000 |
24 | #define POLLRDHUP 0x2000 | ||
24 | 25 | ||
25 | struct pollfd { | 26 | struct pollfd { |
26 | int fd; | 27 | int fd; |
diff --git a/include/asm-ia64/processor.h b/include/asm-ia64/processor.h index 128fefd8056f..b3bd58e80690 100644 --- a/include/asm-ia64/processor.h +++ b/include/asm-ia64/processor.h | |||
@@ -181,7 +181,6 @@ DECLARE_PER_CPU(struct cpuinfo_ia64, cpu_info); | |||
181 | #define local_cpu_data (&__ia64_per_cpu_var(cpu_info)) | 181 | #define local_cpu_data (&__ia64_per_cpu_var(cpu_info)) |
182 | #define cpu_data(cpu) (&per_cpu(cpu_info, cpu)) | 182 | #define cpu_data(cpu) (&per_cpu(cpu_info, cpu)) |
183 | 183 | ||
184 | extern void identify_cpu (struct cpuinfo_ia64 *); | ||
185 | extern void print_cpu_info (struct cpuinfo_ia64 *); | 184 | extern void print_cpu_info (struct cpuinfo_ia64 *); |
186 | 185 | ||
187 | typedef struct { | 186 | typedef struct { |
diff --git a/include/asm-ia64/sn/l1.h b/include/asm-ia64/sn/l1.h index e3b819110d47..344bf44bb356 100644 --- a/include/asm-ia64/sn/l1.h +++ b/include/asm-ia64/sn/l1.h | |||
@@ -34,6 +34,8 @@ | |||
34 | #define L1_BRICKTYPE_IA 0x6b /* k */ | 34 | #define L1_BRICKTYPE_IA 0x6b /* k */ |
35 | #define L1_BRICKTYPE_ATHENA 0x2b /* + */ | 35 | #define L1_BRICKTYPE_ATHENA 0x2b /* + */ |
36 | #define L1_BRICKTYPE_DAYTONA 0x7a /* z */ | 36 | #define L1_BRICKTYPE_DAYTONA 0x7a /* z */ |
37 | #define L1_BRICKTYPE_1932 0x2c /* . */ | ||
38 | #define L1_BRICKTYPE_191010 0x2e /* , */ | ||
37 | 39 | ||
38 | /* board type response codes */ | 40 | /* board type response codes */ |
39 | #define L1_BOARDTYPE_IP69 0x0100 /* CA */ | 41 | #define L1_BOARDTYPE_IP69 0x0100 /* CA */ |
@@ -46,5 +48,4 @@ | |||
46 | #define L1_BOARDTYPE_DAYTONA 0x0800 /* AD */ | 48 | #define L1_BOARDTYPE_DAYTONA 0x0800 /* AD */ |
47 | #define L1_BOARDTYPE_INVAL (-1) /* invalid brick type */ | 49 | #define L1_BOARDTYPE_INVAL (-1) /* invalid brick type */ |
48 | 50 | ||
49 | |||
50 | #endif /* _ASM_IA64_SN_L1_H */ | 51 | #endif /* _ASM_IA64_SN_L1_H */ |
diff --git a/include/asm-ia64/sn/pcibr_provider.h b/include/asm-ia64/sn/pcibr_provider.h index a601d3af39b6..51260ab70d91 100644 --- a/include/asm-ia64/sn/pcibr_provider.h +++ b/include/asm-ia64/sn/pcibr_provider.h | |||
@@ -144,4 +144,5 @@ extern int sal_pcibr_slot_enable(struct pcibus_info *soft, int device, | |||
144 | void *resp); | 144 | void *resp); |
145 | extern int sal_pcibr_slot_disable(struct pcibus_info *soft, int device, | 145 | extern int sal_pcibr_slot_disable(struct pcibus_info *soft, int device, |
146 | int action, void *resp); | 146 | int action, void *resp); |
147 | extern u16 sn_ioboard_to_pci_bus(struct pci_bus *pci_bus); | ||
147 | #endif | 148 | #endif |
diff --git a/include/asm-ia64/sn/pcidev.h b/include/asm-ia64/sn/pcidev.h index 38cdffbc4c7b..eac3561574be 100644 --- a/include/asm-ia64/sn/pcidev.h +++ b/include/asm-ia64/sn/pcidev.h | |||
@@ -76,6 +76,7 @@ extern void sn_pci_controller_fixup(int segment, int busnum, | |||
76 | struct pci_bus *bus); | 76 | struct pci_bus *bus); |
77 | extern void sn_bus_store_sysdata(struct pci_dev *dev); | 77 | extern void sn_bus_store_sysdata(struct pci_dev *dev); |
78 | extern void sn_bus_free_sysdata(void); | 78 | extern void sn_bus_free_sysdata(void); |
79 | extern void sn_generate_path(struct pci_bus *pci_bus, char *address); | ||
79 | extern void sn_pci_fixup_slot(struct pci_dev *dev); | 80 | extern void sn_pci_fixup_slot(struct pci_dev *dev); |
80 | extern void sn_pci_unfixup_slot(struct pci_dev *dev); | 81 | extern void sn_pci_unfixup_slot(struct pci_dev *dev); |
81 | extern void sn_irq_lh_init(void); | 82 | extern void sn_irq_lh_init(void); |
diff --git a/include/asm-ia64/sn/sn_feature_sets.h b/include/asm-ia64/sn/sn_feature_sets.h index ff33e3bd3f8e..30dcfa442e53 100644 --- a/include/asm-ia64/sn/sn_feature_sets.h +++ b/include/asm-ia64/sn/sn_feature_sets.h | |||
@@ -30,8 +30,7 @@ extern int sn_prom_feature_available(int id); | |||
30 | 30 | ||
31 | #define PRF_PAL_CACHE_FLUSH_SAFE 0 | 31 | #define PRF_PAL_CACHE_FLUSH_SAFE 0 |
32 | #define PRF_DEVICE_FLUSH_LIST 1 | 32 | #define PRF_DEVICE_FLUSH_LIST 1 |
33 | 33 | #define PRF_HOTPLUG_SUPPORT 2 | |
34 | |||
35 | 34 | ||
36 | /* --------------------- OS Features -------------------------------*/ | 35 | /* --------------------- OS Features -------------------------------*/ |
37 | 36 | ||
diff --git a/include/asm-ia64/sn/sn_sal.h b/include/asm-ia64/sn/sn_sal.h index e77f0c9b7d3d..244449df7411 100644 --- a/include/asm-ia64/sn/sn_sal.h +++ b/include/asm-ia64/sn/sn_sal.h | |||
@@ -907,18 +907,22 @@ ia64_sn_sysctl_tio_clock_reset(nasid_t nasid) | |||
907 | /* | 907 | /* |
908 | * Get the associated ioboard type for a given nasid. | 908 | * Get the associated ioboard type for a given nasid. |
909 | */ | 909 | */ |
910 | static inline int | 910 | static inline s64 |
911 | ia64_sn_sysctl_ioboard_get(nasid_t nasid) | 911 | ia64_sn_sysctl_ioboard_get(nasid_t nasid, u16 *ioboard) |
912 | { | 912 | { |
913 | struct ia64_sal_retval rv; | 913 | struct ia64_sal_retval isrv; |
914 | SAL_CALL_REENTRANT(rv, SN_SAL_SYSCTL_OP, SAL_SYSCTL_OP_IOBOARD, | 914 | SAL_CALL_REENTRANT(isrv, SN_SAL_SYSCTL_OP, SAL_SYSCTL_OP_IOBOARD, |
915 | nasid, 0, 0, 0, 0, 0); | 915 | nasid, 0, 0, 0, 0, 0); |
916 | if (rv.v0 != 0) | 916 | if (isrv.v0 != 0) { |
917 | return (int)rv.v0; | 917 | *ioboard = isrv.v0; |
918 | if (rv.v1 != 0) | 918 | return isrv.status; |
919 | return (int)rv.v1; | 919 | } |
920 | 920 | if (isrv.v1 != 0) { | |
921 | return 0; | 921 | *ioboard = isrv.v1; |
922 | return isrv.status; | ||
923 | } | ||
924 | |||
925 | return isrv.status; | ||
922 | } | 926 | } |
923 | 927 | ||
924 | /** | 928 | /** |
@@ -1037,7 +1041,7 @@ ia64_sn_get_sn_info(int fc, u8 *shubtype, u16 *nasid_bitmask, u8 *nasid_shift, | |||
1037 | 1041 | ||
1038 | /***** BEGIN HACK - temp til old proms no longer supported ********/ | 1042 | /***** BEGIN HACK - temp til old proms no longer supported ********/ |
1039 | if (ret_stuff.status == SALRET_NOT_IMPLEMENTED) { | 1043 | if (ret_stuff.status == SALRET_NOT_IMPLEMENTED) { |
1040 | int nasid = get_sapicid() & 0xfff;; | 1044 | int nasid = get_sapicid() & 0xfff; |
1041 | #define SH_SHUB_ID_NODES_PER_BIT_MASK 0x001f000000000000UL | 1045 | #define SH_SHUB_ID_NODES_PER_BIT_MASK 0x001f000000000000UL |
1042 | #define SH_SHUB_ID_NODES_PER_BIT_SHFT 48 | 1046 | #define SH_SHUB_ID_NODES_PER_BIT_SHFT 48 |
1043 | if (shubtype) *shubtype = 0; | 1047 | if (shubtype) *shubtype = 0; |
diff --git a/include/asm-ia64/system.h b/include/asm-ia64/system.h index cd4233d66f15..2f3620593687 100644 --- a/include/asm-ia64/system.h +++ b/include/asm-ia64/system.h | |||
@@ -265,6 +265,8 @@ void sched_cacheflush(void); | |||
265 | 265 | ||
266 | #define arch_align_stack(x) (x) | 266 | #define arch_align_stack(x) (x) |
267 | 267 | ||
268 | void default_idle(void); | ||
269 | |||
268 | #endif /* __KERNEL__ */ | 270 | #endif /* __KERNEL__ */ |
269 | 271 | ||
270 | #endif /* __ASSEMBLY__ */ | 272 | #endif /* __ASSEMBLY__ */ |
diff --git a/include/asm-m32r/poll.h b/include/asm-m32r/poll.h index 43b7acf732d5..9e0e700e727c 100644 --- a/include/asm-m32r/poll.h +++ b/include/asm-m32r/poll.h | |||
@@ -21,6 +21,7 @@ | |||
21 | #define POLLWRBAND 0x0200 | 21 | #define POLLWRBAND 0x0200 |
22 | #define POLLMSG 0x0400 | 22 | #define POLLMSG 0x0400 |
23 | #define POLLREMOVE 0x1000 | 23 | #define POLLREMOVE 0x1000 |
24 | #define POLLRDHUP 0x2000 | ||
24 | 25 | ||
25 | struct pollfd { | 26 | struct pollfd { |
26 | int fd; | 27 | int fd; |
diff --git a/include/asm-m68k/atomic.h b/include/asm-m68k/atomic.h index 862e497c2645..732d696d31a6 100644 --- a/include/asm-m68k/atomic.h +++ b/include/asm-m68k/atomic.h | |||
@@ -175,8 +175,14 @@ static inline void atomic_set_mask(unsigned long mask, unsigned long *v) | |||
175 | ({ \ | 175 | ({ \ |
176 | int c, old; \ | 176 | int c, old; \ |
177 | c = atomic_read(v); \ | 177 | c = atomic_read(v); \ |
178 | while (c != (u) && (old = atomic_cmpxchg((v), c, c + (a))) != c) \ | 178 | for (;;) { \ |
179 | if (unlikely(c == (u))) \ | ||
180 | break; \ | ||
181 | old = atomic_cmpxchg((v), c, c + (a)); \ | ||
182 | if (likely(old == c)) \ | ||
183 | break; \ | ||
179 | c = old; \ | 184 | c = old; \ |
185 | } \ | ||
180 | c != (u); \ | 186 | c != (u); \ |
181 | }) | 187 | }) |
182 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) | 188 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) |
diff --git a/include/asm-m68k/poll.h b/include/asm-m68k/poll.h index c4b69c4a87e1..0fb8843647f8 100644 --- a/include/asm-m68k/poll.h +++ b/include/asm-m68k/poll.h | |||
@@ -13,6 +13,7 @@ | |||
13 | #define POLLWRBAND 256 | 13 | #define POLLWRBAND 256 |
14 | #define POLLMSG 0x0400 | 14 | #define POLLMSG 0x0400 |
15 | #define POLLREMOVE 0x1000 | 15 | #define POLLREMOVE 0x1000 |
16 | #define POLLRDHUP 0x2000 | ||
16 | 17 | ||
17 | struct pollfd { | 18 | struct pollfd { |
18 | int fd; | 19 | int fd; |
diff --git a/include/asm-mips/io.h b/include/asm-mips/io.h index 546a17e56a9b..6b17eb9d79a5 100644 --- a/include/asm-mips/io.h +++ b/include/asm-mips/io.h | |||
@@ -556,24 +556,11 @@ extern void pci_iounmap(struct pci_dev *dev, void __iomem *); | |||
556 | */ | 556 | */ |
557 | #define __ISA_IO_base ((char *)(isa_slot_offset)) | 557 | #define __ISA_IO_base ((char *)(isa_slot_offset)) |
558 | 558 | ||
559 | #define isa_readb(a) readb(__ISA_IO_base + (a)) | ||
560 | #define isa_readw(a) readw(__ISA_IO_base + (a)) | ||
561 | #define isa_readl(a) readl(__ISA_IO_base + (a)) | ||
562 | #define isa_readq(a) readq(__ISA_IO_base + (a)) | ||
563 | #define isa_writeb(b,a) writeb(b,__ISA_IO_base + (a)) | ||
564 | #define isa_writew(w,a) writew(w,__ISA_IO_base + (a)) | ||
565 | #define isa_writel(l,a) writel(l,__ISA_IO_base + (a)) | ||
566 | #define isa_writeq(q,a) writeq(q,__ISA_IO_base + (a)) | ||
567 | #define isa_memset_io(a,b,c) memset_io(__ISA_IO_base + (a),(b),(c)) | ||
568 | #define isa_memcpy_fromio(a,b,c) memcpy_fromio((a),__ISA_IO_base + (b),(c)) | ||
569 | #define isa_memcpy_toio(a,b,c) memcpy_toio(__ISA_IO_base + (a),(b),(c)) | ||
570 | |||
571 | /* | 559 | /* |
572 | * We don't have csum_partial_copy_fromio() yet, so we cheat here and | 560 | * We don't have csum_partial_copy_fromio() yet, so we cheat here and |
573 | * just copy it. The net code will then do the checksum later. | 561 | * just copy it. The net code will then do the checksum later. |
574 | */ | 562 | */ |
575 | #define eth_io_copy_and_sum(skb,src,len,unused) memcpy_fromio((skb)->data,(src),(len)) | 563 | #define eth_io_copy_and_sum(skb,src,len,unused) memcpy_fromio((skb)->data,(src),(len)) |
576 | #define isa_eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),(b),(c),(d)) | ||
577 | 564 | ||
578 | /* | 565 | /* |
579 | * check_signature - find BIOS signatures | 566 | * check_signature - find BIOS signatures |
diff --git a/include/asm-mips/linkage.h b/include/asm-mips/linkage.h index 291c2d01c44f..b6185d3cfe68 100644 --- a/include/asm-mips/linkage.h +++ b/include/asm-mips/linkage.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef __ASM_LINKAGE_H | 1 | #ifndef __ASM_LINKAGE_H |
2 | #define __ASM_LINKAGE_H | 2 | #define __ASM_LINKAGE_H |
3 | 3 | ||
4 | /* Nothing to see here... */ | 4 | #ifdef __ASSEMBLY__ |
5 | #include <asm/asm.h> | ||
6 | #endif | ||
5 | 7 | ||
6 | #endif | 8 | #endif |
diff --git a/include/asm-mips/poll.h b/include/asm-mips/poll.h index a000f1f789e3..70881f8c5c50 100644 --- a/include/asm-mips/poll.h +++ b/include/asm-mips/poll.h | |||
@@ -17,6 +17,7 @@ | |||
17 | /* These seem to be more or less nonstandard ... */ | 17 | /* These seem to be more or less nonstandard ... */ |
18 | #define POLLMSG 0x0400 | 18 | #define POLLMSG 0x0400 |
19 | #define POLLREMOVE 0x1000 | 19 | #define POLLREMOVE 0x1000 |
20 | #define POLLRDHUP 0x2000 | ||
20 | 21 | ||
21 | struct pollfd { | 22 | struct pollfd { |
22 | int fd; | 23 | int fd; |
diff --git a/include/asm-parisc/cache.h b/include/asm-parisc/cache.h index 93f179f13ce8..ae50f8e12eed 100644 --- a/include/asm-parisc/cache.h +++ b/include/asm-parisc/cache.h | |||
@@ -29,6 +29,8 @@ | |||
29 | 29 | ||
30 | #define SMP_CACHE_BYTES L1_CACHE_BYTES | 30 | #define SMP_CACHE_BYTES L1_CACHE_BYTES |
31 | 31 | ||
32 | #define __read_mostly __attribute__((__section__(".data.read_mostly"))) | ||
33 | |||
32 | extern void flush_data_cache_local(void *); /* flushes local data-cache only */ | 34 | extern void flush_data_cache_local(void *); /* flushes local data-cache only */ |
33 | extern void flush_instruction_cache_local(void *); /* flushes local code-cache only */ | 35 | extern void flush_instruction_cache_local(void *); /* flushes local code-cache only */ |
34 | #ifdef CONFIG_SMP | 36 | #ifdef CONFIG_SMP |
diff --git a/include/asm-parisc/io.h b/include/asm-parisc/io.h index 0db00adc942a..be0c7234a6da 100644 --- a/include/asm-parisc/io.h +++ b/include/asm-parisc/io.h | |||
@@ -294,22 +294,6 @@ void memset_io(volatile void __iomem *addr, unsigned char val, int count); | |||
294 | void memcpy_fromio(void *dst, const volatile void __iomem *src, int count); | 294 | void memcpy_fromio(void *dst, const volatile void __iomem *src, int count); |
295 | void memcpy_toio(volatile void __iomem *dst, const void *src, int count); | 295 | void memcpy_toio(volatile void __iomem *dst, const void *src, int count); |
296 | 296 | ||
297 | /* Support old drivers which don't ioremap. | ||
298 | * NB this interface is scheduled to disappear in 2.5 | ||
299 | */ | ||
300 | |||
301 | #define __isa_addr(x) (void __iomem *)(F_EXTEND(0xfc000000) | (x)) | ||
302 | #define isa_readb(a) readb(__isa_addr(a)) | ||
303 | #define isa_readw(a) readw(__isa_addr(a)) | ||
304 | #define isa_readl(a) readl(__isa_addr(a)) | ||
305 | #define isa_writeb(b,a) writeb((b), __isa_addr(a)) | ||
306 | #define isa_writew(b,a) writew((b), __isa_addr(a)) | ||
307 | #define isa_writel(b,a) writel((b), __isa_addr(a)) | ||
308 | #define isa_memset_io(a,b,c) memset_io(__isa_addr(a), (b), (c)) | ||
309 | #define isa_memcpy_fromio(a,b,c) memcpy_fromio((a), __isa_addr(b), (c)) | ||
310 | #define isa_memcpy_toio(a,b,c) memcpy_toio(__isa_addr(a), (b), (c)) | ||
311 | |||
312 | |||
313 | /* | 297 | /* |
314 | * XXX - We don't have csum_partial_copy_fromio() yet, so we cheat here and | 298 | * XXX - We don't have csum_partial_copy_fromio() yet, so we cheat here and |
315 | * just copy it. The net code will then do the checksum later. Presently | 299 | * just copy it. The net code will then do the checksum later. Presently |
@@ -318,8 +302,6 @@ void memcpy_toio(volatile void __iomem *dst, const void *src, int count); | |||
318 | 302 | ||
319 | #define eth_io_copy_and_sum(skb,src,len,unused) \ | 303 | #define eth_io_copy_and_sum(skb,src,len,unused) \ |
320 | memcpy_fromio((skb)->data,(src),(len)) | 304 | memcpy_fromio((skb)->data,(src),(len)) |
321 | #define isa_eth_io_copy_and_sum(skb,src,len,unused) \ | ||
322 | isa_memcpy_fromio((skb)->data,(src),(len)) | ||
323 | 305 | ||
324 | /* Port-space IO */ | 306 | /* Port-space IO */ |
325 | 307 | ||
diff --git a/include/asm-parisc/poll.h b/include/asm-parisc/poll.h index 1c1da86934cf..20e4d03c74cb 100644 --- a/include/asm-parisc/poll.h +++ b/include/asm-parisc/poll.h | |||
@@ -16,6 +16,7 @@ | |||
16 | #define POLLWRBAND 0x0200 | 16 | #define POLLWRBAND 0x0200 |
17 | #define POLLMSG 0x0400 | 17 | #define POLLMSG 0x0400 |
18 | #define POLLREMOVE 0x1000 | 18 | #define POLLREMOVE 0x1000 |
19 | #define POLLRDHUP 0x2000 | ||
19 | 20 | ||
20 | struct pollfd { | 21 | struct pollfd { |
21 | int fd; | 22 | int fd; |
diff --git a/include/asm-powerpc/percpu.h b/include/asm-powerpc/percpu.h index e31922c50e53..464301cd0d03 100644 --- a/include/asm-powerpc/percpu.h +++ b/include/asm-powerpc/percpu.h | |||
@@ -27,10 +27,9 @@ | |||
27 | #define percpu_modcopy(pcpudst, src, size) \ | 27 | #define percpu_modcopy(pcpudst, src, size) \ |
28 | do { \ | 28 | do { \ |
29 | unsigned int __i; \ | 29 | unsigned int __i; \ |
30 | for (__i = 0; __i < NR_CPUS; __i++) \ | 30 | for_each_cpu(__i) \ |
31 | if (cpu_possible(__i)) \ | 31 | memcpy((pcpudst)+__per_cpu_offset(__i), \ |
32 | memcpy((pcpudst)+__per_cpu_offset(__i), \ | 32 | (src), (size)); \ |
33 | (src), (size)); \ | ||
34 | } while (0) | 33 | } while (0) |
35 | 34 | ||
36 | extern void setup_per_cpu_areas(void); | 35 | extern void setup_per_cpu_areas(void); |
diff --git a/include/asm-powerpc/poll.h b/include/asm-powerpc/poll.h index edd2054da86b..9c7d12631033 100644 --- a/include/asm-powerpc/poll.h +++ b/include/asm-powerpc/poll.h | |||
@@ -13,6 +13,7 @@ | |||
13 | #define POLLWRBAND 0x0200 | 13 | #define POLLWRBAND 0x0200 |
14 | #define POLLMSG 0x0400 | 14 | #define POLLMSG 0x0400 |
15 | #define POLLREMOVE 0x1000 | 15 | #define POLLREMOVE 0x1000 |
16 | #define POLLRDHUP 0x2000 | ||
16 | 17 | ||
17 | struct pollfd { | 18 | struct pollfd { |
18 | int fd; | 19 | int fd; |
diff --git a/include/asm-powerpc/string.h b/include/asm-powerpc/string.h index 8606a696c088..faa407f33c6b 100644 --- a/include/asm-powerpc/string.h +++ b/include/asm-powerpc/string.h | |||
@@ -15,7 +15,7 @@ | |||
15 | #define __HAVE_ARCH_MEMCHR | 15 | #define __HAVE_ARCH_MEMCHR |
16 | 16 | ||
17 | extern int strcasecmp(const char *, const char *); | 17 | extern int strcasecmp(const char *, const char *); |
18 | extern int strncasecmp(const char *, const char *, int); | 18 | extern int strncasecmp(const char *, const char *, __kernel_size_t); |
19 | extern char * strcpy(char *,const char *); | 19 | extern char * strcpy(char *,const char *); |
20 | extern char * strncpy(char *,const char *, __kernel_size_t); | 20 | extern char * strncpy(char *,const char *, __kernel_size_t); |
21 | extern __kernel_size_t strlen(const char *); | 21 | extern __kernel_size_t strlen(const char *); |
diff --git a/include/asm-s390/atomic.h b/include/asm-s390/atomic.h index be6fefe223d6..de1d9926aa60 100644 --- a/include/asm-s390/atomic.h +++ b/include/asm-s390/atomic.h | |||
@@ -89,10 +89,15 @@ static __inline__ int atomic_cmpxchg(atomic_t *v, int old, int new) | |||
89 | static __inline__ int atomic_add_unless(atomic_t *v, int a, int u) | 89 | static __inline__ int atomic_add_unless(atomic_t *v, int a, int u) |
90 | { | 90 | { |
91 | int c, old; | 91 | int c, old; |
92 | |||
93 | c = atomic_read(v); | 92 | c = atomic_read(v); |
94 | while (c != u && (old = atomic_cmpxchg(v, c, c + a)) != c) | 93 | for (;;) { |
94 | if (unlikely(c == u)) | ||
95 | break; | ||
96 | old = atomic_cmpxchg(v, c, c + a); | ||
97 | if (likely(old == c)) | ||
98 | break; | ||
95 | c = old; | 99 | c = old; |
100 | } | ||
96 | return c != u; | 101 | return c != u; |
97 | } | 102 | } |
98 | 103 | ||
@@ -167,10 +172,15 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, | |||
167 | long long a, long long u) | 172 | long long a, long long u) |
168 | { | 173 | { |
169 | long long c, old; | 174 | long long c, old; |
170 | |||
171 | c = atomic64_read(v); | 175 | c = atomic64_read(v); |
172 | while (c != u && (old = atomic64_cmpxchg(v, c, c + a)) != c) | 176 | for (;;) { |
177 | if (unlikely(c == u)) | ||
178 | break; | ||
179 | old = atomic64_cmpxchg(v, c, c + a); | ||
180 | if (likely(old == c)) | ||
181 | break; | ||
173 | c = old; | 182 | c = old; |
183 | } | ||
174 | return c != u; | 184 | return c != u; |
175 | } | 185 | } |
176 | 186 | ||
diff --git a/include/asm-s390/bug.h b/include/asm-s390/bug.h index a2e7430aafa6..7ddaa05b98d8 100644 --- a/include/asm-s390/bug.h +++ b/include/asm-s390/bug.h | |||
@@ -4,9 +4,10 @@ | |||
4 | #include <linux/kernel.h> | 4 | #include <linux/kernel.h> |
5 | 5 | ||
6 | #ifdef CONFIG_BUG | 6 | #ifdef CONFIG_BUG |
7 | |||
7 | #define BUG() do { \ | 8 | #define BUG() do { \ |
8 | printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ | 9 | printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ |
9 | __asm__ __volatile__(".long 0"); \ | 10 | __builtin_trap(); \ |
10 | } while (0) | 11 | } while (0) |
11 | 12 | ||
12 | #define HAVE_ARCH_BUG | 13 | #define HAVE_ARCH_BUG |
diff --git a/include/asm-s390/percpu.h b/include/asm-s390/percpu.h index 123fcaca295e..e10ed87094f0 100644 --- a/include/asm-s390/percpu.h +++ b/include/asm-s390/percpu.h | |||
@@ -46,10 +46,9 @@ extern unsigned long __per_cpu_offset[NR_CPUS]; | |||
46 | #define percpu_modcopy(pcpudst, src, size) \ | 46 | #define percpu_modcopy(pcpudst, src, size) \ |
47 | do { \ | 47 | do { \ |
48 | unsigned int __i; \ | 48 | unsigned int __i; \ |
49 | for (__i = 0; __i < NR_CPUS; __i++) \ | 49 | for_each_cpu(__i) \ |
50 | if (cpu_possible(__i)) \ | 50 | memcpy((pcpudst)+__per_cpu_offset[__i], \ |
51 | memcpy((pcpudst)+__per_cpu_offset[__i], \ | 51 | (src), (size)); \ |
52 | (src), (size)); \ | ||
53 | } while (0) | 52 | } while (0) |
54 | 53 | ||
55 | #else /* ! SMP */ | 54 | #else /* ! SMP */ |
diff --git a/include/asm-s390/poll.h b/include/asm-s390/poll.h index e90a5ca42061..6f7f65ac7d27 100644 --- a/include/asm-s390/poll.h +++ b/include/asm-s390/poll.h | |||
@@ -24,6 +24,7 @@ | |||
24 | #define POLLWRBAND 0x0200 | 24 | #define POLLWRBAND 0x0200 |
25 | #define POLLMSG 0x0400 | 25 | #define POLLMSG 0x0400 |
26 | #define POLLREMOVE 0x1000 | 26 | #define POLLREMOVE 0x1000 |
27 | #define POLLRDHUP 0x2000 | ||
27 | 28 | ||
28 | struct pollfd { | 29 | struct pollfd { |
29 | int fd; | 30 | int fd; |
diff --git a/include/asm-sh/io.h b/include/asm-sh/io.h index b0b2937b6f83..2c3afe71323d 100644 --- a/include/asm-sh/io.h +++ b/include/asm-sh/io.h | |||
@@ -174,20 +174,6 @@ static inline void __set_io_port_base(unsigned long pbase) | |||
174 | generic_io_base = pbase; | 174 | generic_io_base = pbase; |
175 | } | 175 | } |
176 | 176 | ||
177 | #define isa_readb(a) readb(ioport_map(a, 1)) | ||
178 | #define isa_readw(a) readw(ioport_map(a, 2)) | ||
179 | #define isa_readl(a) readl(ioport_map(a, 4)) | ||
180 | #define isa_writeb(b,a) writeb(b,ioport_map(a, 1)) | ||
181 | #define isa_writew(w,a) writew(w,ioport_map(a, 2)) | ||
182 | #define isa_writel(l,a) writel(l,ioport_map(a, 4)) | ||
183 | |||
184 | #define isa_memset_io(a,b,c) \ | ||
185 | memset((void *)(ioport_map((unsigned long)(a), 1)),(b),(c)) | ||
186 | #define isa_memcpy_fromio(a,b,c) \ | ||
187 | memcpy((a),(void *)(ioport_map((unsigned long)(b), 1)),(c)) | ||
188 | #define isa_memcpy_toio(a,b,c) \ | ||
189 | memcpy((void *)(ioport_map((unsigned long)(a), 1)),(b),(c)) | ||
190 | |||
191 | /* We really want to try and get these to memcpy etc */ | 177 | /* We really want to try and get these to memcpy etc */ |
192 | extern void memcpy_fromio(void *, volatile void __iomem *, unsigned long); | 178 | extern void memcpy_fromio(void *, volatile void __iomem *, unsigned long); |
193 | extern void memcpy_toio(volatile void __iomem *, const void *, unsigned long); | 179 | extern void memcpy_toio(volatile void __iomem *, const void *, unsigned long); |
diff --git a/include/asm-sh/poll.h b/include/asm-sh/poll.h index 52f95b9188dc..dbca9b32f4a6 100644 --- a/include/asm-sh/poll.h +++ b/include/asm-sh/poll.h | |||
@@ -16,6 +16,7 @@ | |||
16 | #define POLLWRBAND 0x0200 | 16 | #define POLLWRBAND 0x0200 |
17 | #define POLLMSG 0x0400 | 17 | #define POLLMSG 0x0400 |
18 | #define POLLREMOVE 0x1000 | 18 | #define POLLREMOVE 0x1000 |
19 | #define POLLRDHUP 0x2000 | ||
19 | 20 | ||
20 | struct pollfd { | 21 | struct pollfd { |
21 | int fd; | 22 | int fd; |
diff --git a/include/asm-sh64/poll.h b/include/asm-sh64/poll.h index a420d14eb704..3a6cbad08d28 100644 --- a/include/asm-sh64/poll.h +++ b/include/asm-sh64/poll.h | |||
@@ -26,6 +26,7 @@ | |||
26 | #define POLLWRNORM 0x0100 | 26 | #define POLLWRNORM 0x0100 |
27 | #define POLLWRBAND 0x0200 | 27 | #define POLLWRBAND 0x0200 |
28 | #define POLLMSG 0x0400 | 28 | #define POLLMSG 0x0400 |
29 | #define POLLRDHUP 0x2000 | ||
29 | 30 | ||
30 | struct pollfd { | 31 | struct pollfd { |
31 | int fd; | 32 | int fd; |
diff --git a/include/asm-sparc/cpudata.h b/include/asm-sparc/cpudata.h index ec0d9ef90a3b..a2c4d51d36c4 100644 --- a/include/asm-sparc/cpudata.h +++ b/include/asm-sparc/cpudata.h | |||
@@ -18,6 +18,7 @@ typedef struct { | |||
18 | unsigned int counter; | 18 | unsigned int counter; |
19 | int prom_node; | 19 | int prom_node; |
20 | int mid; | 20 | int mid; |
21 | int next; | ||
21 | } cpuinfo_sparc; | 22 | } cpuinfo_sparc; |
22 | 23 | ||
23 | DECLARE_PER_CPU(cpuinfo_sparc, __cpu_data); | 24 | DECLARE_PER_CPU(cpuinfo_sparc, __cpu_data); |
diff --git a/include/asm-sparc/poll.h b/include/asm-sparc/poll.h index 3ddcc6481f09..26f13fb35497 100644 --- a/include/asm-sparc/poll.h +++ b/include/asm-sparc/poll.h | |||
@@ -13,6 +13,7 @@ | |||
13 | #define POLLWRBAND 256 | 13 | #define POLLWRBAND 256 |
14 | #define POLLMSG 512 | 14 | #define POLLMSG 512 |
15 | #define POLLREMOVE 1024 | 15 | #define POLLREMOVE 1024 |
16 | #define POLLRDHUP 2048 | ||
16 | 17 | ||
17 | struct pollfd { | 18 | struct pollfd { |
18 | int fd; | 19 | int fd; |
diff --git a/include/asm-sparc/smp.h b/include/asm-sparc/smp.h index 580c51d011df..98c46e3fbe8a 100644 --- a/include/asm-sparc/smp.h +++ b/include/asm-sparc/smp.h | |||
@@ -81,16 +81,9 @@ static inline int smp_call_function(void (*func)(void *info), void *info, int no | |||
81 | return 0; | 81 | return 0; |
82 | } | 82 | } |
83 | 83 | ||
84 | extern __volatile__ int __cpu_number_map[NR_CPUS]; | ||
85 | extern __volatile__ int __cpu_logical_map[NR_CPUS]; | ||
86 | |||
87 | static inline int cpu_logical_map(int cpu) | 84 | static inline int cpu_logical_map(int cpu) |
88 | { | 85 | { |
89 | return __cpu_logical_map[cpu]; | 86 | return cpu; |
90 | } | ||
91 | static inline int cpu_number_map(int cpu) | ||
92 | { | ||
93 | return __cpu_number_map[cpu]; | ||
94 | } | 87 | } |
95 | 88 | ||
96 | static inline int hard_smp4m_processor_id(void) | 89 | static inline int hard_smp4m_processor_id(void) |
diff --git a/include/asm-sparc/spinlock.h b/include/asm-sparc/spinlock.h index e344c98a6f5f..3350c90c7869 100644 --- a/include/asm-sparc/spinlock.h +++ b/include/asm-sparc/spinlock.h | |||
@@ -94,7 +94,7 @@ static inline void __read_lock(raw_rwlock_t *rw) | |||
94 | #define __raw_read_lock(lock) \ | 94 | #define __raw_read_lock(lock) \ |
95 | do { unsigned long flags; \ | 95 | do { unsigned long flags; \ |
96 | local_irq_save(flags); \ | 96 | local_irq_save(flags); \ |
97 | __raw_read_lock(lock); \ | 97 | __read_lock(lock); \ |
98 | local_irq_restore(flags); \ | 98 | local_irq_restore(flags); \ |
99 | } while(0) | 99 | } while(0) |
100 | 100 | ||
@@ -114,11 +114,11 @@ static inline void __read_unlock(raw_rwlock_t *rw) | |||
114 | #define __raw_read_unlock(lock) \ | 114 | #define __raw_read_unlock(lock) \ |
115 | do { unsigned long flags; \ | 115 | do { unsigned long flags; \ |
116 | local_irq_save(flags); \ | 116 | local_irq_save(flags); \ |
117 | __raw_read_unlock(lock); \ | 117 | __read_unlock(lock); \ |
118 | local_irq_restore(flags); \ | 118 | local_irq_restore(flags); \ |
119 | } while(0) | 119 | } while(0) |
120 | 120 | ||
121 | extern __inline__ void __raw_write_lock(raw_rwlock_t *rw) | 121 | static inline void __raw_write_lock(raw_rwlock_t *rw) |
122 | { | 122 | { |
123 | register raw_rwlock_t *lp asm("g1"); | 123 | register raw_rwlock_t *lp asm("g1"); |
124 | lp = rw; | 124 | lp = rw; |
@@ -131,9 +131,28 @@ extern __inline__ void __raw_write_lock(raw_rwlock_t *rw) | |||
131 | : "g2", "g4", "memory", "cc"); | 131 | : "g2", "g4", "memory", "cc"); |
132 | } | 132 | } |
133 | 133 | ||
134 | static inline int __raw_write_trylock(raw_rwlock_t *rw) | ||
135 | { | ||
136 | unsigned int val; | ||
137 | |||
138 | __asm__ __volatile__("ldstub [%1 + 3], %0" | ||
139 | : "=r" (val) | ||
140 | : "r" (&rw->lock) | ||
141 | : "memory"); | ||
142 | |||
143 | if (val == 0) { | ||
144 | val = rw->lock & ~0xff; | ||
145 | if (val) | ||
146 | ((volatile u8*)&rw->lock)[3] = 0; | ||
147 | } | ||
148 | |||
149 | return (val == 0); | ||
150 | } | ||
151 | |||
134 | #define __raw_write_unlock(rw) do { (rw)->lock = 0; } while(0) | 152 | #define __raw_write_unlock(rw) do { (rw)->lock = 0; } while(0) |
135 | 153 | ||
136 | #define __raw_spin_lock_flags(lock, flags) __raw_spin_lock(lock) | 154 | #define __raw_spin_lock_flags(lock, flags) __raw_spin_lock(lock) |
155 | #define __raw_read_trylock(lock) generic__raw_read_trylock(lock) | ||
137 | 156 | ||
138 | #endif /* !(__ASSEMBLY__) */ | 157 | #endif /* !(__ASSEMBLY__) */ |
139 | 158 | ||
diff --git a/include/asm-sparc64/atomic.h b/include/asm-sparc64/atomic.h index 25256bdc8aae..468eb48d8142 100644 --- a/include/asm-sparc64/atomic.h +++ b/include/asm-sparc64/atomic.h | |||
@@ -78,9 +78,15 @@ extern int atomic64_sub_ret(int, atomic64_t *); | |||
78 | ({ \ | 78 | ({ \ |
79 | int c, old; \ | 79 | int c, old; \ |
80 | c = atomic_read(v); \ | 80 | c = atomic_read(v); \ |
81 | while (c != (u) && (old = atomic_cmpxchg((v), c, c + (a))) != c) \ | 81 | for (;;) { \ |
82 | if (unlikely(c == (u))) \ | ||
83 | break; \ | ||
84 | old = atomic_cmpxchg((v), c, c + (a)); \ | ||
85 | if (likely(old == c)) \ | ||
86 | break; \ | ||
82 | c = old; \ | 87 | c = old; \ |
83 | c != (u); \ | 88 | } \ |
89 | likely(c != (u)); \ | ||
84 | }) | 90 | }) |
85 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) | 91 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) |
86 | 92 | ||
diff --git a/include/asm-sparc64/cache.h b/include/asm-sparc64/cache.h index f7d35a2ae9b8..e9df17acedde 100644 --- a/include/asm-sparc64/cache.h +++ b/include/asm-sparc64/cache.h | |||
@@ -13,4 +13,6 @@ | |||
13 | #define SMP_CACHE_BYTES_SHIFT 6 | 13 | #define SMP_CACHE_BYTES_SHIFT 6 |
14 | #define SMP_CACHE_BYTES (1 << SMP_CACHE_BYTES_SHIFT) /* L2 cache line size. */ | 14 | #define SMP_CACHE_BYTES (1 << SMP_CACHE_BYTES_SHIFT) /* L2 cache line size. */ |
15 | 15 | ||
16 | #define __read_mostly __attribute__((__section__(".data.read_mostly"))) | ||
17 | |||
16 | #endif | 18 | #endif |
diff --git a/include/asm-sparc64/percpu.h b/include/asm-sparc64/percpu.h index aea4e51e7cd1..82032e159a76 100644 --- a/include/asm-sparc64/percpu.h +++ b/include/asm-sparc64/percpu.h | |||
@@ -26,10 +26,9 @@ register unsigned long __local_per_cpu_offset asm("g5"); | |||
26 | #define percpu_modcopy(pcpudst, src, size) \ | 26 | #define percpu_modcopy(pcpudst, src, size) \ |
27 | do { \ | 27 | do { \ |
28 | unsigned int __i; \ | 28 | unsigned int __i; \ |
29 | for (__i = 0; __i < NR_CPUS; __i++) \ | 29 | for_each_cpu(__i) \ |
30 | if (cpu_possible(__i)) \ | 30 | memcpy((pcpudst)+__per_cpu_offset(__i), \ |
31 | memcpy((pcpudst)+__per_cpu_offset(__i), \ | 31 | (src), (size)); \ |
32 | (src), (size)); \ | ||
33 | } while (0) | 32 | } while (0) |
34 | #else /* ! SMP */ | 33 | #else /* ! SMP */ |
35 | 34 | ||
diff --git a/include/asm-sparc64/poll.h b/include/asm-sparc64/poll.h index 31b611aa7468..ab6b0d1bb4ad 100644 --- a/include/asm-sparc64/poll.h +++ b/include/asm-sparc64/poll.h | |||
@@ -13,6 +13,7 @@ | |||
13 | #define POLLWRBAND 256 | 13 | #define POLLWRBAND 256 |
14 | #define POLLMSG 512 | 14 | #define POLLMSG 512 |
15 | #define POLLREMOVE 1024 | 15 | #define POLLREMOVE 1024 |
16 | #define POLLRDHUP 2048 | ||
16 | 17 | ||
17 | struct pollfd { | 18 | struct pollfd { |
18 | int fd; | 19 | int fd; |
diff --git a/include/asm-um/alternative.h b/include/asm-um/alternative.h new file mode 100644 index 000000000000..b6434396bd42 --- /dev/null +++ b/include/asm-um/alternative.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef __UM_ALTERNATIVE_H | ||
2 | #define __UM_ALTERNATIVE_H | ||
3 | |||
4 | #include "asm/arch/alternative.h" | ||
5 | |||
6 | #endif | ||
diff --git a/include/asm-v850/linkage.h b/include/asm-v850/linkage.h index 291c2d01c44f..b6185d3cfe68 100644 --- a/include/asm-v850/linkage.h +++ b/include/asm-v850/linkage.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef __ASM_LINKAGE_H | 1 | #ifndef __ASM_LINKAGE_H |
2 | #define __ASM_LINKAGE_H | 2 | #define __ASM_LINKAGE_H |
3 | 3 | ||
4 | /* Nothing to see here... */ | 4 | #ifdef __ASSEMBLY__ |
5 | #include <asm/asm.h> | ||
6 | #endif | ||
5 | 7 | ||
6 | #endif | 8 | #endif |
diff --git a/include/asm-v850/poll.h b/include/asm-v850/poll.h index 0369562c7e15..c10176c2c28f 100644 --- a/include/asm-v850/poll.h +++ b/include/asm-v850/poll.h | |||
@@ -13,6 +13,7 @@ | |||
13 | #define POLLWRBAND 0x0100 | 13 | #define POLLWRBAND 0x0100 |
14 | #define POLLMSG 0x0400 | 14 | #define POLLMSG 0x0400 |
15 | #define POLLREMOVE 0x1000 | 15 | #define POLLREMOVE 0x1000 |
16 | #define POLLRDHUP 0x2000 | ||
16 | 17 | ||
17 | struct pollfd { | 18 | struct pollfd { |
18 | int fd; | 19 | int fd; |
diff --git a/include/asm-x86_64/apicdef.h b/include/asm-x86_64/apicdef.h index decaa2d540e8..5a48e9bcf218 100644 --- a/include/asm-x86_64/apicdef.h +++ b/include/asm-x86_64/apicdef.h | |||
@@ -39,6 +39,7 @@ | |||
39 | #define APIC_SPIV_FOCUS_DISABLED (1<<9) | 39 | #define APIC_SPIV_FOCUS_DISABLED (1<<9) |
40 | #define APIC_SPIV_APIC_ENABLED (1<<8) | 40 | #define APIC_SPIV_APIC_ENABLED (1<<8) |
41 | #define APIC_ISR 0x100 | 41 | #define APIC_ISR 0x100 |
42 | #define APIC_ISR_NR 0x8 /* Number of 32 bit ISR registers. */ | ||
42 | #define APIC_TMR 0x180 | 43 | #define APIC_TMR 0x180 |
43 | #define APIC_IRR 0x200 | 44 | #define APIC_IRR 0x200 |
44 | #define APIC_ESR 0x280 | 45 | #define APIC_ESR 0x280 |
diff --git a/include/asm-x86_64/atomic.h b/include/asm-x86_64/atomic.h index 4b5cd553e772..cecbf7baa6aa 100644 --- a/include/asm-x86_64/atomic.h +++ b/include/asm-x86_64/atomic.h | |||
@@ -405,8 +405,14 @@ static __inline__ long atomic64_sub_return(long i, atomic64_t *v) | |||
405 | ({ \ | 405 | ({ \ |
406 | int c, old; \ | 406 | int c, old; \ |
407 | c = atomic_read(v); \ | 407 | c = atomic_read(v); \ |
408 | while (c != (u) && (old = atomic_cmpxchg((v), c, c + (a))) != c) \ | 408 | for (;;) { \ |
409 | if (unlikely(c == (u))) \ | ||
410 | break; \ | ||
411 | old = atomic_cmpxchg((v), c, c + (a)); \ | ||
412 | if (likely(old == c)) \ | ||
413 | break; \ | ||
409 | c = old; \ | 414 | c = old; \ |
415 | } \ | ||
410 | c != (u); \ | 416 | c != (u); \ |
411 | }) | 417 | }) |
412 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) | 418 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) |
diff --git a/include/asm-x86_64/cache.h b/include/asm-x86_64/cache.h index 263f0a211ed7..c8043a16152e 100644 --- a/include/asm-x86_64/cache.h +++ b/include/asm-x86_64/cache.h | |||
@@ -20,6 +20,8 @@ | |||
20 | __attribute__((__section__(".data.page_aligned"))) | 20 | __attribute__((__section__(".data.page_aligned"))) |
21 | #endif | 21 | #endif |
22 | 22 | ||
23 | #define __read_mostly __attribute__((__section__(".data.read_mostly"))) | ||
24 | |||
23 | #endif | 25 | #endif |
24 | 26 | ||
25 | #endif | 27 | #endif |
diff --git a/include/asm-x86_64/dmi.h b/include/asm-x86_64/dmi.h new file mode 100644 index 000000000000..93b2b15d4325 --- /dev/null +++ b/include/asm-x86_64/dmi.h | |||
@@ -0,0 +1,27 @@ | |||
1 | #ifndef _ASM_DMI_H | ||
2 | #define _ASM_DMI_H 1 | ||
3 | |||
4 | #include <asm/io.h> | ||
5 | |||
6 | extern void *dmi_ioremap(unsigned long addr, unsigned long size); | ||
7 | extern void dmi_iounmap(void *addr, unsigned long size); | ||
8 | |||
9 | #define DMI_MAX_DATA 2048 | ||
10 | |||
11 | extern int dmi_alloc_index; | ||
12 | extern char dmi_alloc_data[DMI_MAX_DATA]; | ||
13 | |||
14 | /* This is so early that there is no good way to allocate dynamic memory. | ||
15 | Allocate data in an BSS array. */ | ||
16 | static inline void *dmi_alloc(unsigned len) | ||
17 | { | ||
18 | int idx = dmi_alloc_index; | ||
19 | if ((dmi_alloc_index += len) > DMI_MAX_DATA) | ||
20 | return NULL; | ||
21 | return dmi_alloc_data + idx; | ||
22 | } | ||
23 | |||
24 | #define dmi_ioremap early_ioremap | ||
25 | #define dmi_iounmap early_iounmap | ||
26 | |||
27 | #endif | ||
diff --git a/include/asm-x86_64/elf.h b/include/asm-x86_64/elf.h index 43862cd6a569..c98633af07d2 100644 --- a/include/asm-x86_64/elf.h +++ b/include/asm-x86_64/elf.h | |||
@@ -8,6 +8,7 @@ | |||
8 | #include <asm/ptrace.h> | 8 | #include <asm/ptrace.h> |
9 | #include <asm/user.h> | 9 | #include <asm/user.h> |
10 | #include <asm/processor.h> | 10 | #include <asm/processor.h> |
11 | #include <asm/compat.h> | ||
11 | 12 | ||
12 | /* x86-64 relocation types */ | 13 | /* x86-64 relocation types */ |
13 | #define R_X86_64_NONE 0 /* No reloc */ | 14 | #define R_X86_64_NONE 0 /* No reloc */ |
@@ -157,6 +158,9 @@ extern int dump_task_fpu (struct task_struct *, elf_fpregset_t *); | |||
157 | #define ELF_CORE_COPY_TASK_REGS(tsk, elf_regs) dump_task_regs(tsk, elf_regs) | 158 | #define ELF_CORE_COPY_TASK_REGS(tsk, elf_regs) dump_task_regs(tsk, elf_regs) |
158 | #define ELF_CORE_COPY_FPREGS(tsk, elf_fpregs) dump_task_fpu(tsk, elf_fpregs) | 159 | #define ELF_CORE_COPY_FPREGS(tsk, elf_fpregs) dump_task_fpu(tsk, elf_fpregs) |
159 | 160 | ||
161 | /* 1GB for 64bit, 8MB for 32bit */ | ||
162 | #define STACK_RND_MASK (is_compat_task() ? 0x7ff : 0x3fffff) | ||
163 | |||
160 | #endif | 164 | #endif |
161 | 165 | ||
162 | #endif | 166 | #endif |
diff --git a/include/asm-x86_64/floppy.h b/include/asm-x86_64/floppy.h index af7ded63b517..52825ce689f2 100644 --- a/include/asm-x86_64/floppy.h +++ b/include/asm-x86_64/floppy.h | |||
@@ -155,7 +155,7 @@ static int fd_request_irq(void) | |||
155 | 155 | ||
156 | static unsigned long dma_mem_alloc(unsigned long size) | 156 | static unsigned long dma_mem_alloc(unsigned long size) |
157 | { | 157 | { |
158 | return __get_dma_pages(GFP_KERNEL,get_order(size)); | 158 | return __get_dma_pages(GFP_KERNEL|__GFP_NORETRY,get_order(size)); |
159 | } | 159 | } |
160 | 160 | ||
161 | 161 | ||
diff --git a/include/asm-x86_64/io.h b/include/asm-x86_64/io.h index 9dac18db8291..cafdfb37f0d8 100644 --- a/include/asm-x86_64/io.h +++ b/include/asm-x86_64/io.h | |||
@@ -135,6 +135,9 @@ static inline void __iomem * ioremap (unsigned long offset, unsigned long size) | |||
135 | return __ioremap(offset, size, 0); | 135 | return __ioremap(offset, size, 0); |
136 | } | 136 | } |
137 | 137 | ||
138 | extern void *early_ioremap(unsigned long addr, unsigned long size); | ||
139 | extern void early_iounmap(void *addr, unsigned long size); | ||
140 | |||
138 | /* | 141 | /* |
139 | * This one maps high address device memory and turns off caching for that area. | 142 | * This one maps high address device memory and turns off caching for that area. |
140 | * it's useful if some control registers are in such an area and write combining | 143 | * it's useful if some control registers are in such an area and write combining |
@@ -143,11 +146,6 @@ static inline void __iomem * ioremap (unsigned long offset, unsigned long size) | |||
143 | extern void __iomem * ioremap_nocache (unsigned long offset, unsigned long size); | 146 | extern void __iomem * ioremap_nocache (unsigned long offset, unsigned long size); |
144 | extern void iounmap(volatile void __iomem *addr); | 147 | extern void iounmap(volatile void __iomem *addr); |
145 | 148 | ||
146 | /* Use normal IO mappings for DMI */ | ||
147 | #define dmi_ioremap ioremap | ||
148 | #define dmi_iounmap(x,l) iounmap(x) | ||
149 | #define dmi_alloc(l) kmalloc(l, GFP_ATOMIC) | ||
150 | |||
151 | /* | 149 | /* |
152 | * ISA I/O bus memory addresses are 1:1 with the physical address. | 150 | * ISA I/O bus memory addresses are 1:1 with the physical address. |
153 | */ | 151 | */ |
@@ -202,23 +200,6 @@ static inline __u64 __readq(const volatile void __iomem *addr) | |||
202 | 200 | ||
203 | #define mmiowb() | 201 | #define mmiowb() |
204 | 202 | ||
205 | #ifdef CONFIG_UNORDERED_IO | ||
206 | static inline void __writel(__u32 val, volatile void __iomem *addr) | ||
207 | { | ||
208 | volatile __u32 __iomem *target = addr; | ||
209 | asm volatile("movnti %1,%0" | ||
210 | : "=m" (*target) | ||
211 | : "r" (val) : "memory"); | ||
212 | } | ||
213 | |||
214 | static inline void __writeq(__u64 val, volatile void __iomem *addr) | ||
215 | { | ||
216 | volatile __u64 __iomem *target = addr; | ||
217 | asm volatile("movnti %1,%0" | ||
218 | : "=m" (*target) | ||
219 | : "r" (val) : "memory"); | ||
220 | } | ||
221 | #else | ||
222 | static inline void __writel(__u32 b, volatile void __iomem *addr) | 203 | static inline void __writel(__u32 b, volatile void __iomem *addr) |
223 | { | 204 | { |
224 | *(__force volatile __u32 *)addr = b; | 205 | *(__force volatile __u32 *)addr = b; |
@@ -227,7 +208,6 @@ static inline void __writeq(__u64 b, volatile void __iomem *addr) | |||
227 | { | 208 | { |
228 | *(__force volatile __u64 *)addr = b; | 209 | *(__force volatile __u64 *)addr = b; |
229 | } | 210 | } |
230 | #endif | ||
231 | static inline void __writeb(__u8 b, volatile void __iomem *addr) | 211 | static inline void __writeb(__u8 b, volatile void __iomem *addr) |
232 | { | 212 | { |
233 | *(__force volatile __u8 *)addr = b; | 213 | *(__force volatile __u8 *)addr = b; |
@@ -269,23 +249,11 @@ void memset_io(volatile void __iomem *a, int b, size_t c); | |||
269 | */ | 249 | */ |
270 | #define __ISA_IO_base ((char __iomem *)(PAGE_OFFSET)) | 250 | #define __ISA_IO_base ((char __iomem *)(PAGE_OFFSET)) |
271 | 251 | ||
272 | #define isa_readb(a) readb(__ISA_IO_base + (a)) | ||
273 | #define isa_readw(a) readw(__ISA_IO_base + (a)) | ||
274 | #define isa_readl(a) readl(__ISA_IO_base + (a)) | ||
275 | #define isa_writeb(b,a) writeb(b,__ISA_IO_base + (a)) | ||
276 | #define isa_writew(w,a) writew(w,__ISA_IO_base + (a)) | ||
277 | #define isa_writel(l,a) writel(l,__ISA_IO_base + (a)) | ||
278 | #define isa_memset_io(a,b,c) memset_io(__ISA_IO_base + (a),(b),(c)) | ||
279 | #define isa_memcpy_fromio(a,b,c) memcpy_fromio((a),__ISA_IO_base + (b),(c)) | ||
280 | #define isa_memcpy_toio(a,b,c) memcpy_toio(__ISA_IO_base + (a),(b),(c)) | ||
281 | |||
282 | |||
283 | /* | 252 | /* |
284 | * Again, x86-64 does not require mem IO specific function. | 253 | * Again, x86-64 does not require mem IO specific function. |
285 | */ | 254 | */ |
286 | 255 | ||
287 | #define eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),(void *)(b),(c),(d)) | 256 | #define eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),(void *)(b),(c),(d)) |
288 | #define isa_eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),(void *)(__ISA_IO_base + (b)),(c),(d)) | ||
289 | 257 | ||
290 | /** | 258 | /** |
291 | * check_signature - find BIOS signatures | 259 | * check_signature - find BIOS signatures |
diff --git a/include/asm-x86_64/local.h b/include/asm-x86_64/local.h index 3e72c41727c5..bf148037d4e5 100644 --- a/include/asm-x86_64/local.h +++ b/include/asm-x86_64/local.h | |||
@@ -5,7 +5,7 @@ | |||
5 | 5 | ||
6 | typedef struct | 6 | typedef struct |
7 | { | 7 | { |
8 | volatile unsigned int counter; | 8 | volatile unsigned long counter; |
9 | } local_t; | 9 | } local_t; |
10 | 10 | ||
11 | #define LOCAL_INIT(i) { (i) } | 11 | #define LOCAL_INIT(i) { (i) } |
@@ -16,7 +16,7 @@ typedef struct | |||
16 | static __inline__ void local_inc(local_t *v) | 16 | static __inline__ void local_inc(local_t *v) |
17 | { | 17 | { |
18 | __asm__ __volatile__( | 18 | __asm__ __volatile__( |
19 | "incl %0" | 19 | "incq %0" |
20 | :"=m" (v->counter) | 20 | :"=m" (v->counter) |
21 | :"m" (v->counter)); | 21 | :"m" (v->counter)); |
22 | } | 22 | } |
@@ -24,7 +24,7 @@ static __inline__ void local_inc(local_t *v) | |||
24 | static __inline__ void local_dec(local_t *v) | 24 | static __inline__ void local_dec(local_t *v) |
25 | { | 25 | { |
26 | __asm__ __volatile__( | 26 | __asm__ __volatile__( |
27 | "decl %0" | 27 | "decq %0" |
28 | :"=m" (v->counter) | 28 | :"=m" (v->counter) |
29 | :"m" (v->counter)); | 29 | :"m" (v->counter)); |
30 | } | 30 | } |
@@ -32,7 +32,7 @@ static __inline__ void local_dec(local_t *v) | |||
32 | static __inline__ void local_add(unsigned int i, local_t *v) | 32 | static __inline__ void local_add(unsigned int i, local_t *v) |
33 | { | 33 | { |
34 | __asm__ __volatile__( | 34 | __asm__ __volatile__( |
35 | "addl %1,%0" | 35 | "addq %1,%0" |
36 | :"=m" (v->counter) | 36 | :"=m" (v->counter) |
37 | :"ir" (i), "m" (v->counter)); | 37 | :"ir" (i), "m" (v->counter)); |
38 | } | 38 | } |
@@ -40,7 +40,7 @@ static __inline__ void local_add(unsigned int i, local_t *v) | |||
40 | static __inline__ void local_sub(unsigned int i, local_t *v) | 40 | static __inline__ void local_sub(unsigned int i, local_t *v) |
41 | { | 41 | { |
42 | __asm__ __volatile__( | 42 | __asm__ __volatile__( |
43 | "subl %1,%0" | 43 | "subq %1,%0" |
44 | :"=m" (v->counter) | 44 | :"=m" (v->counter) |
45 | :"ir" (i), "m" (v->counter)); | 45 | :"ir" (i), "m" (v->counter)); |
46 | } | 46 | } |
diff --git a/include/asm-x86_64/mmu_context.h b/include/asm-x86_64/mmu_context.h index 16e4be4de0c5..19f0c83d0792 100644 --- a/include/asm-x86_64/mmu_context.h +++ b/include/asm-x86_64/mmu_context.h | |||
@@ -34,12 +34,12 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, | |||
34 | unsigned cpu = smp_processor_id(); | 34 | unsigned cpu = smp_processor_id(); |
35 | if (likely(prev != next)) { | 35 | if (likely(prev != next)) { |
36 | /* stop flush ipis for the previous mm */ | 36 | /* stop flush ipis for the previous mm */ |
37 | clear_bit(cpu, &prev->cpu_vm_mask); | 37 | cpu_clear(cpu, prev->cpu_vm_mask); |
38 | #ifdef CONFIG_SMP | 38 | #ifdef CONFIG_SMP |
39 | write_pda(mmu_state, TLBSTATE_OK); | 39 | write_pda(mmu_state, TLBSTATE_OK); |
40 | write_pda(active_mm, next); | 40 | write_pda(active_mm, next); |
41 | #endif | 41 | #endif |
42 | set_bit(cpu, &next->cpu_vm_mask); | 42 | cpu_set(cpu, next->cpu_vm_mask); |
43 | load_cr3(next->pgd); | 43 | load_cr3(next->pgd); |
44 | 44 | ||
45 | if (unlikely(next->context.ldt != prev->context.ldt)) | 45 | if (unlikely(next->context.ldt != prev->context.ldt)) |
@@ -50,7 +50,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, | |||
50 | write_pda(mmu_state, TLBSTATE_OK); | 50 | write_pda(mmu_state, TLBSTATE_OK); |
51 | if (read_pda(active_mm) != next) | 51 | if (read_pda(active_mm) != next) |
52 | out_of_line_bug(); | 52 | out_of_line_bug(); |
53 | if(!test_and_set_bit(cpu, &next->cpu_vm_mask)) { | 53 | if (!cpu_test_and_set(cpu, next->cpu_vm_mask)) { |
54 | /* We were in lazy tlb mode and leave_mm disabled | 54 | /* We were in lazy tlb mode and leave_mm disabled |
55 | * tlb flush IPI delivery. We must reload CR3 | 55 | * tlb flush IPI delivery. We must reload CR3 |
56 | * to make sure to use no freed page tables. | 56 | * to make sure to use no freed page tables. |
diff --git a/include/asm-x86_64/mmzone.h b/include/asm-x86_64/mmzone.h index 972c9359f7d7..937f99b26883 100644 --- a/include/asm-x86_64/mmzone.h +++ b/include/asm-x86_64/mmzone.h | |||
@@ -15,8 +15,13 @@ | |||
15 | #define NODEMAPSIZE 0xfff | 15 | #define NODEMAPSIZE 0xfff |
16 | 16 | ||
17 | /* Simple perfect hash to map physical addresses to node numbers */ | 17 | /* Simple perfect hash to map physical addresses to node numbers */ |
18 | extern int memnode_shift; | 18 | struct memnode { |
19 | extern u8 memnodemap[NODEMAPSIZE]; | 19 | int shift; |
20 | u8 map[NODEMAPSIZE]; | ||
21 | } ____cacheline_aligned; | ||
22 | extern struct memnode memnode; | ||
23 | #define memnode_shift memnode.shift | ||
24 | #define memnodemap memnode.map | ||
20 | 25 | ||
21 | extern struct pglist_data *node_data[]; | 26 | extern struct pglist_data *node_data[]; |
22 | 27 | ||
diff --git a/include/asm-x86_64/numa.h b/include/asm-x86_64/numa.h index dffe276ca2df..f6cbb4cbb5a3 100644 --- a/include/asm-x86_64/numa.h +++ b/include/asm-x86_64/numa.h | |||
@@ -4,11 +4,11 @@ | |||
4 | #include <linux/nodemask.h> | 4 | #include <linux/nodemask.h> |
5 | #include <asm/numnodes.h> | 5 | #include <asm/numnodes.h> |
6 | 6 | ||
7 | struct node { | 7 | struct bootnode { |
8 | u64 start,end; | 8 | u64 start,end; |
9 | }; | 9 | }; |
10 | 10 | ||
11 | extern int compute_hash_shift(struct node *nodes, int numnodes); | 11 | extern int compute_hash_shift(struct bootnode *nodes, int numnodes); |
12 | extern int pxm_to_node(int nid); | 12 | extern int pxm_to_node(int nid); |
13 | 13 | ||
14 | #define ZONE_ALIGN (1UL << (MAX_ORDER+PAGE_SHIFT)) | 14 | #define ZONE_ALIGN (1UL << (MAX_ORDER+PAGE_SHIFT)) |
diff --git a/include/asm-x86_64/pda.h b/include/asm-x86_64/pda.h index c7ab38a601af..b47c3df9ed1d 100644 --- a/include/asm-x86_64/pda.h +++ b/include/asm-x86_64/pda.h | |||
@@ -22,8 +22,8 @@ struct x8664_pda { | |||
22 | int nodenumber; /* number of current node */ | 22 | int nodenumber; /* number of current node */ |
23 | unsigned int __softirq_pending; | 23 | unsigned int __softirq_pending; |
24 | unsigned int __nmi_count; /* number of NMI on this CPUs */ | 24 | unsigned int __nmi_count; /* number of NMI on this CPUs */ |
25 | struct mm_struct *active_mm; | ||
26 | int mmu_state; | 25 | int mmu_state; |
26 | struct mm_struct *active_mm; | ||
27 | unsigned apic_timer_irqs; | 27 | unsigned apic_timer_irqs; |
28 | } ____cacheline_aligned_in_smp; | 28 | } ____cacheline_aligned_in_smp; |
29 | 29 | ||
diff --git a/include/asm-x86_64/percpu.h b/include/asm-x86_64/percpu.h index 29a6b0408f75..4405b4adeaba 100644 --- a/include/asm-x86_64/percpu.h +++ b/include/asm-x86_64/percpu.h | |||
@@ -26,10 +26,9 @@ | |||
26 | #define percpu_modcopy(pcpudst, src, size) \ | 26 | #define percpu_modcopy(pcpudst, src, size) \ |
27 | do { \ | 27 | do { \ |
28 | unsigned int __i; \ | 28 | unsigned int __i; \ |
29 | for (__i = 0; __i < NR_CPUS; __i++) \ | 29 | for_each_cpu(__i) \ |
30 | if (cpu_possible(__i)) \ | 30 | memcpy((pcpudst)+__per_cpu_offset(__i), \ |
31 | memcpy((pcpudst)+__per_cpu_offset(__i), \ | 31 | (src), (size)); \ |
32 | (src), (size)); \ | ||
33 | } while (0) | 32 | } while (0) |
34 | 33 | ||
35 | extern void setup_per_cpu_areas(void); | 34 | extern void setup_per_cpu_areas(void); |
diff --git a/include/asm-x86_64/pgalloc.h b/include/asm-x86_64/pgalloc.h index 08cad2482bcb..43d4c333a8b1 100644 --- a/include/asm-x86_64/pgalloc.h +++ b/include/asm-x86_64/pgalloc.h | |||
@@ -45,12 +45,39 @@ static inline void pud_free (pud_t *pud) | |||
45 | free_page((unsigned long)pud); | 45 | free_page((unsigned long)pud); |
46 | } | 46 | } |
47 | 47 | ||
48 | static inline void pgd_list_add(pgd_t *pgd) | ||
49 | { | ||
50 | struct page *page = virt_to_page(pgd); | ||
51 | |||
52 | spin_lock(&pgd_lock); | ||
53 | page->index = (pgoff_t)pgd_list; | ||
54 | if (pgd_list) | ||
55 | pgd_list->private = (unsigned long)&page->index; | ||
56 | pgd_list = page; | ||
57 | page->private = (unsigned long)&pgd_list; | ||
58 | spin_unlock(&pgd_lock); | ||
59 | } | ||
60 | |||
61 | static inline void pgd_list_del(pgd_t *pgd) | ||
62 | { | ||
63 | struct page *next, **pprev, *page = virt_to_page(pgd); | ||
64 | |||
65 | spin_lock(&pgd_lock); | ||
66 | next = (struct page *)page->index; | ||
67 | pprev = (struct page **)page->private; | ||
68 | *pprev = next; | ||
69 | if (next) | ||
70 | next->private = (unsigned long)pprev; | ||
71 | spin_unlock(&pgd_lock); | ||
72 | } | ||
73 | |||
48 | static inline pgd_t *pgd_alloc(struct mm_struct *mm) | 74 | static inline pgd_t *pgd_alloc(struct mm_struct *mm) |
49 | { | 75 | { |
50 | unsigned boundary; | 76 | unsigned boundary; |
51 | pgd_t *pgd = (pgd_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT); | 77 | pgd_t *pgd = (pgd_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT); |
52 | if (!pgd) | 78 | if (!pgd) |
53 | return NULL; | 79 | return NULL; |
80 | pgd_list_add(pgd); | ||
54 | /* | 81 | /* |
55 | * Copy kernel pointers in from init. | 82 | * Copy kernel pointers in from init. |
56 | * Could keep a freelist or slab cache of those because the kernel | 83 | * Could keep a freelist or slab cache of those because the kernel |
@@ -67,6 +94,7 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm) | |||
67 | static inline void pgd_free(pgd_t *pgd) | 94 | static inline void pgd_free(pgd_t *pgd) |
68 | { | 95 | { |
69 | BUG_ON((unsigned long)pgd & (PAGE_SIZE-1)); | 96 | BUG_ON((unsigned long)pgd & (PAGE_SIZE-1)); |
97 | pgd_list_del(pgd); | ||
70 | free_page((unsigned long)pgd); | 98 | free_page((unsigned long)pgd); |
71 | } | 99 | } |
72 | 100 | ||
diff --git a/include/asm-x86_64/pgtable.h b/include/asm-x86_64/pgtable.h index a617d364d08d..31e83c3bd022 100644 --- a/include/asm-x86_64/pgtable.h +++ b/include/asm-x86_64/pgtable.h | |||
@@ -293,19 +293,19 @@ static inline int ptep_test_and_clear_dirty(struct vm_area_struct *vma, unsigned | |||
293 | { | 293 | { |
294 | if (!pte_dirty(*ptep)) | 294 | if (!pte_dirty(*ptep)) |
295 | return 0; | 295 | return 0; |
296 | return test_and_clear_bit(_PAGE_BIT_DIRTY, ptep); | 296 | return test_and_clear_bit(_PAGE_BIT_DIRTY, &ptep->pte); |
297 | } | 297 | } |
298 | 298 | ||
299 | static inline int ptep_test_and_clear_young(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep) | 299 | static inline int ptep_test_and_clear_young(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep) |
300 | { | 300 | { |
301 | if (!pte_young(*ptep)) | 301 | if (!pte_young(*ptep)) |
302 | return 0; | 302 | return 0; |
303 | return test_and_clear_bit(_PAGE_BIT_ACCESSED, ptep); | 303 | return test_and_clear_bit(_PAGE_BIT_ACCESSED, &ptep->pte); |
304 | } | 304 | } |
305 | 305 | ||
306 | static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, pte_t *ptep) | 306 | static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, pte_t *ptep) |
307 | { | 307 | { |
308 | clear_bit(_PAGE_BIT_RW, ptep); | 308 | clear_bit(_PAGE_BIT_RW, &ptep->pte); |
309 | } | 309 | } |
310 | 310 | ||
311 | /* | 311 | /* |
@@ -420,6 +420,10 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | |||
420 | #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) | 420 | #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) |
421 | #define __swp_entry_to_pte(x) ((pte_t) { (x).val }) | 421 | #define __swp_entry_to_pte(x) ((pte_t) { (x).val }) |
422 | 422 | ||
423 | extern spinlock_t pgd_lock; | ||
424 | extern struct page *pgd_list; | ||
425 | void vmalloc_sync_all(void); | ||
426 | |||
423 | #endif /* !__ASSEMBLY__ */ | 427 | #endif /* !__ASSEMBLY__ */ |
424 | 428 | ||
425 | extern int kern_addr_valid(unsigned long addr); | 429 | extern int kern_addr_valid(unsigned long addr); |
diff --git a/include/asm-x86_64/poll.h b/include/asm-x86_64/poll.h index c43cbba31913..c0475a9d8bb8 100644 --- a/include/asm-x86_64/poll.h +++ b/include/asm-x86_64/poll.h | |||
@@ -16,6 +16,7 @@ | |||
16 | #define POLLWRBAND 0x0200 | 16 | #define POLLWRBAND 0x0200 |
17 | #define POLLMSG 0x0400 | 17 | #define POLLMSG 0x0400 |
18 | #define POLLREMOVE 0x1000 | 18 | #define POLLREMOVE 0x1000 |
19 | #define POLLRDHUP 0x2000 | ||
19 | 20 | ||
20 | struct pollfd { | 21 | struct pollfd { |
21 | int fd; | 22 | int fd; |
diff --git a/include/asm-x86_64/proto.h b/include/asm-x86_64/proto.h index 3ba8fd45fcb3..8abf2a43c944 100644 --- a/include/asm-x86_64/proto.h +++ b/include/asm-x86_64/proto.h | |||
@@ -53,8 +53,6 @@ extern int sysctl_vsyscall; | |||
53 | extern int nohpet; | 53 | extern int nohpet; |
54 | extern unsigned long vxtime_hz; | 54 | extern unsigned long vxtime_hz; |
55 | 55 | ||
56 | extern void do_softirq_thunk(void); | ||
57 | |||
58 | extern int numa_setup(char *opt); | 56 | extern int numa_setup(char *opt); |
59 | 57 | ||
60 | extern int setup_early_printk(char *); | 58 | extern int setup_early_printk(char *); |
@@ -129,7 +127,6 @@ extern int fix_aperture; | |||
129 | #define iommu_aperture 0 | 127 | #define iommu_aperture 0 |
130 | #define iommu_aperture_allowed 0 | 128 | #define iommu_aperture_allowed 0 |
131 | #endif | 129 | #endif |
132 | extern int force_iommu; | ||
133 | 130 | ||
134 | extern int reboot_force; | 131 | extern int reboot_force; |
135 | extern int notsc_setup(char *); | 132 | extern int notsc_setup(char *); |
diff --git a/include/asm-x86_64/string.h b/include/asm-x86_64/string.h index a3493ee282bb..ee6bf275349e 100644 --- a/include/asm-x86_64/string.h +++ b/include/asm-x86_64/string.h | |||
@@ -40,26 +40,15 @@ extern void *__memcpy(void *to, const void *from, size_t len); | |||
40 | 40 | ||
41 | 41 | ||
42 | #define __HAVE_ARCH_MEMSET | 42 | #define __HAVE_ARCH_MEMSET |
43 | #define memset __builtin_memset | 43 | void *memset(void *s, int c, size_t n); |
44 | 44 | ||
45 | #define __HAVE_ARCH_MEMMOVE | 45 | #define __HAVE_ARCH_MEMMOVE |
46 | void * memmove(void * dest,const void *src,size_t count); | 46 | void * memmove(void * dest,const void *src,size_t count); |
47 | 47 | ||
48 | /* Use C out of line version for memcmp */ | ||
49 | #define memcmp __builtin_memcmp | ||
50 | int memcmp(const void * cs,const void * ct,size_t count); | 48 | int memcmp(const void * cs,const void * ct,size_t count); |
51 | |||
52 | /* out of line string functions use always C versions */ | ||
53 | #define strlen __builtin_strlen | ||
54 | size_t strlen(const char * s); | 49 | size_t strlen(const char * s); |
55 | 50 | char *strcpy(char * dest,const char *src); | |
56 | #define strcpy __builtin_strcpy | 51 | char *strcat(char * dest, const char * src); |
57 | char * strcpy(char * dest,const char *src); | ||
58 | |||
59 | #define strcat __builtin_strcat | ||
60 | char * strcat(char * dest, const char * src); | ||
61 | |||
62 | #define strcmp __builtin_strcmp | ||
63 | int strcmp(const char * cs,const char * ct); | 52 | int strcmp(const char * cs,const char * ct); |
64 | 53 | ||
65 | #endif /* __KERNEL__ */ | 54 | #endif /* __KERNEL__ */ |
diff --git a/include/asm-x86_64/suspend.h b/include/asm-x86_64/suspend.h index bb9f40597d09..bc7f81715e5e 100644 --- a/include/asm-x86_64/suspend.h +++ b/include/asm-x86_64/suspend.h | |||
@@ -39,9 +39,7 @@ extern unsigned long saved_context_r12, saved_context_r13, saved_context_r14, sa | |||
39 | extern unsigned long saved_context_eflags; | 39 | extern unsigned long saved_context_eflags; |
40 | 40 | ||
41 | #define loaddebug(thread,register) \ | 41 | #define loaddebug(thread,register) \ |
42 | __asm__("movq %0,%%db" #register \ | 42 | set_debugreg((thread)->debugreg##register, register) |
43 | : /* no output */ \ | ||
44 | :"r" ((thread)->debugreg##register)) | ||
45 | 43 | ||
46 | extern void fix_processor_context(void); | 44 | extern void fix_processor_context(void); |
47 | 45 | ||
diff --git a/include/asm-x86_64/system.h b/include/asm-x86_64/system.h index b7f66034ae7a..397598980228 100644 --- a/include/asm-x86_64/system.h +++ b/include/asm-x86_64/system.h | |||
@@ -70,12 +70,6 @@ extern void load_gs_index(unsigned); | |||
70 | ".previous" \ | 70 | ".previous" \ |
71 | : :"r" (value), "r" (0)) | 71 | : :"r" (value), "r" (0)) |
72 | 72 | ||
73 | #define set_debug(value,register) \ | ||
74 | __asm__("movq %0,%%db" #register \ | ||
75 | : /* no output */ \ | ||
76 | :"r" ((unsigned long) value)) | ||
77 | |||
78 | |||
79 | #ifdef __KERNEL__ | 73 | #ifdef __KERNEL__ |
80 | struct alt_instr { | 74 | struct alt_instr { |
81 | __u8 *instr; /* original instruction */ | 75 | __u8 *instr; /* original instruction */ |
diff --git a/include/asm-xtensa/poll.h b/include/asm-xtensa/poll.h index dffe447534e0..6fd94773e866 100644 --- a/include/asm-xtensa/poll.h +++ b/include/asm-xtensa/poll.h | |||
@@ -27,6 +27,7 @@ | |||
27 | 27 | ||
28 | #define POLLMSG 0x0400 | 28 | #define POLLMSG 0x0400 |
29 | #define POLLREMOVE 0x0800 | 29 | #define POLLREMOVE 0x0800 |
30 | #define POLLRDHUP 0x2000 | ||
30 | 31 | ||
31 | struct pollfd { | 32 | struct pollfd { |
32 | int fd; | 33 | int fd; |
diff --git a/include/linux/audit.h b/include/linux/audit.h index da3c01955f3d..1c47c59058c1 100644 --- a/include/linux/audit.h +++ b/include/linux/audit.h | |||
@@ -33,27 +33,42 @@ | |||
33 | * 1200 - 1299 messages internal to the audit daemon | 33 | * 1200 - 1299 messages internal to the audit daemon |
34 | * 1300 - 1399 audit event messages | 34 | * 1300 - 1399 audit event messages |
35 | * 1400 - 1499 SE Linux use | 35 | * 1400 - 1499 SE Linux use |
36 | * 1500 - 1999 future use | 36 | * 1500 - 1599 kernel LSPP events |
37 | * 2000 is for otherwise unclassified kernel audit messages | 37 | * 1600 - 1699 kernel crypto events |
38 | * 1700 - 1799 kernel anomaly records | ||
39 | * 1800 - 1999 future kernel use (maybe integrity labels and related events) | ||
40 | * 2000 is for otherwise unclassified kernel audit messages (legacy) | ||
41 | * 2001 - 2099 unused (kernel) | ||
42 | * 2100 - 2199 user space anomaly records | ||
43 | * 2200 - 2299 user space actions taken in response to anomalies | ||
44 | * 2300 - 2399 user space generated LSPP events | ||
45 | * 2400 - 2499 user space crypto events | ||
46 | * 2500 - 2999 future user space (maybe integrity labels and related events) | ||
38 | * | 47 | * |
39 | * Messages from 1000-1199 are bi-directional. 1200-1299 are exclusively user | 48 | * Messages from 1000-1199 are bi-directional. 1200-1299 & 2100 - 2999 are |
40 | * space. Anything over that is kernel --> user space communication. | 49 | * exclusively user space. 1300-2099 is kernel --> user space |
50 | * communication. | ||
41 | */ | 51 | */ |
42 | #define AUDIT_GET 1000 /* Get status */ | 52 | #define AUDIT_GET 1000 /* Get status */ |
43 | #define AUDIT_SET 1001 /* Set status (enable/disable/auditd) */ | 53 | #define AUDIT_SET 1001 /* Set status (enable/disable/auditd) */ |
44 | #define AUDIT_LIST 1002 /* List syscall filtering rules */ | 54 | #define AUDIT_LIST 1002 /* List syscall rules -- deprecated */ |
45 | #define AUDIT_ADD 1003 /* Add syscall filtering rule */ | 55 | #define AUDIT_ADD 1003 /* Add syscall rule -- deprecated */ |
46 | #define AUDIT_DEL 1004 /* Delete syscall filtering rule */ | 56 | #define AUDIT_DEL 1004 /* Delete syscall rule -- deprecated */ |
47 | #define AUDIT_USER 1005 /* Message from userspace -- deprecated */ | 57 | #define AUDIT_USER 1005 /* Message from userspace -- deprecated */ |
48 | #define AUDIT_LOGIN 1006 /* Define the login id and information */ | 58 | #define AUDIT_LOGIN 1006 /* Define the login id and information */ |
49 | #define AUDIT_WATCH_INS 1007 /* Insert file/dir watch entry */ | 59 | #define AUDIT_WATCH_INS 1007 /* Insert file/dir watch entry */ |
50 | #define AUDIT_WATCH_REM 1008 /* Remove file/dir watch entry */ | 60 | #define AUDIT_WATCH_REM 1008 /* Remove file/dir watch entry */ |
51 | #define AUDIT_WATCH_LIST 1009 /* List all file/dir watches */ | 61 | #define AUDIT_WATCH_LIST 1009 /* List all file/dir watches */ |
52 | #define AUDIT_SIGNAL_INFO 1010 /* Get info about sender of signal to auditd */ | 62 | #define AUDIT_SIGNAL_INFO 1010 /* Get info about sender of signal to auditd */ |
63 | #define AUDIT_ADD_RULE 1011 /* Add syscall filtering rule */ | ||
64 | #define AUDIT_DEL_RULE 1012 /* Delete syscall filtering rule */ | ||
65 | #define AUDIT_LIST_RULES 1013 /* List syscall filtering rules */ | ||
53 | 66 | ||
54 | #define AUDIT_FIRST_USER_MSG 1100 /* Userspace messages mostly uninteresting to kernel */ | 67 | #define AUDIT_FIRST_USER_MSG 1100 /* Userspace messages mostly uninteresting to kernel */ |
55 | #define AUDIT_USER_AVC 1107 /* We filter this differently */ | 68 | #define AUDIT_USER_AVC 1107 /* We filter this differently */ |
56 | #define AUDIT_LAST_USER_MSG 1199 | 69 | #define AUDIT_LAST_USER_MSG 1199 |
70 | #define AUDIT_FIRST_USER_MSG2 2100 /* More user space messages */ | ||
71 | #define AUDIT_LAST_USER_MSG2 2999 | ||
57 | 72 | ||
58 | #define AUDIT_DAEMON_START 1200 /* Daemon startup record */ | 73 | #define AUDIT_DAEMON_START 1200 /* Daemon startup record */ |
59 | #define AUDIT_DAEMON_END 1201 /* Daemon normal stop record */ | 74 | #define AUDIT_DAEMON_END 1201 /* Daemon normal stop record */ |
@@ -72,6 +87,13 @@ | |||
72 | #define AUDIT_AVC 1400 /* SE Linux avc denial or grant */ | 87 | #define AUDIT_AVC 1400 /* SE Linux avc denial or grant */ |
73 | #define AUDIT_SELINUX_ERR 1401 /* Internal SE Linux Errors */ | 88 | #define AUDIT_SELINUX_ERR 1401 /* Internal SE Linux Errors */ |
74 | #define AUDIT_AVC_PATH 1402 /* dentry, vfsmount pair from avc */ | 89 | #define AUDIT_AVC_PATH 1402 /* dentry, vfsmount pair from avc */ |
90 | #define AUDIT_MAC_POLICY_LOAD 1403 /* Policy file load */ | ||
91 | #define AUDIT_MAC_STATUS 1404 /* Changed enforcing,permissive,off */ | ||
92 | #define AUDIT_MAC_CONFIG_CHANGE 1405 /* Changes to booleans */ | ||
93 | |||
94 | #define AUDIT_FIRST_KERN_ANOM_MSG 1700 | ||
95 | #define AUDIT_LAST_KERN_ANOM_MSG 1799 | ||
96 | #define AUDIT_ANOM_PROMISCUOUS 1700 /* Device changed promiscuous mode */ | ||
75 | 97 | ||
76 | #define AUDIT_KERNEL 2000 /* Asynchronous audit record. NOT A REQUEST. */ | 98 | #define AUDIT_KERNEL 2000 /* Asynchronous audit record. NOT A REQUEST. */ |
77 | 99 | ||
@@ -81,8 +103,9 @@ | |||
81 | #define AUDIT_FILTER_ENTRY 0x02 /* Apply rule at syscall entry */ | 103 | #define AUDIT_FILTER_ENTRY 0x02 /* Apply rule at syscall entry */ |
82 | #define AUDIT_FILTER_WATCH 0x03 /* Apply rule to file system watches */ | 104 | #define AUDIT_FILTER_WATCH 0x03 /* Apply rule to file system watches */ |
83 | #define AUDIT_FILTER_EXIT 0x04 /* Apply rule at syscall exit */ | 105 | #define AUDIT_FILTER_EXIT 0x04 /* Apply rule at syscall exit */ |
106 | #define AUDIT_FILTER_TYPE 0x05 /* Apply rule at audit_log_start */ | ||
84 | 107 | ||
85 | #define AUDIT_NR_FILTERS 5 | 108 | #define AUDIT_NR_FILTERS 6 |
86 | 109 | ||
87 | #define AUDIT_FILTER_PREPEND 0x10 /* Prepend to front of list */ | 110 | #define AUDIT_FILTER_PREPEND 0x10 /* Prepend to front of list */ |
88 | 111 | ||
@@ -98,6 +121,13 @@ | |||
98 | #define AUDIT_WORD(nr) ((__u32)((nr)/32)) | 121 | #define AUDIT_WORD(nr) ((__u32)((nr)/32)) |
99 | #define AUDIT_BIT(nr) (1 << ((nr) - AUDIT_WORD(nr)*32)) | 122 | #define AUDIT_BIT(nr) (1 << ((nr) - AUDIT_WORD(nr)*32)) |
100 | 123 | ||
124 | /* This bitmask is used to validate user input. It represents all bits that | ||
125 | * are currently used in an audit field constant understood by the kernel. | ||
126 | * If you are adding a new #define AUDIT_<whatever>, please ensure that | ||
127 | * AUDIT_UNUSED_BITS is updated if need be. */ | ||
128 | #define AUDIT_UNUSED_BITS 0x0FFFFC00 | ||
129 | |||
130 | |||
101 | /* Rule fields */ | 131 | /* Rule fields */ |
102 | /* These are useful when checking the | 132 | /* These are useful when checking the |
103 | * task structure at task creation time | 133 | * task structure at task creation time |
@@ -114,6 +144,7 @@ | |||
114 | #define AUDIT_LOGINUID 9 | 144 | #define AUDIT_LOGINUID 9 |
115 | #define AUDIT_PERS 10 | 145 | #define AUDIT_PERS 10 |
116 | #define AUDIT_ARCH 11 | 146 | #define AUDIT_ARCH 11 |
147 | #define AUDIT_MSGTYPE 12 | ||
117 | 148 | ||
118 | /* These are ONLY useful when checking | 149 | /* These are ONLY useful when checking |
119 | * at syscall exit time (AUDIT_AT_EXIT). */ | 150 | * at syscall exit time (AUDIT_AT_EXIT). */ |
@@ -128,8 +159,28 @@ | |||
128 | #define AUDIT_ARG2 (AUDIT_ARG0+2) | 159 | #define AUDIT_ARG2 (AUDIT_ARG0+2) |
129 | #define AUDIT_ARG3 (AUDIT_ARG0+3) | 160 | #define AUDIT_ARG3 (AUDIT_ARG0+3) |
130 | 161 | ||
131 | #define AUDIT_NEGATE 0x80000000 | 162 | #define AUDIT_NEGATE 0x80000000 |
132 | 163 | ||
164 | /* These are the supported operators. | ||
165 | * 4 2 1 | ||
166 | * = > < | ||
167 | * ------- | ||
168 | * 0 0 0 0 nonsense | ||
169 | * 0 0 1 1 < | ||
170 | * 0 1 0 2 > | ||
171 | * 0 1 1 3 != | ||
172 | * 1 0 0 4 = | ||
173 | * 1 0 1 5 <= | ||
174 | * 1 1 0 6 >= | ||
175 | * 1 1 1 7 all operators | ||
176 | */ | ||
177 | #define AUDIT_LESS_THAN 0x10000000 | ||
178 | #define AUDIT_GREATER_THAN 0x20000000 | ||
179 | #define AUDIT_NOT_EQUAL 0x30000000 | ||
180 | #define AUDIT_EQUAL 0x40000000 | ||
181 | #define AUDIT_LESS_THAN_OR_EQUAL (AUDIT_LESS_THAN|AUDIT_EQUAL) | ||
182 | #define AUDIT_GREATER_THAN_OR_EQUAL (AUDIT_GREATER_THAN|AUDIT_EQUAL) | ||
183 | #define AUDIT_OPERATORS (AUDIT_EQUAL|AUDIT_NOT_EQUAL) | ||
133 | 184 | ||
134 | /* Status symbols */ | 185 | /* Status symbols */ |
135 | /* Mask values */ | 186 | /* Mask values */ |
@@ -186,6 +237,26 @@ struct audit_status { | |||
186 | __u32 backlog; /* messages waiting in queue */ | 237 | __u32 backlog; /* messages waiting in queue */ |
187 | }; | 238 | }; |
188 | 239 | ||
240 | /* audit_rule_data supports filter rules with both integer and string | ||
241 | * fields. It corresponds with AUDIT_ADD_RULE, AUDIT_DEL_RULE and | ||
242 | * AUDIT_LIST_RULES requests. | ||
243 | */ | ||
244 | struct audit_rule_data { | ||
245 | __u32 flags; /* AUDIT_PER_{TASK,CALL}, AUDIT_PREPEND */ | ||
246 | __u32 action; /* AUDIT_NEVER, AUDIT_POSSIBLE, AUDIT_ALWAYS */ | ||
247 | __u32 field_count; | ||
248 | __u32 mask[AUDIT_BITMASK_SIZE]; /* syscall(s) affected */ | ||
249 | __u32 fields[AUDIT_MAX_FIELDS]; | ||
250 | __u32 values[AUDIT_MAX_FIELDS]; | ||
251 | __u32 fieldflags[AUDIT_MAX_FIELDS]; | ||
252 | __u32 buflen; /* total length of string fields */ | ||
253 | char buf[0]; /* string fields buffer */ | ||
254 | }; | ||
255 | |||
256 | /* audit_rule is supported to maintain backward compatibility with | ||
257 | * userspace. It supports integer fields only and corresponds to | ||
258 | * AUDIT_ADD, AUDIT_DEL and AUDIT_LIST requests. | ||
259 | */ | ||
189 | struct audit_rule { /* for AUDIT_LIST, AUDIT_ADD, and AUDIT_DEL */ | 260 | struct audit_rule { /* for AUDIT_LIST, AUDIT_ADD, and AUDIT_DEL */ |
190 | __u32 flags; /* AUDIT_PER_{TASK,CALL}, AUDIT_PREPEND */ | 261 | __u32 flags; /* AUDIT_PER_{TASK,CALL}, AUDIT_PREPEND */ |
191 | __u32 action; /* AUDIT_NEVER, AUDIT_POSSIBLE, AUDIT_ALWAYS */ | 262 | __u32 action; /* AUDIT_NEVER, AUDIT_POSSIBLE, AUDIT_ALWAYS */ |
@@ -222,22 +293,33 @@ extern void audit_syscall_entry(struct task_struct *task, int arch, | |||
222 | extern void audit_syscall_exit(struct task_struct *task, int failed, long return_code); | 293 | extern void audit_syscall_exit(struct task_struct *task, int failed, long return_code); |
223 | extern void audit_getname(const char *name); | 294 | extern void audit_getname(const char *name); |
224 | extern void audit_putname(const char *name); | 295 | extern void audit_putname(const char *name); |
225 | extern void audit_inode(const char *name, const struct inode *inode, unsigned flags); | 296 | extern void __audit_inode(const char *name, const struct inode *inode, unsigned flags); |
297 | extern void __audit_inode_child(const char *dname, const struct inode *inode, | ||
298 | unsigned long pino); | ||
299 | static inline void audit_inode(const char *name, const struct inode *inode, | ||
300 | unsigned flags) { | ||
301 | if (unlikely(current->audit_context)) | ||
302 | __audit_inode(name, inode, flags); | ||
303 | } | ||
304 | static inline void audit_inode_child(const char *dname, | ||
305 | const struct inode *inode, | ||
306 | unsigned long pino) { | ||
307 | if (unlikely(current->audit_context)) | ||
308 | __audit_inode_child(dname, inode, pino); | ||
309 | } | ||
226 | 310 | ||
227 | /* Private API (for audit.c only) */ | 311 | /* Private API (for audit.c only) */ |
228 | extern int audit_receive_filter(int type, int pid, int uid, int seq, | ||
229 | void *data, uid_t loginuid); | ||
230 | extern unsigned int audit_serial(void); | 312 | extern unsigned int audit_serial(void); |
231 | extern void auditsc_get_stamp(struct audit_context *ctx, | 313 | extern void auditsc_get_stamp(struct audit_context *ctx, |
232 | struct timespec *t, unsigned int *serial); | 314 | struct timespec *t, unsigned int *serial); |
233 | extern int audit_set_loginuid(struct task_struct *task, uid_t loginuid); | 315 | extern int audit_set_loginuid(struct task_struct *task, uid_t loginuid); |
234 | extern uid_t audit_get_loginuid(struct audit_context *ctx); | 316 | extern uid_t audit_get_loginuid(struct audit_context *ctx); |
235 | extern int audit_ipc_perms(unsigned long qbytes, uid_t uid, gid_t gid, mode_t mode); | 317 | extern int audit_ipc_perms(unsigned long qbytes, uid_t uid, gid_t gid, mode_t mode, struct kern_ipc_perm *ipcp); |
236 | extern int audit_socketcall(int nargs, unsigned long *args); | 318 | extern int audit_socketcall(int nargs, unsigned long *args); |
237 | extern int audit_sockaddr(int len, void *addr); | 319 | extern int audit_sockaddr(int len, void *addr); |
238 | extern int audit_avc_path(struct dentry *dentry, struct vfsmount *mnt); | 320 | extern int audit_avc_path(struct dentry *dentry, struct vfsmount *mnt); |
239 | extern void audit_signal_info(int sig, struct task_struct *t); | 321 | extern void audit_signal_info(int sig, struct task_struct *t); |
240 | extern int audit_filter_user(struct netlink_skb_parms *cb, int type); | 322 | extern int audit_set_macxattr(const char *name); |
241 | #else | 323 | #else |
242 | #define audit_alloc(t) ({ 0; }) | 324 | #define audit_alloc(t) ({ 0; }) |
243 | #define audit_free(t) do { ; } while (0) | 325 | #define audit_free(t) do { ; } while (0) |
@@ -245,16 +327,18 @@ extern int audit_filter_user(struct netlink_skb_parms *cb, int type); | |||
245 | #define audit_syscall_exit(t,f,r) do { ; } while (0) | 327 | #define audit_syscall_exit(t,f,r) do { ; } while (0) |
246 | #define audit_getname(n) do { ; } while (0) | 328 | #define audit_getname(n) do { ; } while (0) |
247 | #define audit_putname(n) do { ; } while (0) | 329 | #define audit_putname(n) do { ; } while (0) |
330 | #define __audit_inode(n,i,f) do { ; } while (0) | ||
331 | #define __audit_inode_child(d,i,p) do { ; } while (0) | ||
248 | #define audit_inode(n,i,f) do { ; } while (0) | 332 | #define audit_inode(n,i,f) do { ; } while (0) |
249 | #define audit_receive_filter(t,p,u,s,d,l) ({ -EOPNOTSUPP; }) | 333 | #define audit_inode_child(d,i,p) do { ; } while (0) |
250 | #define auditsc_get_stamp(c,t,s) do { BUG(); } while (0) | 334 | #define auditsc_get_stamp(c,t,s) do { BUG(); } while (0) |
251 | #define audit_get_loginuid(c) ({ -1; }) | 335 | #define audit_get_loginuid(c) ({ -1; }) |
252 | #define audit_ipc_perms(q,u,g,m) ({ 0; }) | 336 | #define audit_ipc_perms(q,u,g,m,i) ({ 0; }) |
253 | #define audit_socketcall(n,a) ({ 0; }) | 337 | #define audit_socketcall(n,a) ({ 0; }) |
254 | #define audit_sockaddr(len, addr) ({ 0; }) | 338 | #define audit_sockaddr(len, addr) ({ 0; }) |
255 | #define audit_avc_path(dentry, mnt) ({ 0; }) | 339 | #define audit_avc_path(dentry, mnt) ({ 0; }) |
256 | #define audit_signal_info(s,t) do { ; } while (0) | 340 | #define audit_signal_info(s,t) do { ; } while (0) |
257 | #define audit_filter_user(cb,t) ({ 1; }) | 341 | #define audit_set_macxattr(n) do { ; } while (0) |
258 | #endif | 342 | #endif |
259 | 343 | ||
260 | #ifdef CONFIG_AUDIT | 344 | #ifdef CONFIG_AUDIT |
@@ -278,12 +362,11 @@ extern void audit_log_d_path(struct audit_buffer *ab, | |||
278 | const char *prefix, | 362 | const char *prefix, |
279 | struct dentry *dentry, | 363 | struct dentry *dentry, |
280 | struct vfsmount *vfsmnt); | 364 | struct vfsmount *vfsmnt); |
281 | /* Private API (for auditsc.c only) */ | 365 | /* Private API (for audit.c only) */ |
282 | extern void audit_send_reply(int pid, int seq, int type, | 366 | extern int audit_filter_user(struct netlink_skb_parms *cb, int type); |
283 | int done, int multi, | 367 | extern int audit_filter_type(int type); |
284 | void *payload, int size); | 368 | extern int audit_receive_filter(int type, int pid, int uid, int seq, |
285 | extern void audit_log_lost(const char *message); | 369 | void *data, size_t datasz, uid_t loginuid); |
286 | extern struct semaphore audit_netlink_sem; | ||
287 | #else | 370 | #else |
288 | #define audit_log(c,g,t,f,...) do { ; } while (0) | 371 | #define audit_log(c,g,t,f,...) do { ; } while (0) |
289 | #define audit_log_start(c,g,t) ({ NULL; }) | 372 | #define audit_log_start(c,g,t) ({ NULL; }) |
@@ -293,6 +376,7 @@ extern struct semaphore audit_netlink_sem; | |||
293 | #define audit_log_hex(a,b,l) do { ; } while (0) | 376 | #define audit_log_hex(a,b,l) do { ; } while (0) |
294 | #define audit_log_untrustedstring(a,s) do { ; } while (0) | 377 | #define audit_log_untrustedstring(a,s) do { ; } while (0) |
295 | #define audit_log_d_path(b,p,d,v) do { ; } while (0) | 378 | #define audit_log_d_path(b,p,d,v) do { ; } while (0) |
379 | #define audit_panic(m) do { ; } while (0) | ||
296 | #endif | 380 | #endif |
297 | #endif | 381 | #endif |
298 | #endif | 382 | #endif |
diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h index 7d8ff97b3e92..d9ed27969855 100644 --- a/include/linux/bitmap.h +++ b/include/linux/bitmap.h | |||
@@ -46,6 +46,9 @@ | |||
46 | * bitmap_parse(ubuf, ulen, dst, nbits) Parse bitmap dst from user buf | 46 | * bitmap_parse(ubuf, ulen, dst, nbits) Parse bitmap dst from user buf |
47 | * bitmap_scnlistprintf(buf, len, src, nbits) Print bitmap src as list to buf | 47 | * bitmap_scnlistprintf(buf, len, src, nbits) Print bitmap src as list to buf |
48 | * bitmap_parselist(buf, dst, nbits) Parse bitmap dst from list | 48 | * bitmap_parselist(buf, dst, nbits) Parse bitmap dst from list |
49 | * bitmap_find_free_region(bitmap, bits, order) Find and allocate bit region | ||
50 | * bitmap_release_region(bitmap, pos, order) Free specified bit region | ||
51 | * bitmap_allocate_region(bitmap, pos, order) Allocate specified bit region | ||
49 | */ | 52 | */ |
50 | 53 | ||
51 | /* | 54 | /* |
diff --git a/include/linux/bitops.h b/include/linux/bitops.h index 208650b1ad3a..f17525a963d1 100644 --- a/include/linux/bitops.h +++ b/include/linux/bitops.h | |||
@@ -175,4 +175,11 @@ static inline __u32 ror32(__u32 word, unsigned int shift) | |||
175 | return (word >> shift) | (word << (32 - shift)); | 175 | return (word >> shift) | (word << (32 - shift)); |
176 | } | 176 | } |
177 | 177 | ||
178 | static inline unsigned fls_long(unsigned long l) | ||
179 | { | ||
180 | if (sizeof(l) == 4) | ||
181 | return fls(l); | ||
182 | return fls64(l); | ||
183 | } | ||
184 | |||
178 | #endif | 185 | #endif |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 56bb6a4e15f3..c179966f1a2f 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -22,6 +22,7 @@ typedef struct request_queue request_queue_t; | |||
22 | struct elevator_queue; | 22 | struct elevator_queue; |
23 | typedef struct elevator_queue elevator_t; | 23 | typedef struct elevator_queue elevator_t; |
24 | struct request_pm_state; | 24 | struct request_pm_state; |
25 | struct blk_trace; | ||
25 | 26 | ||
26 | #define BLKDEV_MIN_RQ 4 | 27 | #define BLKDEV_MIN_RQ 4 |
27 | #define BLKDEV_MAX_RQ 128 /* Default maximum */ | 28 | #define BLKDEV_MAX_RQ 128 /* Default maximum */ |
@@ -416,6 +417,8 @@ struct request_queue | |||
416 | unsigned int sg_reserved_size; | 417 | unsigned int sg_reserved_size; |
417 | int node; | 418 | int node; |
418 | 419 | ||
420 | struct blk_trace *blk_trace; | ||
421 | |||
419 | /* | 422 | /* |
420 | * reserved for flush operations | 423 | * reserved for flush operations |
421 | */ | 424 | */ |
diff --git a/include/linux/blktrace_api.h b/include/linux/blktrace_api.h new file mode 100644 index 000000000000..b34d3e73d5ea --- /dev/null +++ b/include/linux/blktrace_api.h | |||
@@ -0,0 +1,277 @@ | |||
1 | #ifndef BLKTRACE_H | ||
2 | #define BLKTRACE_H | ||
3 | |||
4 | #include <linux/config.h> | ||
5 | #include <linux/blkdev.h> | ||
6 | #include <linux/relay.h> | ||
7 | |||
8 | /* | ||
9 | * Trace categories | ||
10 | */ | ||
11 | enum blktrace_cat { | ||
12 | BLK_TC_READ = 1 << 0, /* reads */ | ||
13 | BLK_TC_WRITE = 1 << 1, /* writes */ | ||
14 | BLK_TC_BARRIER = 1 << 2, /* barrier */ | ||
15 | BLK_TC_SYNC = 1 << 3, /* barrier */ | ||
16 | BLK_TC_QUEUE = 1 << 4, /* queueing/merging */ | ||
17 | BLK_TC_REQUEUE = 1 << 5, /* requeueing */ | ||
18 | BLK_TC_ISSUE = 1 << 6, /* issue */ | ||
19 | BLK_TC_COMPLETE = 1 << 7, /* completions */ | ||
20 | BLK_TC_FS = 1 << 8, /* fs requests */ | ||
21 | BLK_TC_PC = 1 << 9, /* pc requests */ | ||
22 | BLK_TC_NOTIFY = 1 << 10, /* special message */ | ||
23 | |||
24 | BLK_TC_END = 1 << 15, /* only 16-bits, reminder */ | ||
25 | }; | ||
26 | |||
27 | #define BLK_TC_SHIFT (16) | ||
28 | #define BLK_TC_ACT(act) ((act) << BLK_TC_SHIFT) | ||
29 | |||
30 | /* | ||
31 | * Basic trace actions | ||
32 | */ | ||
33 | enum blktrace_act { | ||
34 | __BLK_TA_QUEUE = 1, /* queued */ | ||
35 | __BLK_TA_BACKMERGE, /* back merged to existing rq */ | ||
36 | __BLK_TA_FRONTMERGE, /* front merge to existing rq */ | ||
37 | __BLK_TA_GETRQ, /* allocated new request */ | ||
38 | __BLK_TA_SLEEPRQ, /* sleeping on rq allocation */ | ||
39 | __BLK_TA_REQUEUE, /* request requeued */ | ||
40 | __BLK_TA_ISSUE, /* sent to driver */ | ||
41 | __BLK_TA_COMPLETE, /* completed by driver */ | ||
42 | __BLK_TA_PLUG, /* queue was plugged */ | ||
43 | __BLK_TA_UNPLUG_IO, /* queue was unplugged by io */ | ||
44 | __BLK_TA_UNPLUG_TIMER, /* queue was unplugged by timer */ | ||
45 | __BLK_TA_INSERT, /* insert request */ | ||
46 | __BLK_TA_SPLIT, /* bio was split */ | ||
47 | __BLK_TA_BOUNCE, /* bio was bounced */ | ||
48 | __BLK_TA_REMAP, /* bio was remapped */ | ||
49 | }; | ||
50 | |||
51 | /* | ||
52 | * Trace actions in full. Additionally, read or write is masked | ||
53 | */ | ||
54 | #define BLK_TA_QUEUE (__BLK_TA_QUEUE | BLK_TC_ACT(BLK_TC_QUEUE)) | ||
55 | #define BLK_TA_BACKMERGE (__BLK_TA_BACKMERGE | BLK_TC_ACT(BLK_TC_QUEUE)) | ||
56 | #define BLK_TA_FRONTMERGE (__BLK_TA_FRONTMERGE | BLK_TC_ACT(BLK_TC_QUEUE)) | ||
57 | #define BLK_TA_GETRQ (__BLK_TA_GETRQ | BLK_TC_ACT(BLK_TC_QUEUE)) | ||
58 | #define BLK_TA_SLEEPRQ (__BLK_TA_SLEEPRQ | BLK_TC_ACT(BLK_TC_QUEUE)) | ||
59 | #define BLK_TA_REQUEUE (__BLK_TA_REQUEUE | BLK_TC_ACT(BLK_TC_REQUEUE)) | ||
60 | #define BLK_TA_ISSUE (__BLK_TA_ISSUE | BLK_TC_ACT(BLK_TC_ISSUE)) | ||
61 | #define BLK_TA_COMPLETE (__BLK_TA_COMPLETE| BLK_TC_ACT(BLK_TC_COMPLETE)) | ||
62 | #define BLK_TA_PLUG (__BLK_TA_PLUG | BLK_TC_ACT(BLK_TC_QUEUE)) | ||
63 | #define BLK_TA_UNPLUG_IO (__BLK_TA_UNPLUG_IO | BLK_TC_ACT(BLK_TC_QUEUE)) | ||
64 | #define BLK_TA_UNPLUG_TIMER (__BLK_TA_UNPLUG_TIMER | BLK_TC_ACT(BLK_TC_QUEUE)) | ||
65 | #define BLK_TA_INSERT (__BLK_TA_INSERT | BLK_TC_ACT(BLK_TC_QUEUE)) | ||
66 | #define BLK_TA_SPLIT (__BLK_TA_SPLIT) | ||
67 | #define BLK_TA_BOUNCE (__BLK_TA_BOUNCE) | ||
68 | #define BLK_TA_REMAP (__BLK_TA_REMAP | BLK_TC_ACT(BLK_TC_QUEUE)) | ||
69 | |||
70 | #define BLK_IO_TRACE_MAGIC 0x65617400 | ||
71 | #define BLK_IO_TRACE_VERSION 0x07 | ||
72 | |||
73 | /* | ||
74 | * The trace itself | ||
75 | */ | ||
76 | struct blk_io_trace { | ||
77 | u32 magic; /* MAGIC << 8 | version */ | ||
78 | u32 sequence; /* event number */ | ||
79 | u64 time; /* in microseconds */ | ||
80 | u64 sector; /* disk offset */ | ||
81 | u32 bytes; /* transfer length */ | ||
82 | u32 action; /* what happened */ | ||
83 | u32 pid; /* who did it */ | ||
84 | u32 device; /* device number */ | ||
85 | u32 cpu; /* on what cpu did it happen */ | ||
86 | u16 error; /* completion error */ | ||
87 | u16 pdu_len; /* length of data after this trace */ | ||
88 | }; | ||
89 | |||
90 | /* | ||
91 | * The remap event | ||
92 | */ | ||
93 | struct blk_io_trace_remap { | ||
94 | u32 device; | ||
95 | u32 __pad; | ||
96 | u64 sector; | ||
97 | }; | ||
98 | |||
99 | enum { | ||
100 | Blktrace_setup = 1, | ||
101 | Blktrace_running, | ||
102 | Blktrace_stopped, | ||
103 | }; | ||
104 | |||
105 | struct blk_trace { | ||
106 | int trace_state; | ||
107 | struct rchan *rchan; | ||
108 | unsigned long *sequence; | ||
109 | u16 act_mask; | ||
110 | u64 start_lba; | ||
111 | u64 end_lba; | ||
112 | u32 pid; | ||
113 | u32 dev; | ||
114 | struct dentry *dir; | ||
115 | struct dentry *dropped_file; | ||
116 | atomic_t dropped; | ||
117 | }; | ||
118 | |||
119 | /* | ||
120 | * User setup structure passed with BLKTRACESTART | ||
121 | */ | ||
122 | struct blk_user_trace_setup { | ||
123 | char name[BDEVNAME_SIZE]; /* output */ | ||
124 | u16 act_mask; /* input */ | ||
125 | u32 buf_size; /* input */ | ||
126 | u32 buf_nr; /* input */ | ||
127 | u64 start_lba; | ||
128 | u64 end_lba; | ||
129 | u32 pid; | ||
130 | }; | ||
131 | |||
132 | #if defined(CONFIG_BLK_DEV_IO_TRACE) | ||
133 | extern int blk_trace_ioctl(struct block_device *, unsigned, char __user *); | ||
134 | extern void blk_trace_shutdown(request_queue_t *); | ||
135 | extern void __blk_add_trace(struct blk_trace *, sector_t, int, int, u32, int, int, void *); | ||
136 | |||
137 | /** | ||
138 | * blk_add_trace_rq - Add a trace for a request oriented action | ||
139 | * @q: queue the io is for | ||
140 | * @rq: the source request | ||
141 | * @what: the action | ||
142 | * | ||
143 | * Description: | ||
144 | * Records an action against a request. Will log the bio offset + size. | ||
145 | * | ||
146 | **/ | ||
147 | static inline void blk_add_trace_rq(struct request_queue *q, struct request *rq, | ||
148 | u32 what) | ||
149 | { | ||
150 | struct blk_trace *bt = q->blk_trace; | ||
151 | int rw = rq->flags & 0x07; | ||
152 | |||
153 | if (likely(!bt)) | ||
154 | return; | ||
155 | |||
156 | if (blk_pc_request(rq)) { | ||
157 | what |= BLK_TC_ACT(BLK_TC_PC); | ||
158 | __blk_add_trace(bt, 0, rq->data_len, rw, what, rq->errors, sizeof(rq->cmd), rq->cmd); | ||
159 | } else { | ||
160 | what |= BLK_TC_ACT(BLK_TC_FS); | ||
161 | __blk_add_trace(bt, rq->hard_sector, rq->hard_nr_sectors << 9, rw, what, rq->errors, 0, NULL); | ||
162 | } | ||
163 | } | ||
164 | |||
165 | /** | ||
166 | * blk_add_trace_bio - Add a trace for a bio oriented action | ||
167 | * @q: queue the io is for | ||
168 | * @bio: the source bio | ||
169 | * @what: the action | ||
170 | * | ||
171 | * Description: | ||
172 | * Records an action against a bio. Will log the bio offset + size. | ||
173 | * | ||
174 | **/ | ||
175 | static inline void blk_add_trace_bio(struct request_queue *q, struct bio *bio, | ||
176 | u32 what) | ||
177 | { | ||
178 | struct blk_trace *bt = q->blk_trace; | ||
179 | |||
180 | if (likely(!bt)) | ||
181 | return; | ||
182 | |||
183 | __blk_add_trace(bt, bio->bi_sector, bio->bi_size, bio->bi_rw, what, !bio_flagged(bio, BIO_UPTODATE), 0, NULL); | ||
184 | } | ||
185 | |||
186 | /** | ||
187 | * blk_add_trace_generic - Add a trace for a generic action | ||
188 | * @q: queue the io is for | ||
189 | * @bio: the source bio | ||
190 | * @rw: the data direction | ||
191 | * @what: the action | ||
192 | * | ||
193 | * Description: | ||
194 | * Records a simple trace | ||
195 | * | ||
196 | **/ | ||
197 | static inline void blk_add_trace_generic(struct request_queue *q, | ||
198 | struct bio *bio, int rw, u32 what) | ||
199 | { | ||
200 | struct blk_trace *bt = q->blk_trace; | ||
201 | |||
202 | if (likely(!bt)) | ||
203 | return; | ||
204 | |||
205 | if (bio) | ||
206 | blk_add_trace_bio(q, bio, what); | ||
207 | else | ||
208 | __blk_add_trace(bt, 0, 0, rw, what, 0, 0, NULL); | ||
209 | } | ||
210 | |||
211 | /** | ||
212 | * blk_add_trace_pdu_int - Add a trace for a bio with an integer payload | ||
213 | * @q: queue the io is for | ||
214 | * @what: the action | ||
215 | * @bio: the source bio | ||
216 | * @pdu: the integer payload | ||
217 | * | ||
218 | * Description: | ||
219 | * Adds a trace with some integer payload. This might be an unplug | ||
220 | * option given as the action, with the depth at unplug time given | ||
221 | * as the payload | ||
222 | * | ||
223 | **/ | ||
224 | static inline void blk_add_trace_pdu_int(struct request_queue *q, u32 what, | ||
225 | struct bio *bio, unsigned int pdu) | ||
226 | { | ||
227 | struct blk_trace *bt = q->blk_trace; | ||
228 | u64 rpdu = cpu_to_be64(pdu); | ||
229 | |||
230 | if (likely(!bt)) | ||
231 | return; | ||
232 | |||
233 | if (bio) | ||
234 | __blk_add_trace(bt, bio->bi_sector, bio->bi_size, bio->bi_rw, what, !bio_flagged(bio, BIO_UPTODATE), sizeof(rpdu), &rpdu); | ||
235 | else | ||
236 | __blk_add_trace(bt, 0, 0, 0, what, 0, sizeof(rpdu), &rpdu); | ||
237 | } | ||
238 | |||
239 | /** | ||
240 | * blk_add_trace_remap - Add a trace for a remap operation | ||
241 | * @q: queue the io is for | ||
242 | * @bio: the source bio | ||
243 | * @dev: target device | ||
244 | * @from: source sector | ||
245 | * @to: target sector | ||
246 | * | ||
247 | * Description: | ||
248 | * Device mapper or raid target sometimes need to split a bio because | ||
249 | * it spans a stripe (or similar). Add a trace for that action. | ||
250 | * | ||
251 | **/ | ||
252 | static inline void blk_add_trace_remap(struct request_queue *q, struct bio *bio, | ||
253 | dev_t dev, sector_t from, sector_t to) | ||
254 | { | ||
255 | struct blk_trace *bt = q->blk_trace; | ||
256 | struct blk_io_trace_remap r; | ||
257 | |||
258 | if (likely(!bt)) | ||
259 | return; | ||
260 | |||
261 | r.device = cpu_to_be32(dev); | ||
262 | r.sector = cpu_to_be64(to); | ||
263 | |||
264 | __blk_add_trace(bt, from, bio->bi_size, bio->bi_rw, BLK_TA_REMAP, !bio_flagged(bio, BIO_UPTODATE), sizeof(r), &r); | ||
265 | } | ||
266 | |||
267 | #else /* !CONFIG_BLK_DEV_IO_TRACE */ | ||
268 | #define blk_trace_ioctl(bdev, cmd, arg) (-ENOTTY) | ||
269 | #define blk_trace_shutdown(q) do { } while (0) | ||
270 | #define blk_add_trace_rq(q, rq, what) do { } while (0) | ||
271 | #define blk_add_trace_bio(q, rq, what) do { } while (0) | ||
272 | #define blk_add_trace_generic(q, rq, rw, what) do { } while (0) | ||
273 | #define blk_add_trace_pdu_int(q, what, bio, pdu) do { } while (0) | ||
274 | #define blk_add_trace_remap(q, bio, dev, f, t) do {} while (0) | ||
275 | #endif /* CONFIG_BLK_DEV_IO_TRACE */ | ||
276 | |||
277 | #endif | ||
diff --git a/include/linux/bootmem.h b/include/linux/bootmem.h index 993da8cc9706..7155452fb4a8 100644 --- a/include/linux/bootmem.h +++ b/include/linux/bootmem.h | |||
@@ -51,6 +51,9 @@ extern void * __init __alloc_bootmem_low_node(pg_data_t *pgdat, | |||
51 | unsigned long size, | 51 | unsigned long size, |
52 | unsigned long align, | 52 | unsigned long align, |
53 | unsigned long goal); | 53 | unsigned long goal); |
54 | extern void * __init __alloc_bootmem_core(struct bootmem_data *bdata, | ||
55 | unsigned long size, unsigned long align, unsigned long goal, | ||
56 | unsigned long limit); | ||
54 | #ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE | 57 | #ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE |
55 | extern void __init reserve_bootmem (unsigned long addr, unsigned long size); | 58 | extern void __init reserve_bootmem (unsigned long addr, unsigned long size); |
56 | #define alloc_bootmem(x) \ | 59 | #define alloc_bootmem(x) \ |
diff --git a/include/linux/cache.h b/include/linux/cache.h index d22e632f41fb..cc4b3aafad9a 100644 --- a/include/linux/cache.h +++ b/include/linux/cache.h | |||
@@ -13,9 +13,7 @@ | |||
13 | #define SMP_CACHE_BYTES L1_CACHE_BYTES | 13 | #define SMP_CACHE_BYTES L1_CACHE_BYTES |
14 | #endif | 14 | #endif |
15 | 15 | ||
16 | #if defined(CONFIG_X86) || defined(CONFIG_SPARC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC) | 16 | #ifndef __read_mostly |
17 | #define __read_mostly __attribute__((__section__(".data.read_mostly"))) | ||
18 | #else | ||
19 | #define __read_mostly | 17 | #define __read_mostly |
20 | #endif | 18 | #endif |
21 | 19 | ||
diff --git a/include/linux/capability.h b/include/linux/capability.h index 5a23ce752629..6548b35ab9f6 100644 --- a/include/linux/capability.h +++ b/include/linux/capability.h | |||
@@ -357,7 +357,8 @@ static inline kernel_cap_t cap_invert(kernel_cap_t c) | |||
357 | 357 | ||
358 | #define cap_is_fs_cap(c) (CAP_TO_MASK(c) & CAP_FS_MASK) | 358 | #define cap_is_fs_cap(c) (CAP_TO_MASK(c) & CAP_FS_MASK) |
359 | 359 | ||
360 | extern int capable(int cap); | 360 | int capable(int cap); |
361 | int __capable(struct task_struct *t, int cap); | ||
361 | 362 | ||
362 | #endif /* __KERNEL__ */ | 363 | #endif /* __KERNEL__ */ |
363 | 364 | ||
diff --git a/include/linux/cdrom.h b/include/linux/cdrom.h index b68fdf1f3156..3c9b0bc05123 100644 --- a/include/linux/cdrom.h +++ b/include/linux/cdrom.h | |||
@@ -378,7 +378,6 @@ struct cdrom_generic_command | |||
378 | #define CDC_MEDIA_CHANGED 0x80 /* media changed */ | 378 | #define CDC_MEDIA_CHANGED 0x80 /* media changed */ |
379 | #define CDC_PLAY_AUDIO 0x100 /* audio functions */ | 379 | #define CDC_PLAY_AUDIO 0x100 /* audio functions */ |
380 | #define CDC_RESET 0x200 /* hard reset device */ | 380 | #define CDC_RESET 0x200 /* hard reset device */ |
381 | #define CDC_IOCTLS 0x400 /* driver has non-standard ioctls */ | ||
382 | #define CDC_DRIVE_STATUS 0x800 /* driver implements drive status */ | 381 | #define CDC_DRIVE_STATUS 0x800 /* driver implements drive status */ |
383 | #define CDC_GENERIC_PACKET 0x1000 /* driver implements generic packets */ | 382 | #define CDC_GENERIC_PACKET 0x1000 /* driver implements generic packets */ |
384 | #define CDC_CD_R 0x2000 /* drive is a CD-R */ | 383 | #define CDC_CD_R 0x2000 /* drive is a CD-R */ |
@@ -974,9 +973,7 @@ struct cdrom_device_ops { | |||
974 | int (*reset) (struct cdrom_device_info *); | 973 | int (*reset) (struct cdrom_device_info *); |
975 | /* play stuff */ | 974 | /* play stuff */ |
976 | int (*audio_ioctl) (struct cdrom_device_info *,unsigned int, void *); | 975 | int (*audio_ioctl) (struct cdrom_device_info *,unsigned int, void *); |
977 | /* dev-specific */ | 976 | |
978 | int (*dev_ioctl) (struct cdrom_device_info *, | ||
979 | unsigned int, unsigned long); | ||
980 | /* driver specifications */ | 977 | /* driver specifications */ |
981 | const int capability; /* capability flags */ | 978 | const int capability; /* capability flags */ |
982 | int n_minors; /* number of active minor devices */ | 979 | int n_minors; /* number of active minor devices */ |
diff --git a/include/linux/compat_ioctl.h b/include/linux/compat_ioctl.h index ae7dfb790df3..efb518f16bb3 100644 --- a/include/linux/compat_ioctl.h +++ b/include/linux/compat_ioctl.h | |||
@@ -97,6 +97,10 @@ COMPATIBLE_IOCTL(BLKRRPART) | |||
97 | COMPATIBLE_IOCTL(BLKFLSBUF) | 97 | COMPATIBLE_IOCTL(BLKFLSBUF) |
98 | COMPATIBLE_IOCTL(BLKSECTSET) | 98 | COMPATIBLE_IOCTL(BLKSECTSET) |
99 | COMPATIBLE_IOCTL(BLKSSZGET) | 99 | COMPATIBLE_IOCTL(BLKSSZGET) |
100 | COMPATIBLE_IOCTL(BLKTRACESTART) | ||
101 | COMPATIBLE_IOCTL(BLKTRACESTOP) | ||
102 | COMPATIBLE_IOCTL(BLKTRACESETUP) | ||
103 | COMPATIBLE_IOCTL(BLKTRACETEARDOWN) | ||
100 | ULONG_IOCTL(BLKRASET) | 104 | ULONG_IOCTL(BLKRASET) |
101 | ULONG_IOCTL(BLKFRASET) | 105 | ULONG_IOCTL(BLKFRASET) |
102 | /* RAID */ | 106 | /* RAID */ |
diff --git a/include/linux/cpu.h b/include/linux/cpu.h index d612b89dce33..08d50c53aab4 100644 --- a/include/linux/cpu.h +++ b/include/linux/cpu.h | |||
@@ -74,7 +74,6 @@ extern int lock_cpu_hotplug_interruptible(void); | |||
74 | register_cpu_notifier(&fn##_nb); \ | 74 | register_cpu_notifier(&fn##_nb); \ |
75 | } | 75 | } |
76 | int cpu_down(unsigned int cpu); | 76 | int cpu_down(unsigned int cpu); |
77 | extern int __attribute__((weak)) smp_prepare_cpu(int cpu); | ||
78 | #define cpu_is_offline(cpu) unlikely(!cpu_online(cpu)) | 77 | #define cpu_is_offline(cpu) unlikely(!cpu_online(cpu)) |
79 | #else | 78 | #else |
80 | #define lock_cpu_hotplug() do { } while (0) | 79 | #define lock_cpu_hotplug() do { } while (0) |
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h index 60e56c6e03dd..99e6115d8e52 100644 --- a/include/linux/cpumask.h +++ b/include/linux/cpumask.h | |||
@@ -212,17 +212,15 @@ static inline void __cpus_shift_left(cpumask_t *dstp, | |||
212 | bitmap_shift_left(dstp->bits, srcp->bits, n, nbits); | 212 | bitmap_shift_left(dstp->bits, srcp->bits, n, nbits); |
213 | } | 213 | } |
214 | 214 | ||
215 | #define first_cpu(src) __first_cpu(&(src), NR_CPUS) | 215 | #ifdef CONFIG_SMP |
216 | static inline int __first_cpu(const cpumask_t *srcp, int nbits) | 216 | int __first_cpu(const cpumask_t *srcp); |
217 | { | 217 | #define first_cpu(src) __first_cpu(&(src)) |
218 | return min_t(int, nbits, find_first_bit(srcp->bits, nbits)); | 218 | int __next_cpu(int n, const cpumask_t *srcp); |
219 | } | 219 | #define next_cpu(n, src) __next_cpu((n), &(src)) |
220 | 220 | #else | |
221 | #define next_cpu(n, src) __next_cpu((n), &(src), NR_CPUS) | 221 | #define first_cpu(src) 0 |
222 | static inline int __next_cpu(int n, const cpumask_t *srcp, int nbits) | 222 | #define next_cpu(n, src) 1 |
223 | { | 223 | #endif |
224 | return min_t(int, nbits, find_next_bit(srcp->bits, nbits, n+1)); | ||
225 | } | ||
226 | 224 | ||
227 | #define cpumask_of_cpu(cpu) \ | 225 | #define cpumask_of_cpu(cpu) \ |
228 | ({ \ | 226 | ({ \ |
@@ -398,27 +396,17 @@ extern cpumask_t cpu_present_map; | |||
398 | #define cpu_present(cpu) ((cpu) == 0) | 396 | #define cpu_present(cpu) ((cpu) == 0) |
399 | #endif | 397 | #endif |
400 | 398 | ||
401 | #define any_online_cpu(mask) \ | 399 | #ifdef CONFIG_SMP |
402 | ({ \ | 400 | int highest_possible_processor_id(void); |
403 | int cpu; \ | 401 | #define any_online_cpu(mask) __any_online_cpu(&(mask)) |
404 | for_each_cpu_mask(cpu, (mask)) \ | 402 | int __any_online_cpu(const cpumask_t *mask); |
405 | if (cpu_online(cpu)) \ | 403 | #else |
406 | break; \ | 404 | #define highest_possible_processor_id() 0 |
407 | cpu; \ | 405 | #define any_online_cpu(mask) 0 |
408 | }) | 406 | #endif |
409 | 407 | ||
410 | #define for_each_cpu(cpu) for_each_cpu_mask((cpu), cpu_possible_map) | 408 | #define for_each_cpu(cpu) for_each_cpu_mask((cpu), cpu_possible_map) |
411 | #define for_each_online_cpu(cpu) for_each_cpu_mask((cpu), cpu_online_map) | 409 | #define for_each_online_cpu(cpu) for_each_cpu_mask((cpu), cpu_online_map) |
412 | #define for_each_present_cpu(cpu) for_each_cpu_mask((cpu), cpu_present_map) | 410 | #define for_each_present_cpu(cpu) for_each_cpu_mask((cpu), cpu_present_map) |
413 | 411 | ||
414 | /* Find the highest possible smp_processor_id() */ | ||
415 | #define highest_possible_processor_id() \ | ||
416 | ({ \ | ||
417 | unsigned int cpu, highest = 0; \ | ||
418 | for_each_cpu_mask(cpu, cpu_possible_map) \ | ||
419 | highest = cpu; \ | ||
420 | highest; \ | ||
421 | }) | ||
422 | |||
423 | |||
424 | #endif /* __LINUX_CPUMASK_H */ | 412 | #endif /* __LINUX_CPUMASK_H */ |
diff --git a/include/linux/cpuset.h b/include/linux/cpuset.h index 3bc606927116..9354722a9217 100644 --- a/include/linux/cpuset.h +++ b/include/linux/cpuset.h | |||
@@ -4,7 +4,7 @@ | |||
4 | * cpuset interface | 4 | * cpuset interface |
5 | * | 5 | * |
6 | * Copyright (C) 2003 BULL SA | 6 | * Copyright (C) 2003 BULL SA |
7 | * Copyright (C) 2004 Silicon Graphics, Inc. | 7 | * Copyright (C) 2004-2006 Silicon Graphics, Inc. |
8 | * | 8 | * |
9 | */ | 9 | */ |
10 | 10 | ||
@@ -51,6 +51,18 @@ extern char *cpuset_task_status_allowed(struct task_struct *task, char *buffer); | |||
51 | extern void cpuset_lock(void); | 51 | extern void cpuset_lock(void); |
52 | extern void cpuset_unlock(void); | 52 | extern void cpuset_unlock(void); |
53 | 53 | ||
54 | extern int cpuset_mem_spread_node(void); | ||
55 | |||
56 | static inline int cpuset_do_page_mem_spread(void) | ||
57 | { | ||
58 | return current->flags & PF_SPREAD_PAGE; | ||
59 | } | ||
60 | |||
61 | static inline int cpuset_do_slab_mem_spread(void) | ||
62 | { | ||
63 | return current->flags & PF_SPREAD_SLAB; | ||
64 | } | ||
65 | |||
54 | #else /* !CONFIG_CPUSETS */ | 66 | #else /* !CONFIG_CPUSETS */ |
55 | 67 | ||
56 | static inline int cpuset_init_early(void) { return 0; } | 68 | static inline int cpuset_init_early(void) { return 0; } |
@@ -99,6 +111,21 @@ static inline char *cpuset_task_status_allowed(struct task_struct *task, | |||
99 | static inline void cpuset_lock(void) {} | 111 | static inline void cpuset_lock(void) {} |
100 | static inline void cpuset_unlock(void) {} | 112 | static inline void cpuset_unlock(void) {} |
101 | 113 | ||
114 | static inline int cpuset_mem_spread_node(void) | ||
115 | { | ||
116 | return 0; | ||
117 | } | ||
118 | |||
119 | static inline int cpuset_do_page_mem_spread(void) | ||
120 | { | ||
121 | return 0; | ||
122 | } | ||
123 | |||
124 | static inline int cpuset_do_slab_mem_spread(void) | ||
125 | { | ||
126 | return 0; | ||
127 | } | ||
128 | |||
102 | #endif /* !CONFIG_CPUSETS */ | 129 | #endif /* !CONFIG_CPUSETS */ |
103 | 130 | ||
104 | #endif /* _LINUX_CPUSET_H */ | 131 | #endif /* _LINUX_CPUSET_H */ |
diff --git a/include/linux/dcache.h b/include/linux/dcache.h index 4361f3789975..d10bd30c337e 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h | |||
@@ -162,6 +162,8 @@ d_iput: no no no yes | |||
162 | #define DCACHE_REFERENCED 0x0008 /* Recently used, don't discard. */ | 162 | #define DCACHE_REFERENCED 0x0008 /* Recently used, don't discard. */ |
163 | #define DCACHE_UNHASHED 0x0010 | 163 | #define DCACHE_UNHASHED 0x0010 |
164 | 164 | ||
165 | #define DCACHE_INOTIFY_PARENT_WATCHED 0x0020 /* Parent inode is watched */ | ||
166 | |||
165 | extern spinlock_t dcache_lock; | 167 | extern spinlock_t dcache_lock; |
166 | 168 | ||
167 | /** | 169 | /** |
diff --git a/include/linux/dio.h b/include/linux/dio.h index fae9395fcf4f..1e65ebc2a3db 100644 --- a/include/linux/dio.h +++ b/include/linux/dio.h | |||
@@ -276,37 +276,5 @@ static inline void dio_set_drvdata (struct dio_dev *d, void *data) | |||
276 | dev_set_drvdata(&d->dev, data); | 276 | dev_set_drvdata(&d->dev, data); |
277 | } | 277 | } |
278 | 278 | ||
279 | /* | ||
280 | * A helper function which helps ensure correct dio_driver | ||
281 | * setup and cleanup for commonly-encountered hotplug/modular cases | ||
282 | * | ||
283 | * This MUST stay in a header, as it checks for -DMODULE | ||
284 | */ | ||
285 | static inline int dio_module_init(struct dio_driver *drv) | ||
286 | { | ||
287 | int rc = dio_register_driver(drv); | ||
288 | |||
289 | if (rc > 0) | ||
290 | return 0; | ||
291 | |||
292 | /* iff CONFIG_HOTPLUG and built into kernel, we should | ||
293 | * leave the driver around for future hotplug events. | ||
294 | * For the module case, a hotplug daemon of some sort | ||
295 | * should load a module in response to an insert event. */ | ||
296 | #if defined(CONFIG_HOTPLUG) && !defined(MODULE) | ||
297 | if (rc == 0) | ||
298 | return 0; | ||
299 | #else | ||
300 | if (rc == 0) | ||
301 | rc = -ENODEV; | ||
302 | #endif | ||
303 | |||
304 | /* if we get here, we need to clean up DIO driver instance | ||
305 | * and return some sort of error */ | ||
306 | dio_unregister_driver(drv); | ||
307 | |||
308 | return rc; | ||
309 | } | ||
310 | |||
311 | #endif /* __KERNEL__ */ | 279 | #endif /* __KERNEL__ */ |
312 | #endif /* ndef _LINUX_DIO_H */ | 280 | #endif /* ndef _LINUX_DIO_H */ |
diff --git a/include/linux/dmi.h b/include/linux/dmi.h index 2e6bbe014157..64fd6c366604 100644 --- a/include/linux/dmi.h +++ b/include/linux/dmi.h | |||
@@ -68,6 +68,7 @@ extern char * dmi_get_system_info(int field); | |||
68 | extern struct dmi_device * dmi_find_device(int type, const char *name, | 68 | extern struct dmi_device * dmi_find_device(int type, const char *name, |
69 | struct dmi_device *from); | 69 | struct dmi_device *from); |
70 | extern void dmi_scan_machine(void); | 70 | extern void dmi_scan_machine(void); |
71 | extern int dmi_get_year(int field); | ||
71 | 72 | ||
72 | #else | 73 | #else |
73 | 74 | ||
@@ -75,6 +76,7 @@ static inline int dmi_check_system(struct dmi_system_id *list) { return 0; } | |||
75 | static inline char * dmi_get_system_info(int field) { return NULL; } | 76 | static inline char * dmi_get_system_info(int field) { return NULL; } |
76 | static inline struct dmi_device * dmi_find_device(int type, const char *name, | 77 | static inline struct dmi_device * dmi_find_device(int type, const char *name, |
77 | struct dmi_device *from) { return NULL; } | 78 | struct dmi_device *from) { return NULL; } |
79 | static inline int dmi_get_year(int year) { return 0; } | ||
78 | 80 | ||
79 | #endif | 81 | #endif |
80 | 82 | ||
diff --git a/include/linux/eventpoll.h b/include/linux/eventpoll.h index 1289f0ec4c00..1e4bdfcf83a2 100644 --- a/include/linux/eventpoll.h +++ b/include/linux/eventpoll.h | |||
@@ -52,7 +52,12 @@ struct file; | |||
52 | #ifdef CONFIG_EPOLL | 52 | #ifdef CONFIG_EPOLL |
53 | 53 | ||
54 | /* Used to initialize the epoll bits inside the "struct file" */ | 54 | /* Used to initialize the epoll bits inside the "struct file" */ |
55 | void eventpoll_init_file(struct file *file); | 55 | static inline void eventpoll_init_file(struct file *file) |
56 | { | ||
57 | INIT_LIST_HEAD(&file->f_ep_links); | ||
58 | spin_lock_init(&file->f_ep_lock); | ||
59 | } | ||
60 | |||
56 | 61 | ||
57 | /* Used to release the epoll bits inside the "struct file" */ | 62 | /* Used to release the epoll bits inside the "struct file" */ |
58 | void eventpoll_release_file(struct file *file); | 63 | void eventpoll_release_file(struct file *file); |
@@ -85,7 +90,6 @@ static inline void eventpoll_release(struct file *file) | |||
85 | eventpoll_release_file(file); | 90 | eventpoll_release_file(file); |
86 | } | 91 | } |
87 | 92 | ||
88 | |||
89 | #else | 93 | #else |
90 | 94 | ||
91 | static inline void eventpoll_init_file(struct file *file) {} | 95 | static inline void eventpoll_init_file(struct file *file) {} |
diff --git a/include/linux/ext3_fs.h b/include/linux/ext3_fs.h index c0272d73ab20..e7239f2f97a1 100644 --- a/include/linux/ext3_fs.h +++ b/include/linux/ext3_fs.h | |||
@@ -772,9 +772,12 @@ extern unsigned long ext3_count_free (struct buffer_head *, unsigned); | |||
772 | 772 | ||
773 | 773 | ||
774 | /* inode.c */ | 774 | /* inode.c */ |
775 | extern int ext3_forget(handle_t *, int, struct inode *, struct buffer_head *, int); | 775 | int ext3_forget(handle_t *, int, struct inode *, struct buffer_head *, int); |
776 | extern struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, int *); | 776 | struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, int *); |
777 | extern struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *); | 777 | struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *); |
778 | int ext3_get_block_handle(handle_t *handle, struct inode *inode, | ||
779 | sector_t iblock, struct buffer_head *bh_result, int create, | ||
780 | int extend_disksize); | ||
778 | 781 | ||
779 | extern void ext3_read_inode (struct inode *); | 782 | extern void ext3_read_inode (struct inode *); |
780 | extern int ext3_write_inode (struct inode *, int); | 783 | extern int ext3_write_inode (struct inode *, int); |
diff --git a/include/linux/ext3_fs_i.h b/include/linux/ext3_fs_i.h index e71dd98dbcae..7abf90147180 100644 --- a/include/linux/ext3_fs_i.h +++ b/include/linux/ext3_fs_i.h | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/rwsem.h> | 19 | #include <linux/rwsem.h> |
20 | #include <linux/rbtree.h> | 20 | #include <linux/rbtree.h> |
21 | #include <linux/seqlock.h> | 21 | #include <linux/seqlock.h> |
22 | #include <linux/mutex.h> | ||
22 | 23 | ||
23 | struct ext3_reserve_window { | 24 | struct ext3_reserve_window { |
24 | __u32 _rsv_start; /* First byte reserved */ | 25 | __u32 _rsv_start; /* First byte reserved */ |
@@ -122,16 +123,16 @@ struct ext3_inode_info { | |||
122 | __u16 i_extra_isize; | 123 | __u16 i_extra_isize; |
123 | 124 | ||
124 | /* | 125 | /* |
125 | * truncate_sem is for serialising ext3_truncate() against | 126 | * truncate_mutex is for serialising ext3_truncate() against |
126 | * ext3_getblock(). In the 2.4 ext2 design, great chunks of inode's | 127 | * ext3_getblock(). In the 2.4 ext2 design, great chunks of inode's |
127 | * data tree are chopped off during truncate. We can't do that in | 128 | * data tree are chopped off during truncate. We can't do that in |
128 | * ext3 because whenever we perform intermediate commits during | 129 | * ext3 because whenever we perform intermediate commits during |
129 | * truncate, the inode and all the metadata blocks *must* be in a | 130 | * truncate, the inode and all the metadata blocks *must* be in a |
130 | * consistent state which allows truncation of the orphans to restart | 131 | * consistent state which allows truncation of the orphans to restart |
131 | * during recovery. Hence we must fix the get_block-vs-truncate race | 132 | * during recovery. Hence we must fix the get_block-vs-truncate race |
132 | * by other means, so we have truncate_sem. | 133 | * by other means, so we have truncate_mutex. |
133 | */ | 134 | */ |
134 | struct semaphore truncate_sem; | 135 | struct mutex truncate_mutex; |
135 | struct inode vfs_inode; | 136 | struct inode vfs_inode; |
136 | }; | 137 | }; |
137 | 138 | ||
diff --git a/include/linux/fadvise.h b/include/linux/fadvise.h index e8e747139b9a..b2913bba35d8 100644 --- a/include/linux/fadvise.h +++ b/include/linux/fadvise.h | |||
@@ -18,4 +18,10 @@ | |||
18 | #define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ | 18 | #define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ |
19 | #endif | 19 | #endif |
20 | 20 | ||
21 | /* | ||
22 | * Linux-specific fadvise() extensions: | ||
23 | */ | ||
24 | #define LINUX_FADV_ASYNC_WRITE 32 /* Start writeout on range */ | ||
25 | #define LINUX_FADV_WRITE_WAIT 33 /* Wait upon writeout to range */ | ||
26 | |||
21 | #endif /* FADVISE_H_INCLUDED */ | 27 | #endif /* FADVISE_H_INCLUDED */ |
diff --git a/include/linux/file.h b/include/linux/file.h index 9901b850f2e4..9f7c2513866f 100644 --- a/include/linux/file.h +++ b/include/linux/file.h | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <linux/compiler.h> | 10 | #include <linux/compiler.h> |
11 | #include <linux/spinlock.h> | 11 | #include <linux/spinlock.h> |
12 | #include <linux/rcupdate.h> | 12 | #include <linux/rcupdate.h> |
13 | #include <linux/types.h> | ||
13 | 14 | ||
14 | /* | 15 | /* |
15 | * The default fd array needs to be at least BITS_PER_LONG, | 16 | * The default fd array needs to be at least BITS_PER_LONG, |
@@ -17,10 +18,22 @@ | |||
17 | */ | 18 | */ |
18 | #define NR_OPEN_DEFAULT BITS_PER_LONG | 19 | #define NR_OPEN_DEFAULT BITS_PER_LONG |
19 | 20 | ||
21 | /* | ||
22 | * The embedded_fd_set is a small fd_set, | ||
23 | * suitable for most tasks (which open <= BITS_PER_LONG files) | ||
24 | */ | ||
25 | struct embedded_fd_set { | ||
26 | unsigned long fds_bits[1]; | ||
27 | }; | ||
28 | |||
29 | /* | ||
30 | * More than this number of fds: we use a separately allocated fd_set | ||
31 | */ | ||
32 | #define EMBEDDED_FD_SET_SIZE (BITS_PER_BYTE * sizeof(struct embedded_fd_set)) | ||
33 | |||
20 | struct fdtable { | 34 | struct fdtable { |
21 | unsigned int max_fds; | 35 | unsigned int max_fds; |
22 | int max_fdset; | 36 | int max_fdset; |
23 | int next_fd; | ||
24 | struct file ** fd; /* current fd array */ | 37 | struct file ** fd; /* current fd array */ |
25 | fd_set *close_on_exec; | 38 | fd_set *close_on_exec; |
26 | fd_set *open_fds; | 39 | fd_set *open_fds; |
@@ -33,13 +46,20 @@ struct fdtable { | |||
33 | * Open file table structure | 46 | * Open file table structure |
34 | */ | 47 | */ |
35 | struct files_struct { | 48 | struct files_struct { |
49 | /* | ||
50 | * read mostly part | ||
51 | */ | ||
36 | atomic_t count; | 52 | atomic_t count; |
37 | struct fdtable *fdt; | 53 | struct fdtable *fdt; |
38 | struct fdtable fdtab; | 54 | struct fdtable fdtab; |
39 | fd_set close_on_exec_init; | 55 | /* |
40 | fd_set open_fds_init; | 56 | * written part on a separate cache line in SMP |
57 | */ | ||
58 | spinlock_t file_lock ____cacheline_aligned_in_smp; | ||
59 | int next_fd; | ||
60 | struct embedded_fd_set close_on_exec_init; | ||
61 | struct embedded_fd_set open_fds_init; | ||
41 | struct file * fd_array[NR_OPEN_DEFAULT]; | 62 | struct file * fd_array[NR_OPEN_DEFAULT]; |
42 | spinlock_t file_lock; /* Protects concurrent writers. Nests inside tsk->alloc_lock */ | ||
43 | }; | 63 | }; |
44 | 64 | ||
45 | #define files_fdtable(files) (rcu_dereference((files)->fdt)) | 65 | #define files_fdtable(files) (rcu_dereference((files)->fdt)) |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 128d0082522c..5adf32b90f36 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -65,6 +65,11 @@ extern int dir_notify_enable; | |||
65 | #define FMODE_PREAD 8 | 65 | #define FMODE_PREAD 8 |
66 | #define FMODE_PWRITE FMODE_PREAD /* These go hand in hand */ | 66 | #define FMODE_PWRITE FMODE_PREAD /* These go hand in hand */ |
67 | 67 | ||
68 | /* File is being opened for execution. Primary users of this flag are | ||
69 | distributed filesystems that can use it to achieve correct ETXTBUSY | ||
70 | behavior for cross-node execution/opening_for_writing of files */ | ||
71 | #define FMODE_EXEC 16 | ||
72 | |||
68 | #define RW_MASK 1 | 73 | #define RW_MASK 1 |
69 | #define RWA_MASK 2 | 74 | #define RWA_MASK 2 |
70 | #define READ 0 | 75 | #define READ 0 |
@@ -103,7 +108,9 @@ extern int dir_notify_enable; | |||
103 | #define MS_BIND 4096 | 108 | #define MS_BIND 4096 |
104 | #define MS_MOVE 8192 | 109 | #define MS_MOVE 8192 |
105 | #define MS_REC 16384 | 110 | #define MS_REC 16384 |
106 | #define MS_VERBOSE 32768 | 111 | #define MS_VERBOSE 32768 /* War is peace. Verbosity is silence. |
112 | MS_VERBOSE is deprecated. */ | ||
113 | #define MS_SILENT 32768 | ||
107 | #define MS_POSIXACL (1<<16) /* VFS does not apply the umask */ | 114 | #define MS_POSIXACL (1<<16) /* VFS does not apply the umask */ |
108 | #define MS_UNBINDABLE (1<<17) /* change to unbindable */ | 115 | #define MS_UNBINDABLE (1<<17) /* change to unbindable */ |
109 | #define MS_PRIVATE (1<<18) /* change to private */ | 116 | #define MS_PRIVATE (1<<18) /* change to private */ |
@@ -197,6 +204,10 @@ extern int dir_notify_enable; | |||
197 | #define BLKBSZGET _IOR(0x12,112,size_t) | 204 | #define BLKBSZGET _IOR(0x12,112,size_t) |
198 | #define BLKBSZSET _IOW(0x12,113,size_t) | 205 | #define BLKBSZSET _IOW(0x12,113,size_t) |
199 | #define BLKGETSIZE64 _IOR(0x12,114,size_t) /* return device size in bytes (u64 *arg) */ | 206 | #define BLKGETSIZE64 _IOR(0x12,114,size_t) /* return device size in bytes (u64 *arg) */ |
207 | #define BLKTRACESETUP _IOWR(0x12,115,struct blk_user_trace_setup) | ||
208 | #define BLKTRACESTART _IO(0x12,116) | ||
209 | #define BLKTRACESTOP _IO(0x12,117) | ||
210 | #define BLKTRACETEARDOWN _IO(0x12,118) | ||
200 | 211 | ||
201 | #define BMAP_IOCTL 1 /* obsolete - kept for compatibility */ | 212 | #define BMAP_IOCTL 1 /* obsolete - kept for compatibility */ |
202 | #define FIBMAP _IO(0x00,1) /* bmap access */ | 213 | #define FIBMAP _IO(0x00,1) /* bmap access */ |
@@ -344,7 +355,7 @@ struct address_space_operations { | |||
344 | /* Write back some dirty pages from this mapping. */ | 355 | /* Write back some dirty pages from this mapping. */ |
345 | int (*writepages)(struct address_space *, struct writeback_control *); | 356 | int (*writepages)(struct address_space *, struct writeback_control *); |
346 | 357 | ||
347 | /* Set a page dirty */ | 358 | /* Set a page dirty. Return true if this dirtied it */ |
348 | int (*set_page_dirty)(struct page *page); | 359 | int (*set_page_dirty)(struct page *page); |
349 | 360 | ||
350 | int (*readpages)(struct file *filp, struct address_space *mapping, | 361 | int (*readpages)(struct file *filp, struct address_space *mapping, |
@@ -397,8 +408,8 @@ struct block_device { | |||
397 | dev_t bd_dev; /* not a kdev_t - it's a search key */ | 408 | dev_t bd_dev; /* not a kdev_t - it's a search key */ |
398 | struct inode * bd_inode; /* will die */ | 409 | struct inode * bd_inode; /* will die */ |
399 | int bd_openers; | 410 | int bd_openers; |
400 | struct semaphore bd_sem; /* open/close mutex */ | 411 | struct mutex bd_mutex; /* open/close mutex */ |
401 | struct semaphore bd_mount_sem; /* mount mutex */ | 412 | struct mutex bd_mount_mutex; /* mount mutex */ |
402 | struct list_head bd_inodes; | 413 | struct list_head bd_inodes; |
403 | void * bd_holder; | 414 | void * bd_holder; |
404 | int bd_holders; | 415 | int bd_holders; |
@@ -509,7 +520,7 @@ struct inode { | |||
509 | 520 | ||
510 | #ifdef CONFIG_INOTIFY | 521 | #ifdef CONFIG_INOTIFY |
511 | struct list_head inotify_watches; /* watches on this inode */ | 522 | struct list_head inotify_watches; /* watches on this inode */ |
512 | struct semaphore inotify_sem; /* protects the watches list */ | 523 | struct mutex inotify_mutex; /* protects the watches list */ |
513 | #endif | 524 | #endif |
514 | 525 | ||
515 | unsigned long i_state; | 526 | unsigned long i_state; |
@@ -667,7 +678,6 @@ extern spinlock_t files_lock; | |||
667 | #define FL_POSIX 1 | 678 | #define FL_POSIX 1 |
668 | #define FL_FLOCK 2 | 679 | #define FL_FLOCK 2 |
669 | #define FL_ACCESS 8 /* not trying to lock, just looking */ | 680 | #define FL_ACCESS 8 /* not trying to lock, just looking */ |
670 | #define FL_LOCKD 16 /* lock held by rpc.lockd */ | ||
671 | #define FL_LEASE 32 /* lease held on this file */ | 681 | #define FL_LEASE 32 /* lease held on this file */ |
672 | #define FL_SLEEP 128 /* A blocking lock */ | 682 | #define FL_SLEEP 128 /* A blocking lock */ |
673 | 683 | ||
@@ -731,8 +741,6 @@ struct file_lock { | |||
731 | #define OFFT_OFFSET_MAX INT_LIMIT(off_t) | 741 | #define OFFT_OFFSET_MAX INT_LIMIT(off_t) |
732 | #endif | 742 | #endif |
733 | 743 | ||
734 | extern struct list_head file_lock_list; | ||
735 | |||
736 | #include <linux/fcntl.h> | 744 | #include <linux/fcntl.h> |
737 | 745 | ||
738 | extern int fcntl_getlk(struct file *, struct flock __user *); | 746 | extern int fcntl_getlk(struct file *, struct flock __user *); |
@@ -754,10 +762,9 @@ extern void locks_init_lock(struct file_lock *); | |||
754 | extern void locks_copy_lock(struct file_lock *, struct file_lock *); | 762 | extern void locks_copy_lock(struct file_lock *, struct file_lock *); |
755 | extern void locks_remove_posix(struct file *, fl_owner_t); | 763 | extern void locks_remove_posix(struct file *, fl_owner_t); |
756 | extern void locks_remove_flock(struct file *); | 764 | extern void locks_remove_flock(struct file *); |
757 | extern struct file_lock *posix_test_lock(struct file *, struct file_lock *); | 765 | extern int posix_test_lock(struct file *, struct file_lock *, struct file_lock *); |
758 | extern int posix_lock_file(struct file *, struct file_lock *); | 766 | extern int posix_lock_file(struct file *, struct file_lock *); |
759 | extern int posix_lock_file_wait(struct file *, struct file_lock *); | 767 | extern int posix_lock_file_wait(struct file *, struct file_lock *); |
760 | extern void posix_block_lock(struct file_lock *, struct file_lock *); | ||
761 | extern int posix_unblock_lock(struct file *, struct file_lock *); | 768 | extern int posix_unblock_lock(struct file *, struct file_lock *); |
762 | extern int posix_locks_deadlock(struct file_lock *, struct file_lock *); | 769 | extern int posix_locks_deadlock(struct file_lock *, struct file_lock *); |
763 | extern int flock_lock_file_wait(struct file *filp, struct file_lock *fl); | 770 | extern int flock_lock_file_wait(struct file *filp, struct file_lock *fl); |
@@ -847,7 +854,7 @@ struct super_block { | |||
847 | * The next field is for VFS *only*. No filesystems have any business | 854 | * The next field is for VFS *only*. No filesystems have any business |
848 | * even looking at it. You had been warned. | 855 | * even looking at it. You had been warned. |
849 | */ | 856 | */ |
850 | struct semaphore s_vfs_rename_sem; /* Kludge */ | 857 | struct mutex s_vfs_rename_mutex; /* Kludge */ |
851 | 858 | ||
852 | /* Granuality of c/m/atime in ns. | 859 | /* Granuality of c/m/atime in ns. |
853 | Cannot be worse than a second */ | 860 | Cannot be worse than a second */ |
@@ -1086,6 +1093,7 @@ struct super_operations { | |||
1086 | void (*umount_begin) (struct super_block *); | 1093 | void (*umount_begin) (struct super_block *); |
1087 | 1094 | ||
1088 | int (*show_options)(struct seq_file *, struct vfsmount *); | 1095 | int (*show_options)(struct seq_file *, struct vfsmount *); |
1096 | int (*show_stats)(struct seq_file *, struct vfsmount *); | ||
1089 | 1097 | ||
1090 | ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t); | 1098 | ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t); |
1091 | ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t); | 1099 | ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t); |
@@ -1115,6 +1123,18 @@ static inline void mark_inode_dirty_sync(struct inode *inode) | |||
1115 | __mark_inode_dirty(inode, I_DIRTY_SYNC); | 1123 | __mark_inode_dirty(inode, I_DIRTY_SYNC); |
1116 | } | 1124 | } |
1117 | 1125 | ||
1126 | static inline void inode_inc_link_count(struct inode *inode) | ||
1127 | { | ||
1128 | inode->i_nlink++; | ||
1129 | mark_inode_dirty(inode); | ||
1130 | } | ||
1131 | |||
1132 | static inline void inode_dec_link_count(struct inode *inode) | ||
1133 | { | ||
1134 | inode->i_nlink--; | ||
1135 | mark_inode_dirty(inode); | ||
1136 | } | ||
1137 | |||
1118 | extern void touch_atime(struct vfsmount *mnt, struct dentry *dentry); | 1138 | extern void touch_atime(struct vfsmount *mnt, struct dentry *dentry); |
1119 | static inline void file_accessed(struct file *file) | 1139 | static inline void file_accessed(struct file *file) |
1120 | { | 1140 | { |
@@ -1455,6 +1475,12 @@ extern int filemap_fdatawait(struct address_space *); | |||
1455 | extern int filemap_write_and_wait(struct address_space *mapping); | 1475 | extern int filemap_write_and_wait(struct address_space *mapping); |
1456 | extern int filemap_write_and_wait_range(struct address_space *mapping, | 1476 | extern int filemap_write_and_wait_range(struct address_space *mapping, |
1457 | loff_t lstart, loff_t lend); | 1477 | loff_t lstart, loff_t lend); |
1478 | extern int wait_on_page_writeback_range(struct address_space *mapping, | ||
1479 | pgoff_t start, pgoff_t end); | ||
1480 | extern int __filemap_fdatawrite_range(struct address_space *mapping, | ||
1481 | loff_t start, loff_t end, int sync_mode); | ||
1482 | |||
1483 | extern long do_fsync(struct file *file, int datasync); | ||
1458 | extern void sync_supers(void); | 1484 | extern void sync_supers(void); |
1459 | extern void sync_filesystems(int wait); | 1485 | extern void sync_filesystems(int wait); |
1460 | extern void emergency_sync(void); | 1486 | extern void emergency_sync(void); |
@@ -1534,7 +1560,6 @@ extern void destroy_inode(struct inode *); | |||
1534 | extern struct inode *new_inode(struct super_block *); | 1560 | extern struct inode *new_inode(struct super_block *); |
1535 | extern int remove_suid(struct dentry *); | 1561 | extern int remove_suid(struct dentry *); |
1536 | extern void remove_dquot_ref(struct super_block *, int, struct list_head *); | 1562 | extern void remove_dquot_ref(struct super_block *, int, struct list_head *); |
1537 | extern struct semaphore iprune_sem; | ||
1538 | 1563 | ||
1539 | extern void __insert_inode_hash(struct inode *, unsigned long hashval); | 1564 | extern void __insert_inode_hash(struct inode *, unsigned long hashval); |
1540 | extern void remove_inode_hash(struct inode *); | 1565 | extern void remove_inode_hash(struct inode *); |
diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h index 03b8e7932b83..11438eff4d44 100644 --- a/include/linux/fsnotify.h +++ b/include/linux/fsnotify.h | |||
@@ -15,6 +15,26 @@ | |||
15 | 15 | ||
16 | #include <linux/dnotify.h> | 16 | #include <linux/dnotify.h> |
17 | #include <linux/inotify.h> | 17 | #include <linux/inotify.h> |
18 | #include <linux/audit.h> | ||
19 | |||
20 | /* | ||
21 | * fsnotify_d_instantiate - instantiate a dentry for inode | ||
22 | * Called with dcache_lock held. | ||
23 | */ | ||
24 | static inline void fsnotify_d_instantiate(struct dentry *entry, | ||
25 | struct inode *inode) | ||
26 | { | ||
27 | inotify_d_instantiate(entry, inode); | ||
28 | } | ||
29 | |||
30 | /* | ||
31 | * fsnotify_d_move - entry has been moved | ||
32 | * Called with dcache_lock and entry->d_lock held. | ||
33 | */ | ||
34 | static inline void fsnotify_d_move(struct dentry *entry) | ||
35 | { | ||
36 | inotify_d_move(entry); | ||
37 | } | ||
18 | 38 | ||
19 | /* | 39 | /* |
20 | * fsnotify_move - file old_name at old_dir was moved to new_name at new_dir | 40 | * fsnotify_move - file old_name at old_dir was moved to new_name at new_dir |
@@ -45,6 +65,8 @@ static inline void fsnotify_move(struct inode *old_dir, struct inode *new_dir, | |||
45 | if (source) { | 65 | if (source) { |
46 | inotify_inode_queue_event(source, IN_MOVE_SELF, 0, NULL); | 66 | inotify_inode_queue_event(source, IN_MOVE_SELF, 0, NULL); |
47 | } | 67 | } |
68 | audit_inode_child(old_name, source, old_dir->i_ino); | ||
69 | audit_inode_child(new_name, target, new_dir->i_ino); | ||
48 | } | 70 | } |
49 | 71 | ||
50 | /* | 72 | /* |
@@ -70,19 +92,22 @@ static inline void fsnotify_inoderemove(struct inode *inode) | |||
70 | /* | 92 | /* |
71 | * fsnotify_create - 'name' was linked in | 93 | * fsnotify_create - 'name' was linked in |
72 | */ | 94 | */ |
73 | static inline void fsnotify_create(struct inode *inode, const char *name) | 95 | static inline void fsnotify_create(struct inode *inode, struct dentry *dentry) |
74 | { | 96 | { |
75 | inode_dir_notify(inode, DN_CREATE); | 97 | inode_dir_notify(inode, DN_CREATE); |
76 | inotify_inode_queue_event(inode, IN_CREATE, 0, name); | 98 | inotify_inode_queue_event(inode, IN_CREATE, 0, dentry->d_name.name); |
99 | audit_inode_child(dentry->d_name.name, dentry->d_inode, inode->i_ino); | ||
77 | } | 100 | } |
78 | 101 | ||
79 | /* | 102 | /* |
80 | * fsnotify_mkdir - directory 'name' was created | 103 | * fsnotify_mkdir - directory 'name' was created |
81 | */ | 104 | */ |
82 | static inline void fsnotify_mkdir(struct inode *inode, const char *name) | 105 | static inline void fsnotify_mkdir(struct inode *inode, struct dentry *dentry) |
83 | { | 106 | { |
84 | inode_dir_notify(inode, DN_CREATE); | 107 | inode_dir_notify(inode, DN_CREATE); |
85 | inotify_inode_queue_event(inode, IN_CREATE | IN_ISDIR, 0, name); | 108 | inotify_inode_queue_event(inode, IN_CREATE | IN_ISDIR, 0, |
109 | dentry->d_name.name); | ||
110 | audit_inode_child(dentry->d_name.name, dentry->d_inode, inode->i_ino); | ||
86 | } | 111 | } |
87 | 112 | ||
88 | /* | 113 | /* |
diff --git a/include/linux/generic_serial.h b/include/linux/generic_serial.h index 0abe9d9a0069..652611a4bdcd 100644 --- a/include/linux/generic_serial.h +++ b/include/linux/generic_serial.h | |||
@@ -12,6 +12,8 @@ | |||
12 | #ifndef GENERIC_SERIAL_H | 12 | #ifndef GENERIC_SERIAL_H |
13 | #define GENERIC_SERIAL_H | 13 | #define GENERIC_SERIAL_H |
14 | 14 | ||
15 | #include <linux/mutex.h> | ||
16 | |||
15 | struct real_driver { | 17 | struct real_driver { |
16 | void (*disable_tx_interrupts) (void *); | 18 | void (*disable_tx_interrupts) (void *); |
17 | void (*enable_tx_interrupts) (void *); | 19 | void (*enable_tx_interrupts) (void *); |
@@ -34,7 +36,7 @@ struct gs_port { | |||
34 | int xmit_head; | 36 | int xmit_head; |
35 | int xmit_tail; | 37 | int xmit_tail; |
36 | int xmit_cnt; | 38 | int xmit_cnt; |
37 | struct semaphore port_write_sem; | 39 | struct mutex port_write_mutex; |
38 | int flags; | 40 | int flags; |
39 | wait_queue_head_t open_wait; | 41 | wait_queue_head_t open_wait; |
40 | wait_queue_head_t close_wait; | 42 | wait_queue_head_t close_wait; |
diff --git a/include/linux/genhd.h b/include/linux/genhd.h index eef5ccdcd731..fd647fde5ec1 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h | |||
@@ -149,22 +149,16 @@ struct disk_attribute { | |||
149 | ({ \ | 149 | ({ \ |
150 | typeof(gendiskp->dkstats->field) res = 0; \ | 150 | typeof(gendiskp->dkstats->field) res = 0; \ |
151 | int i; \ | 151 | int i; \ |
152 | for (i=0; i < NR_CPUS; i++) { \ | 152 | for_each_cpu(i) \ |
153 | if (!cpu_possible(i)) \ | ||
154 | continue; \ | ||
155 | res += per_cpu_ptr(gendiskp->dkstats, i)->field; \ | 153 | res += per_cpu_ptr(gendiskp->dkstats, i)->field; \ |
156 | } \ | ||
157 | res; \ | 154 | res; \ |
158 | }) | 155 | }) |
159 | 156 | ||
160 | static inline void disk_stat_set_all(struct gendisk *gendiskp, int value) { | 157 | static inline void disk_stat_set_all(struct gendisk *gendiskp, int value) { |
161 | int i; | 158 | int i; |
162 | for (i=0; i < NR_CPUS; i++) { | 159 | for_each_cpu(i) |
163 | if (cpu_possible(i)) { | 160 | memset(per_cpu_ptr(gendiskp->dkstats, i), value, |
164 | memset(per_cpu_ptr(gendiskp->dkstats, i), value, | 161 | sizeof (struct disk_stats)); |
165 | sizeof (struct disk_stats)); | ||
166 | } | ||
167 | } | ||
168 | } | 162 | } |
169 | 163 | ||
170 | #else | 164 | #else |
diff --git a/include/linux/hwmon-sysfs.h b/include/linux/hwmon-sysfs.h index 7eb4004b3601..a90c09d331c1 100644 --- a/include/linux/hwmon-sysfs.h +++ b/include/linux/hwmon-sysfs.h | |||
@@ -27,11 +27,13 @@ struct sensor_device_attribute{ | |||
27 | #define to_sensor_dev_attr(_dev_attr) \ | 27 | #define to_sensor_dev_attr(_dev_attr) \ |
28 | container_of(_dev_attr, struct sensor_device_attribute, dev_attr) | 28 | container_of(_dev_attr, struct sensor_device_attribute, dev_attr) |
29 | 29 | ||
30 | #define SENSOR_DEVICE_ATTR(_name,_mode,_show,_store,_index) \ | 30 | #define SENSOR_ATTR(_name, _mode, _show, _store, _index) \ |
31 | struct sensor_device_attribute sensor_dev_attr_##_name = { \ | 31 | { .dev_attr = __ATTR(_name, _mode, _show, _store), \ |
32 | .dev_attr = __ATTR(_name,_mode,_show,_store), \ | 32 | .index = _index } |
33 | .index = _index, \ | 33 | |
34 | } | 34 | #define SENSOR_DEVICE_ATTR(_name, _mode, _show, _store, _index) \ |
35 | struct sensor_device_attribute sensor_dev_attr_##_name \ | ||
36 | = SENSOR_ATTR(_name, _mode, _show, _store, _index) | ||
35 | 37 | ||
36 | struct sensor_device_attribute_2 { | 38 | struct sensor_device_attribute_2 { |
37 | struct device_attribute dev_attr; | 39 | struct device_attribute dev_attr; |
@@ -41,11 +43,13 @@ struct sensor_device_attribute_2 { | |||
41 | #define to_sensor_dev_attr_2(_dev_attr) \ | 43 | #define to_sensor_dev_attr_2(_dev_attr) \ |
42 | container_of(_dev_attr, struct sensor_device_attribute_2, dev_attr) | 44 | container_of(_dev_attr, struct sensor_device_attribute_2, dev_attr) |
43 | 45 | ||
46 | #define SENSOR_ATTR_2(_name, _mode, _show, _store, _nr, _index) \ | ||
47 | { .dev_attr = __ATTR(_name, _mode, _show, _store), \ | ||
48 | .index = _index, \ | ||
49 | .nr = _nr } | ||
50 | |||
44 | #define SENSOR_DEVICE_ATTR_2(_name,_mode,_show,_store,_nr,_index) \ | 51 | #define SENSOR_DEVICE_ATTR_2(_name,_mode,_show,_store,_nr,_index) \ |
45 | struct sensor_device_attribute_2 sensor_dev_attr_##_name = { \ | 52 | struct sensor_device_attribute_2 sensor_dev_attr_##_name \ |
46 | .dev_attr = __ATTR(_name,_mode,_show,_store), \ | 53 | = SENSOR_ATTR_2(_name, _mode, _show, _store, _nr, _index) |
47 | .index = _index, \ | ||
48 | .nr = _nr, \ | ||
49 | } | ||
50 | 54 | ||
51 | #endif /* _LINUX_HWMON_SYSFS_H */ | 55 | #endif /* _LINUX_HWMON_SYSFS_H */ |
diff --git a/include/linux/i2c-id.h b/include/linux/i2c-id.h index 474c8f4f5d4f..679b46a6a565 100644 --- a/include/linux/i2c-id.h +++ b/include/linux/i2c-id.h | |||
@@ -172,7 +172,6 @@ | |||
172 | #define I2C_HW_B_RIVA 0x010010 /* Riva based graphics cards */ | 172 | #define I2C_HW_B_RIVA 0x010010 /* Riva based graphics cards */ |
173 | #define I2C_HW_B_IOC 0x010011 /* IOC bit-wiggling */ | 173 | #define I2C_HW_B_IOC 0x010011 /* IOC bit-wiggling */ |
174 | #define I2C_HW_B_TSUNA 0x010012 /* DEC Tsunami chipset */ | 174 | #define I2C_HW_B_TSUNA 0x010012 /* DEC Tsunami chipset */ |
175 | #define I2C_HW_B_FRODO 0x010013 /* 2d3D SA-1110 Development Board */ | ||
176 | #define I2C_HW_B_OMAHA 0x010014 /* Omaha I2C interface (ARM) */ | 175 | #define I2C_HW_B_OMAHA 0x010014 /* Omaha I2C interface (ARM) */ |
177 | #define I2C_HW_B_GUIDE 0x010015 /* Guide bit-basher */ | 176 | #define I2C_HW_B_GUIDE 0x010015 /* Guide bit-basher */ |
178 | #define I2C_HW_B_IXP2000 0x010016 /* GPIO on IXP2000 systems */ | 177 | #define I2C_HW_B_IXP2000 0x010016 /* GPIO on IXP2000 systems */ |
@@ -185,6 +184,7 @@ | |||
185 | #define I2C_HW_B_SAVAGE 0x01001d /* savage framebuffer driver */ | 184 | #define I2C_HW_B_SAVAGE 0x01001d /* savage framebuffer driver */ |
186 | #define I2C_HW_B_RADEON 0x01001e /* radeon framebuffer driver */ | 185 | #define I2C_HW_B_RADEON 0x01001e /* radeon framebuffer driver */ |
187 | #define I2C_HW_B_EM28XX 0x01001f /* em28xx video capture cards */ | 186 | #define I2C_HW_B_EM28XX 0x01001f /* em28xx video capture cards */ |
187 | #define I2C_HW_B_CX2341X 0x010020 /* Conexant CX2341X MPEG encoder cards */ | ||
188 | 188 | ||
189 | /* --- PCF 8584 based algorithms */ | 189 | /* --- PCF 8584 based algorithms */ |
190 | #define I2C_HW_P_LP 0x020000 /* Parallel port interface */ | 190 | #define I2C_HW_P_LP 0x020000 /* Parallel port interface */ |
diff --git a/include/linux/i2c.h b/include/linux/i2c.h index 63f1d63cc1d8..1635ee25918f 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h | |||
@@ -32,7 +32,7 @@ | |||
32 | #include <linux/mod_devicetable.h> | 32 | #include <linux/mod_devicetable.h> |
33 | #include <linux/device.h> /* for struct device */ | 33 | #include <linux/device.h> /* for struct device */ |
34 | #include <linux/sched.h> /* for completion */ | 34 | #include <linux/sched.h> /* for completion */ |
35 | #include <asm/semaphore.h> | 35 | #include <linux/mutex.h> |
36 | 36 | ||
37 | /* --- For i2c-isa ---------------------------------------------------- */ | 37 | /* --- For i2c-isa ---------------------------------------------------- */ |
38 | 38 | ||
@@ -225,8 +225,8 @@ struct i2c_adapter { | |||
225 | int (*client_unregister)(struct i2c_client *); | 225 | int (*client_unregister)(struct i2c_client *); |
226 | 226 | ||
227 | /* data fields that are valid for all devices */ | 227 | /* data fields that are valid for all devices */ |
228 | struct semaphore bus_lock; | 228 | struct mutex bus_lock; |
229 | struct semaphore clist_lock; | 229 | struct mutex clist_lock; |
230 | 230 | ||
231 | int timeout; | 231 | int timeout; |
232 | int retries; | 232 | int retries; |
diff --git a/include/linux/ide.h b/include/linux/ide.h index a7fc4cc79b23..8d2db412ba9c 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
@@ -792,6 +792,7 @@ typedef struct hwif_s { | |||
792 | unsigned no_dsc : 1; /* 0 default, 1 dsc_overlap disabled */ | 792 | unsigned no_dsc : 1; /* 0 default, 1 dsc_overlap disabled */ |
793 | unsigned auto_poll : 1; /* supports nop auto-poll */ | 793 | unsigned auto_poll : 1; /* supports nop auto-poll */ |
794 | unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */ | 794 | unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */ |
795 | unsigned no_io_32bit : 1; /* 1 = can not do 32-bit IO ops */ | ||
795 | 796 | ||
796 | struct device gendev; | 797 | struct device gendev; |
797 | struct completion gendev_rel_comp; /* To deal with device release() */ | 798 | struct completion gendev_rel_comp; /* To deal with device release() */ |
diff --git a/include/linux/init.h b/include/linux/init.h index ff8d8b8632f4..ed0ac7c39fdc 100644 --- a/include/linux/init.h +++ b/include/linux/init.h | |||
@@ -69,6 +69,10 @@ extern initcall_t __security_initcall_start[], __security_initcall_end[]; | |||
69 | 69 | ||
70 | /* Defined in init/main.c */ | 70 | /* Defined in init/main.c */ |
71 | extern char saved_command_line[]; | 71 | extern char saved_command_line[]; |
72 | |||
73 | /* used by init/main.c */ | ||
74 | extern void setup_arch(char **); | ||
75 | |||
72 | #endif | 76 | #endif |
73 | 77 | ||
74 | #ifndef MODULE | 78 | #ifndef MODULE |
diff --git a/include/linux/init_task.h b/include/linux/init_task.h index dcfd2ecccb5d..92146f3b7423 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h | |||
@@ -7,11 +7,10 @@ | |||
7 | #define INIT_FDTABLE \ | 7 | #define INIT_FDTABLE \ |
8 | { \ | 8 | { \ |
9 | .max_fds = NR_OPEN_DEFAULT, \ | 9 | .max_fds = NR_OPEN_DEFAULT, \ |
10 | .max_fdset = __FD_SETSIZE, \ | 10 | .max_fdset = EMBEDDED_FD_SET_SIZE, \ |
11 | .next_fd = 0, \ | ||
12 | .fd = &init_files.fd_array[0], \ | 11 | .fd = &init_files.fd_array[0], \ |
13 | .close_on_exec = &init_files.close_on_exec_init, \ | 12 | .close_on_exec = (fd_set *)&init_files.close_on_exec_init, \ |
14 | .open_fds = &init_files.open_fds_init, \ | 13 | .open_fds = (fd_set *)&init_files.open_fds_init, \ |
15 | .rcu = RCU_HEAD_INIT, \ | 14 | .rcu = RCU_HEAD_INIT, \ |
16 | .free_files = NULL, \ | 15 | .free_files = NULL, \ |
17 | .next = NULL, \ | 16 | .next = NULL, \ |
@@ -20,9 +19,10 @@ | |||
20 | #define INIT_FILES \ | 19 | #define INIT_FILES \ |
21 | { \ | 20 | { \ |
22 | .count = ATOMIC_INIT(1), \ | 21 | .count = ATOMIC_INIT(1), \ |
23 | .file_lock = SPIN_LOCK_UNLOCKED, \ | ||
24 | .fdt = &init_files.fdtab, \ | 22 | .fdt = &init_files.fdtab, \ |
25 | .fdtab = INIT_FDTABLE, \ | 23 | .fdtab = INIT_FDTABLE, \ |
24 | .file_lock = SPIN_LOCK_UNLOCKED, \ | ||
25 | .next_fd = 0, \ | ||
26 | .close_on_exec_init = { { 0, } }, \ | 26 | .close_on_exec_init = { { 0, } }, \ |
27 | .open_fds_init = { { 0, } }, \ | 27 | .open_fds_init = { { 0, } }, \ |
28 | .fd_array = { NULL, } \ | 28 | .fd_array = { NULL, } \ |
diff --git a/include/linux/inotify.h b/include/linux/inotify.h index 267c88b5f742..09e00433c78e 100644 --- a/include/linux/inotify.h +++ b/include/linux/inotify.h | |||
@@ -71,6 +71,8 @@ struct inotify_event { | |||
71 | 71 | ||
72 | #ifdef CONFIG_INOTIFY | 72 | #ifdef CONFIG_INOTIFY |
73 | 73 | ||
74 | extern void inotify_d_instantiate(struct dentry *, struct inode *); | ||
75 | extern void inotify_d_move(struct dentry *); | ||
74 | extern void inotify_inode_queue_event(struct inode *, __u32, __u32, | 76 | extern void inotify_inode_queue_event(struct inode *, __u32, __u32, |
75 | const char *); | 77 | const char *); |
76 | extern void inotify_dentry_parent_queue_event(struct dentry *, __u32, __u32, | 78 | extern void inotify_dentry_parent_queue_event(struct dentry *, __u32, __u32, |
@@ -81,6 +83,15 @@ extern u32 inotify_get_cookie(void); | |||
81 | 83 | ||
82 | #else | 84 | #else |
83 | 85 | ||
86 | static inline void inotify_d_instantiate(struct dentry *dentry, | ||
87 | struct inode *inode) | ||
88 | { | ||
89 | } | ||
90 | |||
91 | static inline void inotify_d_move(struct dentry *dentry) | ||
92 | { | ||
93 | } | ||
94 | |||
84 | static inline void inotify_inode_queue_event(struct inode *inode, | 95 | static inline void inotify_inode_queue_event(struct inode *inode, |
85 | __u32 mask, __u32 cookie, | 96 | __u32 mask, __u32 cookie, |
86 | const char *filename) | 97 | const char *filename) |
diff --git a/include/linux/irq.h b/include/linux/irq.h index 6c5d4c898ccb..ee2a82a572f7 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
@@ -114,53 +114,8 @@ static inline void set_native_irq_info(int irq, cpumask_t mask) | |||
114 | #if defined (CONFIG_GENERIC_PENDING_IRQ) || defined (CONFIG_IRQBALANCE) | 114 | #if defined (CONFIG_GENERIC_PENDING_IRQ) || defined (CONFIG_IRQBALANCE) |
115 | extern cpumask_t pending_irq_cpumask[NR_IRQS]; | 115 | extern cpumask_t pending_irq_cpumask[NR_IRQS]; |
116 | 116 | ||
117 | static inline void set_pending_irq(unsigned int irq, cpumask_t mask) | 117 | void set_pending_irq(unsigned int irq, cpumask_t mask); |
118 | { | 118 | void move_native_irq(int irq); |
119 | irq_desc_t *desc = irq_desc + irq; | ||
120 | unsigned long flags; | ||
121 | |||
122 | spin_lock_irqsave(&desc->lock, flags); | ||
123 | desc->move_irq = 1; | ||
124 | pending_irq_cpumask[irq] = mask; | ||
125 | spin_unlock_irqrestore(&desc->lock, flags); | ||
126 | } | ||
127 | |||
128 | static inline void | ||
129 | move_native_irq(int irq) | ||
130 | { | ||
131 | cpumask_t tmp; | ||
132 | irq_desc_t *desc = irq_descp(irq); | ||
133 | |||
134 | if (likely (!desc->move_irq)) | ||
135 | return; | ||
136 | |||
137 | desc->move_irq = 0; | ||
138 | |||
139 | if (likely(cpus_empty(pending_irq_cpumask[irq]))) | ||
140 | return; | ||
141 | |||
142 | if (!desc->handler->set_affinity) | ||
143 | return; | ||
144 | |||
145 | /* note - we hold the desc->lock */ | ||
146 | cpus_and(tmp, pending_irq_cpumask[irq], cpu_online_map); | ||
147 | |||
148 | /* | ||
149 | * If there was a valid mask to work with, please | ||
150 | * do the disable, re-program, enable sequence. | ||
151 | * This is *not* particularly important for level triggered | ||
152 | * but in a edge trigger case, we might be setting rte | ||
153 | * when an active trigger is comming in. This could | ||
154 | * cause some ioapics to mal-function. | ||
155 | * Being paranoid i guess! | ||
156 | */ | ||
157 | if (unlikely(!cpus_empty(tmp))) { | ||
158 | desc->handler->disable(irq); | ||
159 | desc->handler->set_affinity(irq,tmp); | ||
160 | desc->handler->enable(irq); | ||
161 | } | ||
162 | cpus_clear(pending_irq_cpumask[irq]); | ||
163 | } | ||
164 | 119 | ||
165 | #ifdef CONFIG_PCI_MSI | 120 | #ifdef CONFIG_PCI_MSI |
166 | /* | 121 | /* |
diff --git a/include/linux/jbd.h b/include/linux/jbd.h index 41ee79962bb2..4fc7dffd66ef 100644 --- a/include/linux/jbd.h +++ b/include/linux/jbd.h | |||
@@ -28,6 +28,9 @@ | |||
28 | #include <linux/journal-head.h> | 28 | #include <linux/journal-head.h> |
29 | #include <linux/stddef.h> | 29 | #include <linux/stddef.h> |
30 | #include <linux/bit_spinlock.h> | 30 | #include <linux/bit_spinlock.h> |
31 | #include <linux/mutex.h> | ||
32 | #include <linux/timer.h> | ||
33 | |||
31 | #include <asm/semaphore.h> | 34 | #include <asm/semaphore.h> |
32 | #endif | 35 | #endif |
33 | 36 | ||
@@ -575,7 +578,7 @@ struct transaction_s | |||
575 | * @j_wait_checkpoint: Wait queue to trigger checkpointing | 578 | * @j_wait_checkpoint: Wait queue to trigger checkpointing |
576 | * @j_wait_commit: Wait queue to trigger commit | 579 | * @j_wait_commit: Wait queue to trigger commit |
577 | * @j_wait_updates: Wait queue to wait for updates to complete | 580 | * @j_wait_updates: Wait queue to wait for updates to complete |
578 | * @j_checkpoint_sem: Semaphore for locking against concurrent checkpoints | 581 | * @j_checkpoint_mutex: Mutex for locking against concurrent checkpoints |
579 | * @j_head: Journal head - identifies the first unused block in the journal | 582 | * @j_head: Journal head - identifies the first unused block in the journal |
580 | * @j_tail: Journal tail - identifies the oldest still-used block in the | 583 | * @j_tail: Journal tail - identifies the oldest still-used block in the |
581 | * journal. | 584 | * journal. |
@@ -645,7 +648,7 @@ struct journal_s | |||
645 | int j_barrier_count; | 648 | int j_barrier_count; |
646 | 649 | ||
647 | /* The barrier lock itself */ | 650 | /* The barrier lock itself */ |
648 | struct semaphore j_barrier; | 651 | struct mutex j_barrier; |
649 | 652 | ||
650 | /* | 653 | /* |
651 | * Transactions: The current running transaction... | 654 | * Transactions: The current running transaction... |
@@ -687,7 +690,7 @@ struct journal_s | |||
687 | wait_queue_head_t j_wait_updates; | 690 | wait_queue_head_t j_wait_updates; |
688 | 691 | ||
689 | /* Semaphore for locking against concurrent checkpoints */ | 692 | /* Semaphore for locking against concurrent checkpoints */ |
690 | struct semaphore j_checkpoint_sem; | 693 | struct mutex j_checkpoint_mutex; |
691 | 694 | ||
692 | /* | 695 | /* |
693 | * Journal head: identifies the first unused block in the journal. | 696 | * Journal head: identifies the first unused block in the journal. |
@@ -786,7 +789,7 @@ struct journal_s | |||
786 | unsigned long j_commit_interval; | 789 | unsigned long j_commit_interval; |
787 | 790 | ||
788 | /* The timer used to wakeup the commit thread: */ | 791 | /* The timer used to wakeup the commit thread: */ |
789 | struct timer_list *j_commit_timer; | 792 | struct timer_list j_commit_timer; |
790 | 793 | ||
791 | /* | 794 | /* |
792 | * The revoke table: maintains the list of revoked blocks in the | 795 | * The revoke table: maintains the list of revoked blocks in the |
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 3b507bf05d09..03d6cfaa5b8a 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
@@ -91,6 +91,9 @@ extern struct notifier_block *panic_notifier_list; | |||
91 | extern long (*panic_blink)(long time); | 91 | extern long (*panic_blink)(long time); |
92 | NORET_TYPE void panic(const char * fmt, ...) | 92 | NORET_TYPE void panic(const char * fmt, ...) |
93 | __attribute__ ((NORET_AND format (printf, 1, 2))); | 93 | __attribute__ ((NORET_AND format (printf, 1, 2))); |
94 | extern void oops_enter(void); | ||
95 | extern void oops_exit(void); | ||
96 | extern int oops_may_print(void); | ||
94 | fastcall NORET_TYPE void do_exit(long error_code) | 97 | fastcall NORET_TYPE void do_exit(long error_code) |
95 | ATTRIB_NORET; | 98 | ATTRIB_NORET; |
96 | NORET_TYPE void complete_and_exit(struct completion *, long) | 99 | NORET_TYPE void complete_and_exit(struct completion *, long) |
@@ -151,9 +154,10 @@ static inline int __attribute_pure__ long_log2(unsigned long x) | |||
151 | return r; | 154 | return r; |
152 | } | 155 | } |
153 | 156 | ||
154 | static inline unsigned long __attribute_const__ roundup_pow_of_two(unsigned long x) | 157 | static inline unsigned long |
158 | __attribute_const__ roundup_pow_of_two(unsigned long x) | ||
155 | { | 159 | { |
156 | return (1UL << fls(x - 1)); | 160 | return 1UL << fls_long(x - 1); |
157 | } | 161 | } |
158 | 162 | ||
159 | extern int printk_ratelimit(void); | 163 | extern int printk_ratelimit(void); |
diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h index 669756bc20a2..778adc0fa640 100644 --- a/include/linux/kprobes.h +++ b/include/linux/kprobes.h | |||
@@ -36,6 +36,7 @@ | |||
36 | #include <linux/percpu.h> | 36 | #include <linux/percpu.h> |
37 | #include <linux/spinlock.h> | 37 | #include <linux/spinlock.h> |
38 | #include <linux/rcupdate.h> | 38 | #include <linux/rcupdate.h> |
39 | #include <linux/mutex.h> | ||
39 | 40 | ||
40 | #ifdef CONFIG_KPROBES | 41 | #ifdef CONFIG_KPROBES |
41 | #include <asm/kprobes.h> | 42 | #include <asm/kprobes.h> |
@@ -152,7 +153,7 @@ struct kretprobe_instance { | |||
152 | }; | 153 | }; |
153 | 154 | ||
154 | extern spinlock_t kretprobe_lock; | 155 | extern spinlock_t kretprobe_lock; |
155 | extern struct semaphore kprobe_mutex; | 156 | extern struct mutex kprobe_mutex; |
156 | extern int arch_prepare_kprobe(struct kprobe *p); | 157 | extern int arch_prepare_kprobe(struct kprobe *p); |
157 | extern void arch_arm_kprobe(struct kprobe *p); | 158 | extern void arch_arm_kprobe(struct kprobe *p); |
158 | extern void arch_disarm_kprobe(struct kprobe *p); | 159 | extern void arch_disarm_kprobe(struct kprobe *p); |
diff --git a/include/linux/libata.h b/include/linux/libata.h index 7a54244d30aa..047192253c3a 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
@@ -358,6 +358,11 @@ struct ata_device { | |||
358 | unsigned int max_sectors; /* per-device max sectors */ | 358 | unsigned int max_sectors; /* per-device max sectors */ |
359 | unsigned int cdb_len; | 359 | unsigned int cdb_len; |
360 | 360 | ||
361 | /* per-dev xfer mask */ | ||
362 | unsigned int pio_mask; | ||
363 | unsigned int mwdma_mask; | ||
364 | unsigned int udma_mask; | ||
365 | |||
361 | /* for CHS addressing */ | 366 | /* for CHS addressing */ |
362 | u16 cylinders; /* Number of cylinders */ | 367 | u16 cylinders; /* Number of cylinders */ |
363 | u16 heads; /* Number of heads */ | 368 | u16 heads; /* Number of heads */ |
@@ -395,6 +400,7 @@ struct ata_port { | |||
395 | 400 | ||
396 | struct ata_host_stats stats; | 401 | struct ata_host_stats stats; |
397 | struct ata_host_set *host_set; | 402 | struct ata_host_set *host_set; |
403 | struct device *dev; | ||
398 | 404 | ||
399 | struct work_struct port_task; | 405 | struct work_struct port_task; |
400 | 406 | ||
@@ -515,9 +521,9 @@ extern void ata_eh_qc_retry(struct ata_queued_cmd *qc); | |||
515 | extern int ata_scsi_release(struct Scsi_Host *host); | 521 | extern int ata_scsi_release(struct Scsi_Host *host); |
516 | extern unsigned int ata_host_intr(struct ata_port *ap, struct ata_queued_cmd *qc); | 522 | extern unsigned int ata_host_intr(struct ata_port *ap, struct ata_queued_cmd *qc); |
517 | extern int ata_scsi_device_resume(struct scsi_device *); | 523 | extern int ata_scsi_device_resume(struct scsi_device *); |
518 | extern int ata_scsi_device_suspend(struct scsi_device *); | 524 | extern int ata_scsi_device_suspend(struct scsi_device *, pm_message_t state); |
519 | extern int ata_device_resume(struct ata_port *, struct ata_device *); | 525 | extern int ata_device_resume(struct ata_port *, struct ata_device *); |
520 | extern int ata_device_suspend(struct ata_port *, struct ata_device *); | 526 | extern int ata_device_suspend(struct ata_port *, struct ata_device *, pm_message_t state); |
521 | extern int ata_ratelimit(void); | 527 | extern int ata_ratelimit(void); |
522 | extern unsigned int ata_busy_sleep(struct ata_port *ap, | 528 | extern unsigned int ata_busy_sleep(struct ata_port *ap, |
523 | unsigned long timeout_pat, | 529 | unsigned long timeout_pat, |
@@ -568,6 +574,8 @@ extern int ata_std_bios_param(struct scsi_device *sdev, | |||
568 | struct block_device *bdev, | 574 | struct block_device *bdev, |
569 | sector_t capacity, int geom[]); | 575 | sector_t capacity, int geom[]); |
570 | extern int ata_scsi_slave_config(struct scsi_device *sdev); | 576 | extern int ata_scsi_slave_config(struct scsi_device *sdev); |
577 | extern struct ata_device *ata_dev_pair(struct ata_port *ap, | ||
578 | struct ata_device *adev); | ||
571 | 579 | ||
572 | /* | 580 | /* |
573 | * Timing helpers | 581 | * Timing helpers |
diff --git a/include/linux/linkage.h b/include/linux/linkage.h index 147eb01e0d4b..c08c9983e840 100644 --- a/include/linux/linkage.h +++ b/include/linux/linkage.h | |||
@@ -28,17 +28,27 @@ | |||
28 | #define ALIGN __ALIGN | 28 | #define ALIGN __ALIGN |
29 | #define ALIGN_STR __ALIGN_STR | 29 | #define ALIGN_STR __ALIGN_STR |
30 | 30 | ||
31 | #ifndef ENTRY | ||
31 | #define ENTRY(name) \ | 32 | #define ENTRY(name) \ |
32 | .globl name; \ | 33 | .globl name; \ |
33 | ALIGN; \ | 34 | ALIGN; \ |
34 | name: | 35 | name: |
36 | #endif | ||
35 | 37 | ||
36 | #define KPROBE_ENTRY(name) \ | 38 | #define KPROBE_ENTRY(name) \ |
37 | .section .kprobes.text, "ax"; \ | 39 | .section .kprobes.text, "ax"; \ |
38 | .globl name; \ | 40 | ENTRY(name) |
39 | ALIGN; \ | ||
40 | name: | ||
41 | 41 | ||
42 | #ifndef END | ||
43 | #define END(name) \ | ||
44 | .size name, .-name | ||
45 | #endif | ||
46 | |||
47 | #ifndef ENDPROC | ||
48 | #define ENDPROC(name) \ | ||
49 | .type name, @function; \ | ||
50 | END(name) | ||
51 | #endif | ||
42 | 52 | ||
43 | #endif | 53 | #endif |
44 | 54 | ||
diff --git a/include/linux/lockd/lockd.h b/include/linux/lockd/lockd.h index ef21ed296039..995f89dc8c04 100644 --- a/include/linux/lockd/lockd.h +++ b/include/linux/lockd/lockd.h | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/config.h> | 14 | #include <linux/config.h> |
15 | #include <linux/in.h> | 15 | #include <linux/in.h> |
16 | #include <linux/fs.h> | 16 | #include <linux/fs.h> |
17 | #include <linux/kref.h> | ||
17 | #include <linux/utsname.h> | 18 | #include <linux/utsname.h> |
18 | #include <linux/nfsd/nfsfh.h> | 19 | #include <linux/nfsd/nfsfh.h> |
19 | #include <linux/lockd/bind.h> | 20 | #include <linux/lockd/bind.h> |
@@ -58,6 +59,8 @@ struct nlm_host { | |||
58 | unsigned long h_expires; /* eligible for GC */ | 59 | unsigned long h_expires; /* eligible for GC */ |
59 | struct list_head h_lockowners; /* Lockowners for the client */ | 60 | struct list_head h_lockowners; /* Lockowners for the client */ |
60 | spinlock_t h_lock; | 61 | spinlock_t h_lock; |
62 | struct list_head h_granted; /* Locks in GRANTED state */ | ||
63 | struct list_head h_reclaim; /* Locks in RECLAIM state */ | ||
61 | }; | 64 | }; |
62 | 65 | ||
63 | /* | 66 | /* |
@@ -83,9 +86,9 @@ struct nlm_rqst { | |||
83 | struct nlm_host * a_host; /* host handle */ | 86 | struct nlm_host * a_host; /* host handle */ |
84 | struct nlm_args a_args; /* arguments */ | 87 | struct nlm_args a_args; /* arguments */ |
85 | struct nlm_res a_res; /* result */ | 88 | struct nlm_res a_res; /* result */ |
86 | struct nlm_wait * a_block; | 89 | struct nlm_block * a_block; |
87 | unsigned int a_retries; /* Retry count */ | 90 | unsigned int a_retries; /* Retry count */ |
88 | char a_owner[NLMCLNT_OHSIZE]; | 91 | u8 a_owner[NLMCLNT_OHSIZE]; |
89 | }; | 92 | }; |
90 | 93 | ||
91 | /* | 94 | /* |
@@ -110,16 +113,16 @@ struct nlm_file { | |||
110 | */ | 113 | */ |
111 | #define NLM_NEVER (~(unsigned long) 0) | 114 | #define NLM_NEVER (~(unsigned long) 0) |
112 | struct nlm_block { | 115 | struct nlm_block { |
116 | struct kref b_count; /* Reference count */ | ||
113 | struct nlm_block * b_next; /* linked list (all blocks) */ | 117 | struct nlm_block * b_next; /* linked list (all blocks) */ |
114 | struct nlm_block * b_fnext; /* linked list (per file) */ | 118 | struct nlm_block * b_fnext; /* linked list (per file) */ |
115 | struct nlm_rqst b_call; /* RPC args & callback info */ | 119 | struct nlm_rqst * b_call; /* RPC args & callback info */ |
116 | struct svc_serv * b_daemon; /* NLM service */ | 120 | struct svc_serv * b_daemon; /* NLM service */ |
117 | struct nlm_host * b_host; /* host handle for RPC clnt */ | 121 | struct nlm_host * b_host; /* host handle for RPC clnt */ |
118 | unsigned long b_when; /* next re-xmit */ | 122 | unsigned long b_when; /* next re-xmit */ |
119 | unsigned int b_id; /* block id */ | 123 | unsigned int b_id; /* block id */ |
120 | unsigned char b_queued; /* re-queued */ | 124 | unsigned char b_queued; /* re-queued */ |
121 | unsigned char b_granted; /* VFS granted lock */ | 125 | unsigned char b_granted; /* VFS granted lock */ |
122 | unsigned char b_incall; /* doing callback */ | ||
123 | unsigned char b_done; /* callback complete */ | 126 | unsigned char b_done; /* callback complete */ |
124 | struct nlm_file * b_file; /* file in question */ | 127 | struct nlm_file * b_file; /* file in question */ |
125 | }; | 128 | }; |
@@ -145,15 +148,16 @@ extern unsigned long nlmsvc_timeout; | |||
145 | /* | 148 | /* |
146 | * Lockd client functions | 149 | * Lockd client functions |
147 | */ | 150 | */ |
148 | struct nlm_rqst * nlmclnt_alloc_call(void); | 151 | struct nlm_rqst * nlm_alloc_call(struct nlm_host *host); |
149 | int nlmclnt_prepare_block(struct nlm_rqst *req, struct nlm_host *host, struct file_lock *fl); | 152 | void nlm_release_call(struct nlm_rqst *); |
150 | void nlmclnt_finish_block(struct nlm_rqst *req); | 153 | int nlm_async_call(struct nlm_rqst *, u32, const struct rpc_call_ops *); |
151 | long nlmclnt_block(struct nlm_rqst *req, long timeout); | 154 | int nlm_async_reply(struct nlm_rqst *, u32, const struct rpc_call_ops *); |
155 | struct nlm_wait * nlmclnt_prepare_block(struct nlm_host *host, struct file_lock *fl); | ||
156 | void nlmclnt_finish_block(struct nlm_wait *block); | ||
157 | int nlmclnt_block(struct nlm_wait *block, struct nlm_rqst *req, long timeout); | ||
152 | u32 nlmclnt_grant(const struct sockaddr_in *addr, const struct nlm_lock *); | 158 | u32 nlmclnt_grant(const struct sockaddr_in *addr, const struct nlm_lock *); |
153 | void nlmclnt_recovery(struct nlm_host *, u32); | 159 | void nlmclnt_recovery(struct nlm_host *, u32); |
154 | int nlmclnt_reclaim(struct nlm_host *, struct file_lock *); | 160 | int nlmclnt_reclaim(struct nlm_host *, struct file_lock *); |
155 | int nlmclnt_setgrantargs(struct nlm_rqst *, struct nlm_lock *); | ||
156 | void nlmclnt_freegrantargs(struct nlm_rqst *); | ||
157 | 161 | ||
158 | /* | 162 | /* |
159 | * Host cache | 163 | * Host cache |
@@ -172,7 +176,6 @@ extern struct nlm_host *nlm_find_client(void); | |||
172 | /* | 176 | /* |
173 | * Server-side lock handling | 177 | * Server-side lock handling |
174 | */ | 178 | */ |
175 | int nlmsvc_async_call(struct nlm_rqst *, u32, const struct rpc_call_ops *); | ||
176 | u32 nlmsvc_lock(struct svc_rqst *, struct nlm_file *, | 179 | u32 nlmsvc_lock(struct svc_rqst *, struct nlm_file *, |
177 | struct nlm_lock *, int, struct nlm_cookie *); | 180 | struct nlm_lock *, int, struct nlm_cookie *); |
178 | u32 nlmsvc_unlock(struct nlm_file *, struct nlm_lock *); | 181 | u32 nlmsvc_unlock(struct nlm_file *, struct nlm_lock *); |
@@ -180,7 +183,7 @@ u32 nlmsvc_testlock(struct nlm_file *, struct nlm_lock *, | |||
180 | struct nlm_lock *); | 183 | struct nlm_lock *); |
181 | u32 nlmsvc_cancel_blocked(struct nlm_file *, struct nlm_lock *); | 184 | u32 nlmsvc_cancel_blocked(struct nlm_file *, struct nlm_lock *); |
182 | unsigned long nlmsvc_retry_blocked(void); | 185 | unsigned long nlmsvc_retry_blocked(void); |
183 | int nlmsvc_traverse_blocks(struct nlm_host *, struct nlm_file *, | 186 | void nlmsvc_traverse_blocks(struct nlm_host *, struct nlm_file *, |
184 | int action); | 187 | int action); |
185 | void nlmsvc_grant_reply(struct svc_rqst *, struct nlm_cookie *, u32); | 188 | void nlmsvc_grant_reply(struct svc_rqst *, struct nlm_cookie *, u32); |
186 | 189 | ||
diff --git a/include/linux/lockd/share.h b/include/linux/lockd/share.h index 5d8aa325f140..c75a424ebe4c 100644 --- a/include/linux/lockd/share.h +++ b/include/linux/lockd/share.h | |||
@@ -25,6 +25,6 @@ u32 nlmsvc_share_file(struct nlm_host *, struct nlm_file *, | |||
25 | struct nlm_args *); | 25 | struct nlm_args *); |
26 | u32 nlmsvc_unshare_file(struct nlm_host *, struct nlm_file *, | 26 | u32 nlmsvc_unshare_file(struct nlm_host *, struct nlm_file *, |
27 | struct nlm_args *); | 27 | struct nlm_args *); |
28 | int nlmsvc_traverse_shares(struct nlm_host *, struct nlm_file *, int); | 28 | void nlmsvc_traverse_shares(struct nlm_host *, struct nlm_file *, int); |
29 | 29 | ||
30 | #endif /* LINUX_LOCKD_SHARE_H */ | 30 | #endif /* LINUX_LOCKD_SHARE_H */ |
diff --git a/include/linux/lockd/xdr.h b/include/linux/lockd/xdr.h index d7a5cc4cfa97..bb0a0f1caa91 100644 --- a/include/linux/lockd/xdr.h +++ b/include/linux/lockd/xdr.h | |||
@@ -28,6 +28,7 @@ struct nlm_lock { | |||
28 | int len; /* length of "caller" */ | 28 | int len; /* length of "caller" */ |
29 | struct nfs_fh fh; | 29 | struct nfs_fh fh; |
30 | struct xdr_netobj oh; | 30 | struct xdr_netobj oh; |
31 | u32 svid; | ||
31 | struct file_lock fl; | 32 | struct file_lock fl; |
32 | }; | 33 | }; |
33 | 34 | ||
diff --git a/include/linux/loop.h b/include/linux/loop.h index f96506782ebe..e76c7611d6cc 100644 --- a/include/linux/loop.h +++ b/include/linux/loop.h | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/bio.h> | 17 | #include <linux/bio.h> |
18 | #include <linux/blkdev.h> | 18 | #include <linux/blkdev.h> |
19 | #include <linux/spinlock.h> | 19 | #include <linux/spinlock.h> |
20 | #include <linux/mutex.h> | ||
20 | 21 | ||
21 | /* Possible states of device */ | 22 | /* Possible states of device */ |
22 | enum { | 23 | enum { |
@@ -60,7 +61,7 @@ struct loop_device { | |||
60 | int lo_state; | 61 | int lo_state; |
61 | struct completion lo_done; | 62 | struct completion lo_done; |
62 | struct completion lo_bh_done; | 63 | struct completion lo_bh_done; |
63 | struct semaphore lo_ctl_mutex; | 64 | struct mutex lo_ctl_mutex; |
64 | int lo_pending; | 65 | int lo_pending; |
65 | 66 | ||
66 | request_queue_t *lo_queue; | 67 | request_queue_t *lo_queue; |
diff --git a/include/linux/major.h b/include/linux/major.h index e36a46702d94..0a74c52924c9 100644 --- a/include/linux/major.h +++ b/include/linux/major.h | |||
@@ -113,6 +113,7 @@ | |||
113 | 113 | ||
114 | #define UBD_MAJOR 98 | 114 | #define UBD_MAJOR 98 |
115 | 115 | ||
116 | #define PP_MAJOR 99 | ||
116 | #define JSFD_MAJOR 99 | 117 | #define JSFD_MAJOR 99 |
117 | 118 | ||
118 | #define PHONE_MAJOR 100 | 119 | #define PHONE_MAJOR 100 |
diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h index bbd2221923c3..6a7621b2b12b 100644 --- a/include/linux/mempolicy.h +++ b/include/linux/mempolicy.h | |||
@@ -147,6 +147,7 @@ extern void mpol_rebind_policy(struct mempolicy *pol, const nodemask_t *new); | |||
147 | extern void mpol_rebind_task(struct task_struct *tsk, | 147 | extern void mpol_rebind_task(struct task_struct *tsk, |
148 | const nodemask_t *new); | 148 | const nodemask_t *new); |
149 | extern void mpol_rebind_mm(struct mm_struct *mm, nodemask_t *new); | 149 | extern void mpol_rebind_mm(struct mm_struct *mm, nodemask_t *new); |
150 | extern void mpol_fix_fork_child_flag(struct task_struct *p); | ||
150 | #define set_cpuset_being_rebound(x) (cpuset_being_rebound = (x)) | 151 | #define set_cpuset_being_rebound(x) (cpuset_being_rebound = (x)) |
151 | 152 | ||
152 | #ifdef CONFIG_CPUSET | 153 | #ifdef CONFIG_CPUSET |
@@ -248,6 +249,10 @@ static inline void mpol_rebind_mm(struct mm_struct *mm, nodemask_t *new) | |||
248 | { | 249 | { |
249 | } | 250 | } |
250 | 251 | ||
252 | static inline void mpol_fix_fork_child_flag(struct task_struct *p) | ||
253 | { | ||
254 | } | ||
255 | |||
251 | #define set_cpuset_being_rebound(x) do {} while (0) | 256 | #define set_cpuset_being_rebound(x) do {} while (0) |
252 | 257 | ||
253 | static inline struct zonelist *huge_zonelist(struct vm_area_struct *vma, | 258 | static inline struct zonelist *huge_zonelist(struct vm_area_struct *vma, |
diff --git a/include/linux/module.h b/include/linux/module.h index 70bd843c71cb..eaec13ddd667 100644 --- a/include/linux/module.h +++ b/include/linux/module.h | |||
@@ -183,6 +183,7 @@ void *__symbol_get_gpl(const char *symbol); | |||
183 | 183 | ||
184 | /* For every exported symbol, place a struct in the __ksymtab section */ | 184 | /* For every exported symbol, place a struct in the __ksymtab section */ |
185 | #define __EXPORT_SYMBOL(sym, sec) \ | 185 | #define __EXPORT_SYMBOL(sym, sec) \ |
186 | extern typeof(sym) sym; \ | ||
186 | __CRC_SYMBOL(sym, sec) \ | 187 | __CRC_SYMBOL(sym, sec) \ |
187 | static const char __kstrtab_##sym[] \ | 188 | static const char __kstrtab_##sym[] \ |
188 | __attribute__((section("__ksymtab_strings"))) \ | 189 | __attribute__((section("__ksymtab_strings"))) \ |
@@ -554,25 +555,6 @@ static inline void module_remove_driver(struct device_driver *driver) | |||
554 | 555 | ||
555 | /* BELOW HERE ALL THESE ARE OBSOLETE AND WILL VANISH */ | 556 | /* BELOW HERE ALL THESE ARE OBSOLETE AND WILL VANISH */ |
556 | 557 | ||
557 | struct obsolete_modparm { | ||
558 | char name[64]; | ||
559 | char type[64-sizeof(void *)]; | ||
560 | void *addr; | ||
561 | }; | ||
562 | |||
563 | static inline void MODULE_PARM_(void) { } | ||
564 | #ifdef MODULE | ||
565 | /* DEPRECATED: Do not use. */ | ||
566 | #define MODULE_PARM(var,type) \ | ||
567 | extern struct obsolete_modparm __parm_##var \ | ||
568 | __attribute__((section("__obsparm"))); \ | ||
569 | struct obsolete_modparm __parm_##var = \ | ||
570 | { __stringify(var), type, &MODULE_PARM_ }; \ | ||
571 | __MODULE_PARM_TYPE(var, type); | ||
572 | #else | ||
573 | #define MODULE_PARM(var,type) static void __attribute__((__unused__)) *__parm_##var = &MODULE_PARM_; | ||
574 | #endif | ||
575 | |||
576 | #define __MODULE_STRING(x) __stringify(x) | 558 | #define __MODULE_STRING(x) __stringify(x) |
577 | 559 | ||
578 | /* Use symbol_get and symbol_put instead. You'll thank me. */ | 560 | /* Use symbol_get and symbol_put instead. You'll thank me. */ |
diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h index b5c98c43779e..7c0c2c198f1f 100644 --- a/include/linux/moduleparam.h +++ b/include/linux/moduleparam.h | |||
@@ -162,13 +162,6 @@ extern int param_array_get(char *buffer, struct kernel_param *kp); | |||
162 | extern int param_set_copystring(const char *val, struct kernel_param *kp); | 162 | extern int param_set_copystring(const char *val, struct kernel_param *kp); |
163 | extern int param_get_string(char *buffer, struct kernel_param *kp); | 163 | extern int param_get_string(char *buffer, struct kernel_param *kp); |
164 | 164 | ||
165 | int param_array(const char *name, | ||
166 | const char *val, | ||
167 | unsigned int min, unsigned int max, | ||
168 | void *elem, int elemsize, | ||
169 | int (*set)(const char *, struct kernel_param *kp), | ||
170 | int *num); | ||
171 | |||
172 | /* for exporting parameters in /sys/parameters */ | 165 | /* for exporting parameters in /sys/parameters */ |
173 | 166 | ||
174 | struct module; | 167 | struct module; |
diff --git a/include/linux/msdos_fs.h b/include/linux/msdos_fs.h index 8bcd9450d926..779e6a5744c7 100644 --- a/include/linux/msdos_fs.h +++ b/include/linux/msdos_fs.h | |||
@@ -184,6 +184,7 @@ struct fat_slot_info { | |||
184 | #include <linux/string.h> | 184 | #include <linux/string.h> |
185 | #include <linux/nls.h> | 185 | #include <linux/nls.h> |
186 | #include <linux/fs.h> | 186 | #include <linux/fs.h> |
187 | #include <linux/mutex.h> | ||
187 | 188 | ||
188 | struct fat_mount_options { | 189 | struct fat_mount_options { |
189 | uid_t fs_uid; | 190 | uid_t fs_uid; |
@@ -226,7 +227,7 @@ struct msdos_sb_info { | |||
226 | unsigned long max_cluster; /* maximum cluster number */ | 227 | unsigned long max_cluster; /* maximum cluster number */ |
227 | unsigned long root_cluster; /* first cluster of the root directory */ | 228 | unsigned long root_cluster; /* first cluster of the root directory */ |
228 | unsigned long fsinfo_sector; /* sector number of FAT32 fsinfo */ | 229 | unsigned long fsinfo_sector; /* sector number of FAT32 fsinfo */ |
229 | struct semaphore fat_lock; | 230 | struct mutex fat_lock; |
230 | unsigned int prev_free; /* previously allocated cluster number */ | 231 | unsigned int prev_free; /* previously allocated cluster number */ |
231 | unsigned int free_clusters; /* -1 if undefined */ | 232 | unsigned int free_clusters; /* -1 if undefined */ |
232 | struct fat_mount_options options; | 233 | struct fat_mount_options options; |
diff --git a/include/linux/nbd.h b/include/linux/nbd.h index f95d51fae733..a6ce409ec6fc 100644 --- a/include/linux/nbd.h +++ b/include/linux/nbd.h | |||
@@ -38,6 +38,7 @@ enum { | |||
38 | #ifdef __KERNEL__ | 38 | #ifdef __KERNEL__ |
39 | 39 | ||
40 | #include <linux/wait.h> | 40 | #include <linux/wait.h> |
41 | #include <linux/mutex.h> | ||
41 | 42 | ||
42 | /* values for flags field */ | 43 | /* values for flags field */ |
43 | #define NBD_READ_ONLY 0x0001 | 44 | #define NBD_READ_ONLY 0x0001 |
@@ -57,7 +58,7 @@ struct nbd_device { | |||
57 | struct request *active_req; | 58 | struct request *active_req; |
58 | wait_queue_head_t active_wq; | 59 | wait_queue_head_t active_wq; |
59 | 60 | ||
60 | struct semaphore tx_lock; | 61 | struct mutex tx_lock; |
61 | struct gendisk *disk; | 62 | struct gendisk *disk; |
62 | int blksize; | 63 | int blksize; |
63 | u64 bytesize; | 64 | u64 bytesize; |
diff --git a/include/linux/ncp_fs_i.h b/include/linux/ncp_fs_i.h index 415be1ec6f98..bdb4c8ae6924 100644 --- a/include/linux/ncp_fs_i.h +++ b/include/linux/ncp_fs_i.h | |||
@@ -19,7 +19,7 @@ struct ncp_inode_info { | |||
19 | __le32 DosDirNum; | 19 | __le32 DosDirNum; |
20 | __u8 volNumber; | 20 | __u8 volNumber; |
21 | __le32 nwattr; | 21 | __le32 nwattr; |
22 | struct semaphore open_sem; | 22 | struct mutex open_mutex; |
23 | atomic_t opened; | 23 | atomic_t opened; |
24 | int access; | 24 | int access; |
25 | int flags; | 25 | int flags; |
diff --git a/include/linux/ncp_fs_sb.h b/include/linux/ncp_fs_sb.h index cf858eb80f0b..b089d9506283 100644 --- a/include/linux/ncp_fs_sb.h +++ b/include/linux/ncp_fs_sb.h | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/types.h> | 11 | #include <linux/types.h> |
12 | #include <linux/ncp_mount.h> | 12 | #include <linux/ncp_mount.h> |
13 | #include <linux/net.h> | 13 | #include <linux/net.h> |
14 | #include <linux/mutex.h> | ||
14 | 15 | ||
15 | #ifdef __KERNEL__ | 16 | #ifdef __KERNEL__ |
16 | 17 | ||
@@ -51,7 +52,7 @@ struct ncp_server { | |||
51 | receive replies */ | 52 | receive replies */ |
52 | 53 | ||
53 | int lock; /* To prevent mismatch in protocols. */ | 54 | int lock; /* To prevent mismatch in protocols. */ |
54 | struct semaphore sem; | 55 | struct mutex mutex; |
55 | 56 | ||
56 | int current_size; /* for packet preparation */ | 57 | int current_size; /* for packet preparation */ |
57 | int has_subfunction; | 58 | int has_subfunction; |
@@ -96,7 +97,7 @@ struct ncp_server { | |||
96 | struct { | 97 | struct { |
97 | struct work_struct tq; /* STREAM/DGRAM: data/error ready */ | 98 | struct work_struct tq; /* STREAM/DGRAM: data/error ready */ |
98 | struct ncp_request_reply* creq; /* STREAM/DGRAM: awaiting reply from this request */ | 99 | struct ncp_request_reply* creq; /* STREAM/DGRAM: awaiting reply from this request */ |
99 | struct semaphore creq_sem; /* DGRAM only: lock accesses to rcv.creq */ | 100 | struct mutex creq_mutex; /* DGRAM only: lock accesses to rcv.creq */ |
100 | 101 | ||
101 | unsigned int state; /* STREAM only: receiver state */ | 102 | unsigned int state; /* STREAM only: receiver state */ |
102 | struct { | 103 | struct { |
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index b4dc6e2e10c9..cbebd7d1b9e8 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
@@ -56,9 +56,7 @@ | |||
56 | * When flushing a cluster of dirty pages, there can be different | 56 | * When flushing a cluster of dirty pages, there can be different |
57 | * strategies: | 57 | * strategies: |
58 | */ | 58 | */ |
59 | #define FLUSH_AGING 0 /* only flush old buffers */ | ||
60 | #define FLUSH_SYNC 1 /* file being synced, or contention */ | 59 | #define FLUSH_SYNC 1 /* file being synced, or contention */ |
61 | #define FLUSH_WAIT 2 /* wait for completion */ | ||
62 | #define FLUSH_STABLE 4 /* commit to stable storage */ | 60 | #define FLUSH_STABLE 4 /* commit to stable storage */ |
63 | #define FLUSH_LOWPRI 8 /* low priority background flush */ | 61 | #define FLUSH_LOWPRI 8 /* low priority background flush */ |
64 | #define FLUSH_HIGHPRI 16 /* high priority memory reclaim flush */ | 62 | #define FLUSH_HIGHPRI 16 /* high priority memory reclaim flush */ |
@@ -78,6 +76,7 @@ struct nfs_access_entry { | |||
78 | struct nfs4_state; | 76 | struct nfs4_state; |
79 | struct nfs_open_context { | 77 | struct nfs_open_context { |
80 | atomic_t count; | 78 | atomic_t count; |
79 | struct vfsmount *vfsmnt; | ||
81 | struct dentry *dentry; | 80 | struct dentry *dentry; |
82 | struct rpc_cred *cred; | 81 | struct rpc_cred *cred; |
83 | struct nfs4_state *state; | 82 | struct nfs4_state *state; |
@@ -118,8 +117,7 @@ struct nfs_inode { | |||
118 | unsigned long cache_validity; /* bit mask */ | 117 | unsigned long cache_validity; /* bit mask */ |
119 | 118 | ||
120 | /* | 119 | /* |
121 | * read_cache_jiffies is when we started read-caching this inode, | 120 | * read_cache_jiffies is when we started read-caching this inode. |
122 | * and read_cache_mtime is the mtime of the inode at that time. | ||
123 | * attrtimeo is for how long the cached information is assumed | 121 | * attrtimeo is for how long the cached information is assumed |
124 | * to be valid. A successful attribute revalidation doubles | 122 | * to be valid. A successful attribute revalidation doubles |
125 | * attrtimeo (up to acregmax/acdirmax), a failure resets it to | 123 | * attrtimeo (up to acregmax/acdirmax), a failure resets it to |
@@ -128,11 +126,6 @@ struct nfs_inode { | |||
128 | * We need to revalidate the cached attrs for this inode if | 126 | * We need to revalidate the cached attrs for this inode if |
129 | * | 127 | * |
130 | * jiffies - read_cache_jiffies > attrtimeo | 128 | * jiffies - read_cache_jiffies > attrtimeo |
131 | * | ||
132 | * and invalidate any cached data/flush out any dirty pages if | ||
133 | * we find that | ||
134 | * | ||
135 | * mtime != read_cache_mtime | ||
136 | */ | 129 | */ |
137 | unsigned long read_cache_jiffies; | 130 | unsigned long read_cache_jiffies; |
138 | unsigned long attrtimeo; | 131 | unsigned long attrtimeo; |
@@ -311,12 +304,9 @@ extern void nfs_begin_attr_update(struct inode *); | |||
311 | extern void nfs_end_attr_update(struct inode *); | 304 | extern void nfs_end_attr_update(struct inode *); |
312 | extern void nfs_begin_data_update(struct inode *); | 305 | extern void nfs_begin_data_update(struct inode *); |
313 | extern void nfs_end_data_update(struct inode *); | 306 | extern void nfs_end_data_update(struct inode *); |
314 | extern struct nfs_open_context *alloc_nfs_open_context(struct dentry *dentry, struct rpc_cred *cred); | ||
315 | extern struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx); | 307 | extern struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx); |
316 | extern void put_nfs_open_context(struct nfs_open_context *ctx); | 308 | extern void put_nfs_open_context(struct nfs_open_context *ctx); |
317 | extern void nfs_file_set_open_context(struct file *filp, struct nfs_open_context *ctx); | ||
318 | extern struct nfs_open_context *nfs_find_open_context(struct inode *inode, struct rpc_cred *cred, int mode); | 309 | extern struct nfs_open_context *nfs_find_open_context(struct inode *inode, struct rpc_cred *cred, int mode); |
319 | extern void nfs_file_clear_open_context(struct file *filp); | ||
320 | 310 | ||
321 | /* linux/net/ipv4/ipconfig.c: trims ip addr off front of name, too. */ | 311 | /* linux/net/ipv4/ipconfig.c: trims ip addr off front of name, too. */ |
322 | extern u32 root_nfs_parse_addr(char *name); /*__init*/ | 312 | extern u32 root_nfs_parse_addr(char *name); /*__init*/ |
@@ -415,21 +405,22 @@ extern int nfs_writepage(struct page *page, struct writeback_control *wbc); | |||
415 | extern int nfs_writepages(struct address_space *, struct writeback_control *); | 405 | extern int nfs_writepages(struct address_space *, struct writeback_control *); |
416 | extern int nfs_flush_incompatible(struct file *file, struct page *page); | 406 | extern int nfs_flush_incompatible(struct file *file, struct page *page); |
417 | extern int nfs_updatepage(struct file *, struct page *, unsigned int, unsigned int); | 407 | extern int nfs_updatepage(struct file *, struct page *, unsigned int, unsigned int); |
418 | extern void nfs_writeback_done(struct rpc_task *task, void *data); | 408 | extern int nfs_writeback_done(struct rpc_task *, struct nfs_write_data *); |
419 | extern void nfs_writedata_release(void *data); | 409 | extern void nfs_writedata_release(void *); |
420 | 410 | ||
421 | #if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4) | 411 | #if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4) |
422 | extern void nfs_commit_done(struct rpc_task *, void *data); | 412 | struct nfs_write_data *nfs_commit_alloc(unsigned int pagecount); |
423 | extern void nfs_commit_release(void *data); | 413 | void nfs_commit_free(struct nfs_write_data *p); |
424 | #endif | 414 | #endif |
425 | 415 | ||
426 | /* | 416 | /* |
427 | * Try to write back everything synchronously (but check the | 417 | * Try to write back everything synchronously (but check the |
428 | * return value!) | 418 | * return value!) |
429 | */ | 419 | */ |
430 | extern int nfs_sync_inode(struct inode *, unsigned long, unsigned int, int); | 420 | extern int nfs_sync_inode_wait(struct inode *, unsigned long, unsigned int, int); |
431 | #if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4) | 421 | #if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4) |
432 | extern int nfs_commit_inode(struct inode *, int); | 422 | extern int nfs_commit_inode(struct inode *, int); |
423 | extern void nfs_commit_release(void *wdata); | ||
433 | #else | 424 | #else |
434 | static inline int | 425 | static inline int |
435 | nfs_commit_inode(struct inode *inode, int how) | 426 | nfs_commit_inode(struct inode *inode, int how) |
@@ -447,7 +438,7 @@ nfs_have_writebacks(struct inode *inode) | |||
447 | static inline int | 438 | static inline int |
448 | nfs_wb_all(struct inode *inode) | 439 | nfs_wb_all(struct inode *inode) |
449 | { | 440 | { |
450 | int error = nfs_sync_inode(inode, 0, 0, FLUSH_WAIT); | 441 | int error = nfs_sync_inode_wait(inode, 0, 0, 0); |
451 | return (error < 0) ? error : 0; | 442 | return (error < 0) ? error : 0; |
452 | } | 443 | } |
453 | 444 | ||
@@ -456,8 +447,8 @@ nfs_wb_all(struct inode *inode) | |||
456 | */ | 447 | */ |
457 | static inline int nfs_wb_page_priority(struct inode *inode, struct page* page, int how) | 448 | static inline int nfs_wb_page_priority(struct inode *inode, struct page* page, int how) |
458 | { | 449 | { |
459 | int error = nfs_sync_inode(inode, page->index, 1, | 450 | int error = nfs_sync_inode_wait(inode, page->index, 1, |
460 | how | FLUSH_WAIT | FLUSH_STABLE); | 451 | how | FLUSH_STABLE); |
461 | return (error < 0) ? error : 0; | 452 | return (error < 0) ? error : 0; |
462 | } | 453 | } |
463 | 454 | ||
@@ -469,37 +460,8 @@ static inline int nfs_wb_page(struct inode *inode, struct page* page) | |||
469 | /* | 460 | /* |
470 | * Allocate and free nfs_write_data structures | 461 | * Allocate and free nfs_write_data structures |
471 | */ | 462 | */ |
472 | extern mempool_t *nfs_wdata_mempool; | 463 | extern struct nfs_write_data *nfs_writedata_alloc(unsigned int pagecount); |
473 | 464 | extern void nfs_writedata_free(struct nfs_write_data *p); | |
474 | static inline struct nfs_write_data *nfs_writedata_alloc(unsigned int pagecount) | ||
475 | { | ||
476 | struct nfs_write_data *p = mempool_alloc(nfs_wdata_mempool, SLAB_NOFS); | ||
477 | |||
478 | if (p) { | ||
479 | memset(p, 0, sizeof(*p)); | ||
480 | INIT_LIST_HEAD(&p->pages); | ||
481 | if (pagecount < NFS_PAGEVEC_SIZE) | ||
482 | p->pagevec = &p->page_array[0]; | ||
483 | else { | ||
484 | size_t size = ++pagecount * sizeof(struct page *); | ||
485 | p->pagevec = kmalloc(size, GFP_NOFS); | ||
486 | if (p->pagevec) { | ||
487 | memset(p->pagevec, 0, size); | ||
488 | } else { | ||
489 | mempool_free(p, nfs_wdata_mempool); | ||
490 | p = NULL; | ||
491 | } | ||
492 | } | ||
493 | } | ||
494 | return p; | ||
495 | } | ||
496 | |||
497 | static inline void nfs_writedata_free(struct nfs_write_data *p) | ||
498 | { | ||
499 | if (p && (p->pagevec != &p->page_array[0])) | ||
500 | kfree(p->pagevec); | ||
501 | mempool_free(p, nfs_wdata_mempool); | ||
502 | } | ||
503 | 465 | ||
504 | /* | 466 | /* |
505 | * linux/fs/nfs/read.c | 467 | * linux/fs/nfs/read.c |
@@ -507,44 +469,14 @@ static inline void nfs_writedata_free(struct nfs_write_data *p) | |||
507 | extern int nfs_readpage(struct file *, struct page *); | 469 | extern int nfs_readpage(struct file *, struct page *); |
508 | extern int nfs_readpages(struct file *, struct address_space *, | 470 | extern int nfs_readpages(struct file *, struct address_space *, |
509 | struct list_head *, unsigned); | 471 | struct list_head *, unsigned); |
510 | extern void nfs_readpage_result(struct rpc_task *, void *); | 472 | extern int nfs_readpage_result(struct rpc_task *, struct nfs_read_data *); |
511 | extern void nfs_readdata_release(void *data); | 473 | extern void nfs_readdata_release(void *data); |
512 | |||
513 | 474 | ||
514 | /* | 475 | /* |
515 | * Allocate and free nfs_read_data structures | 476 | * Allocate and free nfs_read_data structures |
516 | */ | 477 | */ |
517 | extern mempool_t *nfs_rdata_mempool; | 478 | extern struct nfs_read_data *nfs_readdata_alloc(unsigned int pagecount); |
518 | 479 | extern void nfs_readdata_free(struct nfs_read_data *p); | |
519 | static inline struct nfs_read_data *nfs_readdata_alloc(unsigned int pagecount) | ||
520 | { | ||
521 | struct nfs_read_data *p = mempool_alloc(nfs_rdata_mempool, SLAB_NOFS); | ||
522 | |||
523 | if (p) { | ||
524 | memset(p, 0, sizeof(*p)); | ||
525 | INIT_LIST_HEAD(&p->pages); | ||
526 | if (pagecount < NFS_PAGEVEC_SIZE) | ||
527 | p->pagevec = &p->page_array[0]; | ||
528 | else { | ||
529 | size_t size = ++pagecount * sizeof(struct page *); | ||
530 | p->pagevec = kmalloc(size, GFP_NOFS); | ||
531 | if (p->pagevec) { | ||
532 | memset(p->pagevec, 0, size); | ||
533 | } else { | ||
534 | mempool_free(p, nfs_rdata_mempool); | ||
535 | p = NULL; | ||
536 | } | ||
537 | } | ||
538 | } | ||
539 | return p; | ||
540 | } | ||
541 | |||
542 | static inline void nfs_readdata_free(struct nfs_read_data *p) | ||
543 | { | ||
544 | if (p && (p->pagevec != &p->page_array[0])) | ||
545 | kfree(p->pagevec); | ||
546 | mempool_free(p, nfs_rdata_mempool); | ||
547 | } | ||
548 | 480 | ||
549 | /* | 481 | /* |
550 | * linux/fs/nfs3proc.c | 482 | * linux/fs/nfs3proc.c |
diff --git a/include/linux/nfs_fs_i.h b/include/linux/nfs_fs_i.h index e2c18dabff86..861730275ba0 100644 --- a/include/linux/nfs_fs_i.h +++ b/include/linux/nfs_fs_i.h | |||
@@ -12,8 +12,8 @@ struct nlm_lockowner; | |||
12 | */ | 12 | */ |
13 | struct nfs_lock_info { | 13 | struct nfs_lock_info { |
14 | u32 state; | 14 | u32 state; |
15 | u32 flags; | ||
16 | struct nlm_lockowner *owner; | 15 | struct nlm_lockowner *owner; |
16 | struct list_head list; | ||
17 | }; | 17 | }; |
18 | 18 | ||
19 | struct nfs4_lock_state; | 19 | struct nfs4_lock_state; |
@@ -21,10 +21,4 @@ struct nfs4_lock_info { | |||
21 | struct nfs4_lock_state *owner; | 21 | struct nfs4_lock_state *owner; |
22 | }; | 22 | }; |
23 | 23 | ||
24 | /* | ||
25 | * Lock flag values | ||
26 | */ | ||
27 | #define NFS_LCK_GRANTED 0x0001 /* lock has been granted */ | ||
28 | #define NFS_LCK_RECLAIM 0x0002 /* lock marked for reclaiming */ | ||
29 | |||
30 | #endif | 24 | #endif |
diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h index 3d3a305488cf..65dec21af774 100644 --- a/include/linux/nfs_fs_sb.h +++ b/include/linux/nfs_fs_sb.h | |||
@@ -4,6 +4,8 @@ | |||
4 | #include <linux/list.h> | 4 | #include <linux/list.h> |
5 | #include <linux/backing-dev.h> | 5 | #include <linux/backing-dev.h> |
6 | 6 | ||
7 | struct nfs_iostats; | ||
8 | |||
7 | /* | 9 | /* |
8 | * NFS client parameters stored in the superblock. | 10 | * NFS client parameters stored in the superblock. |
9 | */ | 11 | */ |
@@ -12,6 +14,7 @@ struct nfs_server { | |||
12 | struct rpc_clnt * client_sys; /* 2nd handle for FSINFO */ | 14 | struct rpc_clnt * client_sys; /* 2nd handle for FSINFO */ |
13 | struct rpc_clnt * client_acl; /* ACL RPC client handle */ | 15 | struct rpc_clnt * client_acl; /* ACL RPC client handle */ |
14 | struct nfs_rpc_ops * rpc_ops; /* NFS protocol vector */ | 16 | struct nfs_rpc_ops * rpc_ops; /* NFS protocol vector */ |
17 | struct nfs_iostats * io_stats; /* I/O statistics */ | ||
15 | struct backing_dev_info backing_dev_info; | 18 | struct backing_dev_info backing_dev_info; |
16 | int flags; /* various flags */ | 19 | int flags; /* various flags */ |
17 | unsigned int caps; /* server capabilities */ | 20 | unsigned int caps; /* server capabilities */ |
@@ -26,10 +29,13 @@ struct nfs_server { | |||
26 | unsigned int acregmax; | 29 | unsigned int acregmax; |
27 | unsigned int acdirmin; | 30 | unsigned int acdirmin; |
28 | unsigned int acdirmax; | 31 | unsigned int acdirmax; |
32 | unsigned long retrans_timeo; /* retransmit timeout */ | ||
33 | unsigned int retrans_count; /* number of retransmit tries */ | ||
29 | unsigned int namelen; | 34 | unsigned int namelen; |
30 | char * hostname; /* remote hostname */ | 35 | char * hostname; /* remote hostname */ |
31 | struct nfs_fh fh; | 36 | struct nfs_fh fh; |
32 | struct sockaddr_in addr; | 37 | struct sockaddr_in addr; |
38 | unsigned long mount_time; /* when this fs was mounted */ | ||
33 | #ifdef CONFIG_NFS_V4 | 39 | #ifdef CONFIG_NFS_V4 |
34 | /* Our own IP address, as a null-terminated string. | 40 | /* Our own IP address, as a null-terminated string. |
35 | * This is used to generate the clientid, and the callback address. | 41 | * This is used to generate the clientid, and the callback address. |
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index 6d6f69ec5675..7fafc4c546b7 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h | |||
@@ -695,7 +695,6 @@ struct nfs_read_data { | |||
695 | #ifdef CONFIG_NFS_V4 | 695 | #ifdef CONFIG_NFS_V4 |
696 | unsigned long timestamp; /* For lease renewal */ | 696 | unsigned long timestamp; /* For lease renewal */ |
697 | #endif | 697 | #endif |
698 | void (*complete) (struct nfs_read_data *, int); | ||
699 | struct page *page_array[NFS_PAGEVEC_SIZE + 1]; | 698 | struct page *page_array[NFS_PAGEVEC_SIZE + 1]; |
700 | }; | 699 | }; |
701 | 700 | ||
@@ -714,7 +713,6 @@ struct nfs_write_data { | |||
714 | #ifdef CONFIG_NFS_V4 | 713 | #ifdef CONFIG_NFS_V4 |
715 | unsigned long timestamp; /* For lease renewal */ | 714 | unsigned long timestamp; /* For lease renewal */ |
716 | #endif | 715 | #endif |
717 | void (*complete) (struct nfs_write_data *, int); | ||
718 | struct page *page_array[NFS_PAGEVEC_SIZE + 1]; | 716 | struct page *page_array[NFS_PAGEVEC_SIZE + 1]; |
719 | }; | 717 | }; |
720 | 718 | ||
@@ -769,8 +767,11 @@ struct nfs_rpc_ops { | |||
769 | struct nfs_pathconf *); | 767 | struct nfs_pathconf *); |
770 | u32 * (*decode_dirent)(u32 *, struct nfs_entry *, int plus); | 768 | u32 * (*decode_dirent)(u32 *, struct nfs_entry *, int plus); |
771 | void (*read_setup) (struct nfs_read_data *); | 769 | void (*read_setup) (struct nfs_read_data *); |
770 | int (*read_done) (struct rpc_task *, struct nfs_read_data *); | ||
772 | void (*write_setup) (struct nfs_write_data *, int how); | 771 | void (*write_setup) (struct nfs_write_data *, int how); |
772 | int (*write_done) (struct rpc_task *, struct nfs_write_data *); | ||
773 | void (*commit_setup) (struct nfs_write_data *, int how); | 773 | void (*commit_setup) (struct nfs_write_data *, int how); |
774 | int (*commit_done) (struct rpc_task *, struct nfs_write_data *); | ||
774 | int (*file_open) (struct inode *, struct file *); | 775 | int (*file_open) (struct inode *, struct file *); |
775 | int (*file_release) (struct inode *, struct file *); | 776 | int (*file_release) (struct inode *, struct file *); |
776 | int (*lock)(struct file *, int, struct file_lock *); | 777 | int (*lock)(struct file *, int, struct file_lock *); |
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index ee700c6eb442..839f0b3c23aa 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h | |||
@@ -51,6 +51,10 @@ static inline void mapping_set_gfp_mask(struct address_space *m, gfp_t mask) | |||
51 | #define page_cache_release(page) put_page(page) | 51 | #define page_cache_release(page) put_page(page) |
52 | void release_pages(struct page **pages, int nr, int cold); | 52 | void release_pages(struct page **pages, int nr, int cold); |
53 | 53 | ||
54 | #ifdef CONFIG_NUMA | ||
55 | extern struct page *page_cache_alloc(struct address_space *x); | ||
56 | extern struct page *page_cache_alloc_cold(struct address_space *x); | ||
57 | #else | ||
54 | static inline struct page *page_cache_alloc(struct address_space *x) | 58 | static inline struct page *page_cache_alloc(struct address_space *x) |
55 | { | 59 | { |
56 | return alloc_pages(mapping_gfp_mask(x), 0); | 60 | return alloc_pages(mapping_gfp_mask(x), 0); |
@@ -60,6 +64,7 @@ static inline struct page *page_cache_alloc_cold(struct address_space *x) | |||
60 | { | 64 | { |
61 | return alloc_pages(mapping_gfp_mask(x)|__GFP_COLD, 0); | 65 | return alloc_pages(mapping_gfp_mask(x)|__GFP_COLD, 0); |
62 | } | 66 | } |
67 | #endif | ||
63 | 68 | ||
64 | typedef int filler_t(void *, struct page *); | 69 | typedef int filler_t(void *, struct page *); |
65 | 70 | ||
diff --git a/include/linux/pci.h b/include/linux/pci.h index fe1a2b02fc55..0aad5a378e95 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -95,6 +95,11 @@ enum pci_channel_state { | |||
95 | pci_channel_io_perm_failure = (__force pci_channel_state_t) 3, | 95 | pci_channel_io_perm_failure = (__force pci_channel_state_t) 3, |
96 | }; | 96 | }; |
97 | 97 | ||
98 | typedef unsigned short __bitwise pci_bus_flags_t; | ||
99 | enum pci_bus_flags { | ||
100 | PCI_BUS_FLAGS_NO_MSI = (pci_bus_flags_t) 1, | ||
101 | }; | ||
102 | |||
98 | /* | 103 | /* |
99 | * The pci_dev structure is used to describe PCI devices. | 104 | * The pci_dev structure is used to describe PCI devices. |
100 | */ | 105 | */ |
@@ -203,7 +208,7 @@ struct pci_bus { | |||
203 | char name[48]; | 208 | char name[48]; |
204 | 209 | ||
205 | unsigned short bridge_ctl; /* manage NO_ISA/FBB/et al behaviors */ | 210 | unsigned short bridge_ctl; /* manage NO_ISA/FBB/et al behaviors */ |
206 | unsigned short pad2; | 211 | pci_bus_flags_t bus_flags; /* Inherited by child busses */ |
207 | struct device *bridge; | 212 | struct device *bridge; |
208 | struct class_device class_dev; | 213 | struct class_device class_dev; |
209 | struct bin_attribute *legacy_io; /* legacy I/O for this bus */ | 214 | struct bin_attribute *legacy_io; /* legacy I/O for this bus */ |
@@ -485,9 +490,9 @@ void pdev_sort_resources(struct pci_dev *, struct resource_list *); | |||
485 | void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *), | 490 | void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *), |
486 | int (*)(struct pci_dev *, u8, u8)); | 491 | int (*)(struct pci_dev *, u8, u8)); |
487 | #define HAVE_PCI_REQ_REGIONS 2 | 492 | #define HAVE_PCI_REQ_REGIONS 2 |
488 | int pci_request_regions(struct pci_dev *, char *); | 493 | int pci_request_regions(struct pci_dev *, const char *); |
489 | void pci_release_regions(struct pci_dev *); | 494 | void pci_release_regions(struct pci_dev *); |
490 | int pci_request_region(struct pci_dev *, int, char *); | 495 | int pci_request_region(struct pci_dev *, int, const char *); |
491 | void pci_release_region(struct pci_dev *, int); | 496 | void pci_release_region(struct pci_dev *, int); |
492 | 497 | ||
493 | /* drivers/pci/bus.c */ | 498 | /* drivers/pci/bus.c */ |
@@ -516,6 +521,7 @@ int pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max, int pass | |||
516 | void pci_walk_bus(struct pci_bus *top, void (*cb)(struct pci_dev *, void *), | 521 | void pci_walk_bus(struct pci_bus *top, void (*cb)(struct pci_dev *, void *), |
517 | void *userdata); | 522 | void *userdata); |
518 | int pci_cfg_space_size(struct pci_dev *dev); | 523 | int pci_cfg_space_size(struct pci_dev *dev); |
524 | unsigned char pci_bus_max_busnr(struct pci_bus* bus); | ||
519 | 525 | ||
520 | /* kmem_cache style wrapper around pci_alloc_consistent() */ | 526 | /* kmem_cache style wrapper around pci_alloc_consistent() */ |
521 | 527 | ||
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index ec3c32932620..6f080ae59286 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -69,6 +69,7 @@ | |||
69 | #define PCI_CLASS_SYSTEM_TIMER 0x0802 | 69 | #define PCI_CLASS_SYSTEM_TIMER 0x0802 |
70 | #define PCI_CLASS_SYSTEM_RTC 0x0803 | 70 | #define PCI_CLASS_SYSTEM_RTC 0x0803 |
71 | #define PCI_CLASS_SYSTEM_PCI_HOTPLUG 0x0804 | 71 | #define PCI_CLASS_SYSTEM_PCI_HOTPLUG 0x0804 |
72 | #define PCI_CLASS_SYSTEM_SDHCI 0x0805 | ||
72 | #define PCI_CLASS_SYSTEM_OTHER 0x0880 | 73 | #define PCI_CLASS_SYSTEM_OTHER 0x0880 |
73 | 74 | ||
74 | #define PCI_BASE_CLASS_INPUT 0x09 | 75 | #define PCI_BASE_CLASS_INPUT 0x09 |
@@ -1371,6 +1372,7 @@ | |||
1371 | #define PCI_DEVICE_ID_SERVERWORKS_OSB4 0x0200 | 1372 | #define PCI_DEVICE_ID_SERVERWORKS_OSB4 0x0200 |
1372 | #define PCI_DEVICE_ID_SERVERWORKS_CSB5 0x0201 | 1373 | #define PCI_DEVICE_ID_SERVERWORKS_CSB5 0x0201 |
1373 | #define PCI_DEVICE_ID_SERVERWORKS_CSB6 0x0203 | 1374 | #define PCI_DEVICE_ID_SERVERWORKS_CSB6 0x0203 |
1375 | #define PCI_DEVICE_ID_SERVERWORKS_HT1000SB 0x0205 | ||
1374 | #define PCI_DEVICE_ID_SERVERWORKS_OSB4IDE 0x0211 | 1376 | #define PCI_DEVICE_ID_SERVERWORKS_OSB4IDE 0x0211 |
1375 | #define PCI_DEVICE_ID_SERVERWORKS_CSB5IDE 0x0212 | 1377 | #define PCI_DEVICE_ID_SERVERWORKS_CSB5IDE 0x0212 |
1376 | #define PCI_DEVICE_ID_SERVERWORKS_CSB6IDE 0x0213 | 1378 | #define PCI_DEVICE_ID_SERVERWORKS_CSB6IDE 0x0213 |
@@ -1864,11 +1866,13 @@ | |||
1864 | #define PCI_DEVICE_ID_TIGON3_5780S 0x166b | 1866 | #define PCI_DEVICE_ID_TIGON3_5780S 0x166b |
1865 | #define PCI_DEVICE_ID_TIGON3_5705F 0x166e | 1867 | #define PCI_DEVICE_ID_TIGON3_5705F 0x166e |
1866 | #define PCI_DEVICE_ID_TIGON3_5754M 0x1672 | 1868 | #define PCI_DEVICE_ID_TIGON3_5754M 0x1672 |
1869 | #define PCI_DEVICE_ID_TIGON3_5755M 0x1673 | ||
1867 | #define PCI_DEVICE_ID_TIGON3_5750 0x1676 | 1870 | #define PCI_DEVICE_ID_TIGON3_5750 0x1676 |
1868 | #define PCI_DEVICE_ID_TIGON3_5751 0x1677 | 1871 | #define PCI_DEVICE_ID_TIGON3_5751 0x1677 |
1869 | #define PCI_DEVICE_ID_TIGON3_5715 0x1678 | 1872 | #define PCI_DEVICE_ID_TIGON3_5715 0x1678 |
1870 | #define PCI_DEVICE_ID_TIGON3_5715S 0x1679 | 1873 | #define PCI_DEVICE_ID_TIGON3_5715S 0x1679 |
1871 | #define PCI_DEVICE_ID_TIGON3_5754 0x167a | 1874 | #define PCI_DEVICE_ID_TIGON3_5754 0x167a |
1875 | #define PCI_DEVICE_ID_TIGON3_5755 0x167b | ||
1872 | #define PCI_DEVICE_ID_TIGON3_5750M 0x167c | 1876 | #define PCI_DEVICE_ID_TIGON3_5750M 0x167c |
1873 | #define PCI_DEVICE_ID_TIGON3_5751M 0x167d | 1877 | #define PCI_DEVICE_ID_TIGON3_5751M 0x167d |
1874 | #define PCI_DEVICE_ID_TIGON3_5751F 0x167e | 1878 | #define PCI_DEVICE_ID_TIGON3_5751F 0x167e |
diff --git a/include/linux/platform.h b/include/linux/platform.h deleted file mode 100644 index 3c33084a6ec2..000000000000 --- a/include/linux/platform.h +++ /dev/null | |||
@@ -1,43 +0,0 @@ | |||
1 | /* | ||
2 | * include/linux/platform.h - platform driver definitions | ||
3 | * | ||
4 | * Because of the prolific consumerism of the average American, | ||
5 | * and the dominant marketing budgets of PC OEMs, we have been | ||
6 | * blessed with frequent updates of the PC architecture. | ||
7 | * | ||
8 | * While most of these calls are singular per architecture, they | ||
9 | * require an extra layer of abstraction on the x86 so the right | ||
10 | * subsystem gets the right call. | ||
11 | * | ||
12 | * Basically, this consolidates the power off and reboot callbacks | ||
13 | * into one structure, as well as adding power management hooks. | ||
14 | * | ||
15 | * When adding a platform driver, please make sure all callbacks are | ||
16 | * filled. There are defaults defined below that do nothing; use those | ||
17 | * if you do not support that callback. | ||
18 | */ | ||
19 | |||
20 | #ifndef _PLATFORM_H_ | ||
21 | #define _PLATFORM_H_ | ||
22 | #ifdef __KERNEL__ | ||
23 | |||
24 | #include <linux/types.h> | ||
25 | |||
26 | struct platform_t { | ||
27 | char * name; | ||
28 | u32 suspend_states; | ||
29 | void (*reboot)(char * cmd); | ||
30 | void (*halt)(void); | ||
31 | void (*power_off)(void); | ||
32 | int (*suspend)(int state, int flags); | ||
33 | void (*idle)(void); | ||
34 | }; | ||
35 | |||
36 | extern struct platform_t * platform; | ||
37 | extern void default_reboot(char * cmd); | ||
38 | extern void default_halt(void); | ||
39 | extern int default_suspend(int state, int flags); | ||
40 | extern void default_idle(void); | ||
41 | |||
42 | #endif /* __KERNEL__ */ | ||
43 | #endif /* _PLATFORM_H */ | ||
diff --git a/include/linux/pm.h b/include/linux/pm.h index 5be87ba3b7ac..6df2585c0169 100644 --- a/include/linux/pm.h +++ b/include/linux/pm.h | |||
@@ -188,6 +188,8 @@ extern void device_power_up(void); | |||
188 | extern void device_resume(void); | 188 | extern void device_resume(void); |
189 | 189 | ||
190 | #ifdef CONFIG_PM | 190 | #ifdef CONFIG_PM |
191 | extern suspend_disk_method_t pm_disk_mode; | ||
192 | |||
191 | extern int device_suspend(pm_message_t state); | 193 | extern int device_suspend(pm_message_t state); |
192 | 194 | ||
193 | #define device_set_wakeup_enable(dev,val) \ | 195 | #define device_set_wakeup_enable(dev,val) \ |
@@ -215,7 +217,6 @@ static inline int dpm_runtime_suspend(struct device * dev, pm_message_t state) | |||
215 | 217 | ||
216 | static inline void dpm_runtime_resume(struct device * dev) | 218 | static inline void dpm_runtime_resume(struct device * dev) |
217 | { | 219 | { |
218 | |||
219 | } | 220 | } |
220 | 221 | ||
221 | #endif | 222 | #endif |
diff --git a/include/linux/ppdev.h b/include/linux/ppdev.h index 141c96586824..f376a7598a78 100644 --- a/include/linux/ppdev.h +++ b/include/linux/ppdev.h | |||
@@ -14,8 +14,6 @@ | |||
14 | * Added PPGETMODES/PPGETMODE/PPGETPHASE, Fred Barnes <frmb2@ukc.ac.uk>, 03/01/2001 | 14 | * Added PPGETMODES/PPGETMODE/PPGETPHASE, Fred Barnes <frmb2@ukc.ac.uk>, 03/01/2001 |
15 | */ | 15 | */ |
16 | 16 | ||
17 | #define PP_MAJOR 99 | ||
18 | |||
19 | #define PP_IOCTL 'p' | 17 | #define PP_IOCTL 'p' |
20 | 18 | ||
21 | /* Set mode for read/write (e.g. IEEE1284_MODE_EPP) */ | 19 | /* Set mode for read/write (e.g. IEEE1284_MODE_EPP) */ |
diff --git a/include/linux/profile.h b/include/linux/profile.h index 026969a5595c..1f2fea6640a4 100644 --- a/include/linux/profile.h +++ b/include/linux/profile.h | |||
@@ -14,6 +14,7 @@ | |||
14 | 14 | ||
15 | struct proc_dir_entry; | 15 | struct proc_dir_entry; |
16 | struct pt_regs; | 16 | struct pt_regs; |
17 | struct notifier_block; | ||
17 | 18 | ||
18 | /* init basic kernel profiler */ | 19 | /* init basic kernel profiler */ |
19 | void __init profile_init(void); | 20 | void __init profile_init(void); |
@@ -32,7 +33,6 @@ enum profile_type { | |||
32 | 33 | ||
33 | #ifdef CONFIG_PROFILING | 34 | #ifdef CONFIG_PROFILING |
34 | 35 | ||
35 | struct notifier_block; | ||
36 | struct task_struct; | 36 | struct task_struct; |
37 | struct mm_struct; | 37 | struct mm_struct; |
38 | 38 | ||
diff --git a/include/linux/quota.h b/include/linux/quota.h index f33aeb22c26a..2dab71e1c3d1 100644 --- a/include/linux/quota.h +++ b/include/linux/quota.h | |||
@@ -38,6 +38,7 @@ | |||
38 | #include <linux/errno.h> | 38 | #include <linux/errno.h> |
39 | #include <linux/types.h> | 39 | #include <linux/types.h> |
40 | #include <linux/spinlock.h> | 40 | #include <linux/spinlock.h> |
41 | #include <linux/mutex.h> | ||
41 | 42 | ||
42 | #define __DQUOT_VERSION__ "dquot_6.5.1" | 43 | #define __DQUOT_VERSION__ "dquot_6.5.1" |
43 | #define __DQUOT_NUM_VERSION__ 6*10000+5*100+1 | 44 | #define __DQUOT_NUM_VERSION__ 6*10000+5*100+1 |
@@ -208,14 +209,13 @@ extern struct dqstats dqstats; | |||
208 | #define DQ_FAKE_B 3 /* no limits only usage */ | 209 | #define DQ_FAKE_B 3 /* no limits only usage */ |
209 | #define DQ_READ_B 4 /* dquot was read into memory */ | 210 | #define DQ_READ_B 4 /* dquot was read into memory */ |
210 | #define DQ_ACTIVE_B 5 /* dquot is active (dquot_release not called) */ | 211 | #define DQ_ACTIVE_B 5 /* dquot is active (dquot_release not called) */ |
211 | #define DQ_WAITFREE_B 6 /* dquot being waited (by invalidate_dquots) */ | ||
212 | 212 | ||
213 | struct dquot { | 213 | struct dquot { |
214 | struct hlist_node dq_hash; /* Hash list in memory */ | 214 | struct hlist_node dq_hash; /* Hash list in memory */ |
215 | struct list_head dq_inuse; /* List of all quotas */ | 215 | struct list_head dq_inuse; /* List of all quotas */ |
216 | struct list_head dq_free; /* Free list element */ | 216 | struct list_head dq_free; /* Free list element */ |
217 | struct list_head dq_dirty; /* List of dirty dquots */ | 217 | struct list_head dq_dirty; /* List of dirty dquots */ |
218 | struct semaphore dq_lock; /* dquot IO lock */ | 218 | struct mutex dq_lock; /* dquot IO lock */ |
219 | atomic_t dq_count; /* Use count */ | 219 | atomic_t dq_count; /* Use count */ |
220 | wait_queue_head_t dq_wait_unused; /* Wait queue for dquot to become unused */ | 220 | wait_queue_head_t dq_wait_unused; /* Wait queue for dquot to become unused */ |
221 | struct super_block *dq_sb; /* superblock this applies to */ | 221 | struct super_block *dq_sb; /* superblock this applies to */ |
@@ -285,8 +285,8 @@ struct quota_format_type { | |||
285 | 285 | ||
286 | struct quota_info { | 286 | struct quota_info { |
287 | unsigned int flags; /* Flags for diskquotas on this device */ | 287 | unsigned int flags; /* Flags for diskquotas on this device */ |
288 | struct semaphore dqio_sem; /* lock device while I/O in progress */ | 288 | struct mutex dqio_mutex; /* lock device while I/O in progress */ |
289 | struct semaphore dqonoff_sem; /* Serialize quotaon & quotaoff */ | 289 | struct mutex dqonoff_mutex; /* Serialize quotaon & quotaoff */ |
290 | struct rw_semaphore dqptr_sem; /* serialize ops using quota_info struct, pointers from inode to dquots */ | 290 | struct rw_semaphore dqptr_sem; /* serialize ops using quota_info struct, pointers from inode to dquots */ |
291 | struct inode *files[MAXQUOTAS]; /* inodes of quotafiles */ | 291 | struct inode *files[MAXQUOTAS]; /* inodes of quotafiles */ |
292 | struct mem_dqinfo info[MAXQUOTAS]; /* Information for each quota type */ | 292 | struct mem_dqinfo info[MAXQUOTAS]; /* Information for each quota type */ |
diff --git a/include/linux/radix-tree.h b/include/linux/radix-tree.h index c57ff2fcb30a..dd83cca28001 100644 --- a/include/linux/radix-tree.h +++ b/include/linux/radix-tree.h | |||
@@ -45,6 +45,8 @@ do { \ | |||
45 | (root)->rnode = NULL; \ | 45 | (root)->rnode = NULL; \ |
46 | } while (0) | 46 | } while (0) |
47 | 47 | ||
48 | #define RADIX_TREE_MAX_TAGS 2 | ||
49 | |||
48 | int radix_tree_insert(struct radix_tree_root *, unsigned long, void *); | 50 | int radix_tree_insert(struct radix_tree_root *, unsigned long, void *); |
49 | void *radix_tree_lookup(struct radix_tree_root *, unsigned long); | 51 | void *radix_tree_lookup(struct radix_tree_root *, unsigned long); |
50 | void **radix_tree_lookup_slot(struct radix_tree_root *, unsigned long); | 52 | void **radix_tree_lookup_slot(struct radix_tree_root *, unsigned long); |
@@ -55,15 +57,16 @@ radix_tree_gang_lookup(struct radix_tree_root *root, void **results, | |||
55 | int radix_tree_preload(gfp_t gfp_mask); | 57 | int radix_tree_preload(gfp_t gfp_mask); |
56 | void radix_tree_init(void); | 58 | void radix_tree_init(void); |
57 | void *radix_tree_tag_set(struct radix_tree_root *root, | 59 | void *radix_tree_tag_set(struct radix_tree_root *root, |
58 | unsigned long index, int tag); | 60 | unsigned long index, unsigned int tag); |
59 | void *radix_tree_tag_clear(struct radix_tree_root *root, | 61 | void *radix_tree_tag_clear(struct radix_tree_root *root, |
60 | unsigned long index, int tag); | 62 | unsigned long index, unsigned int tag); |
61 | int radix_tree_tag_get(struct radix_tree_root *root, | 63 | int radix_tree_tag_get(struct radix_tree_root *root, |
62 | unsigned long index, int tag); | 64 | unsigned long index, unsigned int tag); |
63 | unsigned int | 65 | unsigned int |
64 | radix_tree_gang_lookup_tag(struct radix_tree_root *root, void **results, | 66 | radix_tree_gang_lookup_tag(struct radix_tree_root *root, void **results, |
65 | unsigned long first_index, unsigned int max_items, int tag); | 67 | unsigned long first_index, unsigned int max_items, |
66 | int radix_tree_tagged(struct radix_tree_root *root, int tag); | 68 | unsigned int tag); |
69 | int radix_tree_tagged(struct radix_tree_root *root, unsigned int tag); | ||
67 | 70 | ||
68 | static inline void radix_tree_preload_end(void) | 71 | static inline void radix_tree_preload_end(void) |
69 | { | 72 | { |
diff --git a/include/linux/raid/raid1.h b/include/linux/raid/raid1.h index 9d5494aaac0f..3009c813d83d 100644 --- a/include/linux/raid/raid1.h +++ b/include/linux/raid/raid1.h | |||
@@ -130,6 +130,6 @@ struct r1bio_s { | |||
130 | * with failure when last write completes (and all failed). | 130 | * with failure when last write completes (and all failed). |
131 | * Record that bi_end_io was called with this flag... | 131 | * Record that bi_end_io was called with this flag... |
132 | */ | 132 | */ |
133 | #define R1BIO_Returned 4 | 133 | #define R1BIO_Returned 6 |
134 | 134 | ||
135 | #endif | 135 | #endif |
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index c2ec6c77874e..5673008b61e1 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
@@ -113,8 +113,6 @@ struct rcu_data { | |||
113 | 113 | ||
114 | DECLARE_PER_CPU(struct rcu_data, rcu_data); | 114 | DECLARE_PER_CPU(struct rcu_data, rcu_data); |
115 | DECLARE_PER_CPU(struct rcu_data, rcu_bh_data); | 115 | DECLARE_PER_CPU(struct rcu_data, rcu_bh_data); |
116 | extern struct rcu_ctrlblk rcu_ctrlblk; | ||
117 | extern struct rcu_ctrlblk rcu_bh_ctrlblk; | ||
118 | 116 | ||
119 | /* | 117 | /* |
120 | * Increment the quiescent state counter. | 118 | * Increment the quiescent state counter. |
diff --git a/include/linux/reiserfs_fs.h b/include/linux/reiserfs_fs.h index dad78cecfd20..912f1b7cb18f 100644 --- a/include/linux/reiserfs_fs.h +++ b/include/linux/reiserfs_fs.h | |||
@@ -1704,6 +1704,11 @@ static inline int reiserfs_transaction_running(struct super_block *s) | |||
1704 | return 0; | 1704 | return 0; |
1705 | } | 1705 | } |
1706 | 1706 | ||
1707 | static inline int reiserfs_transaction_free_space(struct reiserfs_transaction_handle *th) | ||
1708 | { | ||
1709 | return th->t_blocks_allocated - th->t_blocks_logged; | ||
1710 | } | ||
1711 | |||
1707 | int reiserfs_async_progress_wait(struct super_block *s); | 1712 | int reiserfs_async_progress_wait(struct super_block *s); |
1708 | 1713 | ||
1709 | struct reiserfs_transaction_handle *reiserfs_persistent_transaction(struct | 1714 | struct reiserfs_transaction_handle *reiserfs_persistent_transaction(struct |
diff --git a/include/linux/reiserfs_xattr.h b/include/linux/reiserfs_xattr.h index 87280eb6083d..5353afb11db3 100644 --- a/include/linux/reiserfs_xattr.h +++ b/include/linux/reiserfs_xattr.h | |||
@@ -101,13 +101,13 @@ static inline void reiserfs_mark_inode_private(struct inode *inode) | |||
101 | #else | 101 | #else |
102 | 102 | ||
103 | #define is_reiserfs_priv_object(inode) 0 | 103 | #define is_reiserfs_priv_object(inode) 0 |
104 | #define reiserfs_mark_inode_private(inode) | 104 | #define reiserfs_mark_inode_private(inode) do {;} while(0) |
105 | #define reiserfs_getxattr NULL | 105 | #define reiserfs_getxattr NULL |
106 | #define reiserfs_setxattr NULL | 106 | #define reiserfs_setxattr NULL |
107 | #define reiserfs_listxattr NULL | 107 | #define reiserfs_listxattr NULL |
108 | #define reiserfs_removexattr NULL | 108 | #define reiserfs_removexattr NULL |
109 | #define reiserfs_write_lock_xattrs(sb) | 109 | #define reiserfs_write_lock_xattrs(sb) do {;} while(0) |
110 | #define reiserfs_write_unlock_xattrs(sb) | 110 | #define reiserfs_write_unlock_xattrs(sb) do {;} while(0) |
111 | #define reiserfs_read_lock_xattrs(sb) | 111 | #define reiserfs_read_lock_xattrs(sb) |
112 | #define reiserfs_read_unlock_xattrs(sb) | 112 | #define reiserfs_read_unlock_xattrs(sb) |
113 | 113 | ||
diff --git a/include/linux/relay.h b/include/linux/relay.h new file mode 100644 index 000000000000..4bcc1531d6a9 --- /dev/null +++ b/include/linux/relay.h | |||
@@ -0,0 +1,281 @@ | |||
1 | /* | ||
2 | * linux/include/linux/relay.h | ||
3 | * | ||
4 | * Copyright (C) 2002, 2003 - Tom Zanussi (zanussi@us.ibm.com), IBM Corp | ||
5 | * Copyright (C) 1999, 2000, 2001, 2002 - Karim Yaghmour (karim@opersys.com) | ||
6 | * | ||
7 | * CONFIG_RELAY definitions and declarations | ||
8 | */ | ||
9 | |||
10 | #ifndef _LINUX_RELAY_H | ||
11 | #define _LINUX_RELAY_H | ||
12 | |||
13 | #include <linux/config.h> | ||
14 | #include <linux/types.h> | ||
15 | #include <linux/sched.h> | ||
16 | #include <linux/wait.h> | ||
17 | #include <linux/list.h> | ||
18 | #include <linux/fs.h> | ||
19 | #include <linux/poll.h> | ||
20 | #include <linux/kref.h> | ||
21 | |||
22 | /* Needs a _much_ better name... */ | ||
23 | #define FIX_SIZE(x) ((((x) - 1) & PAGE_MASK) + PAGE_SIZE) | ||
24 | |||
25 | /* | ||
26 | * Tracks changes to rchan/rchan_buf structs | ||
27 | */ | ||
28 | #define RELAYFS_CHANNEL_VERSION 6 | ||
29 | |||
30 | /* | ||
31 | * Per-cpu relay channel buffer | ||
32 | */ | ||
33 | struct rchan_buf | ||
34 | { | ||
35 | void *start; /* start of channel buffer */ | ||
36 | void *data; /* start of current sub-buffer */ | ||
37 | size_t offset; /* current offset into sub-buffer */ | ||
38 | size_t subbufs_produced; /* count of sub-buffers produced */ | ||
39 | size_t subbufs_consumed; /* count of sub-buffers consumed */ | ||
40 | struct rchan *chan; /* associated channel */ | ||
41 | wait_queue_head_t read_wait; /* reader wait queue */ | ||
42 | struct work_struct wake_readers; /* reader wake-up work struct */ | ||
43 | struct dentry *dentry; /* channel file dentry */ | ||
44 | struct kref kref; /* channel buffer refcount */ | ||
45 | struct page **page_array; /* array of current buffer pages */ | ||
46 | unsigned int page_count; /* number of current buffer pages */ | ||
47 | unsigned int finalized; /* buffer has been finalized */ | ||
48 | size_t *padding; /* padding counts per sub-buffer */ | ||
49 | size_t prev_padding; /* temporary variable */ | ||
50 | size_t bytes_consumed; /* bytes consumed in cur read subbuf */ | ||
51 | unsigned int cpu; /* this buf's cpu */ | ||
52 | } ____cacheline_aligned; | ||
53 | |||
54 | /* | ||
55 | * Relay channel data structure | ||
56 | */ | ||
57 | struct rchan | ||
58 | { | ||
59 | u32 version; /* the version of this struct */ | ||
60 | size_t subbuf_size; /* sub-buffer size */ | ||
61 | size_t n_subbufs; /* number of sub-buffers per buffer */ | ||
62 | size_t alloc_size; /* total buffer size allocated */ | ||
63 | struct rchan_callbacks *cb; /* client callbacks */ | ||
64 | struct kref kref; /* channel refcount */ | ||
65 | void *private_data; /* for user-defined data */ | ||
66 | size_t last_toobig; /* tried to log event > subbuf size */ | ||
67 | struct rchan_buf *buf[NR_CPUS]; /* per-cpu channel buffers */ | ||
68 | }; | ||
69 | |||
70 | /* | ||
71 | * Relay channel client callbacks | ||
72 | */ | ||
73 | struct rchan_callbacks | ||
74 | { | ||
75 | /* | ||
76 | * subbuf_start - called on buffer-switch to a new sub-buffer | ||
77 | * @buf: the channel buffer containing the new sub-buffer | ||
78 | * @subbuf: the start of the new sub-buffer | ||
79 | * @prev_subbuf: the start of the previous sub-buffer | ||
80 | * @prev_padding: unused space at the end of previous sub-buffer | ||
81 | * | ||
82 | * The client should return 1 to continue logging, 0 to stop | ||
83 | * logging. | ||
84 | * | ||
85 | * NOTE: subbuf_start will also be invoked when the buffer is | ||
86 | * created, so that the first sub-buffer can be initialized | ||
87 | * if necessary. In this case, prev_subbuf will be NULL. | ||
88 | * | ||
89 | * NOTE: the client can reserve bytes at the beginning of the new | ||
90 | * sub-buffer by calling subbuf_start_reserve() in this callback. | ||
91 | */ | ||
92 | int (*subbuf_start) (struct rchan_buf *buf, | ||
93 | void *subbuf, | ||
94 | void *prev_subbuf, | ||
95 | size_t prev_padding); | ||
96 | |||
97 | /* | ||
98 | * buf_mapped - relay buffer mmap notification | ||
99 | * @buf: the channel buffer | ||
100 | * @filp: relay file pointer | ||
101 | * | ||
102 | * Called when a relay file is successfully mmapped | ||
103 | */ | ||
104 | void (*buf_mapped)(struct rchan_buf *buf, | ||
105 | struct file *filp); | ||
106 | |||
107 | /* | ||
108 | * buf_unmapped - relay buffer unmap notification | ||
109 | * @buf: the channel buffer | ||
110 | * @filp: relay file pointer | ||
111 | * | ||
112 | * Called when a relay file is successfully unmapped | ||
113 | */ | ||
114 | void (*buf_unmapped)(struct rchan_buf *buf, | ||
115 | struct file *filp); | ||
116 | /* | ||
117 | * create_buf_file - create file to represent a relay channel buffer | ||
118 | * @filename: the name of the file to create | ||
119 | * @parent: the parent of the file to create | ||
120 | * @mode: the mode of the file to create | ||
121 | * @buf: the channel buffer | ||
122 | * @is_global: outparam - set non-zero if the buffer should be global | ||
123 | * | ||
124 | * Called during relay_open(), once for each per-cpu buffer, | ||
125 | * to allow the client to create a file to be used to | ||
126 | * represent the corresponding channel buffer. If the file is | ||
127 | * created outside of relay, the parent must also exist in | ||
128 | * that filesystem. | ||
129 | * | ||
130 | * The callback should return the dentry of the file created | ||
131 | * to represent the relay buffer. | ||
132 | * | ||
133 | * Setting the is_global outparam to a non-zero value will | ||
134 | * cause relay_open() to create a single global buffer rather | ||
135 | * than the default set of per-cpu buffers. | ||
136 | * | ||
137 | * See Documentation/filesystems/relayfs.txt for more info. | ||
138 | */ | ||
139 | struct dentry *(*create_buf_file)(const char *filename, | ||
140 | struct dentry *parent, | ||
141 | int mode, | ||
142 | struct rchan_buf *buf, | ||
143 | int *is_global); | ||
144 | |||
145 | /* | ||
146 | * remove_buf_file - remove file representing a relay channel buffer | ||
147 | * @dentry: the dentry of the file to remove | ||
148 | * | ||
149 | * Called during relay_close(), once for each per-cpu buffer, | ||
150 | * to allow the client to remove a file used to represent a | ||
151 | * channel buffer. | ||
152 | * | ||
153 | * The callback should return 0 if successful, negative if not. | ||
154 | */ | ||
155 | int (*remove_buf_file)(struct dentry *dentry); | ||
156 | }; | ||
157 | |||
158 | /* | ||
159 | * CONFIG_RELAY kernel API, kernel/relay.c | ||
160 | */ | ||
161 | |||
162 | struct rchan *relay_open(const char *base_filename, | ||
163 | struct dentry *parent, | ||
164 | size_t subbuf_size, | ||
165 | size_t n_subbufs, | ||
166 | struct rchan_callbacks *cb); | ||
167 | extern void relay_close(struct rchan *chan); | ||
168 | extern void relay_flush(struct rchan *chan); | ||
169 | extern void relay_subbufs_consumed(struct rchan *chan, | ||
170 | unsigned int cpu, | ||
171 | size_t consumed); | ||
172 | extern void relay_reset(struct rchan *chan); | ||
173 | extern int relay_buf_full(struct rchan_buf *buf); | ||
174 | |||
175 | extern size_t relay_switch_subbuf(struct rchan_buf *buf, | ||
176 | size_t length); | ||
177 | |||
178 | /** | ||
179 | * relay_write - write data into the channel | ||
180 | * @chan: relay channel | ||
181 | * @data: data to be written | ||
182 | * @length: number of bytes to write | ||
183 | * | ||
184 | * Writes data into the current cpu's channel buffer. | ||
185 | * | ||
186 | * Protects the buffer by disabling interrupts. Use this | ||
187 | * if you might be logging from interrupt context. Try | ||
188 | * __relay_write() if you know you won't be logging from | ||
189 | * interrupt context. | ||
190 | */ | ||
191 | static inline void relay_write(struct rchan *chan, | ||
192 | const void *data, | ||
193 | size_t length) | ||
194 | { | ||
195 | unsigned long flags; | ||
196 | struct rchan_buf *buf; | ||
197 | |||
198 | local_irq_save(flags); | ||
199 | buf = chan->buf[smp_processor_id()]; | ||
200 | if (unlikely(buf->offset + length > chan->subbuf_size)) | ||
201 | length = relay_switch_subbuf(buf, length); | ||
202 | memcpy(buf->data + buf->offset, data, length); | ||
203 | buf->offset += length; | ||
204 | local_irq_restore(flags); | ||
205 | } | ||
206 | |||
207 | /** | ||
208 | * __relay_write - write data into the channel | ||
209 | * @chan: relay channel | ||
210 | * @data: data to be written | ||
211 | * @length: number of bytes to write | ||
212 | * | ||
213 | * Writes data into the current cpu's channel buffer. | ||
214 | * | ||
215 | * Protects the buffer by disabling preemption. Use | ||
216 | * relay_write() if you might be logging from interrupt | ||
217 | * context. | ||
218 | */ | ||
219 | static inline void __relay_write(struct rchan *chan, | ||
220 | const void *data, | ||
221 | size_t length) | ||
222 | { | ||
223 | struct rchan_buf *buf; | ||
224 | |||
225 | buf = chan->buf[get_cpu()]; | ||
226 | if (unlikely(buf->offset + length > buf->chan->subbuf_size)) | ||
227 | length = relay_switch_subbuf(buf, length); | ||
228 | memcpy(buf->data + buf->offset, data, length); | ||
229 | buf->offset += length; | ||
230 | put_cpu(); | ||
231 | } | ||
232 | |||
233 | /** | ||
234 | * relay_reserve - reserve slot in channel buffer | ||
235 | * @chan: relay channel | ||
236 | * @length: number of bytes to reserve | ||
237 | * | ||
238 | * Returns pointer to reserved slot, NULL if full. | ||
239 | * | ||
240 | * Reserves a slot in the current cpu's channel buffer. | ||
241 | * Does not protect the buffer at all - caller must provide | ||
242 | * appropriate synchronization. | ||
243 | */ | ||
244 | static inline void *relay_reserve(struct rchan *chan, size_t length) | ||
245 | { | ||
246 | void *reserved; | ||
247 | struct rchan_buf *buf = chan->buf[smp_processor_id()]; | ||
248 | |||
249 | if (unlikely(buf->offset + length > buf->chan->subbuf_size)) { | ||
250 | length = relay_switch_subbuf(buf, length); | ||
251 | if (!length) | ||
252 | return NULL; | ||
253 | } | ||
254 | reserved = buf->data + buf->offset; | ||
255 | buf->offset += length; | ||
256 | |||
257 | return reserved; | ||
258 | } | ||
259 | |||
260 | /** | ||
261 | * subbuf_start_reserve - reserve bytes at the start of a sub-buffer | ||
262 | * @buf: relay channel buffer | ||
263 | * @length: number of bytes to reserve | ||
264 | * | ||
265 | * Helper function used to reserve bytes at the beginning of | ||
266 | * a sub-buffer in the subbuf_start() callback. | ||
267 | */ | ||
268 | static inline void subbuf_start_reserve(struct rchan_buf *buf, | ||
269 | size_t length) | ||
270 | { | ||
271 | BUG_ON(length >= buf->chan->subbuf_size - 1); | ||
272 | buf->offset = length; | ||
273 | } | ||
274 | |||
275 | /* | ||
276 | * exported relay file operations, kernel/relay.c | ||
277 | */ | ||
278 | extern struct file_operations relay_file_operations; | ||
279 | |||
280 | #endif /* _LINUX_RELAY_H */ | ||
281 | |||
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h index d572d5376319..df0cdd41085c 100644 --- a/include/linux/rtnetlink.h +++ b/include/linux/rtnetlink.h | |||
@@ -839,6 +839,7 @@ enum | |||
839 | #define RTMGRP_IPV4_IFADDR 0x10 | 839 | #define RTMGRP_IPV4_IFADDR 0x10 |
840 | #define RTMGRP_IPV4_MROUTE 0x20 | 840 | #define RTMGRP_IPV4_MROUTE 0x20 |
841 | #define RTMGRP_IPV4_ROUTE 0x40 | 841 | #define RTMGRP_IPV4_ROUTE 0x40 |
842 | #define RTMGRP_IPV4_RULE 0x80 | ||
842 | 843 | ||
843 | #define RTMGRP_IPV6_IFADDR 0x100 | 844 | #define RTMGRP_IPV6_IFADDR 0x100 |
844 | #define RTMGRP_IPV6_MROUTE 0x200 | 845 | #define RTMGRP_IPV6_MROUTE 0x200 |
@@ -869,7 +870,8 @@ enum rtnetlink_groups { | |||
869 | #define RTNLGRP_IPV4_MROUTE RTNLGRP_IPV4_MROUTE | 870 | #define RTNLGRP_IPV4_MROUTE RTNLGRP_IPV4_MROUTE |
870 | RTNLGRP_IPV4_ROUTE, | 871 | RTNLGRP_IPV4_ROUTE, |
871 | #define RTNLGRP_IPV4_ROUTE RTNLGRP_IPV4_ROUTE | 872 | #define RTNLGRP_IPV4_ROUTE RTNLGRP_IPV4_ROUTE |
872 | RTNLGRP_NOP1, | 873 | RTNLGRP_IPV4_RULE, |
874 | #define RTNLGRP_IPV4_RULE RTNLGRP_IPV4_RULE | ||
873 | RTNLGRP_IPV6_IFADDR, | 875 | RTNLGRP_IPV6_IFADDR, |
874 | #define RTNLGRP_IPV6_IFADDR RTNLGRP_IPV6_IFADDR | 876 | #define RTNLGRP_IPV6_IFADDR RTNLGRP_IPV6_IFADDR |
875 | RTNLGRP_IPV6_MROUTE, | 877 | RTNLGRP_IPV6_MROUTE, |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 62e6314382f0..e0054c1b9a09 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -206,11 +206,11 @@ extern void update_process_times(int user); | |||
206 | extern void scheduler_tick(void); | 206 | extern void scheduler_tick(void); |
207 | 207 | ||
208 | #ifdef CONFIG_DETECT_SOFTLOCKUP | 208 | #ifdef CONFIG_DETECT_SOFTLOCKUP |
209 | extern void softlockup_tick(struct pt_regs *regs); | 209 | extern void softlockup_tick(void); |
210 | extern void spawn_softlockup_task(void); | 210 | extern void spawn_softlockup_task(void); |
211 | extern void touch_softlockup_watchdog(void); | 211 | extern void touch_softlockup_watchdog(void); |
212 | #else | 212 | #else |
213 | static inline void softlockup_tick(struct pt_regs *regs) | 213 | static inline void softlockup_tick(void) |
214 | { | 214 | { |
215 | } | 215 | } |
216 | static inline void spawn_softlockup_task(void) | 216 | static inline void spawn_softlockup_task(void) |
@@ -706,6 +706,7 @@ struct task_struct { | |||
706 | prio_array_t *array; | 706 | prio_array_t *array; |
707 | 707 | ||
708 | unsigned short ioprio; | 708 | unsigned short ioprio; |
709 | unsigned int btrace_seq; | ||
709 | 710 | ||
710 | unsigned long sleep_avg; | 711 | unsigned long sleep_avg; |
711 | unsigned long long timestamp, last_ran; | 712 | unsigned long long timestamp, last_ran; |
@@ -868,6 +869,7 @@ struct task_struct { | |||
868 | struct cpuset *cpuset; | 869 | struct cpuset *cpuset; |
869 | nodemask_t mems_allowed; | 870 | nodemask_t mems_allowed; |
870 | int cpuset_mems_generation; | 871 | int cpuset_mems_generation; |
872 | int cpuset_mem_spread_rotor; | ||
871 | #endif | 873 | #endif |
872 | atomic_t fs_excl; /* holding fs exclusive resources */ | 874 | atomic_t fs_excl; /* holding fs exclusive resources */ |
873 | struct rcu_head rcu; | 875 | struct rcu_head rcu; |
@@ -928,6 +930,9 @@ static inline void put_task_struct(struct task_struct *t) | |||
928 | #define PF_BORROWED_MM 0x00400000 /* I am a kthread doing use_mm */ | 930 | #define PF_BORROWED_MM 0x00400000 /* I am a kthread doing use_mm */ |
929 | #define PF_RANDOMIZE 0x00800000 /* randomize virtual address space */ | 931 | #define PF_RANDOMIZE 0x00800000 /* randomize virtual address space */ |
930 | #define PF_SWAPWRITE 0x01000000 /* Allowed to write to swap */ | 932 | #define PF_SWAPWRITE 0x01000000 /* Allowed to write to swap */ |
933 | #define PF_SPREAD_PAGE 0x04000000 /* Spread page cache over cpuset */ | ||
934 | #define PF_SPREAD_SLAB 0x08000000 /* Spread some slab caches over cpuset */ | ||
935 | #define PF_MEMPOLICY 0x10000000 /* Non-default NUMA mempolicy */ | ||
931 | 936 | ||
932 | /* | 937 | /* |
933 | * Only the _current_ task can read/write to tsk->flags, but other | 938 | * Only the _current_ task can read/write to tsk->flags, but other |
diff --git a/include/linux/security.h b/include/linux/security.h index b18eb8cfa639..aaa0a5cdbf75 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
@@ -869,6 +869,11 @@ struct swap_info_struct; | |||
869 | * @ipcp contains the kernel IPC permission structure | 869 | * @ipcp contains the kernel IPC permission structure |
870 | * @flag contains the desired (requested) permission set | 870 | * @flag contains the desired (requested) permission set |
871 | * Return 0 if permission is granted. | 871 | * Return 0 if permission is granted. |
872 | * @ipc_getsecurity: | ||
873 | * Copy the security label associated with the ipc object into | ||
874 | * @buffer. @buffer may be NULL to request the size of the buffer | ||
875 | * required. @size indicates the size of @buffer in bytes. Return | ||
876 | * number of bytes used/required on success. | ||
872 | * | 877 | * |
873 | * Security hooks for individual messages held in System V IPC message queues | 878 | * Security hooks for individual messages held in System V IPC message queues |
874 | * @msg_msg_alloc_security: | 879 | * @msg_msg_alloc_security: |
@@ -1040,6 +1045,11 @@ struct swap_info_struct; | |||
1040 | * @effective contains the effective capability set. | 1045 | * @effective contains the effective capability set. |
1041 | * @inheritable contains the inheritable capability set. | 1046 | * @inheritable contains the inheritable capability set. |
1042 | * @permitted contains the permitted capability set. | 1047 | * @permitted contains the permitted capability set. |
1048 | * @capable: | ||
1049 | * Check whether the @tsk process has the @cap capability. | ||
1050 | * @tsk contains the task_struct for the process. | ||
1051 | * @cap contains the capability <include/linux/capability.h>. | ||
1052 | * Return 0 if the capability is granted for @tsk. | ||
1043 | * @acct: | 1053 | * @acct: |
1044 | * Check permission before enabling or disabling process accounting. If | 1054 | * Check permission before enabling or disabling process accounting. If |
1045 | * accounting is being enabled, then @file refers to the open file used to | 1055 | * accounting is being enabled, then @file refers to the open file used to |
@@ -1053,11 +1063,6 @@ struct swap_info_struct; | |||
1053 | * @table contains the ctl_table structure for the sysctl variable. | 1063 | * @table contains the ctl_table structure for the sysctl variable. |
1054 | * @op contains the operation (001 = search, 002 = write, 004 = read). | 1064 | * @op contains the operation (001 = search, 002 = write, 004 = read). |
1055 | * Return 0 if permission is granted. | 1065 | * Return 0 if permission is granted. |
1056 | * @capable: | ||
1057 | * Check whether the @tsk process has the @cap capability. | ||
1058 | * @tsk contains the task_struct for the process. | ||
1059 | * @cap contains the capability <include/linux/capability.h>. | ||
1060 | * Return 0 if the capability is granted for @tsk. | ||
1061 | * @syslog: | 1066 | * @syslog: |
1062 | * Check permission before accessing the kernel message ring or changing | 1067 | * Check permission before accessing the kernel message ring or changing |
1063 | * logging to the console. | 1068 | * logging to the console. |
@@ -1099,9 +1104,9 @@ struct security_operations { | |||
1099 | kernel_cap_t * effective, | 1104 | kernel_cap_t * effective, |
1100 | kernel_cap_t * inheritable, | 1105 | kernel_cap_t * inheritable, |
1101 | kernel_cap_t * permitted); | 1106 | kernel_cap_t * permitted); |
1107 | int (*capable) (struct task_struct * tsk, int cap); | ||
1102 | int (*acct) (struct file * file); | 1108 | int (*acct) (struct file * file); |
1103 | int (*sysctl) (struct ctl_table * table, int op); | 1109 | int (*sysctl) (struct ctl_table * table, int op); |
1104 | int (*capable) (struct task_struct * tsk, int cap); | ||
1105 | int (*quotactl) (int cmds, int type, int id, struct super_block * sb); | 1110 | int (*quotactl) (int cmds, int type, int id, struct super_block * sb); |
1106 | int (*quota_on) (struct dentry * dentry); | 1111 | int (*quota_on) (struct dentry * dentry); |
1107 | int (*syslog) (int type); | 1112 | int (*syslog) (int type); |
@@ -1168,7 +1173,8 @@ struct security_operations { | |||
1168 | int (*inode_getxattr) (struct dentry *dentry, char *name); | 1173 | int (*inode_getxattr) (struct dentry *dentry, char *name); |
1169 | int (*inode_listxattr) (struct dentry *dentry); | 1174 | int (*inode_listxattr) (struct dentry *dentry); |
1170 | int (*inode_removexattr) (struct dentry *dentry, char *name); | 1175 | int (*inode_removexattr) (struct dentry *dentry, char *name); |
1171 | int (*inode_getsecurity)(struct inode *inode, const char *name, void *buffer, size_t size, int err); | 1176 | const char *(*inode_xattr_getsuffix) (void); |
1177 | int (*inode_getsecurity)(const struct inode *inode, const char *name, void *buffer, size_t size, int err); | ||
1172 | int (*inode_setsecurity)(struct inode *inode, const char *name, const void *value, size_t size, int flags); | 1178 | int (*inode_setsecurity)(struct inode *inode, const char *name, const void *value, size_t size, int flags); |
1173 | int (*inode_listsecurity)(struct inode *inode, char *buffer, size_t buffer_size); | 1179 | int (*inode_listsecurity)(struct inode *inode, char *buffer, size_t buffer_size); |
1174 | 1180 | ||
@@ -1217,6 +1223,7 @@ struct security_operations { | |||
1217 | void (*task_to_inode)(struct task_struct *p, struct inode *inode); | 1223 | void (*task_to_inode)(struct task_struct *p, struct inode *inode); |
1218 | 1224 | ||
1219 | int (*ipc_permission) (struct kern_ipc_perm * ipcp, short flag); | 1225 | int (*ipc_permission) (struct kern_ipc_perm * ipcp, short flag); |
1226 | int (*ipc_getsecurity)(struct kern_ipc_perm *ipcp, void *buffer, size_t size); | ||
1220 | 1227 | ||
1221 | int (*msg_msg_alloc_security) (struct msg_msg * msg); | 1228 | int (*msg_msg_alloc_security) (struct msg_msg * msg); |
1222 | void (*msg_msg_free_security) (struct msg_msg * msg); | 1229 | void (*msg_msg_free_security) (struct msg_msg * msg); |
@@ -1347,6 +1354,11 @@ static inline void security_capset_set (struct task_struct *target, | |||
1347 | security_ops->capset_set (target, effective, inheritable, permitted); | 1354 | security_ops->capset_set (target, effective, inheritable, permitted); |
1348 | } | 1355 | } |
1349 | 1356 | ||
1357 | static inline int security_capable(struct task_struct *tsk, int cap) | ||
1358 | { | ||
1359 | return security_ops->capable(tsk, cap); | ||
1360 | } | ||
1361 | |||
1350 | static inline int security_acct (struct file *file) | 1362 | static inline int security_acct (struct file *file) |
1351 | { | 1363 | { |
1352 | return security_ops->acct (file); | 1364 | return security_ops->acct (file); |
@@ -1675,7 +1687,12 @@ static inline int security_inode_removexattr (struct dentry *dentry, char *name) | |||
1675 | return security_ops->inode_removexattr (dentry, name); | 1687 | return security_ops->inode_removexattr (dentry, name); |
1676 | } | 1688 | } |
1677 | 1689 | ||
1678 | static inline int security_inode_getsecurity(struct inode *inode, const char *name, void *buffer, size_t size, int err) | 1690 | static inline const char *security_inode_xattr_getsuffix(void) |
1691 | { | ||
1692 | return security_ops->inode_xattr_getsuffix(); | ||
1693 | } | ||
1694 | |||
1695 | static inline int security_inode_getsecurity(const struct inode *inode, const char *name, void *buffer, size_t size, int err) | ||
1679 | { | 1696 | { |
1680 | if (unlikely (IS_PRIVATE (inode))) | 1697 | if (unlikely (IS_PRIVATE (inode))) |
1681 | return 0; | 1698 | return 0; |
@@ -1870,6 +1887,11 @@ static inline int security_ipc_permission (struct kern_ipc_perm *ipcp, | |||
1870 | return security_ops->ipc_permission (ipcp, flag); | 1887 | return security_ops->ipc_permission (ipcp, flag); |
1871 | } | 1888 | } |
1872 | 1889 | ||
1890 | static inline int security_ipc_getsecurity(struct kern_ipc_perm *ipcp, void *buffer, size_t size) | ||
1891 | { | ||
1892 | return security_ops->ipc_getsecurity(ipcp, buffer, size); | ||
1893 | } | ||
1894 | |||
1873 | static inline int security_msg_msg_alloc (struct msg_msg * msg) | 1895 | static inline int security_msg_msg_alloc (struct msg_msg * msg) |
1874 | { | 1896 | { |
1875 | return security_ops->msg_msg_alloc_security (msg); | 1897 | return security_ops->msg_msg_alloc_security (msg); |
@@ -2050,6 +2072,11 @@ static inline void security_capset_set (struct task_struct *target, | |||
2050 | cap_capset_set (target, effective, inheritable, permitted); | 2072 | cap_capset_set (target, effective, inheritable, permitted); |
2051 | } | 2073 | } |
2052 | 2074 | ||
2075 | static inline int security_capable(struct task_struct *tsk, int cap) | ||
2076 | { | ||
2077 | return cap_capable(tsk, cap); | ||
2078 | } | ||
2079 | |||
2053 | static inline int security_acct (struct file *file) | 2080 | static inline int security_acct (struct file *file) |
2054 | { | 2081 | { |
2055 | return 0; | 2082 | return 0; |
@@ -2317,7 +2344,12 @@ static inline int security_inode_removexattr (struct dentry *dentry, char *name) | |||
2317 | return cap_inode_removexattr(dentry, name); | 2344 | return cap_inode_removexattr(dentry, name); |
2318 | } | 2345 | } |
2319 | 2346 | ||
2320 | static inline int security_inode_getsecurity(struct inode *inode, const char *name, void *buffer, size_t size, int err) | 2347 | static inline const char *security_inode_xattr_getsuffix (void) |
2348 | { | ||
2349 | return NULL ; | ||
2350 | } | ||
2351 | |||
2352 | static inline int security_inode_getsecurity(const struct inode *inode, const char *name, void *buffer, size_t size, int err) | ||
2321 | { | 2353 | { |
2322 | return -EOPNOTSUPP; | 2354 | return -EOPNOTSUPP; |
2323 | } | 2355 | } |
@@ -2500,6 +2532,11 @@ static inline int security_ipc_permission (struct kern_ipc_perm *ipcp, | |||
2500 | return 0; | 2532 | return 0; |
2501 | } | 2533 | } |
2502 | 2534 | ||
2535 | static inline int security_ipc_getsecurity(struct kern_ipc_perm *ipcp, void *buffer, size_t size) | ||
2536 | { | ||
2537 | return -EOPNOTSUPP; | ||
2538 | } | ||
2539 | |||
2503 | static inline int security_msg_msg_alloc (struct msg_msg * msg) | 2540 | static inline int security_msg_msg_alloc (struct msg_msg * msg) |
2504 | { | 2541 | { |
2505 | return 0; | 2542 | return 0; |
diff --git a/include/linux/seq_file.h b/include/linux/seq_file.h index 850a974ee505..b95f6eb7254c 100644 --- a/include/linux/seq_file.h +++ b/include/linux/seq_file.h | |||
@@ -4,7 +4,7 @@ | |||
4 | 4 | ||
5 | #include <linux/types.h> | 5 | #include <linux/types.h> |
6 | #include <linux/string.h> | 6 | #include <linux/string.h> |
7 | #include <asm/semaphore.h> | 7 | #include <linux/mutex.h> |
8 | 8 | ||
9 | struct seq_operations; | 9 | struct seq_operations; |
10 | struct file; | 10 | struct file; |
@@ -19,7 +19,7 @@ struct seq_file { | |||
19 | size_t count; | 19 | size_t count; |
20 | loff_t index; | 20 | loff_t index; |
21 | loff_t version; | 21 | loff_t version; |
22 | struct semaphore sem; | 22 | struct mutex lock; |
23 | struct seq_operations *op; | 23 | struct seq_operations *op; |
24 | void *private; | 24 | void *private; |
25 | }; | 25 | }; |
diff --git a/include/linux/slab.h b/include/linux/slab.h index 2b28c849d75a..15e1d9736b1b 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
@@ -46,6 +46,7 @@ typedef struct kmem_cache kmem_cache_t; | |||
46 | what is reclaimable later*/ | 46 | what is reclaimable later*/ |
47 | #define SLAB_PANIC 0x00040000UL /* panic if kmem_cache_create() fails */ | 47 | #define SLAB_PANIC 0x00040000UL /* panic if kmem_cache_create() fails */ |
48 | #define SLAB_DESTROY_BY_RCU 0x00080000UL /* defer freeing pages to RCU */ | 48 | #define SLAB_DESTROY_BY_RCU 0x00080000UL /* defer freeing pages to RCU */ |
49 | #define SLAB_MEM_SPREAD 0x00100000UL /* Spread some memory over cpuset */ | ||
49 | 50 | ||
50 | /* flags passed to a constructor func */ | 51 | /* flags passed to a constructor func */ |
51 | #define SLAB_CTOR_CONSTRUCTOR 0x001UL /* if not set, then deconstructor */ | 52 | #define SLAB_CTOR_CONSTRUCTOR 0x001UL /* if not set, then deconstructor */ |
@@ -63,6 +64,7 @@ extern kmem_cache_t *kmem_cache_create(const char *, size_t, size_t, unsigned lo | |||
63 | extern int kmem_cache_destroy(kmem_cache_t *); | 64 | extern int kmem_cache_destroy(kmem_cache_t *); |
64 | extern int kmem_cache_shrink(kmem_cache_t *); | 65 | extern int kmem_cache_shrink(kmem_cache_t *); |
65 | extern void *kmem_cache_alloc(kmem_cache_t *, gfp_t); | 66 | extern void *kmem_cache_alloc(kmem_cache_t *, gfp_t); |
67 | extern void *kmem_cache_zalloc(struct kmem_cache *, gfp_t); | ||
66 | extern void kmem_cache_free(kmem_cache_t *, void *); | 68 | extern void kmem_cache_free(kmem_cache_t *, void *); |
67 | extern unsigned int kmem_cache_size(kmem_cache_t *); | 69 | extern unsigned int kmem_cache_size(kmem_cache_t *); |
68 | extern const char *kmem_cache_name(kmem_cache_t *); | 70 | extern const char *kmem_cache_name(kmem_cache_t *); |
@@ -76,11 +78,12 @@ struct cache_sizes { | |||
76 | }; | 78 | }; |
77 | extern struct cache_sizes malloc_sizes[]; | 79 | extern struct cache_sizes malloc_sizes[]; |
78 | 80 | ||
79 | #ifndef CONFIG_DEBUG_SLAB | ||
80 | extern void *__kmalloc(size_t, gfp_t); | 81 | extern void *__kmalloc(size_t, gfp_t); |
82 | #ifndef CONFIG_DEBUG_SLAB | ||
83 | #define ____kmalloc(size, flags) __kmalloc(size, flags) | ||
81 | #else | 84 | #else |
82 | extern void *__kmalloc_track_caller(size_t, gfp_t, void*); | 85 | extern void *__kmalloc_track_caller(size_t, gfp_t, void*); |
83 | #define __kmalloc(size, flags) \ | 86 | #define ____kmalloc(size, flags) \ |
84 | __kmalloc_track_caller(size, flags, __builtin_return_address(0)) | 87 | __kmalloc_track_caller(size, flags, __builtin_return_address(0)) |
85 | #endif | 88 | #endif |
86 | 89 | ||
@@ -107,7 +110,30 @@ found: | |||
107 | return __kmalloc(size, flags); | 110 | return __kmalloc(size, flags); |
108 | } | 111 | } |
109 | 112 | ||
110 | extern void *kzalloc(size_t, gfp_t); | 113 | extern void *__kzalloc(size_t, gfp_t); |
114 | |||
115 | static inline void *kzalloc(size_t size, gfp_t flags) | ||
116 | { | ||
117 | if (__builtin_constant_p(size)) { | ||
118 | int i = 0; | ||
119 | #define CACHE(x) \ | ||
120 | if (size <= x) \ | ||
121 | goto found; \ | ||
122 | else \ | ||
123 | i++; | ||
124 | #include "kmalloc_sizes.h" | ||
125 | #undef CACHE | ||
126 | { | ||
127 | extern void __you_cannot_kzalloc_that_much(void); | ||
128 | __you_cannot_kzalloc_that_much(); | ||
129 | } | ||
130 | found: | ||
131 | return kmem_cache_zalloc((flags & GFP_DMA) ? | ||
132 | malloc_sizes[i].cs_dmacachep : | ||
133 | malloc_sizes[i].cs_cachep, flags); | ||
134 | } | ||
135 | return __kzalloc(size, flags); | ||
136 | } | ||
111 | 137 | ||
112 | /** | 138 | /** |
113 | * kcalloc - allocate memory for an array. The memory is set to zero. | 139 | * kcalloc - allocate memory for an array. The memory is set to zero. |
@@ -154,17 +180,18 @@ struct kmem_cache *kmem_cache_create(const char *c, size_t, size_t, | |||
154 | void (*)(void *, struct kmem_cache *, unsigned long)); | 180 | void (*)(void *, struct kmem_cache *, unsigned long)); |
155 | int kmem_cache_destroy(struct kmem_cache *c); | 181 | int kmem_cache_destroy(struct kmem_cache *c); |
156 | void *kmem_cache_alloc(struct kmem_cache *c, gfp_t flags); | 182 | void *kmem_cache_alloc(struct kmem_cache *c, gfp_t flags); |
183 | void *kmem_cache_zalloc(struct kmem_cache *, gfp_t); | ||
157 | void kmem_cache_free(struct kmem_cache *c, void *b); | 184 | void kmem_cache_free(struct kmem_cache *c, void *b); |
158 | const char *kmem_cache_name(struct kmem_cache *); | 185 | const char *kmem_cache_name(struct kmem_cache *); |
159 | void *kmalloc(size_t size, gfp_t flags); | 186 | void *kmalloc(size_t size, gfp_t flags); |
160 | void *kzalloc(size_t size, gfp_t flags); | 187 | void *__kzalloc(size_t size, gfp_t flags); |
161 | void kfree(const void *m); | 188 | void kfree(const void *m); |
162 | unsigned int ksize(const void *m); | 189 | unsigned int ksize(const void *m); |
163 | unsigned int kmem_cache_size(struct kmem_cache *c); | 190 | unsigned int kmem_cache_size(struct kmem_cache *c); |
164 | 191 | ||
165 | static inline void *kcalloc(size_t n, size_t size, gfp_t flags) | 192 | static inline void *kcalloc(size_t n, size_t size, gfp_t flags) |
166 | { | 193 | { |
167 | return kzalloc(n * size, flags); | 194 | return __kzalloc(n * size, flags); |
168 | } | 195 | } |
169 | 196 | ||
170 | #define kmem_cache_shrink(d) (0) | 197 | #define kmem_cache_shrink(d) (0) |
@@ -172,6 +199,8 @@ static inline void *kcalloc(size_t n, size_t size, gfp_t flags) | |||
172 | #define kmem_ptr_validate(a, b) (0) | 199 | #define kmem_ptr_validate(a, b) (0) |
173 | #define kmem_cache_alloc_node(c, f, n) kmem_cache_alloc(c, f) | 200 | #define kmem_cache_alloc_node(c, f, n) kmem_cache_alloc(c, f) |
174 | #define kmalloc_node(s, f, n) kmalloc(s, f) | 201 | #define kmalloc_node(s, f, n) kmalloc(s, f) |
202 | #define kzalloc(s, f) __kzalloc(s, f) | ||
203 | #define ____kmalloc kmalloc | ||
175 | 204 | ||
176 | #endif /* CONFIG_SLOB */ | 205 | #endif /* CONFIG_SLOB */ |
177 | 206 | ||
diff --git a/include/linux/string.h b/include/linux/string.h index 369be3264a55..dee221429ad0 100644 --- a/include/linux/string.h +++ b/include/linux/string.h | |||
@@ -18,6 +18,8 @@ extern char * strsep(char **,const char *); | |||
18 | extern __kernel_size_t strspn(const char *,const char *); | 18 | extern __kernel_size_t strspn(const char *,const char *); |
19 | extern __kernel_size_t strcspn(const char *,const char *); | 19 | extern __kernel_size_t strcspn(const char *,const char *); |
20 | 20 | ||
21 | extern char *strndup_user(const char __user *, long); | ||
22 | |||
21 | /* | 23 | /* |
22 | * Include machine specific inline routines | 24 | * Include machine specific inline routines |
23 | */ | 25 | */ |
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h index f147e6b84332..8fe9f35eba31 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h | |||
@@ -45,7 +45,8 @@ struct rpc_clnt { | |||
45 | char * cl_server; /* server machine name */ | 45 | char * cl_server; /* server machine name */ |
46 | char * cl_protname; /* protocol name */ | 46 | char * cl_protname; /* protocol name */ |
47 | struct rpc_auth * cl_auth; /* authenticator */ | 47 | struct rpc_auth * cl_auth; /* authenticator */ |
48 | struct rpc_stat * cl_stats; /* statistics */ | 48 | struct rpc_stat * cl_stats; /* per-program statistics */ |
49 | struct rpc_iostats * cl_metrics; /* per-client statistics */ | ||
49 | 50 | ||
50 | unsigned int cl_softrtry : 1,/* soft timeouts */ | 51 | unsigned int cl_softrtry : 1,/* soft timeouts */ |
51 | cl_intr : 1,/* interruptible */ | 52 | cl_intr : 1,/* interruptible */ |
@@ -59,6 +60,7 @@ struct rpc_clnt { | |||
59 | int cl_nodelen; /* nodename length */ | 60 | int cl_nodelen; /* nodename length */ |
60 | char cl_nodename[UNX_MAXNODENAME]; | 61 | char cl_nodename[UNX_MAXNODENAME]; |
61 | char cl_pathname[30];/* Path in rpc_pipe_fs */ | 62 | char cl_pathname[30];/* Path in rpc_pipe_fs */ |
63 | struct vfsmount * cl_vfsmnt; | ||
62 | struct dentry * cl_dentry; /* inode */ | 64 | struct dentry * cl_dentry; /* inode */ |
63 | struct rpc_clnt * cl_parent; /* Points to parent of clones */ | 65 | struct rpc_clnt * cl_parent; /* Points to parent of clones */ |
64 | struct rpc_rtt cl_rtt_default; | 66 | struct rpc_rtt cl_rtt_default; |
@@ -100,6 +102,8 @@ struct rpc_procinfo { | |||
100 | unsigned int p_bufsiz; /* req. buffer size */ | 102 | unsigned int p_bufsiz; /* req. buffer size */ |
101 | unsigned int p_count; /* call count */ | 103 | unsigned int p_count; /* call count */ |
102 | unsigned int p_timer; /* Which RTT timer to use */ | 104 | unsigned int p_timer; /* Which RTT timer to use */ |
105 | u32 p_statidx; /* Which procedure to account */ | ||
106 | char * p_name; /* name of procedure */ | ||
103 | }; | 107 | }; |
104 | 108 | ||
105 | #define RPC_CONGESTED(clnt) (RPCXPRT_CONGESTED((clnt)->cl_xprt)) | 109 | #define RPC_CONGESTED(clnt) (RPCXPRT_CONGESTED((clnt)->cl_xprt)) |
@@ -137,20 +141,6 @@ size_t rpc_max_payload(struct rpc_clnt *); | |||
137 | void rpc_force_rebind(struct rpc_clnt *); | 141 | void rpc_force_rebind(struct rpc_clnt *); |
138 | int rpc_ping(struct rpc_clnt *clnt, int flags); | 142 | int rpc_ping(struct rpc_clnt *clnt, int flags); |
139 | 143 | ||
140 | static __inline__ | ||
141 | int rpc_call(struct rpc_clnt *clnt, u32 proc, void *argp, void *resp, int flags) | ||
142 | { | ||
143 | struct rpc_message msg = { | ||
144 | .rpc_proc = &clnt->cl_procinfo[proc], | ||
145 | .rpc_argp = argp, | ||
146 | .rpc_resp = resp, | ||
147 | .rpc_cred = NULL | ||
148 | }; | ||
149 | return rpc_call_sync(clnt, &msg, flags); | ||
150 | } | ||
151 | |||
152 | extern void rpciod_wake_up(void); | ||
153 | |||
154 | /* | 144 | /* |
155 | * Helper function for NFSroot support | 145 | * Helper function for NFSroot support |
156 | */ | 146 | */ |
diff --git a/include/linux/sunrpc/gss_krb5.h b/include/linux/sunrpc/gss_krb5.h index 2c3601d31045..1279280d7196 100644 --- a/include/linux/sunrpc/gss_krb5.h +++ b/include/linux/sunrpc/gss_krb5.h | |||
@@ -53,6 +53,8 @@ struct krb5_ctx { | |||
53 | struct xdr_netobj mech_used; | 53 | struct xdr_netobj mech_used; |
54 | }; | 54 | }; |
55 | 55 | ||
56 | extern spinlock_t krb5_seq_lock; | ||
57 | |||
56 | #define KG_TOK_MIC_MSG 0x0101 | 58 | #define KG_TOK_MIC_MSG 0x0101 |
57 | #define KG_TOK_WRAP_MSG 0x0201 | 59 | #define KG_TOK_WRAP_MSG 0x0201 |
58 | 60 | ||
diff --git a/include/linux/sunrpc/metrics.h b/include/linux/sunrpc/metrics.h new file mode 100644 index 000000000000..8f96e9dc369a --- /dev/null +++ b/include/linux/sunrpc/metrics.h | |||
@@ -0,0 +1,77 @@ | |||
1 | /* | ||
2 | * linux/include/linux/sunrpc/metrics.h | ||
3 | * | ||
4 | * Declarations for RPC client per-operation metrics | ||
5 | * | ||
6 | * Copyright (C) 2005 Chuck Lever <cel@netapp.com> | ||
7 | * | ||
8 | * RPC client per-operation statistics provide latency and retry | ||
9 | * information about each type of RPC procedure in a given RPC program. | ||
10 | * These statistics are not for detailed problem diagnosis, but simply | ||
11 | * to indicate whether the problem is local or remote. | ||
12 | * | ||
13 | * These counters are not meant to be human-readable, but are meant to be | ||
14 | * integrated into system monitoring tools such as "sar" and "iostat". As | ||
15 | * such, the counters are sampled by the tools over time, and are never | ||
16 | * zeroed after a file system is mounted. Moving averages can be computed | ||
17 | * by the tools by taking the difference between two instantaneous samples | ||
18 | * and dividing that by the time between the samples. | ||
19 | * | ||
20 | * The counters are maintained in a single array per RPC client, indexed | ||
21 | * by procedure number. There is no need to maintain separate counter | ||
22 | * arrays per-CPU because these counters are always modified behind locks. | ||
23 | */ | ||
24 | |||
25 | #ifndef _LINUX_SUNRPC_METRICS_H | ||
26 | #define _LINUX_SUNRPC_METRICS_H | ||
27 | |||
28 | #include <linux/seq_file.h> | ||
29 | |||
30 | #define RPC_IOSTATS_VERS "1.0" | ||
31 | |||
32 | struct rpc_iostats { | ||
33 | /* | ||
34 | * These counters give an idea about how many request | ||
35 | * transmissions are required, on average, to complete that | ||
36 | * particular procedure. Some procedures may require more | ||
37 | * than one transmission because the server is unresponsive, | ||
38 | * the client is retransmitting too aggressively, or the | ||
39 | * requests are large and the network is congested. | ||
40 | */ | ||
41 | unsigned long om_ops, /* count of operations */ | ||
42 | om_ntrans, /* count of RPC transmissions */ | ||
43 | om_timeouts; /* count of major timeouts */ | ||
44 | |||
45 | /* | ||
46 | * These count how many bytes are sent and received for a | ||
47 | * given RPC procedure type. This indicates how much load a | ||
48 | * particular procedure is putting on the network. These | ||
49 | * counts include the RPC and ULP headers, and the request | ||
50 | * payload. | ||
51 | */ | ||
52 | unsigned long long om_bytes_sent, /* count of bytes out */ | ||
53 | om_bytes_recv; /* count of bytes in */ | ||
54 | |||
55 | /* | ||
56 | * The length of time an RPC request waits in queue before | ||
57 | * transmission, the network + server latency of the request, | ||
58 | * and the total time the request spent from init to release | ||
59 | * are measured. | ||
60 | */ | ||
61 | unsigned long long om_queue, /* jiffies queued for xmit */ | ||
62 | om_rtt, /* jiffies for RPC RTT */ | ||
63 | om_execute; /* jiffies for RPC execution */ | ||
64 | } ____cacheline_aligned; | ||
65 | |||
66 | struct rpc_task; | ||
67 | struct rpc_clnt; | ||
68 | |||
69 | /* | ||
70 | * EXPORTed functions for managing rpc_iostats structures | ||
71 | */ | ||
72 | struct rpc_iostats * rpc_alloc_iostats(struct rpc_clnt *); | ||
73 | void rpc_count_iostats(struct rpc_task *); | ||
74 | void rpc_print_iostats(struct seq_file *, struct rpc_clnt *); | ||
75 | void rpc_free_iostats(struct rpc_iostats *); | ||
76 | |||
77 | #endif /* _LINUX_SUNRPC_METRICS_H */ | ||
diff --git a/include/linux/sunrpc/rpc_pipe_fs.h b/include/linux/sunrpc/rpc_pipe_fs.h index 63929349571f..2c2189cb30aa 100644 --- a/include/linux/sunrpc/rpc_pipe_fs.h +++ b/include/linux/sunrpc/rpc_pipe_fs.h | |||
@@ -45,6 +45,8 @@ extern struct dentry *rpc_mkdir(char *, struct rpc_clnt *); | |||
45 | extern int rpc_rmdir(char *); | 45 | extern int rpc_rmdir(char *); |
46 | extern struct dentry *rpc_mkpipe(char *, void *, struct rpc_pipe_ops *, int flags); | 46 | extern struct dentry *rpc_mkpipe(char *, void *, struct rpc_pipe_ops *, int flags); |
47 | extern int rpc_unlink(char *); | 47 | extern int rpc_unlink(char *); |
48 | extern struct vfsmount *rpc_get_mount(void); | ||
49 | extern void rpc_put_mount(void); | ||
48 | 50 | ||
49 | #endif | 51 | #endif |
50 | #endif | 52 | #endif |
diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h index 8b25629accd8..82a91bb22362 100644 --- a/include/linux/sunrpc/sched.h +++ b/include/linux/sunrpc/sched.h | |||
@@ -86,6 +86,12 @@ struct rpc_task { | |||
86 | struct work_struct tk_work; /* Async task work queue */ | 86 | struct work_struct tk_work; /* Async task work queue */ |
87 | struct rpc_wait tk_wait; /* RPC wait */ | 87 | struct rpc_wait tk_wait; /* RPC wait */ |
88 | } u; | 88 | } u; |
89 | |||
90 | unsigned short tk_timeouts; /* maj timeouts */ | ||
91 | size_t tk_bytes_sent; /* total bytes sent */ | ||
92 | unsigned long tk_start; /* RPC task init timestamp */ | ||
93 | long tk_rtt; /* round-trip time (jiffies) */ | ||
94 | |||
89 | #ifdef RPC_DEBUG | 95 | #ifdef RPC_DEBUG |
90 | unsigned short tk_pid; /* debugging aid */ | 96 | unsigned short tk_pid; /* debugging aid */ |
91 | #endif | 97 | #endif |
@@ -203,6 +209,7 @@ struct rpc_wait_queue { | |||
203 | unsigned char priority; /* current priority */ | 209 | unsigned char priority; /* current priority */ |
204 | unsigned char count; /* # task groups remaining serviced so far */ | 210 | unsigned char count; /* # task groups remaining serviced so far */ |
205 | unsigned char nr; /* # tasks remaining for cookie */ | 211 | unsigned char nr; /* # tasks remaining for cookie */ |
212 | unsigned short qlen; /* total # tasks waiting in queue */ | ||
206 | #ifdef RPC_DEBUG | 213 | #ifdef RPC_DEBUG |
207 | const char * name; | 214 | const char * name; |
208 | #endif | 215 | #endif |
@@ -269,13 +276,13 @@ void * rpc_malloc(struct rpc_task *, size_t); | |||
269 | void rpc_free(struct rpc_task *); | 276 | void rpc_free(struct rpc_task *); |
270 | int rpciod_up(void); | 277 | int rpciod_up(void); |
271 | void rpciod_down(void); | 278 | void rpciod_down(void); |
272 | void rpciod_wake_up(void); | ||
273 | int __rpc_wait_for_completion_task(struct rpc_task *task, int (*)(void *)); | 279 | int __rpc_wait_for_completion_task(struct rpc_task *task, int (*)(void *)); |
274 | #ifdef RPC_DEBUG | 280 | #ifdef RPC_DEBUG |
275 | void rpc_show_tasks(void); | 281 | void rpc_show_tasks(void); |
276 | #endif | 282 | #endif |
277 | int rpc_init_mempool(void); | 283 | int rpc_init_mempool(void); |
278 | void rpc_destroy_mempool(void); | 284 | void rpc_destroy_mempool(void); |
285 | extern struct workqueue_struct *rpciod_workqueue; | ||
279 | 286 | ||
280 | static inline void rpc_exit(struct rpc_task *task, int status) | 287 | static inline void rpc_exit(struct rpc_task *task, int status) |
281 | { | 288 | { |
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index 6ef99b14ff09..7eebbab7160b 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h | |||
@@ -114,6 +114,7 @@ struct rpc_xprt_ops { | |||
114 | void (*release_request)(struct rpc_task *task); | 114 | void (*release_request)(struct rpc_task *task); |
115 | void (*close)(struct rpc_xprt *xprt); | 115 | void (*close)(struct rpc_xprt *xprt); |
116 | void (*destroy)(struct rpc_xprt *xprt); | 116 | void (*destroy)(struct rpc_xprt *xprt); |
117 | void (*print_stats)(struct rpc_xprt *xprt, struct seq_file *seq); | ||
117 | }; | 118 | }; |
118 | 119 | ||
119 | struct rpc_xprt { | 120 | struct rpc_xprt { |
@@ -187,6 +188,18 @@ struct rpc_xprt { | |||
187 | 188 | ||
188 | struct list_head recv; | 189 | struct list_head recv; |
189 | 190 | ||
191 | struct { | ||
192 | unsigned long bind_count, /* total number of binds */ | ||
193 | connect_count, /* total number of connects */ | ||
194 | connect_start, /* connect start timestamp */ | ||
195 | connect_time, /* jiffies waiting for connect */ | ||
196 | sends, /* how many complete requests */ | ||
197 | recvs, /* how many complete requests */ | ||
198 | bad_xids; /* lookup_rqst didn't find XID */ | ||
199 | |||
200 | unsigned long long req_u, /* average requests on the wire */ | ||
201 | bklog_u; /* backlog queue utilization */ | ||
202 | } stat; | ||
190 | 203 | ||
191 | void (*old_data_ready)(struct sock *, int); | 204 | void (*old_data_ready)(struct sock *, int); |
192 | void (*old_state_change)(struct sock *); | 205 | void (*old_state_change)(struct sock *); |
diff --git a/include/linux/swap.h b/include/linux/swap.h index 12415dd94451..54eac8a39a4c 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h | |||
@@ -234,14 +234,15 @@ extern struct page * read_swap_cache_async(swp_entry_t, struct vm_area_struct *v | |||
234 | /* linux/mm/swapfile.c */ | 234 | /* linux/mm/swapfile.c */ |
235 | extern long total_swap_pages; | 235 | extern long total_swap_pages; |
236 | extern unsigned int nr_swapfiles; | 236 | extern unsigned int nr_swapfiles; |
237 | extern struct swap_info_struct swap_info[]; | ||
238 | extern void si_swapinfo(struct sysinfo *); | 237 | extern void si_swapinfo(struct sysinfo *); |
239 | extern swp_entry_t get_swap_page(void); | 238 | extern swp_entry_t get_swap_page(void); |
240 | extern swp_entry_t get_swap_page_of_type(int type); | 239 | extern swp_entry_t get_swap_page_of_type(int); |
241 | extern int swap_duplicate(swp_entry_t); | 240 | extern int swap_duplicate(swp_entry_t); |
242 | extern int valid_swaphandles(swp_entry_t, unsigned long *); | 241 | extern int valid_swaphandles(swp_entry_t, unsigned long *); |
243 | extern void swap_free(swp_entry_t); | 242 | extern void swap_free(swp_entry_t); |
244 | extern void free_swap_and_cache(swp_entry_t); | 243 | extern void free_swap_and_cache(swp_entry_t); |
244 | extern int swap_type_of(dev_t); | ||
245 | extern unsigned int count_swap_pages(int, int); | ||
245 | extern sector_t map_swap_page(struct swap_info_struct *, pgoff_t); | 246 | extern sector_t map_swap_page(struct swap_info_struct *, pgoff_t); |
246 | extern struct swap_info_struct *get_swap_info_struct(unsigned); | 247 | extern struct swap_info_struct *get_swap_info_struct(unsigned); |
247 | extern int can_share_swap_page(struct page *); | 248 | extern int can_share_swap_page(struct page *); |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index b9ea44ac0ddb..e487e3b60f60 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
@@ -568,5 +568,6 @@ asmlinkage long compat_sys_newfstatat(unsigned int dfd, char __user * filename, | |||
568 | int flag); | 568 | int flag); |
569 | asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename, | 569 | asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename, |
570 | int flags, int mode); | 570 | int flags, int mode); |
571 | asmlinkage long sys_unshare(unsigned long unshare_flags); | ||
571 | 572 | ||
572 | #endif | 573 | #endif |
diff --git a/include/linux/time.h b/include/linux/time.h index d9cdba54b789..bf0e785e2e03 100644 --- a/include/linux/time.h +++ b/include/linux/time.h | |||
@@ -101,6 +101,7 @@ extern long do_utimes(int dfd, char __user *filename, struct timeval *times); | |||
101 | struct itimerval; | 101 | struct itimerval; |
102 | extern int do_setitimer(int which, struct itimerval *value, | 102 | extern int do_setitimer(int which, struct itimerval *value, |
103 | struct itimerval *ovalue); | 103 | struct itimerval *ovalue); |
104 | extern unsigned int alarm_setitimer(unsigned int seconds); | ||
104 | extern int do_getitimer(int which, struct itimerval *value); | 105 | extern int do_getitimer(int which, struct itimerval *value); |
105 | extern void getnstimeofday(struct timespec *tv); | 106 | extern void getnstimeofday(struct timespec *tv); |
106 | 107 | ||
diff --git a/include/linux/timer.h b/include/linux/timer.h index 9b9877fd2505..ee5a09e806e8 100644 --- a/include/linux/timer.h +++ b/include/linux/timer.h | |||
@@ -69,13 +69,13 @@ extern unsigned long next_timer_interrupt(void); | |||
69 | * @timer: the timer to be added | 69 | * @timer: the timer to be added |
70 | * | 70 | * |
71 | * The kernel will do a ->function(->data) callback from the | 71 | * The kernel will do a ->function(->data) callback from the |
72 | * timer interrupt at the ->expired point in the future. The | 72 | * timer interrupt at the ->expires point in the future. The |
73 | * current time is 'jiffies'. | 73 | * current time is 'jiffies'. |
74 | * | 74 | * |
75 | * The timer's ->expired, ->function (and if the handler uses it, ->data) | 75 | * The timer's ->expires, ->function (and if the handler uses it, ->data) |
76 | * fields must be set prior calling this function. | 76 | * fields must be set prior calling this function. |
77 | * | 77 | * |
78 | * Timers with an ->expired field in the past will be executed in the next | 78 | * Timers with an ->expires field in the past will be executed in the next |
79 | * timer tick. | 79 | * timer tick. |
80 | */ | 80 | */ |
81 | static inline void add_timer(struct timer_list *timer) | 81 | static inline void add_timer(struct timer_list *timer) |
diff --git a/include/linux/timex.h b/include/linux/timex.h index b7ca1204e42a..82dc9ae79d37 100644 --- a/include/linux/timex.h +++ b/include/linux/timex.h | |||
@@ -97,38 +97,11 @@ | |||
97 | 97 | ||
98 | #define MAXPHASE 512000L /* max phase error (us) */ | 98 | #define MAXPHASE 512000L /* max phase error (us) */ |
99 | #define MAXFREQ (512L << SHIFT_USEC) /* max frequency error (ppm) */ | 99 | #define MAXFREQ (512L << SHIFT_USEC) /* max frequency error (ppm) */ |
100 | #define MAXTIME (200L << PPS_AVG) /* max PPS error (jitter) (200 us) */ | ||
101 | #define MINSEC 16L /* min interval between updates (s) */ | 100 | #define MINSEC 16L /* min interval between updates (s) */ |
102 | #define MAXSEC 1200L /* max interval between updates (s) */ | 101 | #define MAXSEC 1200L /* max interval between updates (s) */ |
103 | #define NTP_PHASE_LIMIT (MAXPHASE << 5) /* beyond max. dispersion */ | 102 | #define NTP_PHASE_LIMIT (MAXPHASE << 5) /* beyond max. dispersion */ |
104 | 103 | ||
105 | /* | 104 | /* |
106 | * The following defines are used only if a pulse-per-second (PPS) | ||
107 | * signal is available and connected via a modem control lead, such as | ||
108 | * produced by the optional ppsclock feature incorporated in the Sun | ||
109 | * asynch driver. They establish the design parameters of the frequency- | ||
110 | * lock loop used to discipline the CPU clock oscillator to the PPS | ||
111 | * signal. | ||
112 | * | ||
113 | * PPS_AVG is the averaging factor for the frequency loop, as well as | ||
114 | * the time and frequency dispersion. | ||
115 | * | ||
116 | * PPS_SHIFT and PPS_SHIFTMAX specify the minimum and maximum | ||
117 | * calibration intervals, respectively, in seconds as a power of two. | ||
118 | * | ||
119 | * PPS_VALID is the maximum interval before the PPS signal is considered | ||
120 | * invalid and protocol updates used directly instead. | ||
121 | * | ||
122 | * MAXGLITCH is the maximum interval before a time offset of more than | ||
123 | * MAXTIME is believed. | ||
124 | */ | ||
125 | #define PPS_AVG 2 /* pps averaging constant (shift) */ | ||
126 | #define PPS_SHIFT 2 /* min interval duration (s) (shift) */ | ||
127 | #define PPS_SHIFTMAX 8 /* max interval duration (s) (shift) */ | ||
128 | #define PPS_VALID 120 /* pps signal watchdog max (s) */ | ||
129 | #define MAXGLITCH 30 /* pps signal glitch max (s) */ | ||
130 | |||
131 | /* | ||
132 | * syscall interface - used (mainly by NTP daemon) | 105 | * syscall interface - used (mainly by NTP daemon) |
133 | * to discipline kernel clock oscillator | 106 | * to discipline kernel clock oscillator |
134 | */ | 107 | */ |
@@ -246,20 +219,6 @@ extern long time_reftime; /* time at last adjustment (s) */ | |||
246 | extern long time_adjust; /* The amount of adjtime left */ | 219 | extern long time_adjust; /* The amount of adjtime left */ |
247 | extern long time_next_adjust; /* Value for time_adjust at next tick */ | 220 | extern long time_next_adjust; /* Value for time_adjust at next tick */ |
248 | 221 | ||
249 | /* interface variables pps->timer interrupt */ | ||
250 | extern long pps_offset; /* pps time offset (us) */ | ||
251 | extern long pps_jitter; /* time dispersion (jitter) (us) */ | ||
252 | extern long pps_freq; /* frequency offset (scaled ppm) */ | ||
253 | extern long pps_stabil; /* frequency dispersion (scaled ppm) */ | ||
254 | extern long pps_valid; /* pps signal watchdog counter */ | ||
255 | |||
256 | /* interface variables pps->adjtimex */ | ||
257 | extern int pps_shift; /* interval duration (s) (shift) */ | ||
258 | extern long pps_jitcnt; /* jitter limit exceeded */ | ||
259 | extern long pps_calcnt; /* calibration intervals */ | ||
260 | extern long pps_errcnt; /* calibration errors */ | ||
261 | extern long pps_stbcnt; /* stability limit exceeded */ | ||
262 | |||
263 | /** | 222 | /** |
264 | * ntp_clear - Clears the NTP state variables | 223 | * ntp_clear - Clears the NTP state variables |
265 | * | 224 | * |
diff --git a/include/linux/tty.h b/include/linux/tty.h index f45cd74e6f24..f13f49afe198 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/tty_driver.h> | 24 | #include <linux/tty_driver.h> |
25 | #include <linux/tty_ldisc.h> | 25 | #include <linux/tty_ldisc.h> |
26 | #include <linux/screen_info.h> | 26 | #include <linux/screen_info.h> |
27 | #include <linux/mutex.h> | ||
27 | 28 | ||
28 | #include <asm/system.h> | 29 | #include <asm/system.h> |
29 | 30 | ||
@@ -231,8 +232,8 @@ struct tty_struct { | |||
231 | int canon_data; | 232 | int canon_data; |
232 | unsigned long canon_head; | 233 | unsigned long canon_head; |
233 | unsigned int canon_column; | 234 | unsigned int canon_column; |
234 | struct semaphore atomic_read; | 235 | struct mutex atomic_read_lock; |
235 | struct semaphore atomic_write; | 236 | struct mutex atomic_write_lock; |
236 | unsigned char *write_buf; | 237 | unsigned char *write_buf; |
237 | int write_cnt; | 238 | int write_cnt; |
238 | spinlock_t read_lock; | 239 | spinlock_t read_lock; |
@@ -319,8 +320,7 @@ extern void tty_ldisc_put(int); | |||
319 | extern void tty_wakeup(struct tty_struct *tty); | 320 | extern void tty_wakeup(struct tty_struct *tty); |
320 | extern void tty_ldisc_flush(struct tty_struct *tty); | 321 | extern void tty_ldisc_flush(struct tty_struct *tty); |
321 | 322 | ||
322 | struct semaphore; | 323 | extern struct mutex tty_mutex; |
323 | extern struct semaphore tty_sem; | ||
324 | 324 | ||
325 | /* n_tty.c */ | 325 | /* n_tty.c */ |
326 | extern struct tty_ldisc tty_ldisc_N_TTY; | 326 | extern struct tty_ldisc tty_ldisc_N_TTY; |
diff --git a/include/linux/tty_flip.h b/include/linux/tty_flip.h index 222faf97d5f9..0976a163b459 100644 --- a/include/linux/tty_flip.h +++ b/include/linux/tty_flip.h | |||
@@ -2,19 +2,13 @@ | |||
2 | #define _LINUX_TTY_FLIP_H | 2 | #define _LINUX_TTY_FLIP_H |
3 | 3 | ||
4 | extern int tty_buffer_request_room(struct tty_struct *tty, size_t size); | 4 | extern int tty_buffer_request_room(struct tty_struct *tty, size_t size); |
5 | extern int tty_insert_flip_string(struct tty_struct *tty, unsigned char *chars, size_t size); | 5 | extern int tty_insert_flip_string(struct tty_struct *tty, const unsigned char *chars, size_t size); |
6 | extern int tty_insert_flip_string_flags(struct tty_struct *tty, unsigned char *chars, char *flags, size_t size); | 6 | extern int tty_insert_flip_string_flags(struct tty_struct *tty, const unsigned char *chars, const char *flags, size_t size); |
7 | extern int tty_prepare_flip_string(struct tty_struct *tty, unsigned char **chars, size_t size); | 7 | extern int tty_prepare_flip_string(struct tty_struct *tty, unsigned char **chars, size_t size); |
8 | extern int tty_prepare_flip_string_flags(struct tty_struct *tty, unsigned char **chars, char **flags, size_t size); | 8 | extern int tty_prepare_flip_string_flags(struct tty_struct *tty, unsigned char **chars, char **flags, size_t size); |
9 | 9 | ||
10 | #ifdef INCLUDE_INLINE_FUNCS | 10 | static inline int tty_insert_flip_char(struct tty_struct *tty, |
11 | #define _INLINE_ extern | 11 | unsigned char ch, char flag) |
12 | #else | ||
13 | #define _INLINE_ static __inline__ | ||
14 | #endif | ||
15 | |||
16 | _INLINE_ int tty_insert_flip_char(struct tty_struct *tty, | ||
17 | unsigned char ch, char flag) | ||
18 | { | 12 | { |
19 | struct tty_buffer *tb = tty->buf.tail; | 13 | struct tty_buffer *tb = tty->buf.tail; |
20 | if (tb && tb->active && tb->used < tb->size) { | 14 | if (tb && tb->active && tb->used < tb->size) { |
@@ -25,7 +19,7 @@ _INLINE_ int tty_insert_flip_char(struct tty_struct *tty, | |||
25 | return tty_insert_flip_string_flags(tty, &ch, &flag, 1); | 19 | return tty_insert_flip_string_flags(tty, &ch, &flag, 1); |
26 | } | 20 | } |
27 | 21 | ||
28 | _INLINE_ void tty_schedule_flip(struct tty_struct *tty) | 22 | static inline void tty_schedule_flip(struct tty_struct *tty) |
29 | { | 23 | { |
30 | unsigned long flags; | 24 | unsigned long flags; |
31 | spin_lock_irqsave(&tty->buf.lock, flags); | 25 | spin_lock_irqsave(&tty->buf.lock, flags); |
diff --git a/include/linux/udf_fs_i.h b/include/linux/udf_fs_i.h index 1e7508420fcf..ffaf05679ffb 100644 --- a/include/linux/udf_fs_i.h +++ b/include/linux/udf_fs_i.h | |||
@@ -15,27 +15,6 @@ | |||
15 | 15 | ||
16 | #ifdef __KERNEL__ | 16 | #ifdef __KERNEL__ |
17 | 17 | ||
18 | #ifndef _ECMA_167_H | ||
19 | typedef struct | ||
20 | { | ||
21 | __u32 logicalBlockNum; | ||
22 | __u16 partitionReferenceNum; | ||
23 | } __attribute__ ((packed)) lb_addr; | ||
24 | |||
25 | typedef struct | ||
26 | { | ||
27 | __u32 extLength; | ||
28 | __u32 extPosition; | ||
29 | } __attribute__ ((packed)) short_ad; | ||
30 | |||
31 | typedef struct | ||
32 | { | ||
33 | __u32 extLength; | ||
34 | lb_addr extLocation; | ||
35 | __u8 impUse[6]; | ||
36 | } __attribute__ ((packed)) long_ad; | ||
37 | #endif | ||
38 | |||
39 | struct udf_inode_info | 18 | struct udf_inode_info |
40 | { | 19 | { |
41 | struct timespec i_crtime; | 20 | struct timespec i_crtime; |
diff --git a/include/linux/udf_fs_sb.h b/include/linux/udf_fs_sb.h index b15ff2e99c91..80ae9ef940dc 100644 --- a/include/linux/udf_fs_sb.h +++ b/include/linux/udf_fs_sb.h | |||
@@ -13,7 +13,7 @@ | |||
13 | #ifndef _UDF_FS_SB_H | 13 | #ifndef _UDF_FS_SB_H |
14 | #define _UDF_FS_SB_H 1 | 14 | #define _UDF_FS_SB_H 1 |
15 | 15 | ||
16 | #include <asm/semaphore.h> | 16 | #include <linux/mutex.h> |
17 | 17 | ||
18 | #pragma pack(1) | 18 | #pragma pack(1) |
19 | 19 | ||
@@ -111,7 +111,7 @@ struct udf_sb_info | |||
111 | /* VAT inode */ | 111 | /* VAT inode */ |
112 | struct inode *s_vat; | 112 | struct inode *s_vat; |
113 | 113 | ||
114 | struct semaphore s_alloc_sem; | 114 | struct mutex s_alloc_mutex; |
115 | }; | 115 | }; |
116 | 116 | ||
117 | #endif /* _UDF_FS_SB_H */ | 117 | #endif /* _UDF_FS_SB_H */ |
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index 724cfbf54b8a..2275bfec5b68 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h | |||
@@ -883,6 +883,7 @@ struct v4l2_modulator | |||
883 | #define V4L2_TUNER_MODE_LANG2 0x0002 | 883 | #define V4L2_TUNER_MODE_LANG2 0x0002 |
884 | #define V4L2_TUNER_MODE_SAP 0x0002 | 884 | #define V4L2_TUNER_MODE_SAP 0x0002 |
885 | #define V4L2_TUNER_MODE_LANG1 0x0003 | 885 | #define V4L2_TUNER_MODE_LANG1 0x0003 |
886 | #define V4L2_TUNER_MODE_LANG1_LANG2 0x0004 | ||
886 | 887 | ||
887 | struct v4l2_frequency | 888 | struct v4l2_frequency |
888 | { | 889 | { |
diff --git a/include/linux/vt_kern.h b/include/linux/vt_kern.h index fab5aed8ca31..530ae3f4248c 100644 --- a/include/linux/vt_kern.h +++ b/include/linux/vt_kern.h | |||
@@ -73,6 +73,11 @@ int con_copy_unimap(struct vc_data *dst_vc, struct vc_data *src_vc); | |||
73 | int vt_waitactive(int vt); | 73 | int vt_waitactive(int vt); |
74 | void change_console(struct vc_data *new_vc); | 74 | void change_console(struct vc_data *new_vc); |
75 | void reset_vc(struct vc_data *vc); | 75 | void reset_vc(struct vc_data *vc); |
76 | #ifdef CONFIG_VT | ||
77 | int is_console_suspend_safe(void); | ||
78 | #else | ||
79 | static inline int is_console_suspend_safe(void) { return 1; } | ||
80 | #endif | ||
76 | 81 | ||
77 | /* | 82 | /* |
78 | * vc_screen.c shares this temporary buffer with the console write code so that | 83 | * vc_screen.c shares this temporary buffer with the console write code so that |
diff --git a/include/linux/wireless.h b/include/linux/wireless.h index a555a0f7a7b4..13588564b42b 100644 --- a/include/linux/wireless.h +++ b/include/linux/wireless.h | |||
@@ -1,10 +1,10 @@ | |||
1 | /* | 1 | /* |
2 | * This file define a set of standard wireless extensions | 2 | * This file define a set of standard wireless extensions |
3 | * | 3 | * |
4 | * Version : 19 18.3.05 | 4 | * Version : 20 17.2.06 |
5 | * | 5 | * |
6 | * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com> | 6 | * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com> |
7 | * Copyright (c) 1997-2005 Jean Tourrilhes, All Rights Reserved. | 7 | * Copyright (c) 1997-2006 Jean Tourrilhes, All Rights Reserved. |
8 | */ | 8 | */ |
9 | 9 | ||
10 | #ifndef _LINUX_WIRELESS_H | 10 | #ifndef _LINUX_WIRELESS_H |
@@ -80,7 +80,7 @@ | |||
80 | * (there is some stuff that will be added in the future...) | 80 | * (there is some stuff that will be added in the future...) |
81 | * I just plan to increment with each new version. | 81 | * I just plan to increment with each new version. |
82 | */ | 82 | */ |
83 | #define WIRELESS_EXT 19 | 83 | #define WIRELESS_EXT 20 |
84 | 84 | ||
85 | /* | 85 | /* |
86 | * Changes : | 86 | * Changes : |
@@ -204,6 +204,10 @@ | |||
204 | * - Add IW_QUAL_ALL_UPDATED and IW_QUAL_ALL_INVALID macros | 204 | * - Add IW_QUAL_ALL_UPDATED and IW_QUAL_ALL_INVALID macros |
205 | * - Add explicit flag to tell stats are in dBm : IW_QUAL_DBM | 205 | * - Add explicit flag to tell stats are in dBm : IW_QUAL_DBM |
206 | * - Add IW_IOCTL_IDX() and IW_EVENT_IDX() macros | 206 | * - Add IW_IOCTL_IDX() and IW_EVENT_IDX() macros |
207 | * | ||
208 | * V19 to V20 | ||
209 | * ---------- | ||
210 | * - RtNetlink requests support (SET/GET) | ||
207 | */ | 211 | */ |
208 | 212 | ||
209 | /**************************** CONSTANTS ****************************/ | 213 | /**************************** CONSTANTS ****************************/ |
diff --git a/include/linux/writeback.h b/include/linux/writeback.h index beaef5c7a0ea..56f92fcbe94a 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h | |||
@@ -88,8 +88,8 @@ void throttle_vm_writeout(void); | |||
88 | /* These are exported to sysctl. */ | 88 | /* These are exported to sysctl. */ |
89 | extern int dirty_background_ratio; | 89 | extern int dirty_background_ratio; |
90 | extern int vm_dirty_ratio; | 90 | extern int vm_dirty_ratio; |
91 | extern int dirty_writeback_centisecs; | 91 | extern int dirty_writeback_interval; |
92 | extern int dirty_expire_centisecs; | 92 | extern int dirty_expire_interval; |
93 | extern int block_dump; | 93 | extern int block_dump; |
94 | extern int laptop_mode; | 94 | extern int laptop_mode; |
95 | 95 | ||
@@ -99,7 +99,15 @@ int dirty_writeback_centisecs_handler(struct ctl_table *, int, struct file *, | |||
99 | void __user *, size_t *, loff_t *); | 99 | void __user *, size_t *, loff_t *); |
100 | 100 | ||
101 | void page_writeback_init(void); | 101 | void page_writeback_init(void); |
102 | void balance_dirty_pages_ratelimited(struct address_space *mapping); | 102 | void balance_dirty_pages_ratelimited_nr(struct address_space *mapping, |
103 | unsigned long nr_pages_dirtied); | ||
104 | |||
105 | static inline void | ||
106 | balance_dirty_pages_ratelimited(struct address_space *mapping) | ||
107 | { | ||
108 | balance_dirty_pages_ratelimited_nr(mapping, 1); | ||
109 | } | ||
110 | |||
103 | int pdflush_operation(void (*fn)(unsigned long), unsigned long arg0); | 111 | int pdflush_operation(void (*fn)(unsigned long), unsigned long arg0); |
104 | int do_writepages(struct address_space *mapping, struct writeback_control *wbc); | 112 | int do_writepages(struct address_space *mapping, struct writeback_control *wbc); |
105 | int sync_page_range(struct inode *inode, struct address_space *mapping, | 113 | int sync_page_range(struct inode *inode, struct address_space *mapping, |
diff --git a/include/linux/zorro.h b/include/linux/zorro.h index ba5b72768bbe..2f135cf6eef1 100644 --- a/include/linux/zorro.h +++ b/include/linux/zorro.h | |||
@@ -271,39 +271,6 @@ static inline void zorro_set_drvdata (struct zorro_dev *z, void *data) | |||
271 | } | 271 | } |
272 | 272 | ||
273 | 273 | ||
274 | /* | ||
275 | * A helper function which helps ensure correct zorro_driver | ||
276 | * setup and cleanup for commonly-encountered hotplug/modular cases | ||
277 | * | ||
278 | * This MUST stay in a header, as it checks for -DMODULE | ||
279 | */ | ||
280 | static inline int zorro_module_init(struct zorro_driver *drv) | ||
281 | { | ||
282 | int rc = zorro_register_driver(drv); | ||
283 | |||
284 | if (rc > 0) | ||
285 | return 0; | ||
286 | |||
287 | /* iff CONFIG_HOTPLUG and built into kernel, we should | ||
288 | * leave the driver around for future hotplug events. | ||
289 | * For the module case, a hotplug daemon of some sort | ||
290 | * should load a module in response to an insert event. */ | ||
291 | #if defined(CONFIG_HOTPLUG) && !defined(MODULE) | ||
292 | if (rc == 0) | ||
293 | return 0; | ||
294 | #else | ||
295 | if (rc == 0) | ||
296 | rc = -ENODEV; | ||
297 | #endif | ||
298 | |||
299 | /* if we get here, we need to clean up Zorro driver instance | ||
300 | * and return some sort of error */ | ||
301 | zorro_unregister_driver(drv); | ||
302 | |||
303 | return rc; | ||
304 | } | ||
305 | |||
306 | |||
307 | /* | 274 | /* |
308 | * Bitmask indicating portions of available Zorro II RAM that are unused | 275 | * Bitmask indicating portions of available Zorro II RAM that are unused |
309 | * by the system. Every bit represents a 64K chunk, for a maximum of 8MB | 276 | * by the system. Every bit represents a 64K chunk, for a maximum of 8MB |
diff --git a/include/media/audiochip.h b/include/media/audiochip.h index 295d256ee811..1fd4a2207574 100644 --- a/include/media/audiochip.h +++ b/include/media/audiochip.h | |||
@@ -21,18 +21,4 @@ enum audiochip { | |||
21 | AUDIO_CHIP_MSP34XX | 21 | AUDIO_CHIP_MSP34XX |
22 | }; | 22 | }; |
23 | 23 | ||
24 | /* ---------------------------------------------------------------------- */ | ||
25 | |||
26 | /* audio inputs */ | ||
27 | #define AUDIO_TUNER 0x00 | ||
28 | #define AUDIO_RADIO 0x01 | ||
29 | #define AUDIO_EXTERN 0x02 | ||
30 | #define AUDIO_INTERN 0x03 | ||
31 | #define AUDIO_OFF 0x04 | ||
32 | #define AUDIO_ON 0x05 | ||
33 | #define AUDIO_EXTERN_1 AUDIO_EXTERN | ||
34 | #define AUDIO_EXTERN_2 0x06 | ||
35 | #define AUDIO_MUTE 0x80 | ||
36 | #define AUDIO_UNMUTE 0x81 | ||
37 | |||
38 | #endif /* AUDIOCHIP_H */ | 24 | #endif /* AUDIOCHIP_H */ |
diff --git a/include/media/cs53l32a.h b/include/media/cs53l32a.h new file mode 100644 index 000000000000..bf76197d3790 --- /dev/null +++ b/include/media/cs53l32a.h | |||
@@ -0,0 +1,34 @@ | |||
1 | /* | ||
2 | cs53l32a.h - definition for cs53l32a inputs and outputs | ||
3 | |||
4 | Copyright (C) 2006 Hans Verkuil (hverkuil@xs4all.nl) | ||
5 | |||
6 | This program is free software; you can redistribute it and/or modify | ||
7 | it under the terms of the GNU General Public License as published by | ||
8 | the Free Software Foundation; either version 2 of the License, or | ||
9 | (at your option) any later version. | ||
10 | |||
11 | This program is distributed in the hope that it will be useful, | ||
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | GNU General Public License for more details. | ||
15 | |||
16 | You should have received a copy of the GNU General Public License | ||
17 | along with this program; if not, write to the Free Software | ||
18 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
19 | */ | ||
20 | |||
21 | #ifndef _CS53L32A_H_ | ||
22 | #define _CS53L32A_H_ | ||
23 | |||
24 | /* There are 2 physical inputs, but the second input can be | ||
25 | placed in two modes, the first mode bypasses the PGA (gain), | ||
26 | the second goes through the PGA. Hence there are three | ||
27 | possible inputs to choose from. */ | ||
28 | |||
29 | /* CS53L32A HW inputs */ | ||
30 | #define CS53L32A_IN0 0 | ||
31 | #define CS53L32A_IN1 1 | ||
32 | #define CS53L32A_IN2 2 | ||
33 | |||
34 | #endif | ||
diff --git a/include/media/i2c-addr.h b/include/media/i2c-addr.h new file mode 100644 index 000000000000..e7ff44a35ca0 --- /dev/null +++ b/include/media/i2c-addr.h | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | * V4L I2C address list | ||
3 | * | ||
4 | * | ||
5 | * Copyright (C) 2006 Mauro Carvalho Chehab <mchehab@infradead.org> | ||
6 | * Based on a previous mapping by | ||
7 | * Ralph Metzler (rjkm@thp.uni-koeln.de) | ||
8 | * Gerd Knorr <kraxel@goldbach.in-berlin.de> | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | /* bttv address list */ | ||
13 | #define I2C_ADDR_TSA5522 0xc2 | ||
14 | #define I2C_ADDR_TDA7432 0x8a | ||
15 | #define I2C_ADDR_BT832_ALT1 0x88 | ||
16 | #define I2C_ADDR_BT832_ALT2 0x8a // alternate setting | ||
17 | #define I2C_ADDR_TDA8425 0x82 | ||
18 | #define I2C_ADDR_TDA9840 0x84 | ||
19 | #define I2C_ADDR_TDA9850 0xb6 /* also used by 9855,9873 */ | ||
20 | #define I2C_ADDR_TDA9874 0xb0 /* also used by 9875 */ | ||
21 | #define I2C_ADDR_TDA9875 0xb0 | ||
22 | #define I2C_ADDR_HAUPEE 0xa0 | ||
23 | #define I2C_ADDR_STBEE 0xae | ||
24 | #define I2C_ADDR_VHX 0xc0 | ||
25 | #define I2C_ADDR_MSP3400 0x80 | ||
26 | #define I2C_ADDR_MSP3400_ALT 0x88 | ||
27 | #define I2C_ADDR_TEA6300 0x80 /* also used by 6320 */ | ||
28 | #define I2C_ADDR_DPL3518 0x84 | ||
29 | #define I2C_ADDR_TDA9887 0x86 | ||
30 | |||
31 | /* | ||
32 | * i2c bus addresses for the chips supported by tvaudio.c | ||
33 | */ | ||
34 | |||
35 | #define I2C_ADDR_TDA8425 0x82 | ||
36 | #define I2C_ADDR_TDA9840 0x84 /* also used by TA8874Z */ | ||
37 | #define I2C_ADDR_TDA985x_L 0xb4 /* also used by 9873 */ | ||
38 | #define I2C_ADDR_TDA985x_H 0xb6 | ||
39 | #define I2C_ADDR_TDA9874 0xb0 /* also used by 9875 */ | ||
40 | |||
41 | #define I2C_ADDR_TEA6300 0x80 /* also used by 6320 */ | ||
42 | #define I2C_ADDR_TEA6420 0x98 | ||
43 | |||
44 | #define I2C_ADDR_PIC16C54 0x96 /* PV951 */ | ||
diff --git a/include/media/msp3400.h b/include/media/msp3400.h new file mode 100644 index 000000000000..0be61a021d45 --- /dev/null +++ b/include/media/msp3400.h | |||
@@ -0,0 +1,226 @@ | |||
1 | /* | ||
2 | msp3400.h - definition for msp3400 inputs and outputs | ||
3 | |||
4 | Copyright (C) 2006 Hans Verkuil (hverkuil@xs4all.nl) | ||
5 | |||
6 | This program is free software; you can redistribute it and/or modify | ||
7 | it under the terms of the GNU General Public License as published by | ||
8 | the Free Software Foundation; either version 2 of the License, or | ||
9 | (at your option) any later version. | ||
10 | |||
11 | This program is distributed in the hope that it will be useful, | ||
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | GNU General Public License for more details. | ||
15 | |||
16 | You should have received a copy of the GNU General Public License | ||
17 | along with this program; if not, write to the Free Software | ||
18 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
19 | */ | ||
20 | |||
21 | #ifndef _MSP3400_H_ | ||
22 | #define _MSP3400_H_ | ||
23 | |||
24 | /* msp3400 routing | ||
25 | =============== | ||
26 | |||
27 | The msp3400 has a complicated routing scheme with many possible | ||
28 | combinations. The details are all in the datasheets but I will try | ||
29 | to give a short description here. | ||
30 | |||
31 | Inputs | ||
32 | ====== | ||
33 | |||
34 | There are 1) tuner inputs, 2) I2S inputs, 3) SCART inputs. You will have | ||
35 | to select which tuner input to use and which SCART input to use. The | ||
36 | selected tuner input, the selected SCART input and all I2S inputs go to | ||
37 | the DSP (the tuner input first goes through the demodulator). | ||
38 | |||
39 | The DSP handles things like volume, bass/treble, balance, and some chips | ||
40 | have support for surround sound. It has several outputs: MAIN, AUX, I2S | ||
41 | and SCART1/2. Each output can select which DSP input to use. So the MAIN | ||
42 | output can select the tuner input while at the same time the SCART1 output | ||
43 | uses the I2S input. | ||
44 | |||
45 | Outputs | ||
46 | ======= | ||
47 | |||
48 | Most DSP outputs are also the outputs of the msp3400. However, the SCART | ||
49 | outputs of the msp3400 can select which input to use: either the SCART1 or | ||
50 | SCART2 output from the DSP, or the msp3400 SCART inputs, thus completely | ||
51 | bypassing the DSP. | ||
52 | |||
53 | Summary | ||
54 | ======= | ||
55 | |||
56 | So to specify a complete routing scheme for the msp3400 you will have to | ||
57 | specify in the 'input' field of the v4l2_routing struct: | ||
58 | |||
59 | 1) which tuner input to use | ||
60 | 2) which SCART input to use | ||
61 | 3) which DSP input to use for each DSP output | ||
62 | |||
63 | And in the 'output' field of the v4l2_routing struct you specify: | ||
64 | |||
65 | 1) which SCART input to use for each SCART output | ||
66 | |||
67 | Depending on how the msp is wired to the other components you can | ||
68 | ignore or mute certain inputs or outputs. | ||
69 | |||
70 | Also, depending on the msp version only a subset of the inputs or | ||
71 | outputs may be present. At the end of this header some tables are | ||
72 | added containing a list of what is available for each msp version. | ||
73 | */ | ||
74 | |||
75 | /* Inputs to the DSP unit: two independent selections have to be made: | ||
76 | 1) the tuner (SIF) input | ||
77 | 2) the SCART input | ||
78 | Bits 0-2 are used for the SCART input select, bit 3 is used for the tuner | ||
79 | input, bits 4-7 are reserved. | ||
80 | */ | ||
81 | |||
82 | /* SCART input to DSP selection */ | ||
83 | #define MSP_IN_SCART_1 0 /* Pin SC1_IN */ | ||
84 | #define MSP_IN_SCART_2 1 /* Pin SC2_IN */ | ||
85 | #define MSP_IN_SCART_3 2 /* Pin SC3_IN */ | ||
86 | #define MSP_IN_SCART_4 3 /* Pin SC4_IN */ | ||
87 | #define MSP_IN_MONO 6 /* Pin MONO_IN */ | ||
88 | #define MSP_IN_MUTE 7 /* Mute DSP input */ | ||
89 | #define MSP_SCART_TO_DSP(in) (in) | ||
90 | /* Tuner input to demodulator and DSP selection */ | ||
91 | #define MSP_IN_TUNER_1 0 /* Analog Sound IF input pin ANA_IN1 */ | ||
92 | #define MSP_IN_TUNER_2 1 /* Analog Sound IF input pin ANA_IN2 */ | ||
93 | #define MSP_TUNER_TO_DSP(in) ((in) << 3) | ||
94 | |||
95 | /* The msp has up to 5 DSP outputs, each output can independently select | ||
96 | a DSP input. | ||
97 | |||
98 | The DSP outputs are: loudspeaker output (aka MAIN), headphones output | ||
99 | (aka AUX), SCART1 DA output, SCART2 DA output and an I2S output. | ||
100 | There also is a quasi-peak detector output, but that is not used by | ||
101 | this driver and is set to the same input as the loudspeaker output. | ||
102 | Not all outputs are supported by all msp models. Setting the input | ||
103 | of an unsupported output will be ignored by the driver. | ||
104 | |||
105 | There are up to 16 DSP inputs to choose from, so each output is | ||
106 | assigned 4 bits. | ||
107 | |||
108 | Note: the 44x8G can mix two inputs and feed the result back to the | ||
109 | DSP. This is currently not implemented. Also not implemented is the | ||
110 | multi-channel capable I2S3 input of the 44x0G. If someone can demonstrate | ||
111 | a need for one of those features then additional support can be added. */ | ||
112 | #define MSP_DSP_OUT_TUNER 0 /* Tuner output */ | ||
113 | #define MSP_DSP_OUT_SCART 2 /* SCART output */ | ||
114 | #define MSP_DSP_OUT_I2S1 5 /* I2S1 output */ | ||
115 | #define MSP_DSP_OUT_I2S2 6 /* I2S2 output */ | ||
116 | #define MSP_DSP_OUT_I2S3 7 /* I2S3 output */ | ||
117 | #define MSP_DSP_OUT_MAIN_AVC 11 /* MAIN AVC processed output */ | ||
118 | #define MSP_DSP_OUT_MAIN 12 /* MAIN output */ | ||
119 | #define MSP_DSP_OUT_AUX 13 /* AUX output */ | ||
120 | #define MSP_DSP_TO_MAIN(in) ((in) << 4) | ||
121 | #define MSP_DSP_TO_AUX(in) ((in) << 8) | ||
122 | #define MSP_DSP_TO_SCART1(in) ((in) << 12) | ||
123 | #define MSP_DSP_TO_SCART2(in) ((in) << 16) | ||
124 | #define MSP_DSP_TO_I2S(in) ((in) << 20) | ||
125 | |||
126 | /* Output SCART select: the SCART outputs can select which input | ||
127 | to use. */ | ||
128 | #define MSP_OUT_SCART1 0 /* SCART1 input, bypassing the DSP */ | ||
129 | #define MSP_OUT_SCART2 1 /* SCART2 input, bypassing the DSP */ | ||
130 | #define MSP_OUT_SCART3 2 /* SCART3 input, bypassing the DSP */ | ||
131 | #define MSP_OUT_SCART4 3 /* SCART4 input, bypassing the DSP */ | ||
132 | #define MSP_OUT_SCART1_DA 4 /* DSP SCART1 output */ | ||
133 | #define MSP_OUT_SCART2_DA 5 /* DSP SCART2 output */ | ||
134 | #define MSP_OUT_MONO 6 /* MONO input, bypassing the DSP */ | ||
135 | #define MSP_OUT_MUTE 7 /* MUTE output */ | ||
136 | #define MSP_OUT_TO_SCART1(in) (in) | ||
137 | #define MSP_OUT_TO_SCART2(in) ((in) << 4) | ||
138 | |||
139 | /* Shortcut macros */ | ||
140 | #define MSP_INPUT(sc, t, main_aux_src, sc_i2s_src) \ | ||
141 | (MSP_SCART_TO_DSP(sc) | \ | ||
142 | MSP_TUNER_TO_DSP(t) | \ | ||
143 | MSP_DSP_TO_MAIN(main_aux_src) | \ | ||
144 | MSP_DSP_TO_AUX(main_aux_src) | \ | ||
145 | MSP_DSP_TO_SCART1(sc_i2s_src) | \ | ||
146 | MSP_DSP_TO_SCART2(sc_i2s_src) | \ | ||
147 | MSP_DSP_TO_I2S(sc_i2s_src)) | ||
148 | #define MSP_INPUT_DEFAULT MSP_INPUT(MSP_IN_SCART_1, MSP_IN_TUNER_1, \ | ||
149 | MSP_DSP_OUT_TUNER, MSP_DSP_OUT_TUNER) | ||
150 | #define MSP_OUTPUT(sc) \ | ||
151 | (MSP_OUT_TO_SCART1(sc) | \ | ||
152 | MSP_OUT_TO_SCART2(sc)) | ||
153 | /* This equals the RESET position of the msp3400 ACB register */ | ||
154 | #define MSP_OUTPUT_DEFAULT (MSP_OUT_TO_SCART1(MSP_OUT_SCART3) | \ | ||
155 | MSP_OUT_TO_SCART2(MSP_OUT_SCART1_DA)) | ||
156 | |||
157 | /* Tuner inputs vs. msp version */ | ||
158 | /* Chip TUNER_1 TUNER_2 | ||
159 | ------------------------- | ||
160 | msp34x0b y y | ||
161 | msp34x0c y y | ||
162 | msp34x0d y y | ||
163 | msp34x5d y n | ||
164 | msp34x7d y n | ||
165 | msp34x0g y y | ||
166 | msp34x1g y y | ||
167 | msp34x2g y y | ||
168 | msp34x5g y n | ||
169 | msp34x7g y n | ||
170 | msp44x0g y y | ||
171 | msp44x8g y y | ||
172 | */ | ||
173 | |||
174 | /* SCART inputs vs. msp version */ | ||
175 | /* Chip SC1 SC2 SC3 SC4 | ||
176 | ------------------------- | ||
177 | msp34x0b y y y n | ||
178 | msp34x0c y y y n | ||
179 | msp34x0d y y y y | ||
180 | msp34x5d y y n n | ||
181 | msp34x7d y n n n | ||
182 | msp34x0g y y y y | ||
183 | msp34x1g y y y y | ||
184 | msp34x2g y y y y | ||
185 | msp34x5g y y n n | ||
186 | msp34x7g y n n n | ||
187 | msp44x0g y y y y | ||
188 | msp44x8g y y y y | ||
189 | */ | ||
190 | |||
191 | /* DSP inputs vs. msp version (tuner and SCART inputs are always available) */ | ||
192 | /* Chip I2S1 I2S2 I2S3 MAIN_AVC MAIN AUX | ||
193 | ------------------------------------------ | ||
194 | msp34x0b y n n n n n | ||
195 | msp34x0c y y n n n n | ||
196 | msp34x0d y y n n n n | ||
197 | msp34x5d y y n n n n | ||
198 | msp34x7d n n n n n n | ||
199 | msp34x0g y y n n n n | ||
200 | msp34x1g y y n n n n | ||
201 | msp34x2g y y n y y y | ||
202 | msp34x5g y y n n n n | ||
203 | msp34x7g n n n n n n | ||
204 | msp44x0g y y y y y y | ||
205 | msp44x8g y y y n n n | ||
206 | */ | ||
207 | |||
208 | /* DSP outputs vs. msp version */ | ||
209 | /* Chip MAIN AUX SCART1 SCART2 I2S | ||
210 | ------------------------------------ | ||
211 | msp34x0b y y y n y | ||
212 | msp34x0c y y y n y | ||
213 | msp34x0d y y y y y | ||
214 | msp34x5d y n y n y | ||
215 | msp34x7d y n y n n | ||
216 | msp34x0g y y y y y | ||
217 | msp34x1g y y y y y | ||
218 | msp34x2g y y y y y | ||
219 | msp34x5g y n y n y | ||
220 | msp34x7g y n y n n | ||
221 | msp44x0g y y y y y | ||
222 | msp44x8g y y y y y | ||
223 | */ | ||
224 | |||
225 | #endif /* MSP3400_H */ | ||
226 | |||
diff --git a/include/media/rds.h b/include/media/rds.h new file mode 100644 index 000000000000..951c1ae0be74 --- /dev/null +++ b/include/media/rds.h | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | |||
3 | Types and defines needed for RDS. This is included by | ||
4 | saa6588.c and every driver (e.g. bttv-driver.c) that wants | ||
5 | to use the saa6588 module. | ||
6 | |||
7 | Instead of having a seperate rds.h, I'd prefer to include | ||
8 | this stuff in one of the already existing files like tuner.h | ||
9 | |||
10 | (c) 2005 by Hans J. Koch | ||
11 | |||
12 | This program is free software; you can redistribute it and/or modify | ||
13 | it under the terms of the GNU General Public License as published by | ||
14 | the Free Software Foundation; either version 2 of the License, or | ||
15 | (at your option) any later version. | ||
16 | |||
17 | This program is distributed in the hope that it will be useful, | ||
18 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
19 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
20 | GNU General Public License for more details. | ||
21 | |||
22 | You should have received a copy of the GNU General Public License | ||
23 | along with this program; if not, write to the Free Software | ||
24 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
25 | |||
26 | */ | ||
27 | |||
28 | #ifndef _RDS_H | ||
29 | #define _RDS_H | ||
30 | |||
31 | struct rds_command { | ||
32 | unsigned int block_count; | ||
33 | int result; | ||
34 | unsigned char __user *buffer; | ||
35 | struct file *instance; | ||
36 | poll_table *event_list; | ||
37 | }; | ||
38 | |||
39 | #define RDS_CMD_OPEN _IOW('R',1,int) | ||
40 | #define RDS_CMD_CLOSE _IOW('R',2,int) | ||
41 | #define RDS_CMD_READ _IOR('R',3,int) | ||
42 | #define RDS_CMD_POLL _IOR('R',4,int) | ||
43 | |||
44 | #endif | ||
diff --git a/include/media/saa7146_vv.h b/include/media/saa7146_vv.h index e5e749e984ee..4507cb61ae93 100644 --- a/include/media/saa7146_vv.h +++ b/include/media/saa7146_vv.h | |||
@@ -197,7 +197,8 @@ void saa7146_buffer_finish(struct saa7146_dev *dev, struct saa7146_dmaqueue *q, | |||
197 | void saa7146_buffer_next(struct saa7146_dev *dev, struct saa7146_dmaqueue *q,int vbi); | 197 | void saa7146_buffer_next(struct saa7146_dev *dev, struct saa7146_dmaqueue *q,int vbi); |
198 | int saa7146_buffer_queue(struct saa7146_dev *dev, struct saa7146_dmaqueue *q, struct saa7146_buf *buf); | 198 | int saa7146_buffer_queue(struct saa7146_dev *dev, struct saa7146_dmaqueue *q, struct saa7146_buf *buf); |
199 | void saa7146_buffer_timeout(unsigned long data); | 199 | void saa7146_buffer_timeout(unsigned long data); |
200 | void saa7146_dma_free(struct saa7146_dev *dev,struct saa7146_buf *buf); | 200 | void saa7146_dma_free(struct saa7146_dev* dev,struct videobuf_queue *q, |
201 | struct saa7146_buf *buf); | ||
201 | 202 | ||
202 | int saa7146_vv_init(struct saa7146_dev* dev, struct saa7146_ext_vv *ext_vv); | 203 | int saa7146_vv_init(struct saa7146_dev* dev, struct saa7146_ext_vv *ext_vv); |
203 | int saa7146_vv_release(struct saa7146_dev* dev); | 204 | int saa7146_vv_release(struct saa7146_dev* dev); |
diff --git a/include/media/tvaudio.h b/include/media/tvaudio.h new file mode 100644 index 000000000000..6915aafc875a --- /dev/null +++ b/include/media/tvaudio.h | |||
@@ -0,0 +1,30 @@ | |||
1 | /* | ||
2 | tvaudio.h - definition for tvaudio inputs | ||
3 | |||
4 | Copyright (C) 2006 Hans Verkuil (hverkuil@xs4all.nl) | ||
5 | |||
6 | This program is free software; you can redistribute it and/or modify | ||
7 | it under the terms of the GNU General Public License as published by | ||
8 | the Free Software Foundation; either version 2 of the License, or | ||
9 | (at your option) any later version. | ||
10 | |||
11 | This program is distributed in the hope that it will be useful, | ||
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | GNU General Public License for more details. | ||
15 | |||
16 | You should have received a copy of the GNU General Public License | ||
17 | along with this program; if not, write to the Free Software | ||
18 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
19 | */ | ||
20 | |||
21 | #ifndef _TVAUDIO_H | ||
22 | #define _TVAUDIO_H | ||
23 | |||
24 | /* The tvaudio module accepts the following inputs: */ | ||
25 | #define TVAUDIO_INPUT_TUNER 0 | ||
26 | #define TVAUDIO_INPUT_RADIO 1 | ||
27 | #define TVAUDIO_INPUT_EXTERN 2 | ||
28 | #define TVAUDIO_INPUT_INTERN 3 | ||
29 | |||
30 | #endif | ||
diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h index 2360453e7496..642520acdfa7 100644 --- a/include/media/v4l2-common.h +++ b/include/media/v4l2-common.h | |||
@@ -123,17 +123,6 @@ enum v4l2_chip_ident { | |||
123 | /* v4l device was opened in Radio mode, to be replaced by VIDIOC_INT_S_TUNER_MODE */ | 123 | /* v4l device was opened in Radio mode, to be replaced by VIDIOC_INT_S_TUNER_MODE */ |
124 | #define AUDC_SET_RADIO _IO('d',88) | 124 | #define AUDC_SET_RADIO _IO('d',88) |
125 | 125 | ||
126 | /* select from TV,radio,extern,MUTE, to be replaced with VIDIOC_INT_S_AUDIO_ROUTING */ | ||
127 | #define AUDC_SET_INPUT _IOW('d',89,int) | ||
128 | |||
129 | /* msp3400 ioctl: will be removed in the near future, to be replaced by | ||
130 | VIDIOC_INT_S_AUDIO_ROUTING. */ | ||
131 | struct msp_matrix { | ||
132 | int input; | ||
133 | int output; | ||
134 | }; | ||
135 | #define MSP_SET_MATRIX _IOW('m',17,struct msp_matrix) | ||
136 | |||
137 | /* tuner ioctls */ | 126 | /* tuner ioctls */ |
138 | 127 | ||
139 | /* Sets tuner type and its I2C addr */ | 128 | /* Sets tuner type and its I2C addr */ |
@@ -209,10 +198,10 @@ struct v4l2_routing { | |||
209 | }; | 198 | }; |
210 | 199 | ||
211 | /* These internal commands should be used to define the inputs and outputs | 200 | /* These internal commands should be used to define the inputs and outputs |
212 | of an audio/video chip. They will replace AUDC_SET_INPUT. | 201 | of an audio/video chip. They will replace the v4l2 API commands |
213 | The v4l2 API commands VIDIOC_S/G_INPUT, VIDIOC_S/G_OUTPUT, | 202 | VIDIOC_S/G_INPUT, VIDIOC_S/G_OUTPUT, VIDIOC_S/G_AUDIO and VIDIOC_S/G_AUDOUT |
214 | VIDIOC_S/G_AUDIO and VIDIOC_S/G_AUDOUT are meant to be used by the | 203 | that are meant to be used by the user. |
215 | user. Internally these commands should be used to switch inputs/outputs | 204 | The internal commands should be used to switch inputs/outputs |
216 | because only the driver knows how to map a 'Television' input to the precise | 205 | because only the driver knows how to map a 'Television' input to the precise |
217 | input/output routing of an A/D converter, or a DSP, or a video digitizer. | 206 | input/output routing of an A/D converter, or a DSP, or a video digitizer. |
218 | These four commands should only be sent directly to an i2c device, they | 207 | These four commands should only be sent directly to an i2c device, they |
diff --git a/include/media/video-buf.h b/include/media/video-buf.h index d90dec5484ee..fff3fd0fbf94 100644 --- a/include/media/video-buf.h +++ b/include/media/video-buf.h | |||
@@ -1,15 +1,20 @@ | |||
1 | /* | 1 | /* |
2 | * | 2 | * |
3 | * generic helper functions for video4linux capture buffers, to handle | 3 | * generic helper functions for video4linux capture buffers, to handle |
4 | * memory management and PCI DMA. Right now bttv + saa7134 use it. | 4 | * memory management and PCI DMA. |
5 | * Right now, bttv, saa7134, saa7146 and cx88 use it. | ||
5 | * | 6 | * |
6 | * The functions expect the hardware being able to scatter gatter | 7 | * The functions expect the hardware being able to scatter gatter |
7 | * (i.e. the buffers are not linear in physical memory, but fragmented | 8 | * (i.e. the buffers are not linear in physical memory, but fragmented |
8 | * into PAGE_SIZE chunks). They also assume the driver does not need | 9 | * into PAGE_SIZE chunks). They also assume the driver does not need |
9 | * to touch the video data (thus it is probably not useful for USB as | 10 | * to touch the video data. |
10 | * data often must be uncompressed by the drivers). | 11 | * |
12 | * device specific map/unmap/sync stuff now are mapped as file operations | ||
13 | * to allow its usage by USB and virtual devices. | ||
11 | * | 14 | * |
12 | * (c) 2001,02 Gerd Knorr <kraxel@bytesex.org> | 15 | * (c) 2001,02 Gerd Knorr <kraxel@bytesex.org> |
16 | * (c) 2006 Mauro Carvalho Chehab, <mchehab@infradead.org> | ||
17 | * (c) 2006 Ted Walther and John Sokol | ||
13 | * | 18 | * |
14 | * This program is free software; you can redistribute it and/or modify | 19 | * This program is free software; you can redistribute it and/or modify |
15 | * it under the terms of the GNU General Public License as published by | 20 | * it under the terms of the GNU General Public License as published by |
@@ -38,6 +43,9 @@ struct scatterlist* videobuf_vmalloc_to_sg(unsigned char *virt, int nr_pages); | |||
38 | struct scatterlist* videobuf_pages_to_sg(struct page **pages, int nr_pages, | 43 | struct scatterlist* videobuf_pages_to_sg(struct page **pages, int nr_pages, |
39 | int offset); | 44 | int offset); |
40 | 45 | ||
46 | struct videobuf_buffer; | ||
47 | struct videobuf_queue; | ||
48 | |||
41 | /* --------------------------------------------------------------------- */ | 49 | /* --------------------------------------------------------------------- */ |
42 | 50 | ||
43 | /* | 51 | /* |
@@ -49,7 +57,7 @@ struct scatterlist* videobuf_pages_to_sg(struct page **pages, int nr_pages, | |||
49 | * pointer + length. The kernel version just wants the size and | 57 | * pointer + length. The kernel version just wants the size and |
50 | * does memory allocation too using vmalloc_32(). | 58 | * does memory allocation too using vmalloc_32(). |
51 | * | 59 | * |
52 | * videobuf_dma_pci_*() | 60 | * videobuf_dma_*() |
53 | * see Documentation/DMA-mapping.txt, these functions to | 61 | * see Documentation/DMA-mapping.txt, these functions to |
54 | * basically the same. The map function does also build a | 62 | * basically the same. The map function does also build a |
55 | * scatterlist for the buffer (and unmap frees it ...) | 63 | * scatterlist for the buffer (and unmap frees it ...) |
@@ -86,12 +94,18 @@ int videobuf_dma_init_kernel(struct videobuf_dmabuf *dma, int direction, | |||
86 | int nr_pages); | 94 | int nr_pages); |
87 | int videobuf_dma_init_overlay(struct videobuf_dmabuf *dma, int direction, | 95 | int videobuf_dma_init_overlay(struct videobuf_dmabuf *dma, int direction, |
88 | dma_addr_t addr, int nr_pages); | 96 | dma_addr_t addr, int nr_pages); |
89 | int videobuf_dma_pci_map(struct pci_dev *dev, struct videobuf_dmabuf *dma); | ||
90 | int videobuf_dma_pci_sync(struct pci_dev *dev, | ||
91 | struct videobuf_dmabuf *dma); | ||
92 | int videobuf_dma_pci_unmap(struct pci_dev *dev, struct videobuf_dmabuf *dma); | ||
93 | int videobuf_dma_free(struct videobuf_dmabuf *dma); | 97 | int videobuf_dma_free(struct videobuf_dmabuf *dma); |
94 | 98 | ||
99 | int videobuf_dma_map(struct videobuf_queue* q,struct videobuf_dmabuf *dma); | ||
100 | int videobuf_dma_sync(struct videobuf_queue* q,struct videobuf_dmabuf *dma); | ||
101 | int videobuf_dma_unmap(struct videobuf_queue* q,struct videobuf_dmabuf *dma); | ||
102 | |||
103 | /*FIXME: these variants are used only on *-alsa code, where videobuf is | ||
104 | * used without queue | ||
105 | */ | ||
106 | int videobuf_pci_dma_map(struct pci_dev *pci,struct videobuf_dmabuf *dma); | ||
107 | int videobuf_pci_dma_unmap(struct pci_dev *pci,struct videobuf_dmabuf *dma); | ||
108 | |||
95 | /* --------------------------------------------------------------------- */ | 109 | /* --------------------------------------------------------------------- */ |
96 | 110 | ||
97 | /* | 111 | /* |
@@ -115,9 +129,6 @@ int videobuf_dma_free(struct videobuf_dmabuf *dma); | |||
115 | * | 129 | * |
116 | */ | 130 | */ |
117 | 131 | ||
118 | struct videobuf_buffer; | ||
119 | struct videobuf_queue; | ||
120 | |||
121 | struct videobuf_mapping { | 132 | struct videobuf_mapping { |
122 | unsigned int count; | 133 | unsigned int count; |
123 | unsigned long start; | 134 | unsigned long start; |
@@ -164,6 +175,10 @@ struct videobuf_buffer { | |||
164 | struct timeval ts; | 175 | struct timeval ts; |
165 | }; | 176 | }; |
166 | 177 | ||
178 | typedef int (vb_map_sg_t)(void *dev,struct scatterlist *sglist,int nr_pages, | ||
179 | int direction); | ||
180 | |||
181 | |||
167 | struct videobuf_queue_ops { | 182 | struct videobuf_queue_ops { |
168 | int (*buf_setup)(struct videobuf_queue *q, | 183 | int (*buf_setup)(struct videobuf_queue *q, |
169 | unsigned int *count, unsigned int *size); | 184 | unsigned int *count, unsigned int *size); |
@@ -174,12 +189,20 @@ struct videobuf_queue_ops { | |||
174 | struct videobuf_buffer *vb); | 189 | struct videobuf_buffer *vb); |
175 | void (*buf_release)(struct videobuf_queue *q, | 190 | void (*buf_release)(struct videobuf_queue *q, |
176 | struct videobuf_buffer *vb); | 191 | struct videobuf_buffer *vb); |
192 | |||
193 | /* Helper operations - device dependent. | ||
194 | * If null, videobuf_init defaults all to PCI handling | ||
195 | */ | ||
196 | |||
197 | vb_map_sg_t *vb_map_sg; | ||
198 | vb_map_sg_t *vb_dma_sync_sg; | ||
199 | vb_map_sg_t *vb_unmap_sg; | ||
177 | }; | 200 | }; |
178 | 201 | ||
179 | struct videobuf_queue { | 202 | struct videobuf_queue { |
180 | struct mutex lock; | 203 | struct mutex lock; |
181 | spinlock_t *irqlock; | 204 | spinlock_t *irqlock; |
182 | struct pci_dev *pci; | 205 | void *dev; /* on pci, points to struct pci_dev */ |
183 | 206 | ||
184 | enum v4l2_buf_type type; | 207 | enum v4l2_buf_type type; |
185 | unsigned int inputs; /* for V4L2_BUF_FLAG_INPUT */ | 208 | unsigned int inputs; /* for V4L2_BUF_FLAG_INPUT */ |
@@ -204,12 +227,15 @@ struct videobuf_queue { | |||
204 | 227 | ||
205 | void* videobuf_alloc(unsigned int size); | 228 | void* videobuf_alloc(unsigned int size); |
206 | int videobuf_waiton(struct videobuf_buffer *vb, int non_blocking, int intr); | 229 | int videobuf_waiton(struct videobuf_buffer *vb, int non_blocking, int intr); |
207 | int videobuf_iolock(struct pci_dev *pci, struct videobuf_buffer *vb, | 230 | int videobuf_iolock(struct videobuf_queue* q, struct videobuf_buffer *vb, |
208 | struct v4l2_framebuffer *fbuf); | 231 | struct v4l2_framebuffer *fbuf); |
232 | |||
233 | /* Maps fops to PCI stuff */ | ||
234 | void videobuf_queue_pci(struct videobuf_queue* q); | ||
209 | 235 | ||
210 | void videobuf_queue_init(struct videobuf_queue *q, | 236 | void videobuf_queue_init(struct videobuf_queue *q, |
211 | struct videobuf_queue_ops *ops, | 237 | struct videobuf_queue_ops *ops, |
212 | struct pci_dev *pci, | 238 | void *dev, |
213 | spinlock_t *irqlock, | 239 | spinlock_t *irqlock, |
214 | enum v4l2_buf_type type, | 240 | enum v4l2_buf_type type, |
215 | enum v4l2_field field, | 241 | enum v4l2_field field, |
diff --git a/include/media/wm8775.h b/include/media/wm8775.h new file mode 100644 index 000000000000..60739c5a23ae --- /dev/null +++ b/include/media/wm8775.h | |||
@@ -0,0 +1,35 @@ | |||
1 | /* | ||
2 | wm8775.h - definition for wm8775 inputs and outputs | ||
3 | |||
4 | Copyright (C) 2006 Hans Verkuil (hverkuil@xs4all.nl) | ||
5 | |||
6 | This program is free software; you can redistribute it and/or modify | ||
7 | it under the terms of the GNU General Public License as published by | ||
8 | the Free Software Foundation; either version 2 of the License, or | ||
9 | (at your option) any later version. | ||
10 | |||
11 | This program is distributed in the hope that it will be useful, | ||
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | GNU General Public License for more details. | ||
15 | |||
16 | You should have received a copy of the GNU General Public License | ||
17 | along with this program; if not, write to the Free Software | ||
18 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
19 | */ | ||
20 | |||
21 | #ifndef _WM8775_H_ | ||
22 | #define _WM8775_H_ | ||
23 | |||
24 | /* The WM8775 has 4 inputs and one output. Zero or more inputs | ||
25 | are multiplexed together to the output. Hence there are | ||
26 | 16 combinations. | ||
27 | If only one input is active (the normal case) then the | ||
28 | input values 1, 2, 4 or 8 should be used. */ | ||
29 | |||
30 | #define WM8775_AIN1 1 | ||
31 | #define WM8775_AIN2 2 | ||
32 | #define WM8775_AIN3 4 | ||
33 | #define WM8775_AIN4 8 | ||
34 | |||
35 | #endif | ||
diff --git a/include/net/ieee80211softmac.h b/include/net/ieee80211softmac.h new file mode 100644 index 000000000000..b971d8c82bdd --- /dev/null +++ b/include/net/ieee80211softmac.h | |||
@@ -0,0 +1,292 @@ | |||
1 | /* | ||
2 | * ieee80211softmac.h - public interface to the softmac | ||
3 | * | ||
4 | * Copyright (c) 2005 Johannes Berg <johannes@sipsolutions.net> | ||
5 | * Joseph Jezak <josejx@gentoo.org> | ||
6 | * Larry Finger <Larry.Finger@lwfinger.net> | ||
7 | * Danny van Dyk <kugelfang@gentoo.org> | ||
8 | * Michael Buesch <mbuesch@freenet.de> | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify it | ||
11 | * under the terms of version 2 of the GNU General Public License as | ||
12 | * published by the Free Software Foundation. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
15 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
16 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
17 | * more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
22 | * | ||
23 | * The full GNU General Public License is included in this distribution in the | ||
24 | * file called COPYING. | ||
25 | */ | ||
26 | |||
27 | #ifndef IEEE80211SOFTMAC_H_ | ||
28 | #define IEEE80211SOFTMAC_H_ | ||
29 | |||
30 | #include <linux/kernel.h> | ||
31 | #include <linux/spinlock.h> | ||
32 | #include <linux/workqueue.h> | ||
33 | #include <linux/list.h> | ||
34 | #include <net/ieee80211.h> | ||
35 | |||
36 | /* Once the API is considered more or less stable, | ||
37 | * this should be incremented on API incompatible changes. | ||
38 | */ | ||
39 | #define IEEE80211SOFTMAC_API 0 | ||
40 | |||
41 | #define IEEE80211SOFTMAC_MAX_RATES_LEN 8 | ||
42 | #define IEEE80211SOFTMAC_MAX_EX_RATES_LEN 255 | ||
43 | |||
44 | struct ieee80211softmac_ratesinfo { | ||
45 | u8 count; | ||
46 | u8 rates[IEEE80211SOFTMAC_MAX_RATES_LEN + IEEE80211SOFTMAC_MAX_EX_RATES_LEN]; | ||
47 | }; | ||
48 | |||
49 | /* internal structures */ | ||
50 | struct ieee80211softmac_network; | ||
51 | struct ieee80211softmac_scaninfo; | ||
52 | |||
53 | struct ieee80211softmac_essid { | ||
54 | u8 len; | ||
55 | char data[IW_ESSID_MAX_SIZE+1]; | ||
56 | }; | ||
57 | |||
58 | struct ieee80211softmac_wpa { | ||
59 | char *IE; | ||
60 | int IElen; | ||
61 | int IEbuflen; | ||
62 | }; | ||
63 | |||
64 | /* | ||
65 | * Information about association | ||
66 | * | ||
67 | * Do we need a lock for this? | ||
68 | * We only ever use this structure inlined | ||
69 | * into our global struct. I've used its lock, | ||
70 | * but maybe we need a local one here? | ||
71 | */ | ||
72 | struct ieee80211softmac_assoc_info { | ||
73 | /* | ||
74 | * This is the requested ESSID. It is written | ||
75 | * only by the WX handlers. | ||
76 | * | ||
77 | */ | ||
78 | struct ieee80211softmac_essid req_essid; | ||
79 | /* | ||
80 | * the ESSID of the network we're currently | ||
81 | * associated (or trying) to. This is | ||
82 | * updated to the network's actual ESSID | ||
83 | * even if the requested ESSID was 'ANY' | ||
84 | */ | ||
85 | struct ieee80211softmac_essid associate_essid; | ||
86 | |||
87 | /* BSSID we're trying to associate to */ | ||
88 | char bssid[ETH_ALEN]; | ||
89 | |||
90 | /* some flags. | ||
91 | * static_essid is valid if the essid is constant, | ||
92 | * this is for use by the wx handlers only. | ||
93 | * | ||
94 | * associating is true, if the network has been | ||
95 | * auth'ed on and we are in the process of associating. | ||
96 | * | ||
97 | * bssvalid is true if we found a matching network | ||
98 | * and saved it's BSSID into the bssid above. | ||
99 | */ | ||
100 | u8 static_essid:1, | ||
101 | associating:1, | ||
102 | bssvalid:1; | ||
103 | |||
104 | /* Scan retries remaining */ | ||
105 | int scan_retry; | ||
106 | |||
107 | struct work_struct work; | ||
108 | struct work_struct timeout; | ||
109 | }; | ||
110 | |||
111 | enum { | ||
112 | IEEE80211SOFTMAC_AUTH_OPEN_REQUEST = 1, | ||
113 | IEEE80211SOFTMAC_AUTH_OPEN_RESPONSE = 2, | ||
114 | }; | ||
115 | |||
116 | enum { | ||
117 | IEEE80211SOFTMAC_AUTH_SHARED_REQUEST = 1, | ||
118 | IEEE80211SOFTMAC_AUTH_SHARED_CHALLENGE = 2, | ||
119 | IEEE80211SOFTMAC_AUTH_SHARED_RESPONSE = 3, | ||
120 | IEEE80211SOFTMAC_AUTH_SHARED_PASS = 4, | ||
121 | }; | ||
122 | |||
123 | /* We should make these tunable | ||
124 | * AUTH_TIMEOUT seems really long, but that's what it is in BSD */ | ||
125 | #define IEEE80211SOFTMAC_AUTH_TIMEOUT (12 * HZ) | ||
126 | #define IEEE80211SOFTMAC_AUTH_RETRY_LIMIT 5 | ||
127 | #define IEEE80211SOFTMAC_ASSOC_SCAN_RETRY_LIMIT 3 | ||
128 | |||
129 | struct ieee80211softmac_txrates { | ||
130 | /* The Bit-Rate to be used for multicast frames. */ | ||
131 | u8 mcast_rate; | ||
132 | /* The Bit-Rate to be used for multicast fallback | ||
133 | * (If the device supports fallback and hardware-retry) | ||
134 | */ | ||
135 | u8 mcast_fallback; | ||
136 | /* The Bit-Rate to be used for any other (normal) data packet. */ | ||
137 | u8 default_rate; | ||
138 | /* The Bit-Rate to be used for default fallback | ||
139 | * (If the device supports fallback and hardware-retry) | ||
140 | */ | ||
141 | u8 default_fallback; | ||
142 | }; | ||
143 | |||
144 | /* Bits for txrates_change callback. */ | ||
145 | #define IEEE80211SOFTMAC_TXRATECHG_DEFAULT (1 << 0) /* default_rate */ | ||
146 | #define IEEE80211SOFTMAC_TXRATECHG_DEFAULT_FBACK (1 << 1) /* default_fallback */ | ||
147 | #define IEEE80211SOFTMAC_TXRATECHG_MCAST (1 << 2) /* mcast_rate */ | ||
148 | #define IEEE80211SOFTMAC_TXRATECHG_MCAST_FBACK (1 << 3) /* mcast_fallback */ | ||
149 | |||
150 | struct ieee80211softmac_device { | ||
151 | /* 802.11 structure for data stuff */ | ||
152 | struct ieee80211_device *ieee; | ||
153 | struct net_device *dev; | ||
154 | |||
155 | /* only valid if associated, then holds the Association ID */ | ||
156 | u16 association_id; | ||
157 | |||
158 | /* the following methods are callbacks that the driver | ||
159 | * using this framework has to assign | ||
160 | */ | ||
161 | |||
162 | /* always assign these */ | ||
163 | void (*set_bssid_filter)(struct net_device *dev, const u8 *bssid); | ||
164 | void (*set_channel)(struct net_device *dev, u8 channel); | ||
165 | |||
166 | /* assign if you need it, informational only */ | ||
167 | void (*link_change)(struct net_device *dev); | ||
168 | |||
169 | /* If the hardware can do scanning, assign _all_ three of these callbacks. | ||
170 | * When the scan finishes, call ieee80211softmac_scan_finished(). | ||
171 | */ | ||
172 | |||
173 | /* when called, start_scan is guaranteed to not be called again | ||
174 | * until you call ieee80211softmac_scan_finished. | ||
175 | * Return 0 if scanning could start, error otherwise. | ||
176 | * SOFTMAC AUTHORS: don't call this, use ieee80211softmac_start_scan */ | ||
177 | int (*start_scan)(struct net_device *dev); | ||
178 | /* this should block until after ieee80211softmac_scan_finished was called | ||
179 | * SOFTMAC AUTHORS: don't call this, use ieee80211softmac_wait_for_scan */ | ||
180 | void (*wait_for_scan)(struct net_device *dev); | ||
181 | /* stop_scan aborts a scan, but is asynchronous. | ||
182 | * if you want to wait for it too, use wait_for_scan | ||
183 | * SOFTMAC AUTHORS: don't call this, use ieee80211softmac_stop_scan */ | ||
184 | void (*stop_scan)(struct net_device *dev); | ||
185 | |||
186 | /* we'll need something about beacons here too, for AP or ad-hoc modes */ | ||
187 | |||
188 | /* Transmission rates to be used by the driver. | ||
189 | * The SoftMAC figures out the best possible rates. | ||
190 | * The driver just needs to read them. | ||
191 | */ | ||
192 | struct ieee80211softmac_txrates txrates; | ||
193 | /* If the driver needs to do stuff on TX rate changes, assign this callback. */ | ||
194 | void (*txrates_change)(struct net_device *dev, | ||
195 | u32 changes, /* see IEEE80211SOFTMAC_TXRATECHG flags */ | ||
196 | const struct ieee80211softmac_txrates *rates_before_change); | ||
197 | |||
198 | /* private stuff follows */ | ||
199 | /* this lock protects this structure */ | ||
200 | spinlock_t lock; | ||
201 | |||
202 | /* couple of flags */ | ||
203 | u8 scanning:1, /* protects scanning from being done multiple times at once */ | ||
204 | associated:1; | ||
205 | |||
206 | struct ieee80211softmac_scaninfo *scaninfo; | ||
207 | struct ieee80211softmac_assoc_info associnfo; | ||
208 | |||
209 | struct list_head auth_queue; | ||
210 | struct list_head events; | ||
211 | |||
212 | struct ieee80211softmac_ratesinfo ratesinfo; | ||
213 | int txrate_badness; | ||
214 | |||
215 | /* WPA stuff */ | ||
216 | struct ieee80211softmac_wpa wpa; | ||
217 | |||
218 | /* we need to keep a list of network structs we copied */ | ||
219 | struct list_head network_list; | ||
220 | |||
221 | /* This must be the last item so that it points to the data | ||
222 | * allocated beyond this structure by alloc_ieee80211 */ | ||
223 | u8 priv[0]; | ||
224 | }; | ||
225 | |||
226 | extern void ieee80211softmac_scan_finished(struct ieee80211softmac_device *sm); | ||
227 | |||
228 | static inline void * ieee80211softmac_priv(struct net_device *dev) | ||
229 | { | ||
230 | return ((struct ieee80211softmac_device *)ieee80211_priv(dev))->priv; | ||
231 | } | ||
232 | |||
233 | extern struct net_device * alloc_ieee80211softmac(int sizeof_priv); | ||
234 | extern void free_ieee80211softmac(struct net_device *dev); | ||
235 | |||
236 | /* Call this function if you detect a lost TX fragment. | ||
237 | * (If the device indicates failure of ACK RX, for example.) | ||
238 | * It is wise to call this function if you are able to detect lost packets, | ||
239 | * because it contributes to the TX Rates auto adjustment. | ||
240 | */ | ||
241 | extern void ieee80211softmac_fragment_lost(struct net_device *dev, | ||
242 | u16 wireless_sequence_number); | ||
243 | /* Call this function before _start to tell the softmac what rates | ||
244 | * the hw supports. The rates parameter is copied, so you can | ||
245 | * free it right after calling this function. | ||
246 | * Note that the rates need to be sorted. */ | ||
247 | extern void ieee80211softmac_set_rates(struct net_device *dev, u8 count, u8 *rates); | ||
248 | |||
249 | /* Start the SoftMAC. Call this after you initialized the device | ||
250 | * and it is ready to run. | ||
251 | */ | ||
252 | extern void ieee80211softmac_start(struct net_device *dev); | ||
253 | /* Stop the SoftMAC. Call this before you shutdown the device. */ | ||
254 | extern void ieee80211softmac_stop(struct net_device *dev); | ||
255 | |||
256 | /* | ||
257 | * Event system | ||
258 | */ | ||
259 | |||
260 | /* valid event types */ | ||
261 | #define IEEE80211SOFTMAC_EVENT_ANY -1 /*private use only*/ | ||
262 | #define IEEE80211SOFTMAC_EVENT_SCAN_FINISHED 0 | ||
263 | #define IEEE80211SOFTMAC_EVENT_ASSOCIATED 1 | ||
264 | #define IEEE80211SOFTMAC_EVENT_ASSOCIATE_FAILED 2 | ||
265 | #define IEEE80211SOFTMAC_EVENT_ASSOCIATE_TIMEOUT 3 | ||
266 | #define IEEE80211SOFTMAC_EVENT_AUTHENTICATED 4 | ||
267 | #define IEEE80211SOFTMAC_EVENT_AUTH_FAILED 5 | ||
268 | #define IEEE80211SOFTMAC_EVENT_AUTH_TIMEOUT 6 | ||
269 | #define IEEE80211SOFTMAC_EVENT_ASSOCIATE_NET_NOT_FOUND 7 | ||
270 | /* keep this updated! */ | ||
271 | #define IEEE80211SOFTMAC_EVENT_LAST 7 | ||
272 | /* | ||
273 | * If you want to be notified of certain events, you can call | ||
274 | * ieee80211softmac_notify[_atomic] with | ||
275 | * - event set to one of the constants below | ||
276 | * - fun set to a function pointer of the appropriate type | ||
277 | * - context set to the context data you want passed | ||
278 | * The return value is 0, or an error. | ||
279 | */ | ||
280 | typedef void (*notify_function_ptr)(struct net_device *dev, void *context); | ||
281 | |||
282 | #define ieee80211softmac_notify(dev, event, fun, context) ieee80211softmac_notify_gfp(dev, event, fun, context, GFP_KERNEL); | ||
283 | #define ieee80211softmac_notify_atomic(dev, event, fun, context) ieee80211softmac_notify_gfp(dev, event, fun, context, GFP_ATOMIC); | ||
284 | |||
285 | extern int ieee80211softmac_notify_gfp(struct net_device *dev, | ||
286 | int event, notify_function_ptr fun, void *context, gfp_t gfp_mask); | ||
287 | |||
288 | /* To clear pending work (for ifconfig down, etc.) */ | ||
289 | extern void | ||
290 | ieee80211softmac_clear_pending_work(struct ieee80211softmac_device *sm); | ||
291 | |||
292 | #endif /* IEEE80211SOFTMAC_H_ */ | ||
diff --git a/include/net/ieee80211softmac_wx.h b/include/net/ieee80211softmac_wx.h new file mode 100644 index 000000000000..3e0be453ecea --- /dev/null +++ b/include/net/ieee80211softmac_wx.h | |||
@@ -0,0 +1,94 @@ | |||
1 | /* | ||
2 | * This file contains the prototypes for the wireless extension | ||
3 | * handlers that the softmac API provides. Include this file to | ||
4 | * use the wx handlers, you can assign these directly. | ||
5 | * | ||
6 | * Copyright (c) 2005 Johannes Berg <johannes@sipsolutions.net> | ||
7 | * Joseph Jezak <josejx@gentoo.org> | ||
8 | * Larry Finger <Larry.Finger@lwfinger.net> | ||
9 | * Danny van Dyk <kugelfang@gentoo.org> | ||
10 | * Michael Buesch <mbuesch@freenet.de> | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or modify it | ||
13 | * under the terms of version 2 of the GNU General Public License as | ||
14 | * published by the Free Software Foundation. | ||
15 | * | ||
16 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
17 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
18 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
19 | * more details. | ||
20 | * | ||
21 | * You should have received a copy of the GNU General Public License | ||
22 | * along with this program; if not, write to the Free Software | ||
23 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
24 | * | ||
25 | * The full GNU General Public License is included in this distribution in the | ||
26 | * file called COPYING. | ||
27 | */ | ||
28 | |||
29 | #ifndef _IEEE80211SOFTMAC_WX_H | ||
30 | #define _IEEE80211SOFTMAC_WX_H | ||
31 | |||
32 | #include <net/ieee80211softmac.h> | ||
33 | #include <net/iw_handler.h> | ||
34 | |||
35 | extern int | ||
36 | ieee80211softmac_wx_trigger_scan(struct net_device *net_dev, | ||
37 | struct iw_request_info *info, | ||
38 | union iwreq_data *data, | ||
39 | char *extra); | ||
40 | |||
41 | extern int | ||
42 | ieee80211softmac_wx_get_scan_results(struct net_device *net_dev, | ||
43 | struct iw_request_info *info, | ||
44 | union iwreq_data *data, | ||
45 | char *extra); | ||
46 | |||
47 | extern int | ||
48 | ieee80211softmac_wx_set_essid(struct net_device *net_dev, | ||
49 | struct iw_request_info *info, | ||
50 | union iwreq_data *data, | ||
51 | char *extra); | ||
52 | |||
53 | extern int | ||
54 | ieee80211softmac_wx_get_essid(struct net_device *net_dev, | ||
55 | struct iw_request_info *info, | ||
56 | union iwreq_data *data, | ||
57 | char *extra); | ||
58 | |||
59 | extern int | ||
60 | ieee80211softmac_wx_set_rate(struct net_device *net_dev, | ||
61 | struct iw_request_info *info, | ||
62 | union iwreq_data *data, | ||
63 | char *extra); | ||
64 | |||
65 | extern int | ||
66 | ieee80211softmac_wx_get_rate(struct net_device *net_dev, | ||
67 | struct iw_request_info *info, | ||
68 | union iwreq_data *data, | ||
69 | char *extra); | ||
70 | |||
71 | extern int | ||
72 | ieee80211softmac_wx_get_wap(struct net_device *net_dev, | ||
73 | struct iw_request_info *info, | ||
74 | union iwreq_data *data, | ||
75 | char *extra); | ||
76 | |||
77 | extern int | ||
78 | ieee80211softmac_wx_set_wap(struct net_device *net_dev, | ||
79 | struct iw_request_info *info, | ||
80 | union iwreq_data *data, | ||
81 | char *extra); | ||
82 | |||
83 | extern int | ||
84 | ieee80211softmac_wx_set_genie(struct net_device *dev, | ||
85 | struct iw_request_info *info, | ||
86 | union iwreq_data *wrqu, | ||
87 | char *extra); | ||
88 | |||
89 | extern int | ||
90 | ieee80211softmac_wx_get_genie(struct net_device *dev, | ||
91 | struct iw_request_info *info, | ||
92 | union iwreq_data *wrqu, | ||
93 | char *extra); | ||
94 | #endif /* _IEEE80211SOFTMAC_WX */ | ||
diff --git a/include/net/iw_handler.h b/include/net/iw_handler.h index a2c5e0b88422..10559e937d27 100644 --- a/include/net/iw_handler.h +++ b/include/net/iw_handler.h | |||
@@ -4,7 +4,7 @@ | |||
4 | * Version : 7 18.3.05 | 4 | * Version : 7 18.3.05 |
5 | * | 5 | * |
6 | * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com> | 6 | * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com> |
7 | * Copyright (c) 2001-2005 Jean Tourrilhes, All Rights Reserved. | 7 | * Copyright (c) 2001-2006 Jean Tourrilhes, All Rights Reserved. |
8 | */ | 8 | */ |
9 | 9 | ||
10 | #ifndef _IW_HANDLER_H | 10 | #ifndef _IW_HANDLER_H |
@@ -436,6 +436,16 @@ extern int dev_get_wireless_info(char * buffer, char **start, off_t offset, | |||
436 | /* Handle IOCTLs, called in net/core/dev.c */ | 436 | /* Handle IOCTLs, called in net/core/dev.c */ |
437 | extern int wireless_process_ioctl(struct ifreq *ifr, unsigned int cmd); | 437 | extern int wireless_process_ioctl(struct ifreq *ifr, unsigned int cmd); |
438 | 438 | ||
439 | /* Handle RtNetlink requests, called in net/core/rtnetlink.c */ | ||
440 | extern int wireless_rtnetlink_set(struct net_device * dev, | ||
441 | char * data, | ||
442 | int len); | ||
443 | extern int wireless_rtnetlink_get(struct net_device * dev, | ||
444 | char * data, | ||
445 | int len, | ||
446 | char ** p_buf, | ||
447 | int * p_len); | ||
448 | |||
439 | /* Second : functions that may be called by driver modules */ | 449 | /* Second : functions that may be called by driver modules */ |
440 | 450 | ||
441 | /* Send a single event to user space */ | 451 | /* Send a single event to user space */ |
diff --git a/include/net/route.h b/include/net/route.h index 9c04f15090d2..98c915abdec8 100644 --- a/include/net/route.h +++ b/include/net/route.h | |||
@@ -110,7 +110,7 @@ extern struct ip_rt_acct *ip_rt_acct; | |||
110 | struct in_device; | 110 | struct in_device; |
111 | extern int ip_rt_init(void); | 111 | extern int ip_rt_init(void); |
112 | extern void ip_rt_redirect(u32 old_gw, u32 dst, u32 new_gw, | 112 | extern void ip_rt_redirect(u32 old_gw, u32 dst, u32 new_gw, |
113 | u32 src, u8 tos, struct net_device *dev); | 113 | u32 src, struct net_device *dev); |
114 | extern void ip_rt_advice(struct rtable **rp, int advice); | 114 | extern void ip_rt_advice(struct rtable **rp, int advice); |
115 | extern void rt_cache_flush(int how); | 115 | extern void rt_cache_flush(int how); |
116 | extern int __ip_route_output_key(struct rtable **, const struct flowi *flp); | 116 | extern int __ip_route_output_key(struct rtable **, const struct flowi *flp); |
diff --git a/include/net/sock.h b/include/net/sock.h index ec226f31dc2a..2aa73c0ec6c2 100644 --- a/include/net/sock.h +++ b/include/net/sock.h | |||
@@ -210,6 +210,7 @@ struct sock { | |||
210 | gfp_t sk_allocation; | 210 | gfp_t sk_allocation; |
211 | int sk_sndbuf; | 211 | int sk_sndbuf; |
212 | int sk_route_caps; | 212 | int sk_route_caps; |
213 | int sk_rcvlowat; | ||
213 | unsigned long sk_flags; | 214 | unsigned long sk_flags; |
214 | unsigned long sk_lingertime; | 215 | unsigned long sk_lingertime; |
215 | /* | 216 | /* |
@@ -230,7 +231,6 @@ struct sock { | |||
230 | unsigned short sk_max_ack_backlog; | 231 | unsigned short sk_max_ack_backlog; |
231 | __u32 sk_priority; | 232 | __u32 sk_priority; |
232 | struct ucred sk_peercred; | 233 | struct ucred sk_peercred; |
233 | int sk_rcvlowat; | ||
234 | long sk_rcvtimeo; | 234 | long sk_rcvtimeo; |
235 | long sk_sndtimeo; | 235 | long sk_sndtimeo; |
236 | struct sk_filter *sk_filter; | 236 | struct sk_filter *sk_filter; |
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h index a6cf3e535c0b..dc6862d09e53 100644 --- a/include/scsi/scsi_host.h +++ b/include/scsi/scsi_host.h | |||
@@ -286,7 +286,7 @@ struct scsi_host_template { | |||
286 | * suspend support | 286 | * suspend support |
287 | */ | 287 | */ |
288 | int (*resume)(struct scsi_device *); | 288 | int (*resume)(struct scsi_device *); |
289 | int (*suspend)(struct scsi_device *); | 289 | int (*suspend)(struct scsi_device *, pm_message_t state); |
290 | 290 | ||
291 | /* | 291 | /* |
292 | * Name of proc directory | 292 | * Name of proc directory |
diff --git a/include/sound/opl3.h b/include/sound/opl3.h index 444907166f97..82fdb0930720 100644 --- a/include/sound/opl3.h +++ b/include/sound/opl3.h | |||
@@ -230,7 +230,6 @@ | |||
230 | #define OPL3_HW_OPL3_CS 0x0302 /* CS4232/CS4236+ */ | 230 | #define OPL3_HW_OPL3_CS 0x0302 /* CS4232/CS4236+ */ |
231 | #define OPL3_HW_OPL3_FM801 0x0303 /* FM801 */ | 231 | #define OPL3_HW_OPL3_FM801 0x0303 /* FM801 */ |
232 | #define OPL3_HW_OPL3_CS4281 0x0304 /* CS4281 */ | 232 | #define OPL3_HW_OPL3_CS4281 0x0304 /* CS4281 */ |
233 | #define OPL3_HW_OPL3_PC98 0x0305 /* PC9800 */ | ||
234 | #define OPL3_HW_OPL4 0x0400 /* YMF278B/YMF295 */ | 233 | #define OPL3_HW_OPL4 0x0400 /* YMF278B/YMF295 */ |
235 | #define OPL3_HW_OPL4_ML 0x0401 /* YMF704/YMF721 */ | 234 | #define OPL3_HW_OPL4_ML 0x0401 /* YMF704/YMF721 */ |
236 | #define OPL3_HW_MASK 0xff00 | 235 | #define OPL3_HW_MASK 0xff00 |
diff --git a/include/video/pm3fb.h b/include/video/pm3fb.h index 6f4ea808cf74..ac021379ac40 100644 --- a/include/video/pm3fb.h +++ b/include/video/pm3fb.h | |||
@@ -1128,10 +1128,7 @@ | |||
1128 | #endif | 1128 | #endif |
1129 | 1129 | ||
1130 | /* max number of simultaneous board */ | 1130 | /* max number of simultaneous board */ |
1131 | /* warning : make sure module array def's are coherent with PM3_MAX_BOARD */ | ||
1132 | #define PM3_MAX_BOARD 4 | 1131 | #define PM3_MAX_BOARD 4 |
1133 | #define PM3_MAX_BOARD_MODULE_ARRAY_SHORT "1-4h" | ||
1134 | #define PM3_MAX_BOARD_MODULE_ARRAY_STRING "1-4s" | ||
1135 | 1132 | ||
1136 | /* max size of options */ | 1133 | /* max size of options */ |
1137 | #define PM3_OPTIONS_SIZE 256 | 1134 | #define PM3_OPTIONS_SIZE 256 |