diff options
Diffstat (limited to 'include/linux')
163 files changed, 3742 insertions, 2121 deletions
diff --git a/include/linux/aio.h b/include/linux/aio.h index 49fd37629ee4..00c8efa95cc3 100644 --- a/include/linux/aio.h +++ b/include/linux/aio.h | |||
@@ -94,26 +94,27 @@ struct kiocb { | |||
94 | ssize_t (*ki_retry)(struct kiocb *); | 94 | ssize_t (*ki_retry)(struct kiocb *); |
95 | void (*ki_dtor)(struct kiocb *); | 95 | void (*ki_dtor)(struct kiocb *); |
96 | 96 | ||
97 | struct list_head ki_list; /* the aio core uses this | ||
98 | * for cancellation */ | ||
99 | |||
100 | union { | 97 | union { |
101 | void __user *user; | 98 | void __user *user; |
102 | struct task_struct *tsk; | 99 | struct task_struct *tsk; |
103 | } ki_obj; | 100 | } ki_obj; |
101 | |||
104 | __u64 ki_user_data; /* user's data for completion */ | 102 | __u64 ki_user_data; /* user's data for completion */ |
103 | wait_queue_t ki_wait; | ||
105 | loff_t ki_pos; | 104 | loff_t ki_pos; |
105 | |||
106 | void *private; | ||
106 | /* State that we remember to be able to restart/retry */ | 107 | /* State that we remember to be able to restart/retry */ |
107 | unsigned short ki_opcode; | 108 | unsigned short ki_opcode; |
108 | size_t ki_nbytes; /* copy of iocb->aio_nbytes */ | 109 | size_t ki_nbytes; /* copy of iocb->aio_nbytes */ |
109 | char __user *ki_buf; /* remaining iocb->aio_buf */ | 110 | char __user *ki_buf; /* remaining iocb->aio_buf */ |
110 | size_t ki_left; /* remaining bytes */ | 111 | size_t ki_left; /* remaining bytes */ |
111 | wait_queue_t ki_wait; | ||
112 | long ki_retried; /* just for testing */ | 112 | long ki_retried; /* just for testing */ |
113 | long ki_kicked; /* just for testing */ | 113 | long ki_kicked; /* just for testing */ |
114 | long ki_queued; /* just for testing */ | 114 | long ki_queued; /* just for testing */ |
115 | 115 | ||
116 | void *private; | 116 | struct list_head ki_list; /* the aio core uses this |
117 | * for cancellation */ | ||
117 | }; | 118 | }; |
118 | 119 | ||
119 | #define is_sync_kiocb(iocb) ((iocb)->ki_key == KIOCB_SYNC_KEY) | 120 | #define is_sync_kiocb(iocb) ((iocb)->ki_key == KIOCB_SYNC_KEY) |
@@ -126,6 +127,7 @@ struct kiocb { | |||
126 | (x)->ki_filp = (filp); \ | 127 | (x)->ki_filp = (filp); \ |
127 | (x)->ki_ctx = NULL; \ | 128 | (x)->ki_ctx = NULL; \ |
128 | (x)->ki_cancel = NULL; \ | 129 | (x)->ki_cancel = NULL; \ |
130 | (x)->ki_retry = NULL; \ | ||
129 | (x)->ki_dtor = NULL; \ | 131 | (x)->ki_dtor = NULL; \ |
130 | (x)->ki_obj.tsk = tsk; \ | 132 | (x)->ki_obj.tsk = tsk; \ |
131 | (x)->ki_user_data = 0; \ | 133 | (x)->ki_user_data = 0; \ |
diff --git a/include/linux/amba/bus.h b/include/linux/amba/bus.h new file mode 100644 index 000000000000..51e6e54b2aa1 --- /dev/null +++ b/include/linux/amba/bus.h | |||
@@ -0,0 +1,55 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/amba.h | ||
3 | * | ||
4 | * Copyright (C) 2003 Deep Blue Solutions Ltd, All Rights Reserved. | ||
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 version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef ASMARM_AMBA_H | ||
11 | #define ASMARM_AMBA_H | ||
12 | |||
13 | #define AMBA_NR_IRQS 2 | ||
14 | |||
15 | struct amba_device { | ||
16 | struct device dev; | ||
17 | struct resource res; | ||
18 | u64 dma_mask; | ||
19 | unsigned int periphid; | ||
20 | unsigned int irq[AMBA_NR_IRQS]; | ||
21 | }; | ||
22 | |||
23 | struct amba_id { | ||
24 | unsigned int id; | ||
25 | unsigned int mask; | ||
26 | void *data; | ||
27 | }; | ||
28 | |||
29 | struct amba_driver { | ||
30 | struct device_driver drv; | ||
31 | int (*probe)(struct amba_device *, void *); | ||
32 | int (*remove)(struct amba_device *); | ||
33 | void (*shutdown)(struct amba_device *); | ||
34 | int (*suspend)(struct amba_device *, pm_message_t); | ||
35 | int (*resume)(struct amba_device *); | ||
36 | struct amba_id *id_table; | ||
37 | }; | ||
38 | |||
39 | #define amba_get_drvdata(d) dev_get_drvdata(&d->dev) | ||
40 | #define amba_set_drvdata(d,p) dev_set_drvdata(&d->dev, p) | ||
41 | |||
42 | int amba_driver_register(struct amba_driver *); | ||
43 | void amba_driver_unregister(struct amba_driver *); | ||
44 | int amba_device_register(struct amba_device *, struct resource *); | ||
45 | void amba_device_unregister(struct amba_device *); | ||
46 | struct amba_device *amba_find_device(const char *, struct device *, unsigned int, unsigned int); | ||
47 | int amba_request_regions(struct amba_device *, const char *); | ||
48 | void amba_release_regions(struct amba_device *); | ||
49 | |||
50 | #define amba_config(d) (((d)->periphid >> 24) & 0xff) | ||
51 | #define amba_rev(d) (((d)->periphid >> 20) & 0x0f) | ||
52 | #define amba_manf(d) (((d)->periphid >> 12) & 0xff) | ||
53 | #define amba_part(d) ((d)->periphid & 0xfff) | ||
54 | |||
55 | #endif | ||
diff --git a/include/linux/amba/clcd.h b/include/linux/amba/clcd.h new file mode 100644 index 000000000000..6b8d73dc1ab0 --- /dev/null +++ b/include/linux/amba/clcd.h | |||
@@ -0,0 +1,271 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/amba_clcd.h -- Integrator LCD panel. | ||
3 | * | ||
4 | * David A Rusling | ||
5 | * | ||
6 | * Copyright (C) 2001 ARM Limited | ||
7 | * | ||
8 | * This file is subject to the terms and conditions of the GNU General Public | ||
9 | * License. See the file COPYING in the main directory of this archive | ||
10 | * for more details. | ||
11 | */ | ||
12 | #include <linux/config.h> | ||
13 | #include <linux/fb.h> | ||
14 | |||
15 | /* | ||
16 | * CLCD Controller Internal Register addresses | ||
17 | */ | ||
18 | #define CLCD_TIM0 0x00000000 | ||
19 | #define CLCD_TIM1 0x00000004 | ||
20 | #define CLCD_TIM2 0x00000008 | ||
21 | #define CLCD_TIM3 0x0000000c | ||
22 | #define CLCD_UBAS 0x00000010 | ||
23 | #define CLCD_LBAS 0x00000014 | ||
24 | |||
25 | #if !defined(CONFIG_ARCH_VERSATILE) && !defined(CONFIG_ARCH_REALVIEW) | ||
26 | #define CLCD_IENB 0x00000018 | ||
27 | #define CLCD_CNTL 0x0000001c | ||
28 | #else | ||
29 | /* | ||
30 | * Someone rearranged these two registers on the Versatile | ||
31 | * platform... | ||
32 | */ | ||
33 | #define CLCD_IENB 0x0000001c | ||
34 | #define CLCD_CNTL 0x00000018 | ||
35 | #endif | ||
36 | |||
37 | #define CLCD_STAT 0x00000020 | ||
38 | #define CLCD_INTR 0x00000024 | ||
39 | #define CLCD_UCUR 0x00000028 | ||
40 | #define CLCD_LCUR 0x0000002C | ||
41 | #define CLCD_PALL 0x00000200 | ||
42 | #define CLCD_PALETTE 0x00000200 | ||
43 | |||
44 | #define TIM2_CLKSEL (1 << 5) | ||
45 | #define TIM2_IVS (1 << 11) | ||
46 | #define TIM2_IHS (1 << 12) | ||
47 | #define TIM2_IPC (1 << 13) | ||
48 | #define TIM2_IOE (1 << 14) | ||
49 | #define TIM2_BCD (1 << 26) | ||
50 | |||
51 | #define CNTL_LCDEN (1 << 0) | ||
52 | #define CNTL_LCDBPP1 (0 << 1) | ||
53 | #define CNTL_LCDBPP2 (1 << 1) | ||
54 | #define CNTL_LCDBPP4 (2 << 1) | ||
55 | #define CNTL_LCDBPP8 (3 << 1) | ||
56 | #define CNTL_LCDBPP16 (4 << 1) | ||
57 | #define CNTL_LCDBPP24 (5 << 1) | ||
58 | #define CNTL_LCDBW (1 << 4) | ||
59 | #define CNTL_LCDTFT (1 << 5) | ||
60 | #define CNTL_LCDMONO8 (1 << 6) | ||
61 | #define CNTL_LCDDUAL (1 << 7) | ||
62 | #define CNTL_BGR (1 << 8) | ||
63 | #define CNTL_BEBO (1 << 9) | ||
64 | #define CNTL_BEPO (1 << 10) | ||
65 | #define CNTL_LCDPWR (1 << 11) | ||
66 | #define CNTL_LCDVCOMP(x) ((x) << 12) | ||
67 | #define CNTL_LDMAFIFOTIME (1 << 15) | ||
68 | #define CNTL_WATERMARK (1 << 16) | ||
69 | |||
70 | struct clcd_panel { | ||
71 | struct fb_videomode mode; | ||
72 | signed short width; /* width in mm */ | ||
73 | signed short height; /* height in mm */ | ||
74 | u32 tim2; | ||
75 | u32 tim3; | ||
76 | u32 cntl; | ||
77 | unsigned int bpp:8, | ||
78 | fixedtimings:1, | ||
79 | grayscale:1; | ||
80 | unsigned int connector; | ||
81 | }; | ||
82 | |||
83 | struct clcd_regs { | ||
84 | u32 tim0; | ||
85 | u32 tim1; | ||
86 | u32 tim2; | ||
87 | u32 tim3; | ||
88 | u32 cntl; | ||
89 | unsigned long pixclock; | ||
90 | }; | ||
91 | |||
92 | struct clcd_fb; | ||
93 | |||
94 | /* | ||
95 | * the board-type specific routines | ||
96 | */ | ||
97 | struct clcd_board { | ||
98 | const char *name; | ||
99 | |||
100 | /* | ||
101 | * Optional. Check whether the var structure is acceptable | ||
102 | * for this display. | ||
103 | */ | ||
104 | int (*check)(struct clcd_fb *fb, struct fb_var_screeninfo *var); | ||
105 | |||
106 | /* | ||
107 | * Compulsary. Decode fb->fb.var into regs->*. In the case of | ||
108 | * fixed timing, set regs->* to the register values required. | ||
109 | */ | ||
110 | void (*decode)(struct clcd_fb *fb, struct clcd_regs *regs); | ||
111 | |||
112 | /* | ||
113 | * Optional. Disable any extra display hardware. | ||
114 | */ | ||
115 | void (*disable)(struct clcd_fb *); | ||
116 | |||
117 | /* | ||
118 | * Optional. Enable any extra display hardware. | ||
119 | */ | ||
120 | void (*enable)(struct clcd_fb *); | ||
121 | |||
122 | /* | ||
123 | * Setup platform specific parts of CLCD driver | ||
124 | */ | ||
125 | int (*setup)(struct clcd_fb *); | ||
126 | |||
127 | /* | ||
128 | * mmap the framebuffer memory | ||
129 | */ | ||
130 | int (*mmap)(struct clcd_fb *, struct vm_area_struct *); | ||
131 | |||
132 | /* | ||
133 | * Remove platform specific parts of CLCD driver | ||
134 | */ | ||
135 | void (*remove)(struct clcd_fb *); | ||
136 | }; | ||
137 | |||
138 | struct amba_device; | ||
139 | struct clk; | ||
140 | |||
141 | /* this data structure describes each frame buffer device we find */ | ||
142 | struct clcd_fb { | ||
143 | struct fb_info fb; | ||
144 | struct amba_device *dev; | ||
145 | struct clk *clk; | ||
146 | struct clcd_panel *panel; | ||
147 | struct clcd_board *board; | ||
148 | void *board_data; | ||
149 | void __iomem *regs; | ||
150 | u32 clcd_cntl; | ||
151 | u32 cmap[16]; | ||
152 | }; | ||
153 | |||
154 | static inline void clcdfb_decode(struct clcd_fb *fb, struct clcd_regs *regs) | ||
155 | { | ||
156 | u32 val, cpl; | ||
157 | |||
158 | /* | ||
159 | * Program the CLCD controller registers and start the CLCD | ||
160 | */ | ||
161 | val = ((fb->fb.var.xres / 16) - 1) << 2; | ||
162 | val |= (fb->fb.var.hsync_len - 1) << 8; | ||
163 | val |= (fb->fb.var.right_margin - 1) << 16; | ||
164 | val |= (fb->fb.var.left_margin - 1) << 24; | ||
165 | regs->tim0 = val; | ||
166 | |||
167 | val = fb->fb.var.yres; | ||
168 | if (fb->panel->cntl & CNTL_LCDDUAL) | ||
169 | val /= 2; | ||
170 | val -= 1; | ||
171 | val |= (fb->fb.var.vsync_len - 1) << 10; | ||
172 | val |= fb->fb.var.lower_margin << 16; | ||
173 | val |= fb->fb.var.upper_margin << 24; | ||
174 | regs->tim1 = val; | ||
175 | |||
176 | val = fb->panel->tim2; | ||
177 | val |= fb->fb.var.sync & FB_SYNC_HOR_HIGH_ACT ? 0 : TIM2_IHS; | ||
178 | val |= fb->fb.var.sync & FB_SYNC_VERT_HIGH_ACT ? 0 : TIM2_IVS; | ||
179 | |||
180 | cpl = fb->fb.var.xres_virtual; | ||
181 | if (fb->panel->cntl & CNTL_LCDTFT) /* TFT */ | ||
182 | /* / 1 */; | ||
183 | else if (!fb->fb.var.grayscale) /* STN color */ | ||
184 | cpl = cpl * 8 / 3; | ||
185 | else if (fb->panel->cntl & CNTL_LCDMONO8) /* STN monochrome, 8bit */ | ||
186 | cpl /= 8; | ||
187 | else /* STN monochrome, 4bit */ | ||
188 | cpl /= 4; | ||
189 | |||
190 | regs->tim2 = val | ((cpl - 1) << 16); | ||
191 | |||
192 | regs->tim3 = fb->panel->tim3; | ||
193 | |||
194 | val = fb->panel->cntl; | ||
195 | if (fb->fb.var.grayscale) | ||
196 | val |= CNTL_LCDBW; | ||
197 | |||
198 | switch (fb->fb.var.bits_per_pixel) { | ||
199 | case 1: | ||
200 | val |= CNTL_LCDBPP1; | ||
201 | break; | ||
202 | case 2: | ||
203 | val |= CNTL_LCDBPP2; | ||
204 | break; | ||
205 | case 4: | ||
206 | val |= CNTL_LCDBPP4; | ||
207 | break; | ||
208 | case 8: | ||
209 | val |= CNTL_LCDBPP8; | ||
210 | break; | ||
211 | case 16: | ||
212 | val |= CNTL_LCDBPP16; | ||
213 | break; | ||
214 | case 32: | ||
215 | val |= CNTL_LCDBPP24; | ||
216 | break; | ||
217 | } | ||
218 | |||
219 | regs->cntl = val; | ||
220 | regs->pixclock = fb->fb.var.pixclock; | ||
221 | } | ||
222 | |||
223 | static inline int clcdfb_check(struct clcd_fb *fb, struct fb_var_screeninfo *var) | ||
224 | { | ||
225 | var->xres_virtual = var->xres = (var->xres + 15) & ~15; | ||
226 | var->yres_virtual = var->yres = (var->yres + 1) & ~1; | ||
227 | |||
228 | #define CHECK(e,l,h) (var->e < l || var->e > h) | ||
229 | if (CHECK(right_margin, (5+1), 256) || /* back porch */ | ||
230 | CHECK(left_margin, (5+1), 256) || /* front porch */ | ||
231 | CHECK(hsync_len, (5+1), 256) || | ||
232 | var->xres > 4096 || | ||
233 | var->lower_margin > 255 || /* back porch */ | ||
234 | var->upper_margin > 255 || /* front porch */ | ||
235 | var->vsync_len > 32 || | ||
236 | var->yres > 1024) | ||
237 | return -EINVAL; | ||
238 | #undef CHECK | ||
239 | |||
240 | /* single panel mode: PCD = max(PCD, 1) */ | ||
241 | /* dual panel mode: PCD = max(PCD, 5) */ | ||
242 | |||
243 | /* | ||
244 | * You can't change the grayscale setting, and | ||
245 | * we can only do non-interlaced video. | ||
246 | */ | ||
247 | if (var->grayscale != fb->fb.var.grayscale || | ||
248 | (var->vmode & FB_VMODE_MASK) != FB_VMODE_NONINTERLACED) | ||
249 | return -EINVAL; | ||
250 | |||
251 | #define CHECK(e) (var->e != fb->fb.var.e) | ||
252 | if (fb->panel->fixedtimings && | ||
253 | (CHECK(xres) || | ||
254 | CHECK(yres) || | ||
255 | CHECK(bits_per_pixel) || | ||
256 | CHECK(pixclock) || | ||
257 | CHECK(left_margin) || | ||
258 | CHECK(right_margin) || | ||
259 | CHECK(upper_margin) || | ||
260 | CHECK(lower_margin) || | ||
261 | CHECK(hsync_len) || | ||
262 | CHECK(vsync_len) || | ||
263 | CHECK(sync))) | ||
264 | return -EINVAL; | ||
265 | #undef CHECK | ||
266 | |||
267 | var->nonstd = 0; | ||
268 | var->accel_flags = 0; | ||
269 | |||
270 | return 0; | ||
271 | } | ||
diff --git a/include/linux/amba/kmi.h b/include/linux/amba/kmi.h new file mode 100644 index 000000000000..a39e5be751b3 --- /dev/null +++ b/include/linux/amba/kmi.h | |||
@@ -0,0 +1,92 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/amba_kmi.h | ||
3 | * | ||
4 | * Internal header file for AMBA KMI ports | ||
5 | * | ||
6 | * Copyright (C) 2000 Deep Blue Solutions Ltd. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | * | ||
22 | * | ||
23 | * --------------------------------------------------------------------------- | ||
24 | * From ARM PrimeCell(tm) PS2 Keyboard/Mouse Interface (PL050) Technical | ||
25 | * Reference Manual - ARM DDI 0143B - see http://www.arm.com/ | ||
26 | * --------------------------------------------------------------------------- | ||
27 | */ | ||
28 | #ifndef ASM_ARM_HARDWARE_AMBA_KMI_H | ||
29 | #define ASM_ARM_HARDWARE_AMBA_KMI_H | ||
30 | |||
31 | /* | ||
32 | * KMI control register: | ||
33 | * KMICR_TYPE 0 = PS2/AT mode, 1 = No line control bit mode | ||
34 | * KMICR_RXINTREN 1 = enable RX interrupts | ||
35 | * KMICR_TXINTREN 1 = enable TX interrupts | ||
36 | * KMICR_EN 1 = enable KMI | ||
37 | * KMICR_FD 1 = force KMI data low | ||
38 | * KMICR_FC 1 = force KMI clock low | ||
39 | */ | ||
40 | #define KMICR (KMI_BASE + 0x00) | ||
41 | #define KMICR_TYPE (1 << 5) | ||
42 | #define KMICR_RXINTREN (1 << 4) | ||
43 | #define KMICR_TXINTREN (1 << 3) | ||
44 | #define KMICR_EN (1 << 2) | ||
45 | #define KMICR_FD (1 << 1) | ||
46 | #define KMICR_FC (1 << 0) | ||
47 | |||
48 | /* | ||
49 | * KMI status register: | ||
50 | * KMISTAT_TXEMPTY 1 = transmitter register empty | ||
51 | * KMISTAT_TXBUSY 1 = currently sending data | ||
52 | * KMISTAT_RXFULL 1 = receiver register ready to be read | ||
53 | * KMISTAT_RXBUSY 1 = currently receiving data | ||
54 | * KMISTAT_RXPARITY parity of last databyte received | ||
55 | * KMISTAT_IC current level of KMI clock input | ||
56 | * KMISTAT_ID current level of KMI data input | ||
57 | */ | ||
58 | #define KMISTAT (KMI_BASE + 0x04) | ||
59 | #define KMISTAT_TXEMPTY (1 << 6) | ||
60 | #define KMISTAT_TXBUSY (1 << 5) | ||
61 | #define KMISTAT_RXFULL (1 << 4) | ||
62 | #define KMISTAT_RXBUSY (1 << 3) | ||
63 | #define KMISTAT_RXPARITY (1 << 2) | ||
64 | #define KMISTAT_IC (1 << 1) | ||
65 | #define KMISTAT_ID (1 << 0) | ||
66 | |||
67 | /* | ||
68 | * KMI data register | ||
69 | */ | ||
70 | #define KMIDATA (KMI_BASE + 0x08) | ||
71 | |||
72 | /* | ||
73 | * KMI clock divisor: to generate 8MHz internal clock | ||
74 | * div = (ref / 8MHz) - 1; 0 <= div <= 15 | ||
75 | */ | ||
76 | #define KMICLKDIV (KMI_BASE + 0x0c) | ||
77 | |||
78 | /* | ||
79 | * KMI interrupt register: | ||
80 | * KMIIR_TXINTR 1 = transmit interrupt asserted | ||
81 | * KMIIR_RXINTR 1 = receive interrupt asserted | ||
82 | */ | ||
83 | #define KMIIR (KMI_BASE + 0x10) | ||
84 | #define KMIIR_TXINTR (1 << 1) | ||
85 | #define KMIIR_RXINTR (1 << 0) | ||
86 | |||
87 | /* | ||
88 | * The size of the KMI primecell | ||
89 | */ | ||
90 | #define KMI_SIZE (0x100) | ||
91 | |||
92 | #endif | ||
diff --git a/include/linux/amba/serial.h b/include/linux/amba/serial.h new file mode 100644 index 000000000000..dc726ffccebd --- /dev/null +++ b/include/linux/amba/serial.h | |||
@@ -0,0 +1,161 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/serial_amba.h | ||
3 | * | ||
4 | * Internal header file for AMBA serial ports | ||
5 | * | ||
6 | * Copyright (C) ARM Limited | ||
7 | * Copyright (C) 2000 Deep Blue Solutions Ltd. | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; either version 2 of the License, or | ||
12 | * (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
22 | */ | ||
23 | #ifndef ASM_ARM_HARDWARE_SERIAL_AMBA_H | ||
24 | #define ASM_ARM_HARDWARE_SERIAL_AMBA_H | ||
25 | |||
26 | /* ------------------------------------------------------------------------------- | ||
27 | * From AMBA UART (PL010) Block Specification | ||
28 | * ------------------------------------------------------------------------------- | ||
29 | * UART Register Offsets. | ||
30 | */ | ||
31 | #define UART01x_DR 0x00 /* Data read or written from the interface. */ | ||
32 | #define UART01x_RSR 0x04 /* Receive status register (Read). */ | ||
33 | #define UART01x_ECR 0x04 /* Error clear register (Write). */ | ||
34 | #define UART010_LCRH 0x08 /* Line control register, high byte. */ | ||
35 | #define UART010_LCRM 0x0C /* Line control register, middle byte. */ | ||
36 | #define UART010_LCRL 0x10 /* Line control register, low byte. */ | ||
37 | #define UART010_CR 0x14 /* Control register. */ | ||
38 | #define UART01x_FR 0x18 /* Flag register (Read only). */ | ||
39 | #define UART010_IIR 0x1C /* Interrupt indentification register (Read). */ | ||
40 | #define UART010_ICR 0x1C /* Interrupt clear register (Write). */ | ||
41 | #define UART01x_ILPR 0x20 /* IrDA low power counter register. */ | ||
42 | #define UART011_IBRD 0x24 /* Integer baud rate divisor register. */ | ||
43 | #define UART011_FBRD 0x28 /* Fractional baud rate divisor register. */ | ||
44 | #define UART011_LCRH 0x2c /* Line control register. */ | ||
45 | #define UART011_CR 0x30 /* Control register. */ | ||
46 | #define UART011_IFLS 0x34 /* Interrupt fifo level select. */ | ||
47 | #define UART011_IMSC 0x38 /* Interrupt mask. */ | ||
48 | #define UART011_RIS 0x3c /* Raw interrupt status. */ | ||
49 | #define UART011_MIS 0x40 /* Masked interrupt status. */ | ||
50 | #define UART011_ICR 0x44 /* Interrupt clear register. */ | ||
51 | #define UART011_DMACR 0x48 /* DMA control register. */ | ||
52 | |||
53 | #define UART011_DR_OE (1 << 11) | ||
54 | #define UART011_DR_BE (1 << 10) | ||
55 | #define UART011_DR_PE (1 << 9) | ||
56 | #define UART011_DR_FE (1 << 8) | ||
57 | |||
58 | #define UART01x_RSR_OE 0x08 | ||
59 | #define UART01x_RSR_BE 0x04 | ||
60 | #define UART01x_RSR_PE 0x02 | ||
61 | #define UART01x_RSR_FE 0x01 | ||
62 | |||
63 | #define UART011_FR_RI 0x100 | ||
64 | #define UART011_FR_TXFE 0x080 | ||
65 | #define UART011_FR_RXFF 0x040 | ||
66 | #define UART01x_FR_TXFF 0x020 | ||
67 | #define UART01x_FR_RXFE 0x010 | ||
68 | #define UART01x_FR_BUSY 0x008 | ||
69 | #define UART01x_FR_DCD 0x004 | ||
70 | #define UART01x_FR_DSR 0x002 | ||
71 | #define UART01x_FR_CTS 0x001 | ||
72 | #define UART01x_FR_TMSK (UART01x_FR_TXFF + UART01x_FR_BUSY) | ||
73 | |||
74 | #define UART011_CR_CTSEN 0x8000 /* CTS hardware flow control */ | ||
75 | #define UART011_CR_RTSEN 0x4000 /* RTS hardware flow control */ | ||
76 | #define UART011_CR_OUT2 0x2000 /* OUT2 */ | ||
77 | #define UART011_CR_OUT1 0x1000 /* OUT1 */ | ||
78 | #define UART011_CR_RTS 0x0800 /* RTS */ | ||
79 | #define UART011_CR_DTR 0x0400 /* DTR */ | ||
80 | #define UART011_CR_RXE 0x0200 /* receive enable */ | ||
81 | #define UART011_CR_TXE 0x0100 /* transmit enable */ | ||
82 | #define UART011_CR_LBE 0x0080 /* loopback enable */ | ||
83 | #define UART010_CR_RTIE 0x0040 | ||
84 | #define UART010_CR_TIE 0x0020 | ||
85 | #define UART010_CR_RIE 0x0010 | ||
86 | #define UART010_CR_MSIE 0x0008 | ||
87 | #define UART01x_CR_IIRLP 0x0004 /* SIR low power mode */ | ||
88 | #define UART01x_CR_SIREN 0x0002 /* SIR enable */ | ||
89 | #define UART01x_CR_UARTEN 0x0001 /* UART enable */ | ||
90 | |||
91 | #define UART011_LCRH_SPS 0x80 | ||
92 | #define UART01x_LCRH_WLEN_8 0x60 | ||
93 | #define UART01x_LCRH_WLEN_7 0x40 | ||
94 | #define UART01x_LCRH_WLEN_6 0x20 | ||
95 | #define UART01x_LCRH_WLEN_5 0x00 | ||
96 | #define UART01x_LCRH_FEN 0x10 | ||
97 | #define UART01x_LCRH_STP2 0x08 | ||
98 | #define UART01x_LCRH_EPS 0x04 | ||
99 | #define UART01x_LCRH_PEN 0x02 | ||
100 | #define UART01x_LCRH_BRK 0x01 | ||
101 | |||
102 | #define UART010_IIR_RTIS 0x08 | ||
103 | #define UART010_IIR_TIS 0x04 | ||
104 | #define UART010_IIR_RIS 0x02 | ||
105 | #define UART010_IIR_MIS 0x01 | ||
106 | |||
107 | #define UART011_IFLS_RX1_8 (0 << 3) | ||
108 | #define UART011_IFLS_RX2_8 (1 << 3) | ||
109 | #define UART011_IFLS_RX4_8 (2 << 3) | ||
110 | #define UART011_IFLS_RX6_8 (3 << 3) | ||
111 | #define UART011_IFLS_RX7_8 (4 << 3) | ||
112 | #define UART011_IFLS_TX1_8 (0 << 0) | ||
113 | #define UART011_IFLS_TX2_8 (1 << 0) | ||
114 | #define UART011_IFLS_TX4_8 (2 << 0) | ||
115 | #define UART011_IFLS_TX6_8 (3 << 0) | ||
116 | #define UART011_IFLS_TX7_8 (4 << 0) | ||
117 | |||
118 | #define UART011_OEIM (1 << 10) /* overrun error interrupt mask */ | ||
119 | #define UART011_BEIM (1 << 9) /* break error interrupt mask */ | ||
120 | #define UART011_PEIM (1 << 8) /* parity error interrupt mask */ | ||
121 | #define UART011_FEIM (1 << 7) /* framing error interrupt mask */ | ||
122 | #define UART011_RTIM (1 << 6) /* receive timeout interrupt mask */ | ||
123 | #define UART011_TXIM (1 << 5) /* transmit interrupt mask */ | ||
124 | #define UART011_RXIM (1 << 4) /* receive interrupt mask */ | ||
125 | #define UART011_DSRMIM (1 << 3) /* DSR interrupt mask */ | ||
126 | #define UART011_DCDMIM (1 << 2) /* DCD interrupt mask */ | ||
127 | #define UART011_CTSMIM (1 << 1) /* CTS interrupt mask */ | ||
128 | #define UART011_RIMIM (1 << 0) /* RI interrupt mask */ | ||
129 | |||
130 | #define UART011_OEIS (1 << 10) /* overrun error interrupt status */ | ||
131 | #define UART011_BEIS (1 << 9) /* break error interrupt status */ | ||
132 | #define UART011_PEIS (1 << 8) /* parity error interrupt status */ | ||
133 | #define UART011_FEIS (1 << 7) /* framing error interrupt status */ | ||
134 | #define UART011_RTIS (1 << 6) /* receive timeout interrupt status */ | ||
135 | #define UART011_TXIS (1 << 5) /* transmit interrupt status */ | ||
136 | #define UART011_RXIS (1 << 4) /* receive interrupt status */ | ||
137 | #define UART011_DSRMIS (1 << 3) /* DSR interrupt status */ | ||
138 | #define UART011_DCDMIS (1 << 2) /* DCD interrupt status */ | ||
139 | #define UART011_CTSMIS (1 << 1) /* CTS interrupt status */ | ||
140 | #define UART011_RIMIS (1 << 0) /* RI interrupt status */ | ||
141 | |||
142 | #define UART011_OEIC (1 << 10) /* overrun error interrupt clear */ | ||
143 | #define UART011_BEIC (1 << 9) /* break error interrupt clear */ | ||
144 | #define UART011_PEIC (1 << 8) /* parity error interrupt clear */ | ||
145 | #define UART011_FEIC (1 << 7) /* framing error interrupt clear */ | ||
146 | #define UART011_RTIC (1 << 6) /* receive timeout interrupt clear */ | ||
147 | #define UART011_TXIC (1 << 5) /* transmit interrupt clear */ | ||
148 | #define UART011_RXIC (1 << 4) /* receive interrupt clear */ | ||
149 | #define UART011_DSRMIC (1 << 3) /* DSR interrupt clear */ | ||
150 | #define UART011_DCDMIC (1 << 2) /* DCD interrupt clear */ | ||
151 | #define UART011_CTSMIC (1 << 1) /* CTS interrupt clear */ | ||
152 | #define UART011_RIMIC (1 << 0) /* RI interrupt clear */ | ||
153 | |||
154 | #define UART011_DMAONERR (1 << 2) /* disable dma on error */ | ||
155 | #define UART011_TXDMAE (1 << 1) /* enable transmit dma */ | ||
156 | #define UART011_RXDMAE (1 << 0) /* enable receive dma */ | ||
157 | |||
158 | #define UART01x_RSR_ANY (UART01x_RSR_OE|UART01x_RSR_BE|UART01x_RSR_PE|UART01x_RSR_FE) | ||
159 | #define UART01x_FR_MODEM_ANY (UART01x_FR_DCD|UART01x_FR_DSR|UART01x_FR_CTS) | ||
160 | |||
161 | #endif | ||
diff --git a/include/linux/ata.h b/include/linux/ata.h index d2873b732bb1..94f77cce27fa 100644 --- a/include/linux/ata.h +++ b/include/linux/ata.h | |||
@@ -129,6 +129,7 @@ enum { | |||
129 | ATA_CMD_READ_EXT = 0x25, | 129 | ATA_CMD_READ_EXT = 0x25, |
130 | ATA_CMD_WRITE = 0xCA, | 130 | ATA_CMD_WRITE = 0xCA, |
131 | ATA_CMD_WRITE_EXT = 0x35, | 131 | ATA_CMD_WRITE_EXT = 0x35, |
132 | ATA_CMD_WRITE_FUA_EXT = 0x3D, | ||
132 | ATA_CMD_PIO_READ = 0x20, | 133 | ATA_CMD_PIO_READ = 0x20, |
133 | ATA_CMD_PIO_READ_EXT = 0x24, | 134 | ATA_CMD_PIO_READ_EXT = 0x24, |
134 | ATA_CMD_PIO_WRITE = 0x30, | 135 | ATA_CMD_PIO_WRITE = 0x30, |
@@ -137,10 +138,13 @@ enum { | |||
137 | ATA_CMD_READ_MULTI_EXT = 0x29, | 138 | ATA_CMD_READ_MULTI_EXT = 0x29, |
138 | ATA_CMD_WRITE_MULTI = 0xC5, | 139 | ATA_CMD_WRITE_MULTI = 0xC5, |
139 | ATA_CMD_WRITE_MULTI_EXT = 0x39, | 140 | ATA_CMD_WRITE_MULTI_EXT = 0x39, |
141 | ATA_CMD_WRITE_MULTI_FUA_EXT = 0xCE, | ||
140 | ATA_CMD_SET_FEATURES = 0xEF, | 142 | ATA_CMD_SET_FEATURES = 0xEF, |
141 | ATA_CMD_PACKET = 0xA0, | 143 | ATA_CMD_PACKET = 0xA0, |
142 | ATA_CMD_VERIFY = 0x40, | 144 | ATA_CMD_VERIFY = 0x40, |
143 | ATA_CMD_VERIFY_EXT = 0x42, | 145 | ATA_CMD_VERIFY_EXT = 0x42, |
146 | ATA_CMD_STANDBYNOW1 = 0xE0, | ||
147 | ATA_CMD_IDLEIMMEDIATE = 0xE1, | ||
144 | ATA_CMD_INIT_DEV_PARAMS = 0x91, | 148 | ATA_CMD_INIT_DEV_PARAMS = 0x91, |
145 | 149 | ||
146 | /* SETFEATURES stuff */ | 150 | /* SETFEATURES stuff */ |
@@ -192,6 +196,7 @@ enum { | |||
192 | ATA_TFLAG_DEVICE = (1 << 2), /* enable r/w to device reg */ | 196 | ATA_TFLAG_DEVICE = (1 << 2), /* enable r/w to device reg */ |
193 | ATA_TFLAG_WRITE = (1 << 3), /* data dir: host->dev==1 (write) */ | 197 | ATA_TFLAG_WRITE = (1 << 3), /* data dir: host->dev==1 (write) */ |
194 | ATA_TFLAG_LBA = (1 << 4), /* enable LBA */ | 198 | ATA_TFLAG_LBA = (1 << 4), /* enable LBA */ |
199 | ATA_TFLAG_FUA = (1 << 5), /* enable FUA */ | ||
195 | }; | 200 | }; |
196 | 201 | ||
197 | enum ata_tf_protocols { | 202 | enum ata_tf_protocols { |
@@ -245,7 +250,8 @@ struct ata_taskfile { | |||
245 | #define ata_id_is_sata(id) ((id)[93] == 0) | 250 | #define ata_id_is_sata(id) ((id)[93] == 0) |
246 | #define ata_id_rahead_enabled(id) ((id)[85] & (1 << 6)) | 251 | #define ata_id_rahead_enabled(id) ((id)[85] & (1 << 6)) |
247 | #define ata_id_wcache_enabled(id) ((id)[85] & (1 << 5)) | 252 | #define ata_id_wcache_enabled(id) ((id)[85] & (1 << 5)) |
248 | #define ata_id_has_flush(id) ((id)[83] & (1 << 12)) | 253 | #define ata_id_has_fua(id) ((id)[84] & (1 << 6)) |
254 | #define ata_id_has_flush(id) ((id)[83] & (1 << 12)) | ||
249 | #define ata_id_has_flush_ext(id) ((id)[83] & (1 << 13)) | 255 | #define ata_id_has_flush_ext(id) ((id)[83] & (1 << 13)) |
250 | #define ata_id_has_lba48(id) ((id)[83] & (1 << 10)) | 256 | #define ata_id_has_lba48(id) ((id)[83] & (1 << 10)) |
251 | #define ata_id_has_wcache(id) ((id)[82] & (1 << 5)) | 257 | #define ata_id_has_wcache(id) ((id)[82] & (1 << 5)) |
diff --git a/include/linux/atalk.h b/include/linux/atalk.h index 911c09cb9bf9..6ba3aa8a81f4 100644 --- a/include/linux/atalk.h +++ b/include/linux/atalk.h | |||
@@ -155,15 +155,15 @@ struct elapaarp { | |||
155 | #define AARP_REQUEST 1 | 155 | #define AARP_REQUEST 1 |
156 | #define AARP_REPLY 2 | 156 | #define AARP_REPLY 2 |
157 | #define AARP_PROBE 3 | 157 | #define AARP_PROBE 3 |
158 | __u8 hw_src[ETH_ALEN] __attribute__ ((packed)); | 158 | __u8 hw_src[ETH_ALEN]; |
159 | __u8 pa_src_zero __attribute__ ((packed)); | 159 | __u8 pa_src_zero; |
160 | __be16 pa_src_net __attribute__ ((packed)); | 160 | __be16 pa_src_net; |
161 | __u8 pa_src_node __attribute__ ((packed)); | 161 | __u8 pa_src_node; |
162 | __u8 hw_dst[ETH_ALEN] __attribute__ ((packed)); | 162 | __u8 hw_dst[ETH_ALEN]; |
163 | __u8 pa_dst_zero __attribute__ ((packed)); | 163 | __u8 pa_dst_zero; |
164 | __be16 pa_dst_net __attribute__ ((packed)); | 164 | __be16 pa_dst_net; |
165 | __u8 pa_dst_node __attribute__ ((packed)); | 165 | __u8 pa_dst_node; |
166 | }; | 166 | } __attribute__ ((packed)); |
167 | 167 | ||
168 | static __inline__ struct elapaarp *aarp_hdr(struct sk_buff *skb) | 168 | static __inline__ struct elapaarp *aarp_hdr(struct sk_buff *skb) |
169 | { | 169 | { |
diff --git a/include/linux/atmdev.h b/include/linux/atmdev.h index e7d0593bb576..b203ea82a0a8 100644 --- a/include/linux/atmdev.h +++ b/include/linux/atmdev.h | |||
@@ -7,7 +7,6 @@ | |||
7 | #define LINUX_ATMDEV_H | 7 | #define LINUX_ATMDEV_H |
8 | 8 | ||
9 | 9 | ||
10 | #include <linux/config.h> | ||
11 | #include <linux/atmapi.h> | 10 | #include <linux/atmapi.h> |
12 | #include <linux/atm.h> | 11 | #include <linux/atm.h> |
13 | #include <linux/atmioc.h> | 12 | #include <linux/atmioc.h> |
@@ -210,6 +209,7 @@ struct atm_cirange { | |||
210 | 209 | ||
211 | #ifdef __KERNEL__ | 210 | #ifdef __KERNEL__ |
212 | 211 | ||
212 | #include <linux/config.h> | ||
213 | #include <linux/wait.h> /* wait_queue_head_t */ | 213 | #include <linux/wait.h> /* wait_queue_head_t */ |
214 | #include <linux/time.h> /* struct timeval */ | 214 | #include <linux/time.h> /* struct timeval */ |
215 | #include <linux/net.h> | 215 | #include <linux/net.h> |
@@ -274,7 +274,7 @@ enum { | |||
274 | 274 | ||
275 | 275 | ||
276 | enum { | 276 | enum { |
277 | ATM_DF_CLOSE, /* close device when last VCC is closed */ | 277 | ATM_DF_REMOVED, /* device was removed from atm_devs list */ |
278 | }; | 278 | }; |
279 | 279 | ||
280 | 280 | ||
@@ -415,7 +415,6 @@ struct atm_dev *atm_dev_register(const char *type,const struct atmdev_ops *ops, | |||
415 | int number,unsigned long *flags); /* number == -1: pick first available */ | 415 | int number,unsigned long *flags); /* number == -1: pick first available */ |
416 | struct atm_dev *atm_dev_lookup(int number); | 416 | struct atm_dev *atm_dev_lookup(int number); |
417 | void atm_dev_deregister(struct atm_dev *dev); | 417 | void atm_dev_deregister(struct atm_dev *dev); |
418 | void shutdown_atm_dev(struct atm_dev *dev); | ||
419 | void vcc_insert_socket(struct sock *sk); | 418 | void vcc_insert_socket(struct sock *sk); |
420 | 419 | ||
421 | 420 | ||
@@ -457,18 +456,19 @@ static inline void atm_dev_hold(struct atm_dev *dev) | |||
457 | 456 | ||
458 | static inline void atm_dev_put(struct atm_dev *dev) | 457 | static inline void atm_dev_put(struct atm_dev *dev) |
459 | { | 458 | { |
460 | atomic_dec(&dev->refcnt); | 459 | if (atomic_dec_and_test(&dev->refcnt)) { |
461 | 460 | BUG_ON(!test_bit(ATM_DF_REMOVED, &dev->flags)); | |
462 | if ((atomic_read(&dev->refcnt) == 1) && | 461 | if (dev->ops->dev_close) |
463 | test_bit(ATM_DF_CLOSE,&dev->flags)) | 462 | dev->ops->dev_close(dev); |
464 | shutdown_atm_dev(dev); | 463 | kfree(dev); |
464 | } | ||
465 | } | 465 | } |
466 | 466 | ||
467 | 467 | ||
468 | int atm_charge(struct atm_vcc *vcc,int truesize); | 468 | int atm_charge(struct atm_vcc *vcc,int truesize); |
469 | struct sk_buff *atm_alloc_charge(struct atm_vcc *vcc,int pdu_size, | 469 | struct sk_buff *atm_alloc_charge(struct atm_vcc *vcc,int pdu_size, |
470 | gfp_t gfp_flags); | 470 | gfp_t gfp_flags); |
471 | int atm_pcr_goal(struct atm_trafprm *tp); | 471 | int atm_pcr_goal(const struct atm_trafprm *tp); |
472 | 472 | ||
473 | void vcc_release_async(struct atm_vcc *vcc, int reply); | 473 | void vcc_release_async(struct atm_vcc *vcc, int reply); |
474 | 474 | ||
diff --git a/include/linux/bio.h b/include/linux/bio.h index 685fd3720df5..b60ffe32cd21 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h | |||
@@ -292,6 +292,8 @@ extern struct bio *bio_clone(struct bio *, gfp_t); | |||
292 | extern void bio_init(struct bio *); | 292 | extern void bio_init(struct bio *); |
293 | 293 | ||
294 | extern int bio_add_page(struct bio *, struct page *, unsigned int,unsigned int); | 294 | extern int bio_add_page(struct bio *, struct page *, unsigned int,unsigned int); |
295 | extern int bio_add_pc_page(struct request_queue *, struct bio *, struct page *, | ||
296 | unsigned int, unsigned int); | ||
295 | extern int bio_get_nr_vecs(struct block_device *); | 297 | extern int bio_get_nr_vecs(struct block_device *); |
296 | extern struct bio *bio_map_user(struct request_queue *, struct block_device *, | 298 | extern struct bio *bio_map_user(struct request_queue *, struct block_device *, |
297 | unsigned long, unsigned int, int); | 299 | unsigned long, unsigned int, int); |
diff --git a/include/linux/bitops.h b/include/linux/bitops.h index 38c2fb7ebe09..6a2a19f14bb2 100644 --- a/include/linux/bitops.h +++ b/include/linux/bitops.h | |||
@@ -76,6 +76,15 @@ static __inline__ int generic_fls(int x) | |||
76 | */ | 76 | */ |
77 | #include <asm/bitops.h> | 77 | #include <asm/bitops.h> |
78 | 78 | ||
79 | |||
80 | static inline int generic_fls64(__u64 x) | ||
81 | { | ||
82 | __u32 h = x >> 32; | ||
83 | if (h) | ||
84 | return fls(x) + 32; | ||
85 | return fls(x); | ||
86 | } | ||
87 | |||
79 | static __inline__ int get_bitmask_order(unsigned int count) | 88 | static __inline__ int get_bitmask_order(unsigned int count) |
80 | { | 89 | { |
81 | int order; | 90 | int order; |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index a33a31e71bbc..fb0985377421 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -102,7 +102,7 @@ void copy_io_context(struct io_context **pdst, struct io_context **psrc); | |||
102 | void swap_io_context(struct io_context **ioc1, struct io_context **ioc2); | 102 | void swap_io_context(struct io_context **ioc1, struct io_context **ioc2); |
103 | 103 | ||
104 | struct request; | 104 | struct request; |
105 | typedef void (rq_end_io_fn)(struct request *); | 105 | typedef void (rq_end_io_fn)(struct request *, int); |
106 | 106 | ||
107 | struct request_list { | 107 | struct request_list { |
108 | int count[2]; | 108 | int count[2]; |
@@ -184,6 +184,7 @@ struct request { | |||
184 | void *sense; | 184 | void *sense; |
185 | 185 | ||
186 | unsigned int timeout; | 186 | unsigned int timeout; |
187 | int retries; | ||
187 | 188 | ||
188 | /* | 189 | /* |
189 | * For Power Management requests | 190 | * For Power Management requests |
@@ -206,6 +207,7 @@ enum rq_flag_bits { | |||
206 | __REQ_SORTED, /* elevator knows about this request */ | 207 | __REQ_SORTED, /* elevator knows about this request */ |
207 | __REQ_SOFTBARRIER, /* may not be passed by ioscheduler */ | 208 | __REQ_SOFTBARRIER, /* may not be passed by ioscheduler */ |
208 | __REQ_HARDBARRIER, /* may not be passed by drive either */ | 209 | __REQ_HARDBARRIER, /* may not be passed by drive either */ |
210 | __REQ_FUA, /* forced unit access */ | ||
209 | __REQ_CMD, /* is a regular fs rw request */ | 211 | __REQ_CMD, /* is a regular fs rw request */ |
210 | __REQ_NOMERGE, /* don't touch this for merging */ | 212 | __REQ_NOMERGE, /* don't touch this for merging */ |
211 | __REQ_STARTED, /* drive already may have started this one */ | 213 | __REQ_STARTED, /* drive already may have started this one */ |
@@ -229,9 +231,7 @@ enum rq_flag_bits { | |||
229 | __REQ_PM_SUSPEND, /* suspend request */ | 231 | __REQ_PM_SUSPEND, /* suspend request */ |
230 | __REQ_PM_RESUME, /* resume request */ | 232 | __REQ_PM_RESUME, /* resume request */ |
231 | __REQ_PM_SHUTDOWN, /* shutdown request */ | 233 | __REQ_PM_SHUTDOWN, /* shutdown request */ |
232 | __REQ_BAR_PREFLUSH, /* barrier pre-flush done */ | 234 | __REQ_ORDERED_COLOR, /* is before or after barrier */ |
233 | __REQ_BAR_POSTFLUSH, /* barrier post-flush */ | ||
234 | __REQ_BAR_FLUSH, /* rq is the flush request */ | ||
235 | __REQ_NR_BITS, /* stops here */ | 235 | __REQ_NR_BITS, /* stops here */ |
236 | }; | 236 | }; |
237 | 237 | ||
@@ -240,6 +240,7 @@ enum rq_flag_bits { | |||
240 | #define REQ_SORTED (1 << __REQ_SORTED) | 240 | #define REQ_SORTED (1 << __REQ_SORTED) |
241 | #define REQ_SOFTBARRIER (1 << __REQ_SOFTBARRIER) | 241 | #define REQ_SOFTBARRIER (1 << __REQ_SOFTBARRIER) |
242 | #define REQ_HARDBARRIER (1 << __REQ_HARDBARRIER) | 242 | #define REQ_HARDBARRIER (1 << __REQ_HARDBARRIER) |
243 | #define REQ_FUA (1 << __REQ_FUA) | ||
243 | #define REQ_CMD (1 << __REQ_CMD) | 244 | #define REQ_CMD (1 << __REQ_CMD) |
244 | #define REQ_NOMERGE (1 << __REQ_NOMERGE) | 245 | #define REQ_NOMERGE (1 << __REQ_NOMERGE) |
245 | #define REQ_STARTED (1 << __REQ_STARTED) | 246 | #define REQ_STARTED (1 << __REQ_STARTED) |
@@ -259,9 +260,7 @@ enum rq_flag_bits { | |||
259 | #define REQ_PM_SUSPEND (1 << __REQ_PM_SUSPEND) | 260 | #define REQ_PM_SUSPEND (1 << __REQ_PM_SUSPEND) |
260 | #define REQ_PM_RESUME (1 << __REQ_PM_RESUME) | 261 | #define REQ_PM_RESUME (1 << __REQ_PM_RESUME) |
261 | #define REQ_PM_SHUTDOWN (1 << __REQ_PM_SHUTDOWN) | 262 | #define REQ_PM_SHUTDOWN (1 << __REQ_PM_SHUTDOWN) |
262 | #define REQ_BAR_PREFLUSH (1 << __REQ_BAR_PREFLUSH) | 263 | #define REQ_ORDERED_COLOR (1 << __REQ_ORDERED_COLOR) |
263 | #define REQ_BAR_POSTFLUSH (1 << __REQ_BAR_POSTFLUSH) | ||
264 | #define REQ_BAR_FLUSH (1 << __REQ_BAR_FLUSH) | ||
265 | 264 | ||
266 | /* | 265 | /* |
267 | * State information carried for REQ_PM_SUSPEND and REQ_PM_RESUME | 266 | * State information carried for REQ_PM_SUSPEND and REQ_PM_RESUME |
@@ -291,8 +290,7 @@ struct bio_vec; | |||
291 | typedef int (merge_bvec_fn) (request_queue_t *, struct bio *, struct bio_vec *); | 290 | typedef int (merge_bvec_fn) (request_queue_t *, struct bio *, struct bio_vec *); |
292 | typedef void (activity_fn) (void *data, int rw); | 291 | typedef void (activity_fn) (void *data, int rw); |
293 | typedef int (issue_flush_fn) (request_queue_t *, struct gendisk *, sector_t *); | 292 | typedef int (issue_flush_fn) (request_queue_t *, struct gendisk *, sector_t *); |
294 | typedef int (prepare_flush_fn) (request_queue_t *, struct request *); | 293 | typedef void (prepare_flush_fn) (request_queue_t *, struct request *); |
295 | typedef void (end_flush_fn) (request_queue_t *, struct request *); | ||
296 | 294 | ||
297 | enum blk_queue_state { | 295 | enum blk_queue_state { |
298 | Queue_down, | 296 | Queue_down, |
@@ -334,7 +332,6 @@ struct request_queue | |||
334 | activity_fn *activity_fn; | 332 | activity_fn *activity_fn; |
335 | issue_flush_fn *issue_flush_fn; | 333 | issue_flush_fn *issue_flush_fn; |
336 | prepare_flush_fn *prepare_flush_fn; | 334 | prepare_flush_fn *prepare_flush_fn; |
337 | end_flush_fn *end_flush_fn; | ||
338 | 335 | ||
339 | /* | 336 | /* |
340 | * Dispatch queue sorting | 337 | * Dispatch queue sorting |
@@ -419,14 +416,11 @@ struct request_queue | |||
419 | /* | 416 | /* |
420 | * reserved for flush operations | 417 | * reserved for flush operations |
421 | */ | 418 | */ |
422 | struct request *flush_rq; | 419 | unsigned int ordered, next_ordered, ordseq; |
423 | unsigned char ordered; | 420 | int orderr, ordcolor; |
424 | }; | 421 | struct request pre_flush_rq, bar_rq, post_flush_rq; |
425 | 422 | struct request *orig_bar_rq; | |
426 | enum { | 423 | unsigned int bi_size; |
427 | QUEUE_ORDERED_NONE, | ||
428 | QUEUE_ORDERED_TAG, | ||
429 | QUEUE_ORDERED_FLUSH, | ||
430 | }; | 424 | }; |
431 | 425 | ||
432 | #define RQ_INACTIVE (-1) | 426 | #define RQ_INACTIVE (-1) |
@@ -444,12 +438,51 @@ enum { | |||
444 | #define QUEUE_FLAG_REENTER 6 /* Re-entrancy avoidance */ | 438 | #define QUEUE_FLAG_REENTER 6 /* Re-entrancy avoidance */ |
445 | #define QUEUE_FLAG_PLUGGED 7 /* queue is plugged */ | 439 | #define QUEUE_FLAG_PLUGGED 7 /* queue is plugged */ |
446 | #define QUEUE_FLAG_ELVSWITCH 8 /* don't use elevator, just do FIFO */ | 440 | #define QUEUE_FLAG_ELVSWITCH 8 /* don't use elevator, just do FIFO */ |
447 | #define QUEUE_FLAG_FLUSH 9 /* doing barrier flush sequence */ | 441 | |
442 | enum { | ||
443 | /* | ||
444 | * Hardbarrier is supported with one of the following methods. | ||
445 | * | ||
446 | * NONE : hardbarrier unsupported | ||
447 | * DRAIN : ordering by draining is enough | ||
448 | * DRAIN_FLUSH : ordering by draining w/ pre and post flushes | ||
449 | * DRAIN_FUA : ordering by draining w/ pre flush and FUA write | ||
450 | * TAG : ordering by tag is enough | ||
451 | * TAG_FLUSH : ordering by tag w/ pre and post flushes | ||
452 | * TAG_FUA : ordering by tag w/ pre flush and FUA write | ||
453 | */ | ||
454 | QUEUE_ORDERED_NONE = 0x00, | ||
455 | QUEUE_ORDERED_DRAIN = 0x01, | ||
456 | QUEUE_ORDERED_TAG = 0x02, | ||
457 | |||
458 | QUEUE_ORDERED_PREFLUSH = 0x10, | ||
459 | QUEUE_ORDERED_POSTFLUSH = 0x20, | ||
460 | QUEUE_ORDERED_FUA = 0x40, | ||
461 | |||
462 | QUEUE_ORDERED_DRAIN_FLUSH = QUEUE_ORDERED_DRAIN | | ||
463 | QUEUE_ORDERED_PREFLUSH | QUEUE_ORDERED_POSTFLUSH, | ||
464 | QUEUE_ORDERED_DRAIN_FUA = QUEUE_ORDERED_DRAIN | | ||
465 | QUEUE_ORDERED_PREFLUSH | QUEUE_ORDERED_FUA, | ||
466 | QUEUE_ORDERED_TAG_FLUSH = QUEUE_ORDERED_TAG | | ||
467 | QUEUE_ORDERED_PREFLUSH | QUEUE_ORDERED_POSTFLUSH, | ||
468 | QUEUE_ORDERED_TAG_FUA = QUEUE_ORDERED_TAG | | ||
469 | QUEUE_ORDERED_PREFLUSH | QUEUE_ORDERED_FUA, | ||
470 | |||
471 | /* | ||
472 | * Ordered operation sequence | ||
473 | */ | ||
474 | QUEUE_ORDSEQ_STARTED = 0x01, /* flushing in progress */ | ||
475 | QUEUE_ORDSEQ_DRAIN = 0x02, /* waiting for the queue to be drained */ | ||
476 | QUEUE_ORDSEQ_PREFLUSH = 0x04, /* pre-flushing in progress */ | ||
477 | QUEUE_ORDSEQ_BAR = 0x08, /* original barrier req in progress */ | ||
478 | QUEUE_ORDSEQ_POSTFLUSH = 0x10, /* post-flushing in progress */ | ||
479 | QUEUE_ORDSEQ_DONE = 0x20, | ||
480 | }; | ||
448 | 481 | ||
449 | #define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags) | 482 | #define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags) |
450 | #define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags) | 483 | #define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags) |
451 | #define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags) | 484 | #define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags) |
452 | #define blk_queue_flushing(q) test_bit(QUEUE_FLAG_FLUSH, &(q)->queue_flags) | 485 | #define blk_queue_flushing(q) ((q)->ordseq) |
453 | 486 | ||
454 | #define blk_fs_request(rq) ((rq)->flags & REQ_CMD) | 487 | #define blk_fs_request(rq) ((rq)->flags & REQ_CMD) |
455 | #define blk_pc_request(rq) ((rq)->flags & REQ_BLOCK_PC) | 488 | #define blk_pc_request(rq) ((rq)->flags & REQ_BLOCK_PC) |
@@ -465,8 +498,7 @@ enum { | |||
465 | 498 | ||
466 | #define blk_sorted_rq(rq) ((rq)->flags & REQ_SORTED) | 499 | #define blk_sorted_rq(rq) ((rq)->flags & REQ_SORTED) |
467 | #define blk_barrier_rq(rq) ((rq)->flags & REQ_HARDBARRIER) | 500 | #define blk_barrier_rq(rq) ((rq)->flags & REQ_HARDBARRIER) |
468 | #define blk_barrier_preflush(rq) ((rq)->flags & REQ_BAR_PREFLUSH) | 501 | #define blk_fua_rq(rq) ((rq)->flags & REQ_FUA) |
469 | #define blk_barrier_postflush(rq) ((rq)->flags & REQ_BAR_POSTFLUSH) | ||
470 | 502 | ||
471 | #define list_entry_rq(ptr) list_entry((ptr), struct request, queuelist) | 503 | #define list_entry_rq(ptr) list_entry((ptr), struct request, queuelist) |
472 | 504 | ||
@@ -558,7 +590,8 @@ extern void blk_unregister_queue(struct gendisk *disk); | |||
558 | extern void register_disk(struct gendisk *dev); | 590 | extern void register_disk(struct gendisk *dev); |
559 | extern void generic_make_request(struct bio *bio); | 591 | extern void generic_make_request(struct bio *bio); |
560 | extern void blk_put_request(struct request *); | 592 | extern void blk_put_request(struct request *); |
561 | extern void blk_end_sync_rq(struct request *rq); | 593 | extern void __blk_put_request(request_queue_t *, struct request *); |
594 | extern void blk_end_sync_rq(struct request *rq, int error); | ||
562 | extern void blk_attempt_remerge(request_queue_t *, struct request *); | 595 | extern void blk_attempt_remerge(request_queue_t *, struct request *); |
563 | extern struct request *blk_get_request(request_queue_t *, int, gfp_t); | 596 | extern struct request *blk_get_request(request_queue_t *, int, gfp_t); |
564 | extern void blk_insert_request(request_queue_t *, struct request *, int, void *); | 597 | extern void blk_insert_request(request_queue_t *, struct request *, int, void *); |
@@ -579,6 +612,9 @@ extern int blk_rq_map_kern(request_queue_t *, struct request *, void *, unsigned | |||
579 | extern int blk_rq_map_user_iov(request_queue_t *, struct request *, struct sg_iovec *, int); | 612 | extern int blk_rq_map_user_iov(request_queue_t *, struct request *, struct sg_iovec *, int); |
580 | extern int blk_execute_rq(request_queue_t *, struct gendisk *, | 613 | extern int blk_execute_rq(request_queue_t *, struct gendisk *, |
581 | struct request *, int); | 614 | struct request *, int); |
615 | extern void blk_execute_rq_nowait(request_queue_t *, struct gendisk *, | ||
616 | struct request *, int, rq_end_io_fn *); | ||
617 | |||
582 | static inline request_queue_t *bdev_get_queue(struct block_device *bdev) | 618 | static inline request_queue_t *bdev_get_queue(struct block_device *bdev) |
583 | { | 619 | { |
584 | return bdev->bd_disk->queue; | 620 | return bdev->bd_disk->queue; |
@@ -608,7 +644,7 @@ static inline void blk_run_address_space(struct address_space *mapping) | |||
608 | */ | 644 | */ |
609 | extern int end_that_request_first(struct request *, int, int); | 645 | extern int end_that_request_first(struct request *, int, int); |
610 | extern int end_that_request_chunk(struct request *, int, int); | 646 | extern int end_that_request_chunk(struct request *, int, int); |
611 | extern void end_that_request_last(struct request *); | 647 | extern void end_that_request_last(struct request *, int); |
612 | extern void end_request(struct request *req, int uptodate); | 648 | extern void end_request(struct request *req, int uptodate); |
613 | 649 | ||
614 | /* | 650 | /* |
@@ -659,11 +695,12 @@ extern void blk_queue_prep_rq(request_queue_t *, prep_rq_fn *pfn); | |||
659 | extern void blk_queue_merge_bvec(request_queue_t *, merge_bvec_fn *); | 695 | extern void blk_queue_merge_bvec(request_queue_t *, merge_bvec_fn *); |
660 | extern void blk_queue_dma_alignment(request_queue_t *, int); | 696 | extern void blk_queue_dma_alignment(request_queue_t *, int); |
661 | extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev); | 697 | extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev); |
662 | extern void blk_queue_ordered(request_queue_t *, int); | 698 | extern int blk_queue_ordered(request_queue_t *, unsigned, prepare_flush_fn *); |
663 | extern void blk_queue_issue_flush_fn(request_queue_t *, issue_flush_fn *); | 699 | extern void blk_queue_issue_flush_fn(request_queue_t *, issue_flush_fn *); |
664 | extern struct request *blk_start_pre_flush(request_queue_t *,struct request *); | 700 | extern int blk_do_ordered(request_queue_t *, struct request **); |
665 | extern int blk_complete_barrier_rq(request_queue_t *, struct request *, int); | 701 | extern unsigned blk_ordered_cur_seq(request_queue_t *); |
666 | extern int blk_complete_barrier_rq_locked(request_queue_t *, struct request *, int); | 702 | extern unsigned blk_ordered_req_seq(struct request *); |
703 | extern void blk_ordered_complete_seq(request_queue_t *, unsigned, int); | ||
667 | 704 | ||
668 | extern int blk_rq_map_sg(request_queue_t *, struct request *, struct scatterlist *); | 705 | extern int blk_rq_map_sg(request_queue_t *, struct request *, struct scatterlist *); |
669 | extern void blk_dump_rq_flags(struct request *, char *); | 706 | extern void blk_dump_rq_flags(struct request *, char *); |
@@ -696,7 +733,8 @@ extern int blkdev_issue_flush(struct block_device *, sector_t *); | |||
696 | 733 | ||
697 | #define MAX_PHYS_SEGMENTS 128 | 734 | #define MAX_PHYS_SEGMENTS 128 |
698 | #define MAX_HW_SEGMENTS 128 | 735 | #define MAX_HW_SEGMENTS 128 |
699 | #define MAX_SECTORS 255 | 736 | #define SAFE_MAX_SECTORS 255 |
737 | #define BLK_DEF_MAX_SECTORS 1024 | ||
700 | 738 | ||
701 | #define MAX_SEGMENT_SIZE 65536 | 739 | #define MAX_SEGMENT_SIZE 65536 |
702 | 740 | ||
diff --git a/include/linux/bootmem.h b/include/linux/bootmem.h index 3b03b0b868dd..993da8cc9706 100644 --- a/include/linux/bootmem.h +++ b/include/linux/bootmem.h | |||
@@ -43,50 +43,38 @@ typedef struct bootmem_data { | |||
43 | extern unsigned long __init bootmem_bootmap_pages (unsigned long); | 43 | extern unsigned long __init bootmem_bootmap_pages (unsigned long); |
44 | extern unsigned long __init init_bootmem (unsigned long addr, unsigned long memend); | 44 | extern unsigned long __init init_bootmem (unsigned long addr, unsigned long memend); |
45 | extern void __init free_bootmem (unsigned long addr, unsigned long size); | 45 | extern void __init free_bootmem (unsigned long addr, unsigned long size); |
46 | extern void * __init __alloc_bootmem_limit (unsigned long size, unsigned long align, unsigned long goal, unsigned long limit); | 46 | extern void * __init __alloc_bootmem (unsigned long size, unsigned long align, unsigned long goal); |
47 | extern void * __init __alloc_bootmem_low(unsigned long size, | ||
48 | unsigned long align, | ||
49 | unsigned long goal); | ||
50 | extern void * __init __alloc_bootmem_low_node(pg_data_t *pgdat, | ||
51 | unsigned long size, | ||
52 | unsigned long align, | ||
53 | unsigned long goal); | ||
47 | #ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE | 54 | #ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE |
48 | extern void __init reserve_bootmem (unsigned long addr, unsigned long size); | 55 | extern void __init reserve_bootmem (unsigned long addr, unsigned long size); |
49 | #define alloc_bootmem(x) \ | 56 | #define alloc_bootmem(x) \ |
50 | __alloc_bootmem((x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) | 57 | __alloc_bootmem((x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) |
51 | #define alloc_bootmem_low(x) \ | 58 | #define alloc_bootmem_low(x) \ |
52 | __alloc_bootmem((x), SMP_CACHE_BYTES, 0) | 59 | __alloc_bootmem_low((x), SMP_CACHE_BYTES, 0) |
53 | #define alloc_bootmem_pages(x) \ | 60 | #define alloc_bootmem_pages(x) \ |
54 | __alloc_bootmem((x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) | 61 | __alloc_bootmem((x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) |
55 | #define alloc_bootmem_low_pages(x) \ | 62 | #define alloc_bootmem_low_pages(x) \ |
56 | __alloc_bootmem((x), PAGE_SIZE, 0) | 63 | __alloc_bootmem_low((x), PAGE_SIZE, 0) |
57 | |||
58 | #define alloc_bootmem_limit(x, limit) \ | ||
59 | __alloc_bootmem_limit((x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS), (limit)) | ||
60 | #define alloc_bootmem_low_limit(x, limit) \ | ||
61 | __alloc_bootmem_limit((x), SMP_CACHE_BYTES, 0, (limit)) | ||
62 | #define alloc_bootmem_pages_limit(x, limit) \ | ||
63 | __alloc_bootmem_limit((x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS), (limit)) | ||
64 | #define alloc_bootmem_low_pages_limit(x, limit) \ | ||
65 | __alloc_bootmem_limit((x), PAGE_SIZE, 0, (limit)) | ||
66 | |||
67 | #endif /* !CONFIG_HAVE_ARCH_BOOTMEM_NODE */ | 64 | #endif /* !CONFIG_HAVE_ARCH_BOOTMEM_NODE */ |
68 | extern unsigned long __init free_all_bootmem (void); | 65 | extern unsigned long __init free_all_bootmem (void); |
69 | 66 | extern void * __init __alloc_bootmem_node (pg_data_t *pgdat, unsigned long size, unsigned long align, unsigned long goal); | |
70 | extern unsigned long __init init_bootmem_node (pg_data_t *pgdat, unsigned long freepfn, unsigned long startpfn, unsigned long endpfn); | 67 | extern unsigned long __init init_bootmem_node (pg_data_t *pgdat, unsigned long freepfn, unsigned long startpfn, unsigned long endpfn); |
71 | extern void __init reserve_bootmem_node (pg_data_t *pgdat, unsigned long physaddr, unsigned long size); | 68 | extern void __init reserve_bootmem_node (pg_data_t *pgdat, unsigned long physaddr, unsigned long size); |
72 | extern void __init free_bootmem_node (pg_data_t *pgdat, unsigned long addr, unsigned long size); | 69 | extern void __init free_bootmem_node (pg_data_t *pgdat, unsigned long addr, unsigned long size); |
73 | extern unsigned long __init free_all_bootmem_node (pg_data_t *pgdat); | 70 | extern unsigned long __init free_all_bootmem_node (pg_data_t *pgdat); |
74 | extern void * __init __alloc_bootmem_node_limit (pg_data_t *pgdat, unsigned long size, unsigned long align, unsigned long goal, unsigned long limit); | ||
75 | #ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE | 71 | #ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE |
76 | #define alloc_bootmem_node(pgdat, x) \ | 72 | #define alloc_bootmem_node(pgdat, x) \ |
77 | __alloc_bootmem_node((pgdat), (x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) | 73 | __alloc_bootmem_node((pgdat), (x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS)) |
78 | #define alloc_bootmem_pages_node(pgdat, x) \ | 74 | #define alloc_bootmem_pages_node(pgdat, x) \ |
79 | __alloc_bootmem_node((pgdat), (x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) | 75 | __alloc_bootmem_node((pgdat), (x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS)) |
80 | #define alloc_bootmem_low_pages_node(pgdat, x) \ | 76 | #define alloc_bootmem_low_pages_node(pgdat, x) \ |
81 | __alloc_bootmem_node((pgdat), (x), PAGE_SIZE, 0) | 77 | __alloc_bootmem_low_node((pgdat), (x), PAGE_SIZE, 0) |
82 | |||
83 | #define alloc_bootmem_node_limit(pgdat, x, limit) \ | ||
84 | __alloc_bootmem_node_limit((pgdat), (x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS), (limit)) | ||
85 | #define alloc_bootmem_pages_node_limit(pgdat, x, limit) \ | ||
86 | __alloc_bootmem_node_limit((pgdat), (x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS), (limit)) | ||
87 | #define alloc_bootmem_low_pages_node_limit(pgdat, x, limit) \ | ||
88 | __alloc_bootmem_node_limit((pgdat), (x), PAGE_SIZE, 0, (limit)) | ||
89 | |||
90 | #endif /* !CONFIG_HAVE_ARCH_BOOTMEM_NODE */ | 78 | #endif /* !CONFIG_HAVE_ARCH_BOOTMEM_NODE */ |
91 | 79 | ||
92 | #ifdef CONFIG_HAVE_ARCH_ALLOC_REMAP | 80 | #ifdef CONFIG_HAVE_ARCH_ALLOC_REMAP |
@@ -123,15 +111,5 @@ extern void *__init alloc_large_system_hash(const char *tablename, | |||
123 | #endif | 111 | #endif |
124 | extern int __initdata hashdist; /* Distribute hashes across NUMA nodes? */ | 112 | extern int __initdata hashdist; /* Distribute hashes across NUMA nodes? */ |
125 | 113 | ||
126 | static inline void *__alloc_bootmem (unsigned long size, unsigned long align, unsigned long goal) | ||
127 | { | ||
128 | return __alloc_bootmem_limit(size, align, goal, 0); | ||
129 | } | ||
130 | |||
131 | static inline void *__alloc_bootmem_node (pg_data_t *pgdat, unsigned long size, unsigned long align, | ||
132 | unsigned long goal) | ||
133 | { | ||
134 | return __alloc_bootmem_node_limit(pgdat, size, align, goal, 0); | ||
135 | } | ||
136 | 114 | ||
137 | #endif /* _LINUX_BOOTMEM_H */ | 115 | #endif /* _LINUX_BOOTMEM_H */ |
diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h index 1db061bb6b08..9f159baf153f 100644 --- a/include/linux/buffer_head.h +++ b/include/linux/buffer_head.h | |||
@@ -197,7 +197,8 @@ int block_read_full_page(struct page*, get_block_t*); | |||
197 | int block_prepare_write(struct page*, unsigned, unsigned, get_block_t*); | 197 | int block_prepare_write(struct page*, unsigned, unsigned, get_block_t*); |
198 | int cont_prepare_write(struct page*, unsigned, unsigned, get_block_t*, | 198 | int cont_prepare_write(struct page*, unsigned, unsigned, get_block_t*, |
199 | loff_t *); | 199 | loff_t *); |
200 | int generic_cont_expand(struct inode *inode, loff_t size) ; | 200 | int generic_cont_expand(struct inode *inode, loff_t size); |
201 | int generic_cont_expand_simple(struct inode *inode, loff_t size); | ||
201 | int block_commit_write(struct page *page, unsigned from, unsigned to); | 202 | int block_commit_write(struct page *page, unsigned from, unsigned to); |
202 | int block_sync_page(struct page *); | 203 | int block_sync_page(struct page *); |
203 | sector_t generic_block_bmap(struct address_space *, sector_t, get_block_t *); | 204 | sector_t generic_block_bmap(struct address_space *, sector_t, get_block_t *); |
diff --git a/include/linux/byteorder/generic.h b/include/linux/byteorder/generic.h index 04bd756efc67..e86e4a938373 100644 --- a/include/linux/byteorder/generic.h +++ b/include/linux/byteorder/generic.h | |||
@@ -156,7 +156,7 @@ extern __be32 htonl(__u32); | |||
156 | extern __u16 ntohs(__be16); | 156 | extern __u16 ntohs(__be16); |
157 | extern __be16 htons(__u16); | 157 | extern __be16 htons(__u16); |
158 | 158 | ||
159 | #if defined(__GNUC__) && (__GNUC__ >= 2) && defined(__OPTIMIZE__) | 159 | #if defined(__GNUC__) && defined(__OPTIMIZE__) |
160 | 160 | ||
161 | #define ___htonl(x) __cpu_to_be32(x) | 161 | #define ___htonl(x) __cpu_to_be32(x) |
162 | #define ___htons(x) __cpu_to_be16(x) | 162 | #define ___htons(x) __cpu_to_be16(x) |
diff --git a/include/linux/byteorder/swab.h b/include/linux/byteorder/swab.h index 2f1cb775125a..25f7f32883ec 100644 --- a/include/linux/byteorder/swab.h +++ b/include/linux/byteorder/swab.h | |||
@@ -110,7 +110,7 @@ | |||
110 | /* | 110 | /* |
111 | * Allow constant folding | 111 | * Allow constant folding |
112 | */ | 112 | */ |
113 | #if defined(__GNUC__) && (__GNUC__ >= 2) && defined(__OPTIMIZE__) | 113 | #if defined(__GNUC__) && defined(__OPTIMIZE__) |
114 | # define __swab16(x) \ | 114 | # define __swab16(x) \ |
115 | (__builtin_constant_p((__u16)(x)) ? \ | 115 | (__builtin_constant_p((__u16)(x)) ? \ |
116 | ___swab16((x)) : \ | 116 | ___swab16((x)) : \ |
diff --git a/include/linux/byteorder/swabb.h b/include/linux/byteorder/swabb.h index d5f2a3205109..ae5e5f914bf4 100644 --- a/include/linux/byteorder/swabb.h +++ b/include/linux/byteorder/swabb.h | |||
@@ -77,7 +77,7 @@ | |||
77 | /* | 77 | /* |
78 | * Allow constant folding | 78 | * Allow constant folding |
79 | */ | 79 | */ |
80 | #if defined(__GNUC__) && (__GNUC__ >= 2) && defined(__OPTIMIZE__) | 80 | #if defined(__GNUC__) && defined(__OPTIMIZE__) |
81 | # define __swahw32(x) \ | 81 | # define __swahw32(x) \ |
82 | (__builtin_constant_p((__u32)(x)) ? \ | 82 | (__builtin_constant_p((__u32)(x)) ? \ |
83 | ___swahw32((x)) : \ | 83 | ___swahw32((x)) : \ |
diff --git a/include/linux/cache.h b/include/linux/cache.h index f6b5a46c5f82..ffe52210fc4f 100644 --- a/include/linux/cache.h +++ b/include/linux/cache.h | |||
@@ -13,7 +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) | 16 | #if defined(CONFIG_X86) || defined(CONFIG_SPARC64) || defined(CONFIG_IA64) |
17 | #define __read_mostly __attribute__((__section__(".data.read_mostly"))) | 17 | #define __read_mostly __attribute__((__section__(".data.read_mostly"))) |
18 | #else | 18 | #else |
19 | #define __read_mostly | 19 | #define __read_mostly |
@@ -45,12 +45,21 @@ | |||
45 | #endif /* CONFIG_SMP */ | 45 | #endif /* CONFIG_SMP */ |
46 | #endif | 46 | #endif |
47 | 47 | ||
48 | #if !defined(____cacheline_maxaligned_in_smp) | 48 | /* |
49 | * The maximum alignment needed for some critical structures | ||
50 | * These could be inter-node cacheline sizes/L3 cacheline | ||
51 | * size etc. Define this in asm/cache.h for your arch | ||
52 | */ | ||
53 | #ifndef INTERNODE_CACHE_SHIFT | ||
54 | #define INTERNODE_CACHE_SHIFT L1_CACHE_SHIFT | ||
55 | #endif | ||
56 | |||
57 | #if !defined(____cacheline_internodealigned_in_smp) | ||
49 | #if defined(CONFIG_SMP) | 58 | #if defined(CONFIG_SMP) |
50 | #define ____cacheline_maxaligned_in_smp \ | 59 | #define ____cacheline_internodealigned_in_smp \ |
51 | __attribute__((__aligned__(1 << (L1_CACHE_SHIFT_MAX)))) | 60 | __attribute__((__aligned__(1 << (INTERNODE_CACHE_SHIFT)))) |
52 | #else | 61 | #else |
53 | #define ____cacheline_maxaligned_in_smp | 62 | #define ____cacheline_internodealigned_in_smp |
54 | #endif | 63 | #endif |
55 | #endif | 64 | #endif |
56 | 65 | ||
diff --git a/include/linux/clk.h b/include/linux/clk.h new file mode 100644 index 000000000000..12848f81bb37 --- /dev/null +++ b/include/linux/clk.h | |||
@@ -0,0 +1,124 @@ | |||
1 | /* | ||
2 | * linux/include/linux/clk.h | ||
3 | * | ||
4 | * Copyright (C) 2004 ARM Limited. | ||
5 | * Written by Deep Blue Solutions Limited. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | #ifndef ASMARM_CLOCK_H | ||
12 | #define ASMARM_CLOCK_H | ||
13 | |||
14 | struct device; | ||
15 | |||
16 | /* | ||
17 | * The base API. | ||
18 | */ | ||
19 | |||
20 | |||
21 | /* | ||
22 | * struct clk - an machine class defined object / cookie. | ||
23 | */ | ||
24 | struct clk; | ||
25 | |||
26 | /** | ||
27 | * clk_get - lookup and obtain a reference to a clock producer. | ||
28 | * @dev: device for clock "consumer" | ||
29 | * @id: clock comsumer ID | ||
30 | * | ||
31 | * Returns a struct clk corresponding to the clock producer, or | ||
32 | * valid IS_ERR() condition containing errno. The implementation | ||
33 | * uses @dev and @id to determine the clock consumer, and thereby | ||
34 | * the clock producer. (IOW, @id may be identical strings, but | ||
35 | * clk_get may return different clock producers depending on @dev.) | ||
36 | * | ||
37 | * Drivers must assume that the clock source is not enabled. | ||
38 | */ | ||
39 | struct clk *clk_get(struct device *dev, const char *id); | ||
40 | |||
41 | /** | ||
42 | * clk_enable - inform the system when the clock source should be running. | ||
43 | * @clk: clock source | ||
44 | * | ||
45 | * If the clock can not be enabled/disabled, this should return success. | ||
46 | * | ||
47 | * Returns success (0) or negative errno. | ||
48 | */ | ||
49 | int clk_enable(struct clk *clk); | ||
50 | |||
51 | /** | ||
52 | * clk_disable - inform the system when the clock source is no longer required. | ||
53 | * @clk: clock source | ||
54 | * | ||
55 | * Inform the system that a clock source is no longer required by | ||
56 | * a driver and may be shut down. | ||
57 | * | ||
58 | * Implementation detail: if the clock source is shared between | ||
59 | * multiple drivers, clk_enable() calls must be balanced by the | ||
60 | * same number of clk_disable() calls for the clock source to be | ||
61 | * disabled. | ||
62 | */ | ||
63 | void clk_disable(struct clk *clk); | ||
64 | |||
65 | /** | ||
66 | * clk_get_rate - obtain the current clock rate (in Hz) for a clock source. | ||
67 | * This is only valid once the clock source has been enabled. | ||
68 | * @clk: clock source | ||
69 | */ | ||
70 | unsigned long clk_get_rate(struct clk *clk); | ||
71 | |||
72 | /** | ||
73 | * clk_put - "free" the clock source | ||
74 | * @clk: clock source | ||
75 | * | ||
76 | * Note: drivers must ensure that all clk_enable calls made on this | ||
77 | * clock source are balanced by clk_disable calls prior to calling | ||
78 | * this function. | ||
79 | */ | ||
80 | void clk_put(struct clk *clk); | ||
81 | |||
82 | |||
83 | /* | ||
84 | * The remaining APIs are optional for machine class support. | ||
85 | */ | ||
86 | |||
87 | |||
88 | /** | ||
89 | * clk_round_rate - adjust a rate to the exact rate a clock can provide | ||
90 | * @clk: clock source | ||
91 | * @rate: desired clock rate in Hz | ||
92 | * | ||
93 | * Returns rounded clock rate in Hz, or negative errno. | ||
94 | */ | ||
95 | long clk_round_rate(struct clk *clk, unsigned long rate); | ||
96 | |||
97 | /** | ||
98 | * clk_set_rate - set the clock rate for a clock source | ||
99 | * @clk: clock source | ||
100 | * @rate: desired clock rate in Hz | ||
101 | * | ||
102 | * Returns success (0) or negative errno. | ||
103 | */ | ||
104 | int clk_set_rate(struct clk *clk, unsigned long rate); | ||
105 | |||
106 | /** | ||
107 | * clk_set_parent - set the parent clock source for this clock | ||
108 | * @clk: clock source | ||
109 | * @parent: parent clock source | ||
110 | * | ||
111 | * Returns success (0) or negative errno. | ||
112 | */ | ||
113 | int clk_set_parent(struct clk *clk, struct clk *parent); | ||
114 | |||
115 | /** | ||
116 | * clk_get_parent - get the parent clock source for this clock | ||
117 | * @clk: clock source | ||
118 | * | ||
119 | * Returns struct clk corresponding to parent clock source, or | ||
120 | * valid IS_ERR() condition containing errno. | ||
121 | */ | ||
122 | struct clk *clk_get_parent(struct clk *clk); | ||
123 | |||
124 | #endif | ||
diff --git a/include/linux/cn_proc.h b/include/linux/cn_proc.h index 70ab56317380..1417de935057 100644 --- a/include/linux/cn_proc.h +++ b/include/linux/cn_proc.h | |||
@@ -26,6 +26,7 @@ | |||
26 | #define CN_PROC_H | 26 | #define CN_PROC_H |
27 | 27 | ||
28 | #include <linux/types.h> | 28 | #include <linux/types.h> |
29 | #include <linux/time.h> | ||
29 | #include <linux/connector.h> | 30 | #include <linux/connector.h> |
30 | 31 | ||
31 | /* | 32 | /* |
@@ -65,6 +66,7 @@ struct proc_event { | |||
65 | PROC_EVENT_EXIT = 0x80000000 | 66 | PROC_EVENT_EXIT = 0x80000000 |
66 | } what; | 67 | } what; |
67 | __u32 cpu; | 68 | __u32 cpu; |
69 | struct timespec timestamp; | ||
68 | union { /* must be last field of proc_event struct */ | 70 | union { /* must be last field of proc_event struct */ |
69 | struct { | 71 | struct { |
70 | __u32 err; | 72 | __u32 err; |
@@ -86,12 +88,12 @@ struct proc_event { | |||
86 | pid_t process_pid; | 88 | pid_t process_pid; |
87 | pid_t process_tgid; | 89 | pid_t process_tgid; |
88 | union { | 90 | union { |
89 | uid_t ruid; /* current->uid */ | 91 | __u32 ruid; /* task uid */ |
90 | gid_t rgid; /* current->gid */ | 92 | __u32 rgid; /* task gid */ |
91 | } r; | 93 | } r; |
92 | union { | 94 | union { |
93 | uid_t euid; | 95 | __u32 euid; |
94 | gid_t egid; | 96 | __u32 egid; |
95 | } e; | 97 | } e; |
96 | } id; | 98 | } id; |
97 | 99 | ||
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h index 152734055403..2e05e1e6b0e6 100644 --- a/include/linux/compiler-gcc.h +++ b/include/linux/compiler-gcc.h | |||
@@ -15,3 +15,12 @@ | |||
15 | ({ unsigned long __ptr; \ | 15 | ({ unsigned long __ptr; \ |
16 | __asm__ ("" : "=g"(__ptr) : "0"(ptr)); \ | 16 | __asm__ ("" : "=g"(__ptr) : "0"(ptr)); \ |
17 | (typeof(ptr)) (__ptr + (off)); }) | 17 | (typeof(ptr)) (__ptr + (off)); }) |
18 | |||
19 | |||
20 | #define inline inline __attribute__((always_inline)) | ||
21 | #define __inline__ __inline__ __attribute__((always_inline)) | ||
22 | #define __inline __inline __attribute__((always_inline)) | ||
23 | #define __deprecated __attribute__((deprecated)) | ||
24 | #define noinline __attribute__((noinline)) | ||
25 | #define __attribute_pure__ __attribute__((pure)) | ||
26 | #define __attribute_const__ __attribute__((__const__)) | ||
diff --git a/include/linux/compiler-gcc2.h b/include/linux/compiler-gcc2.h deleted file mode 100644 index ebed17660c5f..000000000000 --- a/include/linux/compiler-gcc2.h +++ /dev/null | |||
@@ -1,29 +0,0 @@ | |||
1 | /* Never include this file directly. Include <linux/compiler.h> instead. */ | ||
2 | |||
3 | /* These definitions are for GCC v2.x. */ | ||
4 | |||
5 | /* Somewhere in the middle of the GCC 2.96 development cycle, we implemented | ||
6 | a mechanism by which the user can annotate likely branch directions and | ||
7 | expect the blocks to be reordered appropriately. Define __builtin_expect | ||
8 | to nothing for earlier compilers. */ | ||
9 | #include <linux/compiler-gcc.h> | ||
10 | |||
11 | #if __GNUC_MINOR__ < 96 | ||
12 | # define __builtin_expect(x, expected_value) (x) | ||
13 | #endif | ||
14 | |||
15 | #define __attribute_used__ __attribute__((__unused__)) | ||
16 | |||
17 | /* | ||
18 | * The attribute `pure' is not implemented in GCC versions earlier | ||
19 | * than 2.96. | ||
20 | */ | ||
21 | #if __GNUC_MINOR__ >= 96 | ||
22 | # define __attribute_pure__ __attribute__((pure)) | ||
23 | # define __attribute_const__ __attribute__((__const__)) | ||
24 | #endif | ||
25 | |||
26 | /* GCC 2.95.x/2.96 recognize __va_copy, but not va_copy. Actually later GCC's | ||
27 | * define both va_copy and __va_copy, but the latter may go away, so limit this | ||
28 | * to this header */ | ||
29 | #define va_copy __va_copy | ||
diff --git a/include/linux/compiler-gcc3.h b/include/linux/compiler-gcc3.h index a6fa615afab5..4209082ee934 100644 --- a/include/linux/compiler-gcc3.h +++ b/include/linux/compiler-gcc3.h | |||
@@ -3,29 +3,12 @@ | |||
3 | /* These definitions are for GCC v3.x. */ | 3 | /* These definitions are for GCC v3.x. */ |
4 | #include <linux/compiler-gcc.h> | 4 | #include <linux/compiler-gcc.h> |
5 | 5 | ||
6 | #if __GNUC_MINOR__ >= 1 | ||
7 | # define inline inline __attribute__((always_inline)) | ||
8 | # define __inline__ __inline__ __attribute__((always_inline)) | ||
9 | # define __inline __inline __attribute__((always_inline)) | ||
10 | #endif | ||
11 | |||
12 | #if __GNUC_MINOR__ > 0 | ||
13 | # define __deprecated __attribute__((deprecated)) | ||
14 | #endif | ||
15 | |||
16 | #if __GNUC_MINOR__ >= 3 | 6 | #if __GNUC_MINOR__ >= 3 |
17 | # define __attribute_used__ __attribute__((__used__)) | 7 | # define __attribute_used__ __attribute__((__used__)) |
18 | #else | 8 | #else |
19 | # define __attribute_used__ __attribute__((__unused__)) | 9 | # define __attribute_used__ __attribute__((__unused__)) |
20 | #endif | 10 | #endif |
21 | 11 | ||
22 | #define __attribute_pure__ __attribute__((pure)) | ||
23 | #define __attribute_const__ __attribute__((__const__)) | ||
24 | |||
25 | #if __GNUC_MINOR__ >= 1 | ||
26 | #define noinline __attribute__((noinline)) | ||
27 | #endif | ||
28 | |||
29 | #if __GNUC_MINOR__ >= 4 | 12 | #if __GNUC_MINOR__ >= 4 |
30 | #define __must_check __attribute__((warn_unused_result)) | 13 | #define __must_check __attribute__((warn_unused_result)) |
31 | #endif | 14 | #endif |
diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h index 53686c037a06..e913e9beaf69 100644 --- a/include/linux/compiler-gcc4.h +++ b/include/linux/compiler-gcc4.h | |||
@@ -3,14 +3,7 @@ | |||
3 | /* These definitions are for GCC v4.x. */ | 3 | /* These definitions are for GCC v4.x. */ |
4 | #include <linux/compiler-gcc.h> | 4 | #include <linux/compiler-gcc.h> |
5 | 5 | ||
6 | #define inline inline __attribute__((always_inline)) | ||
7 | #define __inline__ __inline__ __attribute__((always_inline)) | ||
8 | #define __inline __inline __attribute__((always_inline)) | ||
9 | #define __deprecated __attribute__((deprecated)) | ||
10 | #define __attribute_used__ __attribute__((__used__)) | 6 | #define __attribute_used__ __attribute__((__used__)) |
11 | #define __attribute_pure__ __attribute__((pure)) | ||
12 | #define __attribute_const__ __attribute__((__const__)) | ||
13 | #define noinline __attribute__((noinline)) | ||
14 | #define __must_check __attribute__((warn_unused_result)) | 7 | #define __must_check __attribute__((warn_unused_result)) |
15 | #define __compiler_offsetof(a,b) __builtin_offsetof(a,b) | 8 | #define __compiler_offsetof(a,b) __builtin_offsetof(a,b) |
16 | 9 | ||
diff --git a/include/linux/compiler.h b/include/linux/compiler.h index d7378215b851..f23d3c6fc2c0 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h | |||
@@ -42,8 +42,6 @@ extern void __chk_io_ptr(void __iomem *); | |||
42 | # include <linux/compiler-gcc4.h> | 42 | # include <linux/compiler-gcc4.h> |
43 | #elif __GNUC__ == 3 | 43 | #elif __GNUC__ == 3 |
44 | # include <linux/compiler-gcc3.h> | 44 | # include <linux/compiler-gcc3.h> |
45 | #elif __GNUC__ == 2 | ||
46 | # include <linux/compiler-gcc2.h> | ||
47 | #else | 45 | #else |
48 | # error Sorry, your compiler is too old/not recognized. | 46 | # error Sorry, your compiler is too old/not recognized. |
49 | #endif | 47 | #endif |
diff --git a/include/linux/configfs.h b/include/linux/configfs.h new file mode 100644 index 000000000000..acffb8c9073a --- /dev/null +++ b/include/linux/configfs.h | |||
@@ -0,0 +1,205 @@ | |||
1 | /* -*- mode: c; c-basic-offset: 8; -*- | ||
2 | * vim: noexpandtab sw=8 ts=8 sts=0: | ||
3 | * | ||
4 | * configfs.h - definitions for the device driver filesystem | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or | ||
7 | * modify it under the terms of the GNU General Public | ||
8 | * License as published by the Free Software Foundation; either | ||
9 | * version 2 of the License, or (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 GNU | ||
14 | * General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public | ||
17 | * License along with this program; if not, write to the | ||
18 | * Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
19 | * Boston, MA 021110-1307, USA. | ||
20 | * | ||
21 | * Based on sysfs: | ||
22 | * sysfs is Copyright (C) 2001, 2002, 2003 Patrick Mochel | ||
23 | * | ||
24 | * Based on kobject.h: | ||
25 | * Copyright (c) 2002-2003 Patrick Mochel | ||
26 | * Copyright (c) 2002-2003 Open Source Development Labs | ||
27 | * | ||
28 | * configfs Copyright (C) 2005 Oracle. All rights reserved. | ||
29 | * | ||
30 | * Please read Documentation/filesystems/configfs.txt before using the | ||
31 | * configfs interface, ESPECIALLY the parts about reference counts and | ||
32 | * item destructors. | ||
33 | */ | ||
34 | |||
35 | #ifndef _CONFIGFS_H_ | ||
36 | #define _CONFIGFS_H_ | ||
37 | |||
38 | #ifdef __KERNEL__ | ||
39 | |||
40 | #include <linux/types.h> | ||
41 | #include <linux/list.h> | ||
42 | #include <linux/kref.h> | ||
43 | |||
44 | #include <asm/atomic.h> | ||
45 | #include <asm/semaphore.h> | ||
46 | |||
47 | #define CONFIGFS_ITEM_NAME_LEN 20 | ||
48 | |||
49 | struct module; | ||
50 | |||
51 | struct configfs_item_operations; | ||
52 | struct configfs_group_operations; | ||
53 | struct configfs_attribute; | ||
54 | struct configfs_subsystem; | ||
55 | |||
56 | struct config_item { | ||
57 | char *ci_name; | ||
58 | char ci_namebuf[CONFIGFS_ITEM_NAME_LEN]; | ||
59 | struct kref ci_kref; | ||
60 | struct list_head ci_entry; | ||
61 | struct config_item *ci_parent; | ||
62 | struct config_group *ci_group; | ||
63 | struct config_item_type *ci_type; | ||
64 | struct dentry *ci_dentry; | ||
65 | }; | ||
66 | |||
67 | extern int config_item_set_name(struct config_item *, const char *, ...); | ||
68 | |||
69 | static inline char *config_item_name(struct config_item * item) | ||
70 | { | ||
71 | return item->ci_name; | ||
72 | } | ||
73 | |||
74 | extern void config_item_init(struct config_item *); | ||
75 | extern void config_item_init_type_name(struct config_item *item, | ||
76 | const char *name, | ||
77 | struct config_item_type *type); | ||
78 | extern void config_item_cleanup(struct config_item *); | ||
79 | |||
80 | extern struct config_item * config_item_get(struct config_item *); | ||
81 | extern void config_item_put(struct config_item *); | ||
82 | |||
83 | struct config_item_type { | ||
84 | struct module *ct_owner; | ||
85 | struct configfs_item_operations *ct_item_ops; | ||
86 | struct configfs_group_operations *ct_group_ops; | ||
87 | struct configfs_attribute **ct_attrs; | ||
88 | }; | ||
89 | |||
90 | |||
91 | /** | ||
92 | * group - a group of config_items of a specific type, belonging | ||
93 | * to a specific subsystem. | ||
94 | */ | ||
95 | |||
96 | struct config_group { | ||
97 | struct config_item cg_item; | ||
98 | struct list_head cg_children; | ||
99 | struct configfs_subsystem *cg_subsys; | ||
100 | struct config_group **default_groups; | ||
101 | }; | ||
102 | |||
103 | |||
104 | extern void config_group_init(struct config_group *group); | ||
105 | extern void config_group_init_type_name(struct config_group *group, | ||
106 | const char *name, | ||
107 | struct config_item_type *type); | ||
108 | |||
109 | |||
110 | static inline struct config_group *to_config_group(struct config_item *item) | ||
111 | { | ||
112 | return item ? container_of(item,struct config_group,cg_item) : NULL; | ||
113 | } | ||
114 | |||
115 | static inline struct config_group *config_group_get(struct config_group *group) | ||
116 | { | ||
117 | return group ? to_config_group(config_item_get(&group->cg_item)) : NULL; | ||
118 | } | ||
119 | |||
120 | static inline void config_group_put(struct config_group *group) | ||
121 | { | ||
122 | config_item_put(&group->cg_item); | ||
123 | } | ||
124 | |||
125 | extern struct config_item *config_group_find_obj(struct config_group *, const char *); | ||
126 | |||
127 | |||
128 | struct configfs_attribute { | ||
129 | char *ca_name; | ||
130 | struct module *ca_owner; | ||
131 | mode_t ca_mode; | ||
132 | }; | ||
133 | |||
134 | |||
135 | /* | ||
136 | * If allow_link() exists, the item can symlink(2) out to other | ||
137 | * items. If the item is a group, it may support mkdir(2). | ||
138 | * Groups supply one of make_group() and make_item(). If the | ||
139 | * group supports make_group(), one can create group children. If it | ||
140 | * supports make_item(), one can create config_item children. If it has | ||
141 | * default_groups on group->default_groups, it has automatically created | ||
142 | * group children. default_groups may coexist alongsize make_group() or | ||
143 | * make_item(), but if the group wishes to have only default_groups | ||
144 | * children (disallowing mkdir(2)), it need not provide either function. | ||
145 | * If the group has commit(), it supports pending and commited (active) | ||
146 | * items. | ||
147 | */ | ||
148 | struct configfs_item_operations { | ||
149 | void (*release)(struct config_item *); | ||
150 | ssize_t (*show_attribute)(struct config_item *, struct configfs_attribute *,char *); | ||
151 | ssize_t (*store_attribute)(struct config_item *,struct configfs_attribute *,const char *, size_t); | ||
152 | int (*allow_link)(struct config_item *src, struct config_item *target); | ||
153 | int (*drop_link)(struct config_item *src, struct config_item *target); | ||
154 | }; | ||
155 | |||
156 | struct configfs_group_operations { | ||
157 | struct config_item *(*make_item)(struct config_group *group, const char *name); | ||
158 | struct config_group *(*make_group)(struct config_group *group, const char *name); | ||
159 | int (*commit_item)(struct config_item *item); | ||
160 | void (*drop_item)(struct config_group *group, struct config_item *item); | ||
161 | }; | ||
162 | |||
163 | |||
164 | |||
165 | /** | ||
166 | * Use these macros to make defining attributes easier. See include/linux/device.h | ||
167 | * for examples.. | ||
168 | */ | ||
169 | |||
170 | #if 0 | ||
171 | #define __ATTR(_name,_mode,_show,_store) { \ | ||
172 | .attr = {.ca_name = __stringify(_name), .ca_mode = _mode, .ca_owner = THIS_MODULE }, \ | ||
173 | .show = _show, \ | ||
174 | .store = _store, \ | ||
175 | } | ||
176 | |||
177 | #define __ATTR_RO(_name) { \ | ||
178 | .attr = { .ca_name = __stringify(_name), .ca_mode = 0444, .ca_owner = THIS_MODULE }, \ | ||
179 | .show = _name##_show, \ | ||
180 | } | ||
181 | |||
182 | #define __ATTR_NULL { .attr = { .name = NULL } } | ||
183 | |||
184 | #define attr_name(_attr) (_attr).attr.name | ||
185 | #endif | ||
186 | |||
187 | |||
188 | struct configfs_subsystem { | ||
189 | struct config_group su_group; | ||
190 | struct semaphore su_sem; | ||
191 | }; | ||
192 | |||
193 | static inline struct configfs_subsystem *to_configfs_subsystem(struct config_group *group) | ||
194 | { | ||
195 | return group ? | ||
196 | container_of(group, struct configfs_subsystem, su_group) : | ||
197 | NULL; | ||
198 | } | ||
199 | |||
200 | int configfs_register_subsystem(struct configfs_subsystem *subsys); | ||
201 | void configfs_unregister_subsystem(struct configfs_subsystem *subsys); | ||
202 | |||
203 | #endif /* __KERNEL__ */ | ||
204 | |||
205 | #endif /* _CONFIGFS_H_ */ | ||
diff --git a/include/linux/cpu.h b/include/linux/cpu.h index 43c44530ef9d..0ed1d4853c69 100644 --- a/include/linux/cpu.h +++ b/include/linux/cpu.h | |||
@@ -65,10 +65,9 @@ extern struct sysdev_class cpu_sysdev_class; | |||
65 | 65 | ||
66 | #ifdef CONFIG_HOTPLUG_CPU | 66 | #ifdef CONFIG_HOTPLUG_CPU |
67 | /* Stop CPUs going up and down. */ | 67 | /* Stop CPUs going up and down. */ |
68 | extern struct semaphore cpucontrol; | 68 | extern void lock_cpu_hotplug(void); |
69 | #define lock_cpu_hotplug() down(&cpucontrol) | 69 | extern void unlock_cpu_hotplug(void); |
70 | #define unlock_cpu_hotplug() up(&cpucontrol) | 70 | extern int lock_cpu_hotplug_interruptible(void); |
71 | #define lock_cpu_hotplug_interruptible() down_interruptible(&cpucontrol) | ||
72 | #define hotcpu_notifier(fn, pri) { \ | 71 | #define hotcpu_notifier(fn, pri) { \ |
73 | static struct notifier_block fn##_nb = \ | 72 | static struct notifier_block fn##_nb = \ |
74 | { .notifier_call = fn, .priority = pri }; \ | 73 | { .notifier_call = fn, .priority = pri }; \ |
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index d068176b7ad7..c31650df9241 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h | |||
@@ -256,6 +256,16 @@ int cpufreq_update_policy(unsigned int cpu); | |||
256 | /* query the current CPU frequency (in kHz). If zero, cpufreq couldn't detect it */ | 256 | /* query the current CPU frequency (in kHz). If zero, cpufreq couldn't detect it */ |
257 | unsigned int cpufreq_get(unsigned int cpu); | 257 | unsigned int cpufreq_get(unsigned int cpu); |
258 | 258 | ||
259 | /* query the last known CPU freq (in kHz). If zero, cpufreq couldn't detect it */ | ||
260 | #ifdef CONFIG_CPU_FREQ | ||
261 | unsigned int cpufreq_quick_get(unsigned int cpu); | ||
262 | #else | ||
263 | static inline unsigned int cpufreq_quick_get(unsigned int cpu) | ||
264 | { | ||
265 | return 0; | ||
266 | } | ||
267 | #endif | ||
268 | |||
259 | 269 | ||
260 | /********************************************************************* | 270 | /********************************************************************* |
261 | * CPUFREQ DEFAULT GOVERNOR * | 271 | * CPUFREQ DEFAULT GOVERNOR * |
diff --git a/include/linux/cpuset.h b/include/linux/cpuset.h index 6e2deef96b34..c472f972bd6d 100644 --- a/include/linux/cpuset.h +++ b/include/linux/cpuset.h | |||
@@ -14,22 +14,43 @@ | |||
14 | 14 | ||
15 | #ifdef CONFIG_CPUSETS | 15 | #ifdef CONFIG_CPUSETS |
16 | 16 | ||
17 | extern int number_of_cpusets; /* How many cpusets are defined in system? */ | ||
18 | |||
19 | extern int cpuset_init_early(void); | ||
17 | extern int cpuset_init(void); | 20 | extern int cpuset_init(void); |
18 | extern void cpuset_init_smp(void); | 21 | extern void cpuset_init_smp(void); |
19 | extern void cpuset_fork(struct task_struct *p); | 22 | extern void cpuset_fork(struct task_struct *p); |
20 | extern void cpuset_exit(struct task_struct *p); | 23 | extern void cpuset_exit(struct task_struct *p); |
21 | extern cpumask_t cpuset_cpus_allowed(const struct task_struct *p); | 24 | extern cpumask_t cpuset_cpus_allowed(struct task_struct *p); |
25 | extern nodemask_t cpuset_mems_allowed(struct task_struct *p); | ||
22 | void cpuset_init_current_mems_allowed(void); | 26 | void cpuset_init_current_mems_allowed(void); |
23 | void cpuset_update_current_mems_allowed(void); | 27 | void cpuset_update_task_memory_state(void); |
24 | void cpuset_restrict_to_mems_allowed(unsigned long *nodes); | 28 | #define cpuset_nodes_subset_current_mems_allowed(nodes) \ |
29 | nodes_subset((nodes), current->mems_allowed) | ||
25 | int cpuset_zonelist_valid_mems_allowed(struct zonelist *zl); | 30 | int cpuset_zonelist_valid_mems_allowed(struct zonelist *zl); |
26 | extern int cpuset_zone_allowed(struct zone *z, gfp_t gfp_mask); | 31 | |
32 | extern int __cpuset_zone_allowed(struct zone *z, gfp_t gfp_mask); | ||
33 | static int inline cpuset_zone_allowed(struct zone *z, gfp_t gfp_mask) | ||
34 | { | ||
35 | return number_of_cpusets <= 1 || __cpuset_zone_allowed(z, gfp_mask); | ||
36 | } | ||
37 | |||
27 | extern int cpuset_excl_nodes_overlap(const struct task_struct *p); | 38 | extern int cpuset_excl_nodes_overlap(const struct task_struct *p); |
39 | |||
40 | #define cpuset_memory_pressure_bump() \ | ||
41 | do { \ | ||
42 | if (cpuset_memory_pressure_enabled) \ | ||
43 | __cpuset_memory_pressure_bump(); \ | ||
44 | } while (0) | ||
45 | extern int cpuset_memory_pressure_enabled; | ||
46 | extern void __cpuset_memory_pressure_bump(void); | ||
47 | |||
28 | extern struct file_operations proc_cpuset_operations; | 48 | extern struct file_operations proc_cpuset_operations; |
29 | extern char *cpuset_task_status_allowed(struct task_struct *task, char *buffer); | 49 | extern char *cpuset_task_status_allowed(struct task_struct *task, char *buffer); |
30 | 50 | ||
31 | #else /* !CONFIG_CPUSETS */ | 51 | #else /* !CONFIG_CPUSETS */ |
32 | 52 | ||
53 | static inline int cpuset_init_early(void) { return 0; } | ||
33 | static inline int cpuset_init(void) { return 0; } | 54 | static inline int cpuset_init(void) { return 0; } |
34 | static inline void cpuset_init_smp(void) {} | 55 | static inline void cpuset_init_smp(void) {} |
35 | static inline void cpuset_fork(struct task_struct *p) {} | 56 | static inline void cpuset_fork(struct task_struct *p) {} |
@@ -40,9 +61,14 @@ static inline cpumask_t cpuset_cpus_allowed(struct task_struct *p) | |||
40 | return cpu_possible_map; | 61 | return cpu_possible_map; |
41 | } | 62 | } |
42 | 63 | ||
64 | static inline nodemask_t cpuset_mems_allowed(struct task_struct *p) | ||
65 | { | ||
66 | return node_possible_map; | ||
67 | } | ||
68 | |||
43 | static inline void cpuset_init_current_mems_allowed(void) {} | 69 | static inline void cpuset_init_current_mems_allowed(void) {} |
44 | static inline void cpuset_update_current_mems_allowed(void) {} | 70 | static inline void cpuset_update_task_memory_state(void) {} |
45 | static inline void cpuset_restrict_to_mems_allowed(unsigned long *nodes) {} | 71 | #define cpuset_nodes_subset_current_mems_allowed(nodes) (1) |
46 | 72 | ||
47 | static inline int cpuset_zonelist_valid_mems_allowed(struct zonelist *zl) | 73 | static inline int cpuset_zonelist_valid_mems_allowed(struct zonelist *zl) |
48 | { | 74 | { |
@@ -59,6 +85,8 @@ static inline int cpuset_excl_nodes_overlap(const struct task_struct *p) | |||
59 | return 1; | 85 | return 1; |
60 | } | 86 | } |
61 | 87 | ||
88 | static inline void cpuset_memory_pressure_bump(void) {} | ||
89 | |||
62 | static inline char *cpuset_task_status_allowed(struct task_struct *task, | 90 | static inline char *cpuset_task_status_allowed(struct task_struct *task, |
63 | char *buffer) | 91 | char *buffer) |
64 | { | 92 | { |
diff --git a/include/linux/cycx_x25.h b/include/linux/cycx_x25.h index b10a7f3a8cac..f7a906583463 100644 --- a/include/linux/cycx_x25.h +++ b/include/linux/cycx_x25.h | |||
@@ -38,11 +38,11 @@ extern unsigned int cycx_debug; | |||
38 | /* Data Structures */ | 38 | /* Data Structures */ |
39 | /* X.25 Command Block. */ | 39 | /* X.25 Command Block. */ |
40 | struct cycx_x25_cmd { | 40 | struct cycx_x25_cmd { |
41 | u16 command PACKED; | 41 | u16 command; |
42 | u16 link PACKED; /* values: 0 or 1 */ | 42 | u16 link; /* values: 0 or 1 */ |
43 | u16 len PACKED; /* values: 0 thru 0x205 (517) */ | 43 | u16 len; /* values: 0 thru 0x205 (517) */ |
44 | u32 buf PACKED; | 44 | u32 buf; |
45 | }; | 45 | } PACKED; |
46 | 46 | ||
47 | /* Defines for the 'command' field. */ | 47 | /* Defines for the 'command' field. */ |
48 | #define X25_CONNECT_REQUEST 0x4401 | 48 | #define X25_CONNECT_REQUEST 0x4401 |
@@ -92,34 +92,34 @@ struct cycx_x25_cmd { | |||
92 | * @flags - see dosx25.doc, in portuguese, for details | 92 | * @flags - see dosx25.doc, in portuguese, for details |
93 | */ | 93 | */ |
94 | struct cycx_x25_config { | 94 | struct cycx_x25_config { |
95 | u8 link PACKED; | 95 | u8 link; |
96 | u8 speed PACKED; | 96 | u8 speed; |
97 | u8 clock PACKED; | 97 | u8 clock; |
98 | u8 n2 PACKED; | 98 | u8 n2; |
99 | u8 n2win PACKED; | 99 | u8 n2win; |
100 | u8 n3win PACKED; | 100 | u8 n3win; |
101 | u8 nvc PACKED; | 101 | u8 nvc; |
102 | u8 pktlen PACKED; | 102 | u8 pktlen; |
103 | u8 locaddr PACKED; | 103 | u8 locaddr; |
104 | u8 remaddr PACKED; | 104 | u8 remaddr; |
105 | u16 t1 PACKED; | 105 | u16 t1; |
106 | u16 t2 PACKED; | 106 | u16 t2; |
107 | u8 t21 PACKED; | 107 | u8 t21; |
108 | u8 npvc PACKED; | 108 | u8 npvc; |
109 | u8 t23 PACKED; | 109 | u8 t23; |
110 | u8 flags PACKED; | 110 | u8 flags; |
111 | }; | 111 | } PACKED; |
112 | 112 | ||
113 | struct cycx_x25_stats { | 113 | struct cycx_x25_stats { |
114 | u16 rx_crc_errors PACKED; | 114 | u16 rx_crc_errors; |
115 | u16 rx_over_errors PACKED; | 115 | u16 rx_over_errors; |
116 | u16 n2_tx_frames PACKED; | 116 | u16 n2_tx_frames; |
117 | u16 n2_rx_frames PACKED; | 117 | u16 n2_rx_frames; |
118 | u16 tx_timeouts PACKED; | 118 | u16 tx_timeouts; |
119 | u16 rx_timeouts PACKED; | 119 | u16 rx_timeouts; |
120 | u16 n3_tx_packets PACKED; | 120 | u16 n3_tx_packets; |
121 | u16 n3_rx_packets PACKED; | 121 | u16 n3_rx_packets; |
122 | u16 tx_aborts PACKED; | 122 | u16 tx_aborts; |
123 | u16 rx_aborts PACKED; | 123 | u16 rx_aborts; |
124 | }; | 124 | } PACKED; |
125 | #endif /* _CYCX_X25_H */ | 125 | #endif /* _CYCX_X25_H */ |
diff --git a/include/linux/dcache.h b/include/linux/dcache.h index 46a2ba617595..a3ed5e059d47 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h | |||
@@ -95,14 +95,19 @@ struct dentry { | |||
95 | struct qstr d_name; | 95 | struct qstr d_name; |
96 | 96 | ||
97 | struct list_head d_lru; /* LRU list */ | 97 | struct list_head d_lru; /* LRU list */ |
98 | struct list_head d_child; /* child of parent list */ | 98 | /* |
99 | * d_child and d_rcu can share memory | ||
100 | */ | ||
101 | union { | ||
102 | struct list_head d_child; /* child of parent list */ | ||
103 | struct rcu_head d_rcu; | ||
104 | } d_u; | ||
99 | struct list_head d_subdirs; /* our children */ | 105 | struct list_head d_subdirs; /* our children */ |
100 | struct list_head d_alias; /* inode alias list */ | 106 | struct list_head d_alias; /* inode alias list */ |
101 | unsigned long d_time; /* used by d_revalidate */ | 107 | unsigned long d_time; /* used by d_revalidate */ |
102 | struct dentry_operations *d_op; | 108 | struct dentry_operations *d_op; |
103 | struct super_block *d_sb; /* The root of the dentry tree */ | 109 | struct super_block *d_sb; /* The root of the dentry tree */ |
104 | void *d_fsdata; /* fs-specific data */ | 110 | void *d_fsdata; /* fs-specific data */ |
105 | struct rcu_head d_rcu; | ||
106 | struct dcookie_struct *d_cookie; /* cookie, if any */ | 111 | struct dcookie_struct *d_cookie; /* cookie, if any */ |
107 | int d_mounted; | 112 | int d_mounted; |
108 | unsigned char d_iname[DNAME_INLINE_LEN_MIN]; /* small names */ | 113 | unsigned char d_iname[DNAME_INLINE_LEN_MIN]; /* small names */ |
diff --git a/include/linux/dccp.h b/include/linux/dccp.h index 71fab4311e92..088529f54965 100644 --- a/include/linux/dccp.h +++ b/include/linux/dccp.h | |||
@@ -192,10 +192,9 @@ enum { | |||
192 | #include <linux/workqueue.h> | 192 | #include <linux/workqueue.h> |
193 | 193 | ||
194 | #include <net/inet_connection_sock.h> | 194 | #include <net/inet_connection_sock.h> |
195 | #include <net/inet_sock.h> | ||
195 | #include <net/inet_timewait_sock.h> | 196 | #include <net/inet_timewait_sock.h> |
196 | #include <net/sock.h> | ||
197 | #include <net/tcp_states.h> | 197 | #include <net/tcp_states.h> |
198 | #include <net/tcp.h> | ||
199 | 198 | ||
200 | enum dccp_state { | 199 | enum dccp_state { |
201 | DCCP_OPEN = TCP_ESTABLISHED, | 200 | DCCP_OPEN = TCP_ESTABLISHED, |
@@ -408,8 +407,6 @@ struct dccp_ackvec; | |||
408 | * @dccps_gar - greatest valid ack number received on a non-Sync; initialized to %dccps_iss | 407 | * @dccps_gar - greatest valid ack number received on a non-Sync; initialized to %dccps_iss |
409 | * @dccps_timestamp_time - time of latest TIMESTAMP option | 408 | * @dccps_timestamp_time - time of latest TIMESTAMP option |
410 | * @dccps_timestamp_echo - latest timestamp received on a TIMESTAMP option | 409 | * @dccps_timestamp_echo - latest timestamp received on a TIMESTAMP option |
411 | * @dccps_ext_header_len - network protocol overhead (IP/IPv6 options) | ||
412 | * @dccps_pmtu_cookie - Last pmtu seen by socket | ||
413 | * @dccps_packet_size - Set thru setsockopt | 410 | * @dccps_packet_size - Set thru setsockopt |
414 | * @dccps_role - Role of this sock, one of %dccp_role | 411 | * @dccps_role - Role of this sock, one of %dccp_role |
415 | * @dccps_ndp_count - number of Non Data Packets since last data packet | 412 | * @dccps_ndp_count - number of Non Data Packets since last data packet |
@@ -434,8 +431,6 @@ struct dccp_sock { | |||
434 | __u32 dccps_timestamp_echo; | 431 | __u32 dccps_timestamp_echo; |
435 | __u32 dccps_packet_size; | 432 | __u32 dccps_packet_size; |
436 | unsigned long dccps_ndp_count; | 433 | unsigned long dccps_ndp_count; |
437 | __u16 dccps_ext_header_len; | ||
438 | __u32 dccps_pmtu_cookie; | ||
439 | __u32 dccps_mss_cache; | 434 | __u32 dccps_mss_cache; |
440 | struct dccp_options dccps_options; | 435 | struct dccp_options dccps_options; |
441 | struct dccp_ackvec *dccps_hc_rx_ackvec; | 436 | struct dccp_ackvec *dccps_hc_rx_ackvec; |
diff --git a/include/linux/device.h b/include/linux/device.h index 17cbc6db67b4..0cdee78e5ce1 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -47,8 +47,8 @@ struct bus_type { | |||
47 | struct driver_attribute * drv_attrs; | 47 | struct driver_attribute * drv_attrs; |
48 | 48 | ||
49 | int (*match)(struct device * dev, struct device_driver * drv); | 49 | int (*match)(struct device * dev, struct device_driver * drv); |
50 | int (*hotplug) (struct device *dev, char **envp, | 50 | int (*uevent)(struct device *dev, char **envp, |
51 | int num_envp, char *buffer, int buffer_size); | 51 | int num_envp, char *buffer, int buffer_size); |
52 | int (*suspend)(struct device * dev, pm_message_t state); | 52 | int (*suspend)(struct device * dev, pm_message_t state); |
53 | int (*resume)(struct device * dev); | 53 | int (*resume)(struct device * dev); |
54 | }; | 54 | }; |
@@ -151,7 +151,7 @@ struct class { | |||
151 | struct class_attribute * class_attrs; | 151 | struct class_attribute * class_attrs; |
152 | struct class_device_attribute * class_dev_attrs; | 152 | struct class_device_attribute * class_dev_attrs; |
153 | 153 | ||
154 | int (*hotplug)(struct class_device *dev, char **envp, | 154 | int (*uevent)(struct class_device *dev, char **envp, |
155 | int num_envp, char *buffer, int buffer_size); | 155 | int num_envp, char *buffer, int buffer_size); |
156 | 156 | ||
157 | void (*release)(struct class_device *dev); | 157 | void (*release)(struct class_device *dev); |
@@ -209,9 +209,9 @@ extern int class_device_create_file(struct class_device *, | |||
209 | * set, this will be called instead of the class specific release function. | 209 | * set, this will be called instead of the class specific release function. |
210 | * Only use this if you want to override the default release function, like | 210 | * Only use this if you want to override the default release function, like |
211 | * when you are nesting class_device structures. | 211 | * when you are nesting class_device structures. |
212 | * @hotplug: pointer to a hotplug function for this struct class_device. If | 212 | * @uevent: pointer to a uevent function for this struct class_device. If |
213 | * set, this will be called instead of the class specific hotplug function. | 213 | * set, this will be called instead of the class specific uevent function. |
214 | * Only use this if you want to override the default hotplug function, like | 214 | * Only use this if you want to override the default uevent function, like |
215 | * when you are nesting class_device structures. | 215 | * when you are nesting class_device structures. |
216 | */ | 216 | */ |
217 | struct class_device { | 217 | struct class_device { |
@@ -227,7 +227,7 @@ struct class_device { | |||
227 | struct class_device *parent; /* parent of this child device, if there is one */ | 227 | struct class_device *parent; /* parent of this child device, if there is one */ |
228 | 228 | ||
229 | void (*release)(struct class_device *dev); | 229 | void (*release)(struct class_device *dev); |
230 | int (*hotplug)(struct class_device *dev, char **envp, | 230 | int (*uevent)(struct class_device *dev, char **envp, |
231 | int num_envp, char *buffer, int buffer_size); | 231 | int num_envp, char *buffer, int buffer_size); |
232 | char class_id[BUS_ID_SIZE]; /* unique to this class */ | 232 | char class_id[BUS_ID_SIZE]; /* unique to this class */ |
233 | }; | 233 | }; |
diff --git a/include/linux/dm-ioctl.h b/include/linux/dm-ioctl.h index f5eb6b6cd109..fa75ba0d635e 100644 --- a/include/linux/dm-ioctl.h +++ b/include/linux/dm-ioctl.h | |||
@@ -272,9 +272,9 @@ typedef char ioctl_struct[308]; | |||
272 | #define DM_TARGET_MSG _IOWR(DM_IOCTL, DM_TARGET_MSG_CMD, struct dm_ioctl) | 272 | #define DM_TARGET_MSG _IOWR(DM_IOCTL, DM_TARGET_MSG_CMD, struct dm_ioctl) |
273 | 273 | ||
274 | #define DM_VERSION_MAJOR 4 | 274 | #define DM_VERSION_MAJOR 4 |
275 | #define DM_VERSION_MINOR 4 | 275 | #define DM_VERSION_MINOR 5 |
276 | #define DM_VERSION_PATCHLEVEL 0 | 276 | #define DM_VERSION_PATCHLEVEL 0 |
277 | #define DM_VERSION_EXTRA "-ioctl (2005-01-12)" | 277 | #define DM_VERSION_EXTRA "-ioctl (2005-10-04)" |
278 | 278 | ||
279 | /* Status bits */ | 279 | /* Status bits */ |
280 | #define DM_READONLY_FLAG (1 << 0) /* In/Out */ | 280 | #define DM_READONLY_FLAG (1 << 0) /* In/Out */ |
@@ -301,8 +301,13 @@ typedef char ioctl_struct[308]; | |||
301 | #define DM_BUFFER_FULL_FLAG (1 << 8) /* Out */ | 301 | #define DM_BUFFER_FULL_FLAG (1 << 8) /* Out */ |
302 | 302 | ||
303 | /* | 303 | /* |
304 | * Set this to improve performance when you aren't going to use open_count | 304 | * Set this to improve performance when you aren't going to use open_count. |
305 | */ | 305 | */ |
306 | #define DM_SKIP_BDGET_FLAG (1 << 9) /* In */ | 306 | #define DM_SKIP_BDGET_FLAG (1 << 9) /* In */ |
307 | 307 | ||
308 | /* | ||
309 | * Set this to avoid attempting to freeze any filesystem when suspending. | ||
310 | */ | ||
311 | #define DM_SKIP_LOCKFS_FLAG (1 << 10) /* In */ | ||
312 | |||
308 | #endif /* _LINUX_DM_IOCTL_H */ | 313 | #endif /* _LINUX_DM_IOCTL_H */ |
diff --git a/include/linux/dvb/audio.h b/include/linux/dvb/audio.h index cc314443f1c4..2b8797084685 100644 --- a/include/linux/dvb/audio.h +++ b/include/linux/dvb/audio.h | |||
@@ -32,39 +32,39 @@ | |||
32 | 32 | ||
33 | 33 | ||
34 | typedef enum { | 34 | typedef enum { |
35 | AUDIO_SOURCE_DEMUX, /* Select the demux as the main source */ | 35 | AUDIO_SOURCE_DEMUX, /* Select the demux as the main source */ |
36 | AUDIO_SOURCE_MEMORY /* Select internal memory as the main source */ | 36 | AUDIO_SOURCE_MEMORY /* Select internal memory as the main source */ |
37 | } audio_stream_source_t; | 37 | } audio_stream_source_t; |
38 | 38 | ||
39 | 39 | ||
40 | typedef enum { | 40 | typedef enum { |
41 | AUDIO_STOPPED, /* Device is stopped */ | 41 | AUDIO_STOPPED, /* Device is stopped */ |
42 | AUDIO_PLAYING, /* Device is currently playing */ | 42 | AUDIO_PLAYING, /* Device is currently playing */ |
43 | AUDIO_PAUSED /* Device is paused */ | 43 | AUDIO_PAUSED /* Device is paused */ |
44 | } audio_play_state_t; | 44 | } audio_play_state_t; |
45 | 45 | ||
46 | 46 | ||
47 | typedef enum { | 47 | typedef enum { |
48 | AUDIO_STEREO, | 48 | AUDIO_STEREO, |
49 | AUDIO_MONO_LEFT, | 49 | AUDIO_MONO_LEFT, |
50 | AUDIO_MONO_RIGHT | 50 | AUDIO_MONO_RIGHT |
51 | } audio_channel_select_t; | 51 | } audio_channel_select_t; |
52 | 52 | ||
53 | 53 | ||
54 | typedef struct audio_mixer { | 54 | typedef struct audio_mixer { |
55 | unsigned int volume_left; | 55 | unsigned int volume_left; |
56 | unsigned int volume_right; | 56 | unsigned int volume_right; |
57 | // what else do we need? bass, pass-through, ... | 57 | // what else do we need? bass, pass-through, ... |
58 | } audio_mixer_t; | 58 | } audio_mixer_t; |
59 | 59 | ||
60 | 60 | ||
61 | typedef struct audio_status { | 61 | typedef struct audio_status { |
62 | int AV_sync_state; /* sync audio and video? */ | 62 | int AV_sync_state; /* sync audio and video? */ |
63 | int mute_state; /* audio is muted */ | 63 | int mute_state; /* audio is muted */ |
64 | audio_play_state_t play_state; /* current playback state */ | 64 | audio_play_state_t play_state; /* current playback state */ |
65 | audio_stream_source_t stream_source; /* current stream source */ | 65 | audio_stream_source_t stream_source; /* current stream source */ |
66 | audio_channel_select_t channel_select; /* currently selected channel */ | 66 | audio_channel_select_t channel_select; /* currently selected channel */ |
67 | int bypass_mode; /* pass on audio data to */ | 67 | int bypass_mode; /* pass on audio data to */ |
68 | audio_mixer_t mixer_state; /* current mixer state */ | 68 | audio_mixer_t mixer_state; /* current mixer state */ |
69 | } audio_status_t; /* separate decoder hardware */ | 69 | } audio_status_t; /* separate decoder hardware */ |
70 | 70 | ||
@@ -74,8 +74,8 @@ struct audio_karaoke{ /* if Vocal1 or Vocal2 are non-zero, they get mixed */ | |||
74 | int vocal1; /* into left and right t at 70% each */ | 74 | int vocal1; /* into left and right t at 70% each */ |
75 | int vocal2; /* if both, Vocal1 and Vocal2 are non-zero, Vocal1 gets*/ | 75 | int vocal2; /* if both, Vocal1 and Vocal2 are non-zero, Vocal1 gets*/ |
76 | int melody; /* mixed into the left channel and */ | 76 | int melody; /* mixed into the left channel and */ |
77 | /* Vocal2 into the right channel at 100% each. */ | 77 | /* Vocal2 into the right channel at 100% each. */ |
78 | /* if Melody is non-zero, the melody channel gets mixed*/ | 78 | /* if Melody is non-zero, the melody channel gets mixed*/ |
79 | } audio_karaoke_t; /* into left and right */ | 79 | } audio_karaoke_t; /* into left and right */ |
80 | 80 | ||
81 | 81 | ||
diff --git a/include/linux/dvb/ca.h b/include/linux/dvb/ca.h index 558af0cc7692..c18537f3e449 100644 --- a/include/linux/dvb/ca.h +++ b/include/linux/dvb/ca.h | |||
@@ -27,16 +27,16 @@ | |||
27 | /* slot interface types and info */ | 27 | /* slot interface types and info */ |
28 | 28 | ||
29 | typedef struct ca_slot_info { | 29 | typedef struct ca_slot_info { |
30 | int num; /* slot number */ | 30 | int num; /* slot number */ |
31 | 31 | ||
32 | int type; /* CA interface this slot supports */ | 32 | int type; /* CA interface this slot supports */ |
33 | #define CA_CI 1 /* CI high level interface */ | 33 | #define CA_CI 1 /* CI high level interface */ |
34 | #define CA_CI_LINK 2 /* CI link layer level interface */ | 34 | #define CA_CI_LINK 2 /* CI link layer level interface */ |
35 | #define CA_CI_PHYS 4 /* CI physical layer level interface */ | 35 | #define CA_CI_PHYS 4 /* CI physical layer level interface */ |
36 | #define CA_DESCR 8 /* built-in descrambler */ | 36 | #define CA_DESCR 8 /* built-in descrambler */ |
37 | #define CA_SC 128 /* simple smart card interface */ | 37 | #define CA_SC 128 /* simple smart card interface */ |
38 | 38 | ||
39 | unsigned int flags; | 39 | unsigned int flags; |
40 | #define CA_CI_MODULE_PRESENT 1 /* module (or card) inserted */ | 40 | #define CA_CI_MODULE_PRESENT 1 /* module (or card) inserted */ |
41 | #define CA_CI_MODULE_READY 2 | 41 | #define CA_CI_MODULE_READY 2 |
42 | } ca_slot_info_t; | 42 | } ca_slot_info_t; |
@@ -45,37 +45,37 @@ typedef struct ca_slot_info { | |||
45 | /* descrambler types and info */ | 45 | /* descrambler types and info */ |
46 | 46 | ||
47 | typedef struct ca_descr_info { | 47 | typedef struct ca_descr_info { |
48 | unsigned int num; /* number of available descramblers (keys) */ | 48 | unsigned int num; /* number of available descramblers (keys) */ |
49 | unsigned int type; /* type of supported scrambling system */ | 49 | unsigned int type; /* type of supported scrambling system */ |
50 | #define CA_ECD 1 | 50 | #define CA_ECD 1 |
51 | #define CA_NDS 2 | 51 | #define CA_NDS 2 |
52 | #define CA_DSS 4 | 52 | #define CA_DSS 4 |
53 | } ca_descr_info_t; | 53 | } ca_descr_info_t; |
54 | 54 | ||
55 | typedef struct ca_caps { | 55 | typedef struct ca_caps { |
56 | unsigned int slot_num; /* total number of CA card and module slots */ | 56 | unsigned int slot_num; /* total number of CA card and module slots */ |
57 | unsigned int slot_type; /* OR of all supported types */ | 57 | unsigned int slot_type; /* OR of all supported types */ |
58 | unsigned int descr_num; /* total number of descrambler slots (keys) */ | 58 | unsigned int descr_num; /* total number of descrambler slots (keys) */ |
59 | unsigned int descr_type; /* OR of all supported types */ | 59 | unsigned int descr_type; /* OR of all supported types */ |
60 | } ca_caps_t; | 60 | } ca_caps_t; |
61 | 61 | ||
62 | /* a message to/from a CI-CAM */ | 62 | /* a message to/from a CI-CAM */ |
63 | typedef struct ca_msg { | 63 | typedef struct ca_msg { |
64 | unsigned int index; | 64 | unsigned int index; |
65 | unsigned int type; | 65 | unsigned int type; |
66 | unsigned int length; | 66 | unsigned int length; |
67 | unsigned char msg[256]; | 67 | unsigned char msg[256]; |
68 | } ca_msg_t; | 68 | } ca_msg_t; |
69 | 69 | ||
70 | typedef struct ca_descr { | 70 | typedef struct ca_descr { |
71 | unsigned int index; | 71 | unsigned int index; |
72 | unsigned int parity; /* 0 == even, 1 == odd */ | 72 | unsigned int parity; /* 0 == even, 1 == odd */ |
73 | unsigned char cw[8]; | 73 | unsigned char cw[8]; |
74 | } ca_descr_t; | 74 | } ca_descr_t; |
75 | 75 | ||
76 | typedef struct ca_pid { | 76 | typedef struct ca_pid { |
77 | unsigned int pid; | 77 | unsigned int pid; |
78 | int index; /* -1 == disable*/ | 78 | int index; /* -1 == disable*/ |
79 | } ca_pid_t; | 79 | } ca_pid_t; |
80 | 80 | ||
81 | #define CA_RESET _IO('o', 128) | 81 | #define CA_RESET _IO('o', 128) |
diff --git a/include/linux/dvb/dmx.h b/include/linux/dvb/dmx.h index ce3f829da82c..2787b8a22ff1 100644 --- a/include/linux/dvb/dmx.h +++ b/include/linux/dvb/dmx.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * dmx.h | 2 | * dmx.h |
3 | * | 3 | * |
4 | * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de> | 4 | * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de> |
@@ -38,10 +38,10 @@ typedef enum | |||
38 | { | 38 | { |
39 | DMX_OUT_DECODER, /* Streaming directly to decoder. */ | 39 | DMX_OUT_DECODER, /* Streaming directly to decoder. */ |
40 | DMX_OUT_TAP, /* Output going to a memory buffer */ | 40 | DMX_OUT_TAP, /* Output going to a memory buffer */ |
41 | /* (to be retrieved via the read command).*/ | 41 | /* (to be retrieved via the read command).*/ |
42 | DMX_OUT_TS_TAP /* Output multiplexed into a new TS */ | 42 | DMX_OUT_TS_TAP /* Output multiplexed into a new TS */ |
43 | /* (to be retrieved by reading from the */ | 43 | /* (to be retrieved by reading from the */ |
44 | /* logical DVR device). */ | 44 | /* logical DVR device). */ |
45 | } dmx_output_t; | 45 | } dmx_output_t; |
46 | 46 | ||
47 | 47 | ||
@@ -54,25 +54,25 @@ typedef enum | |||
54 | 54 | ||
55 | typedef enum | 55 | typedef enum |
56 | { | 56 | { |
57 | DMX_PES_AUDIO0, | 57 | DMX_PES_AUDIO0, |
58 | DMX_PES_VIDEO0, | 58 | DMX_PES_VIDEO0, |
59 | DMX_PES_TELETEXT0, | 59 | DMX_PES_TELETEXT0, |
60 | DMX_PES_SUBTITLE0, | 60 | DMX_PES_SUBTITLE0, |
61 | DMX_PES_PCR0, | 61 | DMX_PES_PCR0, |
62 | 62 | ||
63 | DMX_PES_AUDIO1, | 63 | DMX_PES_AUDIO1, |
64 | DMX_PES_VIDEO1, | 64 | DMX_PES_VIDEO1, |
65 | DMX_PES_TELETEXT1, | 65 | DMX_PES_TELETEXT1, |
66 | DMX_PES_SUBTITLE1, | 66 | DMX_PES_SUBTITLE1, |
67 | DMX_PES_PCR1, | 67 | DMX_PES_PCR1, |
68 | 68 | ||
69 | DMX_PES_AUDIO2, | 69 | DMX_PES_AUDIO2, |
70 | DMX_PES_VIDEO2, | 70 | DMX_PES_VIDEO2, |
71 | DMX_PES_TELETEXT2, | 71 | DMX_PES_TELETEXT2, |
72 | DMX_PES_SUBTITLE2, | 72 | DMX_PES_SUBTITLE2, |
73 | DMX_PES_PCR2, | 73 | DMX_PES_PCR2, |
74 | 74 | ||
75 | DMX_PES_AUDIO3, | 75 | DMX_PES_AUDIO3, |
76 | DMX_PES_VIDEO3, | 76 | DMX_PES_VIDEO3, |
77 | DMX_PES_TELETEXT3, | 77 | DMX_PES_TELETEXT3, |
78 | DMX_PES_SUBTITLE3, | 78 | DMX_PES_SUBTITLE3, |
@@ -90,8 +90,8 @@ typedef enum | |||
90 | 90 | ||
91 | typedef enum | 91 | typedef enum |
92 | { | 92 | { |
93 | DMX_SCRAMBLING_EV, | 93 | DMX_SCRAMBLING_EV, |
94 | DMX_FRONTEND_EV | 94 | DMX_FRONTEND_EV |
95 | } dmx_event_t; | 95 | } dmx_event_t; |
96 | 96 | ||
97 | 97 | ||
diff --git a/include/linux/dvb/osd.h b/include/linux/dvb/osd.h index 0e1973d54a6b..880e68435832 100644 --- a/include/linux/dvb/osd.h +++ b/include/linux/dvb/osd.h | |||
@@ -98,43 +98,43 @@ typedef enum { | |||
98 | } OSD_Command; | 98 | } OSD_Command; |
99 | 99 | ||
100 | typedef struct osd_cmd_s { | 100 | typedef struct osd_cmd_s { |
101 | OSD_Command cmd; | 101 | OSD_Command cmd; |
102 | int x0; | 102 | int x0; |
103 | int y0; | 103 | int y0; |
104 | int x1; | 104 | int x1; |
105 | int y1; | 105 | int y1; |
106 | int color; | 106 | int color; |
107 | void __user *data; | 107 | void __user *data; |
108 | } osd_cmd_t; | 108 | } osd_cmd_t; |
109 | 109 | ||
110 | /* OSD_OpenRaw: set 'color' to desired window type */ | 110 | /* OSD_OpenRaw: set 'color' to desired window type */ |
111 | typedef enum { | 111 | typedef enum { |
112 | OSD_BITMAP1, /* 1 bit bitmap */ | 112 | OSD_BITMAP1, /* 1 bit bitmap */ |
113 | OSD_BITMAP2, /* 2 bit bitmap */ | 113 | OSD_BITMAP2, /* 2 bit bitmap */ |
114 | OSD_BITMAP4, /* 4 bit bitmap */ | 114 | OSD_BITMAP4, /* 4 bit bitmap */ |
115 | OSD_BITMAP8, /* 8 bit bitmap */ | 115 | OSD_BITMAP8, /* 8 bit bitmap */ |
116 | OSD_BITMAP1HR, /* 1 Bit bitmap half resolution */ | 116 | OSD_BITMAP1HR, /* 1 Bit bitmap half resolution */ |
117 | OSD_BITMAP2HR, /* 2 bit bitmap half resolution */ | 117 | OSD_BITMAP2HR, /* 2 bit bitmap half resolution */ |
118 | OSD_BITMAP4HR, /* 4 bit bitmap half resolution */ | 118 | OSD_BITMAP4HR, /* 4 bit bitmap half resolution */ |
119 | OSD_BITMAP8HR, /* 8 bit bitmap half resolution */ | 119 | OSD_BITMAP8HR, /* 8 bit bitmap half resolution */ |
120 | OSD_YCRCB422, /* 4:2:2 YCRCB Graphic Display */ | 120 | OSD_YCRCB422, /* 4:2:2 YCRCB Graphic Display */ |
121 | OSD_YCRCB444, /* 4:4:4 YCRCB Graphic Display */ | 121 | OSD_YCRCB444, /* 4:4:4 YCRCB Graphic Display */ |
122 | OSD_YCRCB444HR, /* 4:4:4 YCRCB graphic half resolution */ | 122 | OSD_YCRCB444HR, /* 4:4:4 YCRCB graphic half resolution */ |
123 | OSD_VIDEOTSIZE, /* True Size Normal MPEG Video Display */ | 123 | OSD_VIDEOTSIZE, /* True Size Normal MPEG Video Display */ |
124 | OSD_VIDEOHSIZE, /* MPEG Video Display Half Resolution */ | 124 | OSD_VIDEOHSIZE, /* MPEG Video Display Half Resolution */ |
125 | OSD_VIDEOQSIZE, /* MPEG Video Display Quarter Resolution */ | 125 | OSD_VIDEOQSIZE, /* MPEG Video Display Quarter Resolution */ |
126 | OSD_VIDEODSIZE, /* MPEG Video Display Double Resolution */ | 126 | OSD_VIDEODSIZE, /* MPEG Video Display Double Resolution */ |
127 | OSD_VIDEOTHSIZE, /* True Size MPEG Video Display Half Resolution */ | 127 | OSD_VIDEOTHSIZE, /* True Size MPEG Video Display Half Resolution */ |
128 | OSD_VIDEOTQSIZE, /* True Size MPEG Video Display Quarter Resolution*/ | 128 | OSD_VIDEOTQSIZE, /* True Size MPEG Video Display Quarter Resolution*/ |
129 | OSD_VIDEOTDSIZE, /* True Size MPEG Video Display Double Resolution */ | 129 | OSD_VIDEOTDSIZE, /* True Size MPEG Video Display Double Resolution */ |
130 | OSD_VIDEONSIZE, /* Full Size MPEG Video Display */ | 130 | OSD_VIDEONSIZE, /* Full Size MPEG Video Display */ |
131 | OSD_CURSOR /* Cursor */ | 131 | OSD_CURSOR /* Cursor */ |
132 | } osd_raw_window_t; | 132 | } osd_raw_window_t; |
133 | 133 | ||
134 | typedef struct osd_cap_s { | 134 | typedef struct osd_cap_s { |
135 | int cmd; | 135 | int cmd; |
136 | #define OSD_CAP_MEMSIZE 1 /* memory size */ | 136 | #define OSD_CAP_MEMSIZE 1 /* memory size */ |
137 | long val; | 137 | long val; |
138 | } osd_cap_t; | 138 | } osd_cap_t; |
139 | 139 | ||
140 | 140 | ||
diff --git a/include/linux/dvb/video.h b/include/linux/dvb/video.h index 941045e9ab89..b1999bfeaa56 100644 --- a/include/linux/dvb/video.h +++ b/include/linux/dvb/video.h | |||
@@ -36,7 +36,7 @@ | |||
36 | 36 | ||
37 | typedef enum { | 37 | typedef enum { |
38 | VIDEO_FORMAT_4_3, /* Select 4:3 format */ | 38 | VIDEO_FORMAT_4_3, /* Select 4:3 format */ |
39 | VIDEO_FORMAT_16_9, /* Select 16:9 format. */ | 39 | VIDEO_FORMAT_16_9, /* Select 16:9 format. */ |
40 | VIDEO_FORMAT_221_1 /* 2.21:1 */ | 40 | VIDEO_FORMAT_221_1 /* 2.21:1 */ |
41 | } video_format_t; | 41 | } video_format_t; |
42 | 42 | ||
@@ -54,7 +54,7 @@ typedef enum { | |||
54 | 54 | ||
55 | 55 | ||
56 | typedef enum { | 56 | typedef enum { |
57 | VIDEO_PAN_SCAN, /* use pan and scan format */ | 57 | VIDEO_PAN_SCAN, /* use pan and scan format */ |
58 | VIDEO_LETTER_BOX, /* use letterbox format */ | 58 | VIDEO_LETTER_BOX, /* use letterbox format */ |
59 | VIDEO_CENTER_CUT_OUT /* use center cut out format */ | 59 | VIDEO_CENTER_CUT_OUT /* use center cut out format */ |
60 | } video_displayformat_t; | 60 | } video_displayformat_t; |
@@ -66,7 +66,7 @@ typedef struct { | |||
66 | } video_size_t; | 66 | } video_size_t; |
67 | 67 | ||
68 | typedef enum { | 68 | typedef enum { |
69 | VIDEO_SOURCE_DEMUX, /* Select the demux as the main source */ | 69 | VIDEO_SOURCE_DEMUX, /* Select the demux as the main source */ |
70 | VIDEO_SOURCE_MEMORY /* If this source is selected, the stream | 70 | VIDEO_SOURCE_MEMORY /* If this source is selected, the stream |
71 | comes from the user through the write | 71 | comes from the user through the write |
72 | system call */ | 72 | system call */ |
@@ -75,35 +75,35 @@ typedef enum { | |||
75 | 75 | ||
76 | typedef enum { | 76 | typedef enum { |
77 | VIDEO_STOPPED, /* Video is stopped */ | 77 | VIDEO_STOPPED, /* Video is stopped */ |
78 | VIDEO_PLAYING, /* Video is currently playing */ | 78 | VIDEO_PLAYING, /* Video is currently playing */ |
79 | VIDEO_FREEZED /* Video is freezed */ | 79 | VIDEO_FREEZED /* Video is freezed */ |
80 | } video_play_state_t; | 80 | } video_play_state_t; |
81 | 81 | ||
82 | 82 | ||
83 | struct video_event { | 83 | struct video_event { |
84 | int32_t type; | 84 | int32_t type; |
85 | #define VIDEO_EVENT_SIZE_CHANGED 1 | 85 | #define VIDEO_EVENT_SIZE_CHANGED 1 |
86 | #define VIDEO_EVENT_FRAME_RATE_CHANGED 2 | 86 | #define VIDEO_EVENT_FRAME_RATE_CHANGED 2 |
87 | time_t timestamp; | 87 | time_t timestamp; |
88 | union { | 88 | union { |
89 | video_size_t size; | 89 | video_size_t size; |
90 | unsigned int frame_rate; /* in frames per 1000sec */ | 90 | unsigned int frame_rate; /* in frames per 1000sec */ |
91 | } u; | 91 | } u; |
92 | }; | 92 | }; |
93 | 93 | ||
94 | 94 | ||
95 | struct video_status { | 95 | struct video_status { |
96 | int video_blank; /* blank video on freeze? */ | 96 | int video_blank; /* blank video on freeze? */ |
97 | video_play_state_t play_state; /* current state of playback */ | 97 | video_play_state_t play_state; /* current state of playback */ |
98 | video_stream_source_t stream_source; /* current source (demux/memory) */ | 98 | video_stream_source_t stream_source; /* current source (demux/memory) */ |
99 | video_format_t video_format; /* current aspect ratio of stream*/ | 99 | video_format_t video_format; /* current aspect ratio of stream*/ |
100 | video_displayformat_t display_format;/* selected cropping mode */ | 100 | video_displayformat_t display_format;/* selected cropping mode */ |
101 | }; | 101 | }; |
102 | 102 | ||
103 | 103 | ||
104 | struct video_still_picture { | 104 | struct video_still_picture { |
105 | char __user *iFrame; /* pointer to a single iframe in memory */ | 105 | char __user *iFrame; /* pointer to a single iframe in memory */ |
106 | int32_t size; | 106 | int32_t size; |
107 | }; | 107 | }; |
108 | 108 | ||
109 | 109 | ||
@@ -111,19 +111,19 @@ typedef | |||
111 | struct video_highlight { | 111 | struct video_highlight { |
112 | int active; /* 1=show highlight, 0=hide highlight */ | 112 | int active; /* 1=show highlight, 0=hide highlight */ |
113 | uint8_t contrast1; /* 7- 4 Pattern pixel contrast */ | 113 | uint8_t contrast1; /* 7- 4 Pattern pixel contrast */ |
114 | /* 3- 0 Background pixel contrast */ | 114 | /* 3- 0 Background pixel contrast */ |
115 | uint8_t contrast2; /* 7- 4 Emphasis pixel-2 contrast */ | 115 | uint8_t contrast2; /* 7- 4 Emphasis pixel-2 contrast */ |
116 | /* 3- 0 Emphasis pixel-1 contrast */ | 116 | /* 3- 0 Emphasis pixel-1 contrast */ |
117 | uint8_t color1; /* 7- 4 Pattern pixel color */ | 117 | uint8_t color1; /* 7- 4 Pattern pixel color */ |
118 | /* 3- 0 Background pixel color */ | 118 | /* 3- 0 Background pixel color */ |
119 | uint8_t color2; /* 7- 4 Emphasis pixel-2 color */ | 119 | uint8_t color2; /* 7- 4 Emphasis pixel-2 color */ |
120 | /* 3- 0 Emphasis pixel-1 color */ | 120 | /* 3- 0 Emphasis pixel-1 color */ |
121 | uint32_t ypos; /* 23-22 auto action mode */ | 121 | uint32_t ypos; /* 23-22 auto action mode */ |
122 | /* 21-12 start y */ | 122 | /* 21-12 start y */ |
123 | /* 9- 0 end y */ | 123 | /* 9- 0 end y */ |
124 | uint32_t xpos; /* 23-22 button color number */ | 124 | uint32_t xpos; /* 23-22 button color number */ |
125 | /* 21-12 start x */ | 125 | /* 21-12 start x */ |
126 | /* 9- 0 end x */ | 126 | /* 9- 0 end x */ |
127 | } video_highlight_t; | 127 | } video_highlight_t; |
128 | 128 | ||
129 | 129 | ||
diff --git a/include/linux/elevator.h b/include/linux/elevator.h index a74c27e460ba..fb80fa44c4dd 100644 --- a/include/linux/elevator.h +++ b/include/linux/elevator.h | |||
@@ -130,6 +130,7 @@ extern int elv_try_last_merge(request_queue_t *, struct bio *); | |||
130 | #define ELEVATOR_INSERT_FRONT 1 | 130 | #define ELEVATOR_INSERT_FRONT 1 |
131 | #define ELEVATOR_INSERT_BACK 2 | 131 | #define ELEVATOR_INSERT_BACK 2 |
132 | #define ELEVATOR_INSERT_SORT 3 | 132 | #define ELEVATOR_INSERT_SORT 3 |
133 | #define ELEVATOR_INSERT_REQUEUE 4 | ||
133 | 134 | ||
134 | /* | 135 | /* |
135 | * return values from elevator_may_queue_fn | 136 | * return values from elevator_may_queue_fn |
diff --git a/include/linux/elf.h b/include/linux/elf.h index ff955dbf510d..d3bfacb24496 100644 --- a/include/linux/elf.h +++ b/include/linux/elf.h | |||
@@ -151,6 +151,8 @@ typedef __s64 Elf64_Sxword; | |||
151 | #define STT_FUNC 2 | 151 | #define STT_FUNC 2 |
152 | #define STT_SECTION 3 | 152 | #define STT_SECTION 3 |
153 | #define STT_FILE 4 | 153 | #define STT_FILE 4 |
154 | #define STT_COMMON 5 | ||
155 | #define STT_TLS 6 | ||
154 | 156 | ||
155 | #define ELF_ST_BIND(x) ((x) >> 4) | 157 | #define ELF_ST_BIND(x) ((x) >> 4) |
156 | #define ELF_ST_TYPE(x) (((unsigned int) x) & 0xf) | 158 | #define ELF_ST_TYPE(x) (((unsigned int) x) & 0xf) |
diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h index 5f49a30eb6f2..745c988359c0 100644 --- a/include/linux/etherdevice.h +++ b/include/linux/etherdevice.h | |||
@@ -63,10 +63,11 @@ static inline int is_zero_ether_addr(const u8 *addr) | |||
63 | * @addr: Pointer to a six-byte array containing the Ethernet address | 63 | * @addr: Pointer to a six-byte array containing the Ethernet address |
64 | * | 64 | * |
65 | * Return true if the address is a multicast address. | 65 | * Return true if the address is a multicast address. |
66 | * By definition the broadcast address is also a multicast address. | ||
66 | */ | 67 | */ |
67 | static inline int is_multicast_ether_addr(const u8 *addr) | 68 | static inline int is_multicast_ether_addr(const u8 *addr) |
68 | { | 69 | { |
69 | return ((addr[0] != 0xff) && (0x01 & addr[0])); | 70 | return (0x01 & addr[0]); |
70 | } | 71 | } |
71 | 72 | ||
72 | /** | 73 | /** |
diff --git a/include/linux/fb.h b/include/linux/fb.h index 04a58f33ec53..a973be2cfe61 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h | |||
@@ -617,6 +617,12 @@ struct fb_ops { | |||
617 | 617 | ||
618 | /* perform fb specific mmap */ | 618 | /* perform fb specific mmap */ |
619 | int (*fb_mmap)(struct fb_info *info, struct file *file, struct vm_area_struct *vma); | 619 | int (*fb_mmap)(struct fb_info *info, struct file *file, struct vm_area_struct *vma); |
620 | |||
621 | /* save current hardware state */ | ||
622 | void (*fb_save_state)(struct fb_info *info); | ||
623 | |||
624 | /* restore saved state */ | ||
625 | void (*fb_restore_state)(struct fb_info *info); | ||
620 | }; | 626 | }; |
621 | 627 | ||
622 | #ifdef CONFIG_FB_TILEBLITTING | 628 | #ifdef CONFIG_FB_TILEBLITTING |
@@ -726,6 +732,18 @@ struct fb_tile_ops { | |||
726 | from userspace */ | 732 | from userspace */ |
727 | #define FBINFO_MISC_TILEBLITTING 0x20000 /* use tile blitting */ | 733 | #define FBINFO_MISC_TILEBLITTING 0x20000 /* use tile blitting */ |
728 | 734 | ||
735 | /* A driver may set this flag to indicate that it does want a set_par to be | ||
736 | * called every time when fbcon_switch is executed. The advantage is that with | ||
737 | * this flag set you can really be shure that set_par is always called before | ||
738 | * any of the functions dependant on the correct hardware state or altering | ||
739 | * that state, even if you are using some broken X releases. The disadvantage | ||
740 | * is that it introduces unwanted delays to every console switch if set_par | ||
741 | * is slow. It is a good idea to try this flag in the drivers initialization | ||
742 | * code whenever there is a bug report related to switching between X and the | ||
743 | * framebuffer console. | ||
744 | */ | ||
745 | #define FBINFO_MISC_ALWAYS_SETPAR 0x40000 | ||
746 | |||
729 | struct fb_info { | 747 | struct fb_info { |
730 | int node; | 748 | int node; |
731 | int flags; | 749 | int flags; |
@@ -817,6 +835,18 @@ struct fb_info { | |||
817 | 835 | ||
818 | #endif | 836 | #endif |
819 | 837 | ||
838 | #if defined (__BIG_ENDIAN) | ||
839 | #define FB_LEFT_POS(bpp) (32 - bpp) | ||
840 | #define FB_SHIFT_HIGH(val, bits) ((val) >> (bits)) | ||
841 | #define FB_SHIFT_LOW(val, bits) ((val) << (bits)) | ||
842 | #define FB_BIT_NR(b) (7 - (b)) | ||
843 | #else | ||
844 | #define FB_LEFT_POS(bpp) (0) | ||
845 | #define FB_SHIFT_HIGH(val, bits) ((val) << (bits)) | ||
846 | #define FB_SHIFT_LOW(val, bits) ((val) >> (bits)) | ||
847 | #define FB_BIT_NR(b) (b) | ||
848 | #endif | ||
849 | |||
820 | /* | 850 | /* |
821 | * `Generic' versions of the frame buffer device operations | 851 | * `Generic' versions of the frame buffer device operations |
822 | */ | 852 | */ |
diff --git a/include/linux/filter.h b/include/linux/filter.h index 3ba843c46382..c6cb8f095088 100644 --- a/include/linux/filter.h +++ b/include/linux/filter.h | |||
@@ -143,7 +143,7 @@ static inline unsigned int sk_filter_len(struct sk_filter *fp) | |||
143 | struct sk_buff; | 143 | struct sk_buff; |
144 | struct sock; | 144 | struct sock; |
145 | 145 | ||
146 | extern int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen); | 146 | extern unsigned int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen); |
147 | extern int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk); | 147 | extern int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk); |
148 | extern int sk_chk_filter(struct sock_filter *filter, int flen); | 148 | extern int sk_chk_filter(struct sock_filter *filter, int flen); |
149 | #endif /* __KERNEL__ */ | 149 | #endif /* __KERNEL__ */ |
diff --git a/include/linux/firmware.h b/include/linux/firmware.h index 2063c0839d4f..2d716080be4a 100644 --- a/include/linux/firmware.h +++ b/include/linux/firmware.h | |||
@@ -14,7 +14,7 @@ struct device; | |||
14 | int request_firmware(const struct firmware **fw, const char *name, | 14 | int request_firmware(const struct firmware **fw, const char *name, |
15 | struct device *device); | 15 | struct device *device); |
16 | int request_firmware_nowait( | 16 | int request_firmware_nowait( |
17 | struct module *module, int hotplug, | 17 | struct module *module, int uevent, |
18 | const char *name, struct device *device, void *context, | 18 | const char *name, struct device *device, void *context, |
19 | void (*cont)(const struct firmware *fw, void *context)); | 19 | void (*cont)(const struct firmware *fw, void *context)); |
20 | 20 | ||
diff --git a/include/linux/fs.h b/include/linux/fs.h index cc35b6ac778d..4c82219b0fae 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -9,7 +9,6 @@ | |||
9 | #include <linux/config.h> | 9 | #include <linux/config.h> |
10 | #include <linux/limits.h> | 10 | #include <linux/limits.h> |
11 | #include <linux/ioctl.h> | 11 | #include <linux/ioctl.h> |
12 | #include <linux/rcuref.h> | ||
13 | 12 | ||
14 | /* | 13 | /* |
15 | * It's silly to have NR_OPEN bigger than NR_FILE, but you can change | 14 | * It's silly to have NR_OPEN bigger than NR_FILE, but you can change |
@@ -104,11 +103,11 @@ extern int dir_notify_enable; | |||
104 | #define MS_MOVE 8192 | 103 | #define MS_MOVE 8192 |
105 | #define MS_REC 16384 | 104 | #define MS_REC 16384 |
106 | #define MS_VERBOSE 32768 | 105 | #define MS_VERBOSE 32768 |
106 | #define MS_POSIXACL (1<<16) /* VFS does not apply the umask */ | ||
107 | #define MS_UNBINDABLE (1<<17) /* change to unbindable */ | 107 | #define MS_UNBINDABLE (1<<17) /* change to unbindable */ |
108 | #define MS_PRIVATE (1<<18) /* change to private */ | 108 | #define MS_PRIVATE (1<<18) /* change to private */ |
109 | #define MS_SLAVE (1<<19) /* change to slave */ | 109 | #define MS_SLAVE (1<<19) /* change to slave */ |
110 | #define MS_SHARED (1<<20) /* change to shared */ | 110 | #define MS_SHARED (1<<20) /* change to shared */ |
111 | #define MS_POSIXACL (1<<16) /* VFS does not apply the umask */ | ||
112 | #define MS_ACTIVE (1<<30) | 111 | #define MS_ACTIVE (1<<30) |
113 | #define MS_NOUSER (1<<31) | 112 | #define MS_NOUSER (1<<31) |
114 | 113 | ||
@@ -225,6 +224,7 @@ extern int dir_notify_enable; | |||
225 | #include <asm/semaphore.h> | 224 | #include <asm/semaphore.h> |
226 | #include <asm/byteorder.h> | 225 | #include <asm/byteorder.h> |
227 | 226 | ||
227 | struct hd_geometry; | ||
228 | struct iovec; | 228 | struct iovec; |
229 | struct nameidata; | 229 | struct nameidata; |
230 | struct kiocb; | 230 | struct kiocb; |
@@ -302,6 +302,37 @@ struct iattr { | |||
302 | */ | 302 | */ |
303 | #include <linux/quota.h> | 303 | #include <linux/quota.h> |
304 | 304 | ||
305 | /** | ||
306 | * enum positive_aop_returns - aop return codes with specific semantics | ||
307 | * | ||
308 | * @AOP_WRITEPAGE_ACTIVATE: Informs the caller that page writeback has | ||
309 | * completed, that the page is still locked, and | ||
310 | * should be considered active. The VM uses this hint | ||
311 | * to return the page to the active list -- it won't | ||
312 | * be a candidate for writeback again in the near | ||
313 | * future. Other callers must be careful to unlock | ||
314 | * the page if they get this return. Returned by | ||
315 | * writepage(); | ||
316 | * | ||
317 | * @AOP_TRUNCATED_PAGE: The AOP method that was handed a locked page has | ||
318 | * unlocked it and the page might have been truncated. | ||
319 | * The caller should back up to acquiring a new page and | ||
320 | * trying again. The aop will be taking reasonable | ||
321 | * precautions not to livelock. If the caller held a page | ||
322 | * reference, it should drop it before retrying. Returned | ||
323 | * by readpage(), prepare_write(), and commit_write(). | ||
324 | * | ||
325 | * address_space_operation functions return these large constants to indicate | ||
326 | * special semantics to the caller. These are much larger than the bytes in a | ||
327 | * page to allow for functions that return the number of bytes operated on in a | ||
328 | * given page. | ||
329 | */ | ||
330 | |||
331 | enum positive_aop_returns { | ||
332 | AOP_WRITEPAGE_ACTIVATE = 0x80000, | ||
333 | AOP_TRUNCATED_PAGE = 0x80001, | ||
334 | }; | ||
335 | |||
305 | /* | 336 | /* |
306 | * oh the beauties of C type declarations. | 337 | * oh the beauties of C type declarations. |
307 | */ | 338 | */ |
@@ -622,7 +653,7 @@ extern spinlock_t files_lock; | |||
622 | #define file_list_lock() spin_lock(&files_lock); | 653 | #define file_list_lock() spin_lock(&files_lock); |
623 | #define file_list_unlock() spin_unlock(&files_lock); | 654 | #define file_list_unlock() spin_unlock(&files_lock); |
624 | 655 | ||
625 | #define get_file(x) rcuref_inc(&(x)->f_count) | 656 | #define get_file(x) atomic_inc(&(x)->f_count) |
626 | #define file_count(x) atomic_read(&(x)->f_count) | 657 | #define file_count(x) atomic_read(&(x)->f_count) |
627 | 658 | ||
628 | #define MAX_NON_LFS ((1UL<<31) - 1) | 659 | #define MAX_NON_LFS ((1UL<<31) - 1) |
@@ -729,7 +760,7 @@ extern struct file_lock *posix_test_lock(struct file *, struct file_lock *); | |||
729 | extern int posix_lock_file(struct file *, struct file_lock *); | 760 | extern int posix_lock_file(struct file *, struct file_lock *); |
730 | extern int posix_lock_file_wait(struct file *, struct file_lock *); | 761 | extern int posix_lock_file_wait(struct file *, struct file_lock *); |
731 | extern void posix_block_lock(struct file_lock *, struct file_lock *); | 762 | extern void posix_block_lock(struct file_lock *, struct file_lock *); |
732 | extern void posix_unblock_lock(struct file *, struct file_lock *); | 763 | extern int posix_unblock_lock(struct file *, struct file_lock *); |
733 | extern int posix_locks_deadlock(struct file_lock *, struct file_lock *); | 764 | extern int posix_locks_deadlock(struct file_lock *, struct file_lock *); |
734 | extern int flock_lock_file_wait(struct file *filp, struct file_lock *fl); | 765 | extern int flock_lock_file_wait(struct file *filp, struct file_lock *fl); |
735 | extern int __break_lease(struct inode *inode, unsigned int flags); | 766 | extern int __break_lease(struct inode *inode, unsigned int flags); |
@@ -777,7 +808,6 @@ struct super_block { | |||
777 | struct list_head s_list; /* Keep this first */ | 808 | struct list_head s_list; /* Keep this first */ |
778 | dev_t s_dev; /* search index; _not_ kdev_t */ | 809 | dev_t s_dev; /* search index; _not_ kdev_t */ |
779 | unsigned long s_blocksize; | 810 | unsigned long s_blocksize; |
780 | unsigned long s_old_blocksize; | ||
781 | unsigned char s_blocksize_bits; | 811 | unsigned char s_blocksize_bits; |
782 | unsigned char s_dirt; | 812 | unsigned char s_dirt; |
783 | unsigned long long s_maxbytes; /* Max file size */ | 813 | unsigned long long s_maxbytes; /* Max file size */ |
@@ -932,6 +962,7 @@ struct block_device_operations { | |||
932 | int (*direct_access) (struct block_device *, sector_t, unsigned long *); | 962 | int (*direct_access) (struct block_device *, sector_t, unsigned long *); |
933 | int (*media_changed) (struct gendisk *); | 963 | int (*media_changed) (struct gendisk *); |
934 | int (*revalidate_disk) (struct gendisk *); | 964 | int (*revalidate_disk) (struct gendisk *); |
965 | int (*getgeo)(struct block_device *, struct hd_geometry *); | ||
935 | struct module *owner; | 966 | struct module *owner; |
936 | }; | 967 | }; |
937 | 968 | ||
@@ -1019,6 +1050,7 @@ struct inode_operations { | |||
1019 | ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t); | 1050 | ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t); |
1020 | ssize_t (*listxattr) (struct dentry *, char *, size_t); | 1051 | ssize_t (*listxattr) (struct dentry *, char *, size_t); |
1021 | int (*removexattr) (struct dentry *, const char *); | 1052 | int (*removexattr) (struct dentry *, const char *); |
1053 | void (*truncate_range)(struct inode *, loff_t, loff_t); | ||
1022 | }; | 1054 | }; |
1023 | 1055 | ||
1024 | struct seq_file; | 1056 | struct seq_file; |
@@ -1313,7 +1345,8 @@ static inline int break_lease(struct inode *inode, unsigned int mode) | |||
1313 | 1345 | ||
1314 | /* fs/open.c */ | 1346 | /* fs/open.c */ |
1315 | 1347 | ||
1316 | extern int do_truncate(struct dentry *, loff_t start, struct file *filp); | 1348 | extern int do_truncate(struct dentry *, loff_t start, unsigned int time_attrs, |
1349 | struct file *filp); | ||
1317 | extern long do_sys_open(const char __user *filename, int flags, int mode); | 1350 | extern long do_sys_open(const char __user *filename, int flags, int mode); |
1318 | extern struct file *filp_open(const char *, int, int); | 1351 | extern struct file *filp_open(const char *, int, int); |
1319 | extern struct file * dentry_open(struct dentry *, struct vfsmount *, int); | 1352 | extern struct file * dentry_open(struct dentry *, struct vfsmount *, int); |
diff --git a/include/linux/fuse.h b/include/linux/fuse.h index b76b558b03d4..528959c52f1b 100644 --- a/include/linux/fuse.h +++ b/include/linux/fuse.h | |||
@@ -14,7 +14,7 @@ | |||
14 | #define FUSE_KERNEL_VERSION 7 | 14 | #define FUSE_KERNEL_VERSION 7 |
15 | 15 | ||
16 | /** Minor version number of this interface */ | 16 | /** Minor version number of this interface */ |
17 | #define FUSE_KERNEL_MINOR_VERSION 3 | 17 | #define FUSE_KERNEL_MINOR_VERSION 5 |
18 | 18 | ||
19 | /** The node ID of the root inode */ | 19 | /** The node ID of the root inode */ |
20 | #define FUSE_ROOT_ID 1 | 20 | #define FUSE_ROOT_ID 1 |
@@ -53,6 +53,9 @@ struct fuse_kstatfs { | |||
53 | __u64 ffree; | 53 | __u64 ffree; |
54 | __u32 bsize; | 54 | __u32 bsize; |
55 | __u32 namelen; | 55 | __u32 namelen; |
56 | __u32 frsize; | ||
57 | __u32 padding; | ||
58 | __u32 spare[6]; | ||
56 | }; | 59 | }; |
57 | 60 | ||
58 | #define FATTR_MODE (1 << 0) | 61 | #define FATTR_MODE (1 << 0) |
@@ -105,12 +108,8 @@ enum fuse_opcode { | |||
105 | FUSE_CREATE = 35 | 108 | FUSE_CREATE = 35 |
106 | }; | 109 | }; |
107 | 110 | ||
108 | /* Conservative buffer size for the client */ | 111 | /* The read buffer is required to be at least 8k, but may be much larger */ |
109 | #define FUSE_MAX_IN 8192 | 112 | #define FUSE_MIN_READ_BUFFER 8192 |
110 | |||
111 | #define FUSE_NAME_MAX 1024 | ||
112 | #define FUSE_SYMLINK_MAX 4096 | ||
113 | #define FUSE_XATTR_SIZE_MAX 4096 | ||
114 | 113 | ||
115 | struct fuse_entry_out { | 114 | struct fuse_entry_out { |
116 | __u64 nodeid; /* Inode ID */ | 115 | __u64 nodeid; /* Inode ID */ |
@@ -213,6 +212,8 @@ struct fuse_write_out { | |||
213 | __u32 padding; | 212 | __u32 padding; |
214 | }; | 213 | }; |
215 | 214 | ||
215 | #define FUSE_COMPAT_STATFS_SIZE 48 | ||
216 | |||
216 | struct fuse_statfs_out { | 217 | struct fuse_statfs_out { |
217 | struct fuse_kstatfs st; | 218 | struct fuse_kstatfs st; |
218 | }; | 219 | }; |
@@ -243,9 +244,16 @@ struct fuse_access_in { | |||
243 | __u32 padding; | 244 | __u32 padding; |
244 | }; | 245 | }; |
245 | 246 | ||
246 | struct fuse_init_in_out { | 247 | struct fuse_init_in { |
248 | __u32 major; | ||
249 | __u32 minor; | ||
250 | }; | ||
251 | |||
252 | struct fuse_init_out { | ||
247 | __u32 major; | 253 | __u32 major; |
248 | __u32 minor; | 254 | __u32 minor; |
255 | __u32 unused[3]; | ||
256 | __u32 max_write; | ||
249 | }; | 257 | }; |
250 | 258 | ||
251 | struct fuse_in_header { | 259 | struct fuse_in_header { |
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index 1056717ee501..68d82ad6b17c 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h | |||
@@ -22,7 +22,7 @@ int hugetlb_report_meminfo(char *); | |||
22 | int hugetlb_report_node_meminfo(int, char *); | 22 | int hugetlb_report_node_meminfo(int, char *); |
23 | int is_hugepage_mem_enough(size_t); | 23 | int is_hugepage_mem_enough(size_t); |
24 | unsigned long hugetlb_total_pages(void); | 24 | unsigned long hugetlb_total_pages(void); |
25 | struct page *alloc_huge_page(void); | 25 | struct page *alloc_huge_page(struct vm_area_struct *, unsigned long); |
26 | void free_huge_page(struct page *); | 26 | void free_huge_page(struct page *); |
27 | int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, | 27 | int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, |
28 | unsigned long address, int write_access); | 28 | unsigned long address, int write_access); |
@@ -97,7 +97,7 @@ static inline unsigned long hugetlb_total_pages(void) | |||
97 | #define is_hugepage_only_range(mm, addr, len) 0 | 97 | #define is_hugepage_only_range(mm, addr, len) 0 |
98 | #define hugetlb_free_pgd_range(tlb, addr, end, floor, ceiling) \ | 98 | #define hugetlb_free_pgd_range(tlb, addr, end, floor, ceiling) \ |
99 | do { } while (0) | 99 | do { } while (0) |
100 | #define alloc_huge_page() ({ NULL; }) | 100 | #define alloc_huge_page(vma, addr) ({ NULL; }) |
101 | #define free_huge_page(p) ({ (void)(p); BUG(); }) | 101 | #define free_huge_page(p) ({ (void)(p); BUG(); }) |
102 | #define hugetlb_fault(mm, vma, addr, write) ({ BUG(); 0; }) | 102 | #define hugetlb_fault(mm, vma, addr, write) ({ BUG(); 0; }) |
103 | 103 | ||
diff --git a/include/linux/hwmon-vid.h b/include/linux/hwmon-vid.h index cd4b7a042b86..f346e4d5381c 100644 --- a/include/linux/hwmon-vid.h +++ b/include/linux/hwmon-vid.h | |||
@@ -23,14 +23,14 @@ | |||
23 | #ifndef _LINUX_HWMON_VID_H | 23 | #ifndef _LINUX_HWMON_VID_H |
24 | #define _LINUX_HWMON_VID_H | 24 | #define _LINUX_HWMON_VID_H |
25 | 25 | ||
26 | int vid_from_reg(int val, int vrm); | 26 | int vid_from_reg(int val, u8 vrm); |
27 | int vid_which_vrm(void); | 27 | u8 vid_which_vrm(void); |
28 | 28 | ||
29 | /* vrm is the VRM/VRD document version multiplied by 10. | 29 | /* vrm is the VRM/VRD document version multiplied by 10. |
30 | val is in mV to avoid floating point in the kernel. | 30 | val is in mV to avoid floating point in the kernel. |
31 | Returned value is the 4-, 5- or 6-bit VID code. | 31 | Returned value is the 4-, 5- or 6-bit VID code. |
32 | Note that only VRM 9.x is supported for now. */ | 32 | Note that only VRM 9.x is supported for now. */ |
33 | static inline int vid_to_reg(int val, int vrm) | 33 | static inline int vid_to_reg(int val, u8 vrm) |
34 | { | 34 | { |
35 | switch (vrm) { | 35 | switch (vrm) { |
36 | case 91: /* VRM 9.1 */ | 36 | case 91: /* VRM 9.1 */ |
diff --git a/include/linux/i2c-id.h b/include/linux/i2c-id.h index 1543daaa9c5e..fb46f8d56999 100644 --- a/include/linux/i2c-id.h +++ b/include/linux/i2c-id.h | |||
@@ -25,12 +25,6 @@ | |||
25 | 25 | ||
26 | /* | 26 | /* |
27 | * ---- Driver types ----------------------------------------------------- | 27 | * ---- Driver types ----------------------------------------------------- |
28 | * device id name + number function description, i2c address(es) | ||
29 | * | ||
30 | * Range 1000-1999 range is defined in sensors/sensors.h | ||
31 | * Range 0x100 - 0x1ff is for V4L2 Common Components | ||
32 | * Range 0xf000 - 0xffff is reserved for local experimentation, and should | ||
33 | * never be used in official drivers | ||
34 | */ | 28 | */ |
35 | 29 | ||
36 | #define I2C_DRIVERID_MSP3400 1 | 30 | #define I2C_DRIVERID_MSP3400 1 |
@@ -108,14 +102,9 @@ | |||
108 | #define I2C_DRIVERID_SAA7127 72 /* saa7124 video encoder */ | 102 | #define I2C_DRIVERID_SAA7127 72 /* saa7124 video encoder */ |
109 | #define I2C_DRIVERID_SAA711X 73 /* saa711x video encoders */ | 103 | #define I2C_DRIVERID_SAA711X 73 /* saa711x video encoders */ |
110 | #define I2C_DRIVERID_AKITAIOEXP 74 /* IO Expander on Sharp SL-C1000 */ | 104 | #define I2C_DRIVERID_AKITAIOEXP 74 /* IO Expander on Sharp SL-C1000 */ |
111 | 105 | #define I2C_DRIVERID_INFRARED 75 /* I2C InfraRed on Video boards */ | |
112 | #define I2C_DRIVERID_EXP0 0xF0 /* experimental use id's */ | ||
113 | #define I2C_DRIVERID_EXP1 0xF1 | ||
114 | #define I2C_DRIVERID_EXP2 0xF2 | ||
115 | #define I2C_DRIVERID_EXP3 0xF3 | ||
116 | 106 | ||
117 | #define I2C_DRIVERID_I2CDEV 900 | 107 | #define I2C_DRIVERID_I2CDEV 900 |
118 | #define I2C_DRIVERID_I2CPROC 901 | ||
119 | #define I2C_DRIVERID_ARP 902 /* SMBus ARP Client */ | 108 | #define I2C_DRIVERID_ARP 902 /* SMBus ARP Client */ |
120 | #define I2C_DRIVERID_ALERT 903 /* SMBus Alert Responder Client */ | 109 | #define I2C_DRIVERID_ALERT 903 /* SMBus Alert Responder Client */ |
121 | 110 | ||
@@ -130,15 +119,12 @@ | |||
130 | #define I2C_DRIVERID_ADM1021 1008 | 119 | #define I2C_DRIVERID_ADM1021 1008 |
131 | #define I2C_DRIVERID_ADM9240 1009 | 120 | #define I2C_DRIVERID_ADM9240 1009 |
132 | #define I2C_DRIVERID_LTC1710 1010 | 121 | #define I2C_DRIVERID_LTC1710 1010 |
133 | #define I2C_DRIVERID_SIS5595 1011 | ||
134 | #define I2C_DRIVERID_ICSPLL 1012 | 122 | #define I2C_DRIVERID_ICSPLL 1012 |
135 | #define I2C_DRIVERID_BT869 1013 | 123 | #define I2C_DRIVERID_BT869 1013 |
136 | #define I2C_DRIVERID_MAXILIFE 1014 | 124 | #define I2C_DRIVERID_MAXILIFE 1014 |
137 | #define I2C_DRIVERID_MATORB 1015 | 125 | #define I2C_DRIVERID_MATORB 1015 |
138 | #define I2C_DRIVERID_GL520 1016 | 126 | #define I2C_DRIVERID_GL520 1016 |
139 | #define I2C_DRIVERID_THMC50 1017 | 127 | #define I2C_DRIVERID_THMC50 1017 |
140 | #define I2C_DRIVERID_DDCMON 1018 | ||
141 | #define I2C_DRIVERID_VIA686A 1019 | ||
142 | #define I2C_DRIVERID_ADM1025 1020 | 128 | #define I2C_DRIVERID_ADM1025 1020 |
143 | #define I2C_DRIVERID_LM87 1021 | 129 | #define I2C_DRIVERID_LM87 1021 |
144 | #define I2C_DRIVERID_PCF8574 1022 | 130 | #define I2C_DRIVERID_PCF8574 1022 |
@@ -150,21 +136,16 @@ | |||
150 | #define I2C_DRIVERID_FSCPOS 1028 | 136 | #define I2C_DRIVERID_FSCPOS 1028 |
151 | #define I2C_DRIVERID_FSCSCY 1029 | 137 | #define I2C_DRIVERID_FSCSCY 1029 |
152 | #define I2C_DRIVERID_PCF8591 1030 | 138 | #define I2C_DRIVERID_PCF8591 1030 |
153 | #define I2C_DRIVERID_SMSC47M1 1031 | ||
154 | #define I2C_DRIVERID_VT1211 1032 | ||
155 | #define I2C_DRIVERID_LM92 1033 | 139 | #define I2C_DRIVERID_LM92 1033 |
156 | #define I2C_DRIVERID_VT8231 1034 | ||
157 | #define I2C_DRIVERID_SMARTBATT 1035 | 140 | #define I2C_DRIVERID_SMARTBATT 1035 |
158 | #define I2C_DRIVERID_BMCSENSORS 1036 | 141 | #define I2C_DRIVERID_BMCSENSORS 1036 |
159 | #define I2C_DRIVERID_FS451 1037 | 142 | #define I2C_DRIVERID_FS451 1037 |
160 | #define I2C_DRIVERID_W83627HF 1038 | ||
161 | #define I2C_DRIVERID_LM85 1039 | 143 | #define I2C_DRIVERID_LM85 1039 |
162 | #define I2C_DRIVERID_LM83 1040 | 144 | #define I2C_DRIVERID_LM83 1040 |
163 | #define I2C_DRIVERID_LM90 1042 | 145 | #define I2C_DRIVERID_LM90 1042 |
164 | #define I2C_DRIVERID_ASB100 1043 | 146 | #define I2C_DRIVERID_ASB100 1043 |
165 | #define I2C_DRIVERID_FSCHER 1046 | 147 | #define I2C_DRIVERID_FSCHER 1046 |
166 | #define I2C_DRIVERID_W83L785TS 1047 | 148 | #define I2C_DRIVERID_W83L785TS 1047 |
167 | #define I2C_DRIVERID_SMSC47B397 1050 | ||
168 | 149 | ||
169 | /* | 150 | /* |
170 | * ---- Adapter types ---------------------------------------------------- | 151 | * ---- Adapter types ---------------------------------------------------- |
diff --git a/include/linux/i2c.h b/include/linux/i2c.h index 5e19a7ba69b2..7863a59bd598 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h | |||
@@ -105,14 +105,14 @@ extern s32 i2c_smbus_read_i2c_block_data(struct i2c_client * client, | |||
105 | * A driver is capable of handling one or more physical devices present on | 105 | * A driver is capable of handling one or more physical devices present on |
106 | * I2C adapters. This information is used to inform the driver of adapter | 106 | * I2C adapters. This information is used to inform the driver of adapter |
107 | * events. | 107 | * events. |
108 | * | ||
109 | * The driver.owner field should be set to the module owner of this driver. | ||
110 | * The driver.name field should be set to the name of this driver. | ||
108 | */ | 111 | */ |
109 | 112 | ||
110 | struct i2c_driver { | 113 | struct i2c_driver { |
111 | struct module *owner; | ||
112 | char name[32]; | ||
113 | int id; | 114 | int id; |
114 | unsigned int class; | 115 | unsigned int class; |
115 | unsigned int flags; /* div., see below */ | ||
116 | 116 | ||
117 | /* Notifies the driver that a new bus has appeared. This routine | 117 | /* Notifies the driver that a new bus has appeared. This routine |
118 | * can be used by the driver to test if the bus meets its conditions | 118 | * can be used by the driver to test if the bus meets its conditions |
@@ -250,18 +250,7 @@ static inline void i2c_set_adapdata (struct i2c_adapter *dev, void *data) | |||
250 | dev_set_drvdata (&dev->dev, data); | 250 | dev_set_drvdata (&dev->dev, data); |
251 | } | 251 | } |
252 | 252 | ||
253 | /*flags for the driver struct: */ | ||
254 | #define I2C_DF_NOTIFY 0x01 /* notify on bus (de/a)ttaches */ | ||
255 | #if 0 | ||
256 | /* this flag is gone -- there is a (optional) driver->detach_adapter | ||
257 | * callback now which can be used instead */ | ||
258 | # define I2C_DF_DUMMY 0x02 | ||
259 | #endif | ||
260 | |||
261 | /*flags for the client struct: */ | 253 | /*flags for the client struct: */ |
262 | #define I2C_CLIENT_ALLOW_USE 0x01 /* Client allows access */ | ||
263 | #define I2C_CLIENT_ALLOW_MULTIPLE_USE 0x02 /* Allow multiple access-locks */ | ||
264 | /* on an i2c_client */ | ||
265 | #define I2C_CLIENT_PEC 0x04 /* Use Packet Error Checking */ | 254 | #define I2C_CLIENT_PEC 0x04 /* Use Packet Error Checking */ |
266 | #define I2C_CLIENT_TEN 0x10 /* we have a ten bit chip address */ | 255 | #define I2C_CLIENT_TEN 0x10 /* we have a ten bit chip address */ |
267 | /* Must equal I2C_M_TEN below */ | 256 | /* Must equal I2C_M_TEN below */ |
@@ -302,26 +291,20 @@ struct i2c_client_address_data { | |||
302 | extern int i2c_add_adapter(struct i2c_adapter *); | 291 | extern int i2c_add_adapter(struct i2c_adapter *); |
303 | extern int i2c_del_adapter(struct i2c_adapter *); | 292 | extern int i2c_del_adapter(struct i2c_adapter *); |
304 | 293 | ||
305 | extern int i2c_add_driver(struct i2c_driver *); | 294 | extern int i2c_register_driver(struct module *, struct i2c_driver *); |
306 | extern int i2c_del_driver(struct i2c_driver *); | 295 | extern int i2c_del_driver(struct i2c_driver *); |
307 | 296 | ||
297 | static inline int i2c_add_driver(struct i2c_driver *driver) | ||
298 | { | ||
299 | return i2c_register_driver(THIS_MODULE, driver); | ||
300 | } | ||
301 | |||
308 | extern int i2c_attach_client(struct i2c_client *); | 302 | extern int i2c_attach_client(struct i2c_client *); |
309 | extern int i2c_detach_client(struct i2c_client *); | 303 | extern int i2c_detach_client(struct i2c_client *); |
310 | 304 | ||
311 | /* New function: This is to get an i2c_client-struct for controlling the | 305 | /* Should be used to make sure that client-struct is valid and that it |
312 | client either by using i2c_control-function or having the | 306 | is okay to access the i2c-client. |
313 | client-module export functions that can be used with the i2c_client | 307 | returns -ENODEV if client has gone in the meantime */ |
314 | -struct. */ | ||
315 | extern struct i2c_client *i2c_get_client(int driver_id, int adapter_id, | ||
316 | struct i2c_client *prev); | ||
317 | |||
318 | /* Should be used with new function | ||
319 | extern struct i2c_client *i2c_get_client(int,int,struct i2c_client *); | ||
320 | to make sure that client-struct is valid and that it is okay to access | ||
321 | the i2c-client. | ||
322 | returns -EACCES if client doesn't allow use (default) | ||
323 | returns -EBUSY if client doesn't allow multiple use (default) and | ||
324 | usage_count >0 */ | ||
325 | extern int i2c_use_client(struct i2c_client *); | 308 | extern int i2c_use_client(struct i2c_client *); |
326 | extern int i2c_release_client(struct i2c_client *); | 309 | extern int i2c_release_client(struct i2c_client *); |
327 | 310 | ||
diff --git a/include/linux/i2o.h b/include/linux/i2o.h index d79c8a4bc4f8..9ba806796667 100644 --- a/include/linux/i2o.h +++ b/include/linux/i2o.h | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <linux/string.h> | 30 | #include <linux/string.h> |
31 | #include <linux/slab.h> | 31 | #include <linux/slab.h> |
32 | #include <linux/workqueue.h> /* work_struct */ | 32 | #include <linux/workqueue.h> /* work_struct */ |
33 | #include <linux/mempool.h> | ||
33 | 34 | ||
34 | #include <asm/io.h> | 35 | #include <asm/io.h> |
35 | #include <asm/semaphore.h> /* Needed for MUTEX init macros */ | 36 | #include <asm/semaphore.h> /* Needed for MUTEX init macros */ |
@@ -38,6 +39,355 @@ | |||
38 | #define I2O_QUEUE_EMPTY 0xffffffff | 39 | #define I2O_QUEUE_EMPTY 0xffffffff |
39 | 40 | ||
40 | /* | 41 | /* |
42 | * Cache strategies | ||
43 | */ | ||
44 | |||
45 | /* The NULL strategy leaves everything up to the controller. This tends to be a | ||
46 | * pessimal but functional choice. | ||
47 | */ | ||
48 | #define CACHE_NULL 0 | ||
49 | /* Prefetch data when reading. We continually attempt to load the next 32 sectors | ||
50 | * into the controller cache. | ||
51 | */ | ||
52 | #define CACHE_PREFETCH 1 | ||
53 | /* Prefetch data when reading. We sometimes attempt to load the next 32 sectors | ||
54 | * into the controller cache. When an I/O is less <= 8K we assume its probably | ||
55 | * not sequential and don't prefetch (default) | ||
56 | */ | ||
57 | #define CACHE_SMARTFETCH 2 | ||
58 | /* Data is written to the cache and then out on to the disk. The I/O must be | ||
59 | * physically on the medium before the write is acknowledged (default without | ||
60 | * NVRAM) | ||
61 | */ | ||
62 | #define CACHE_WRITETHROUGH 17 | ||
63 | /* Data is written to the cache and then out on to the disk. The controller | ||
64 | * is permitted to write back the cache any way it wants. (default if battery | ||
65 | * backed NVRAM is present). It can be useful to set this for swap regardless of | ||
66 | * battery state. | ||
67 | */ | ||
68 | #define CACHE_WRITEBACK 18 | ||
69 | /* Optimise for under powered controllers, especially on RAID1 and RAID0. We | ||
70 | * write large I/O's directly to disk bypassing the cache to avoid the extra | ||
71 | * memory copy hits. Small writes are writeback cached | ||
72 | */ | ||
73 | #define CACHE_SMARTBACK 19 | ||
74 | /* Optimise for under powered controllers, especially on RAID1 and RAID0. We | ||
75 | * write large I/O's directly to disk bypassing the cache to avoid the extra | ||
76 | * memory copy hits. Small writes are writethrough cached. Suitable for devices | ||
77 | * lacking battery backup | ||
78 | */ | ||
79 | #define CACHE_SMARTTHROUGH 20 | ||
80 | |||
81 | /* | ||
82 | * Ioctl structures | ||
83 | */ | ||
84 | |||
85 | #define BLKI2OGRSTRAT _IOR('2', 1, int) | ||
86 | #define BLKI2OGWSTRAT _IOR('2', 2, int) | ||
87 | #define BLKI2OSRSTRAT _IOW('2', 3, int) | ||
88 | #define BLKI2OSWSTRAT _IOW('2', 4, int) | ||
89 | |||
90 | /* | ||
91 | * I2O Function codes | ||
92 | */ | ||
93 | |||
94 | /* | ||
95 | * Executive Class | ||
96 | */ | ||
97 | #define I2O_CMD_ADAPTER_ASSIGN 0xB3 | ||
98 | #define I2O_CMD_ADAPTER_READ 0xB2 | ||
99 | #define I2O_CMD_ADAPTER_RELEASE 0xB5 | ||
100 | #define I2O_CMD_BIOS_INFO_SET 0xA5 | ||
101 | #define I2O_CMD_BOOT_DEVICE_SET 0xA7 | ||
102 | #define I2O_CMD_CONFIG_VALIDATE 0xBB | ||
103 | #define I2O_CMD_CONN_SETUP 0xCA | ||
104 | #define I2O_CMD_DDM_DESTROY 0xB1 | ||
105 | #define I2O_CMD_DDM_ENABLE 0xD5 | ||
106 | #define I2O_CMD_DDM_QUIESCE 0xC7 | ||
107 | #define I2O_CMD_DDM_RESET 0xD9 | ||
108 | #define I2O_CMD_DDM_SUSPEND 0xAF | ||
109 | #define I2O_CMD_DEVICE_ASSIGN 0xB7 | ||
110 | #define I2O_CMD_DEVICE_RELEASE 0xB9 | ||
111 | #define I2O_CMD_HRT_GET 0xA8 | ||
112 | #define I2O_CMD_ADAPTER_CLEAR 0xBE | ||
113 | #define I2O_CMD_ADAPTER_CONNECT 0xC9 | ||
114 | #define I2O_CMD_ADAPTER_RESET 0xBD | ||
115 | #define I2O_CMD_LCT_NOTIFY 0xA2 | ||
116 | #define I2O_CMD_OUTBOUND_INIT 0xA1 | ||
117 | #define I2O_CMD_PATH_ENABLE 0xD3 | ||
118 | #define I2O_CMD_PATH_QUIESCE 0xC5 | ||
119 | #define I2O_CMD_PATH_RESET 0xD7 | ||
120 | #define I2O_CMD_STATIC_MF_CREATE 0xDD | ||
121 | #define I2O_CMD_STATIC_MF_RELEASE 0xDF | ||
122 | #define I2O_CMD_STATUS_GET 0xA0 | ||
123 | #define I2O_CMD_SW_DOWNLOAD 0xA9 | ||
124 | #define I2O_CMD_SW_UPLOAD 0xAB | ||
125 | #define I2O_CMD_SW_REMOVE 0xAD | ||
126 | #define I2O_CMD_SYS_ENABLE 0xD1 | ||
127 | #define I2O_CMD_SYS_MODIFY 0xC1 | ||
128 | #define I2O_CMD_SYS_QUIESCE 0xC3 | ||
129 | #define I2O_CMD_SYS_TAB_SET 0xA3 | ||
130 | |||
131 | /* | ||
132 | * Utility Class | ||
133 | */ | ||
134 | #define I2O_CMD_UTIL_NOP 0x00 | ||
135 | #define I2O_CMD_UTIL_ABORT 0x01 | ||
136 | #define I2O_CMD_UTIL_CLAIM 0x09 | ||
137 | #define I2O_CMD_UTIL_RELEASE 0x0B | ||
138 | #define I2O_CMD_UTIL_PARAMS_GET 0x06 | ||
139 | #define I2O_CMD_UTIL_PARAMS_SET 0x05 | ||
140 | #define I2O_CMD_UTIL_EVT_REGISTER 0x13 | ||
141 | #define I2O_CMD_UTIL_EVT_ACK 0x14 | ||
142 | #define I2O_CMD_UTIL_CONFIG_DIALOG 0x10 | ||
143 | #define I2O_CMD_UTIL_DEVICE_RESERVE 0x0D | ||
144 | #define I2O_CMD_UTIL_DEVICE_RELEASE 0x0F | ||
145 | #define I2O_CMD_UTIL_LOCK 0x17 | ||
146 | #define I2O_CMD_UTIL_LOCK_RELEASE 0x19 | ||
147 | #define I2O_CMD_UTIL_REPLY_FAULT_NOTIFY 0x15 | ||
148 | |||
149 | /* | ||
150 | * SCSI Host Bus Adapter Class | ||
151 | */ | ||
152 | #define I2O_CMD_SCSI_EXEC 0x81 | ||
153 | #define I2O_CMD_SCSI_ABORT 0x83 | ||
154 | #define I2O_CMD_SCSI_BUSRESET 0x27 | ||
155 | |||
156 | /* | ||
157 | * Bus Adapter Class | ||
158 | */ | ||
159 | #define I2O_CMD_BUS_ADAPTER_RESET 0x85 | ||
160 | #define I2O_CMD_BUS_RESET 0x87 | ||
161 | #define I2O_CMD_BUS_SCAN 0x89 | ||
162 | #define I2O_CMD_BUS_QUIESCE 0x8b | ||
163 | |||
164 | /* | ||
165 | * Random Block Storage Class | ||
166 | */ | ||
167 | #define I2O_CMD_BLOCK_READ 0x30 | ||
168 | #define I2O_CMD_BLOCK_WRITE 0x31 | ||
169 | #define I2O_CMD_BLOCK_CFLUSH 0x37 | ||
170 | #define I2O_CMD_BLOCK_MLOCK 0x49 | ||
171 | #define I2O_CMD_BLOCK_MUNLOCK 0x4B | ||
172 | #define I2O_CMD_BLOCK_MMOUNT 0x41 | ||
173 | #define I2O_CMD_BLOCK_MEJECT 0x43 | ||
174 | #define I2O_CMD_BLOCK_POWER 0x70 | ||
175 | |||
176 | #define I2O_CMD_PRIVATE 0xFF | ||
177 | |||
178 | /* Command status values */ | ||
179 | |||
180 | #define I2O_CMD_IN_PROGRESS 0x01 | ||
181 | #define I2O_CMD_REJECTED 0x02 | ||
182 | #define I2O_CMD_FAILED 0x03 | ||
183 | #define I2O_CMD_COMPLETED 0x04 | ||
184 | |||
185 | /* I2O API function return values */ | ||
186 | |||
187 | #define I2O_RTN_NO_ERROR 0 | ||
188 | #define I2O_RTN_NOT_INIT 1 | ||
189 | #define I2O_RTN_FREE_Q_EMPTY 2 | ||
190 | #define I2O_RTN_TCB_ERROR 3 | ||
191 | #define I2O_RTN_TRANSACTION_ERROR 4 | ||
192 | #define I2O_RTN_ADAPTER_ALREADY_INIT 5 | ||
193 | #define I2O_RTN_MALLOC_ERROR 6 | ||
194 | #define I2O_RTN_ADPTR_NOT_REGISTERED 7 | ||
195 | #define I2O_RTN_MSG_REPLY_TIMEOUT 8 | ||
196 | #define I2O_RTN_NO_STATUS 9 | ||
197 | #define I2O_RTN_NO_FIRM_VER 10 | ||
198 | #define I2O_RTN_NO_LINK_SPEED 11 | ||
199 | |||
200 | /* Reply message status defines for all messages */ | ||
201 | |||
202 | #define I2O_REPLY_STATUS_SUCCESS 0x00 | ||
203 | #define I2O_REPLY_STATUS_ABORT_DIRTY 0x01 | ||
204 | #define I2O_REPLY_STATUS_ABORT_NO_DATA_TRANSFER 0x02 | ||
205 | #define I2O_REPLY_STATUS_ABORT_PARTIAL_TRANSFER 0x03 | ||
206 | #define I2O_REPLY_STATUS_ERROR_DIRTY 0x04 | ||
207 | #define I2O_REPLY_STATUS_ERROR_NO_DATA_TRANSFER 0x05 | ||
208 | #define I2O_REPLY_STATUS_ERROR_PARTIAL_TRANSFER 0x06 | ||
209 | #define I2O_REPLY_STATUS_PROCESS_ABORT_DIRTY 0x08 | ||
210 | #define I2O_REPLY_STATUS_PROCESS_ABORT_NO_DATA_TRANSFER 0x09 | ||
211 | #define I2O_REPLY_STATUS_PROCESS_ABORT_PARTIAL_TRANSFER 0x0A | ||
212 | #define I2O_REPLY_STATUS_TRANSACTION_ERROR 0x0B | ||
213 | #define I2O_REPLY_STATUS_PROGRESS_REPORT 0x80 | ||
214 | |||
215 | /* Status codes and Error Information for Parameter functions */ | ||
216 | |||
217 | #define I2O_PARAMS_STATUS_SUCCESS 0x00 | ||
218 | #define I2O_PARAMS_STATUS_BAD_KEY_ABORT 0x01 | ||
219 | #define I2O_PARAMS_STATUS_BAD_KEY_CONTINUE 0x02 | ||
220 | #define I2O_PARAMS_STATUS_BUFFER_FULL 0x03 | ||
221 | #define I2O_PARAMS_STATUS_BUFFER_TOO_SMALL 0x04 | ||
222 | #define I2O_PARAMS_STATUS_FIELD_UNREADABLE 0x05 | ||
223 | #define I2O_PARAMS_STATUS_FIELD_UNWRITEABLE 0x06 | ||
224 | #define I2O_PARAMS_STATUS_INSUFFICIENT_FIELDS 0x07 | ||
225 | #define I2O_PARAMS_STATUS_INVALID_GROUP_ID 0x08 | ||
226 | #define I2O_PARAMS_STATUS_INVALID_OPERATION 0x09 | ||
227 | #define I2O_PARAMS_STATUS_NO_KEY_FIELD 0x0A | ||
228 | #define I2O_PARAMS_STATUS_NO_SUCH_FIELD 0x0B | ||
229 | #define I2O_PARAMS_STATUS_NON_DYNAMIC_GROUP 0x0C | ||
230 | #define I2O_PARAMS_STATUS_OPERATION_ERROR 0x0D | ||
231 | #define I2O_PARAMS_STATUS_SCALAR_ERROR 0x0E | ||
232 | #define I2O_PARAMS_STATUS_TABLE_ERROR 0x0F | ||
233 | #define I2O_PARAMS_STATUS_WRONG_GROUP_TYPE 0x10 | ||
234 | |||
235 | /* DetailedStatusCode defines for Executive, DDM, Util and Transaction error | ||
236 | * messages: Table 3-2 Detailed Status Codes.*/ | ||
237 | |||
238 | #define I2O_DSC_SUCCESS 0x0000 | ||
239 | #define I2O_DSC_BAD_KEY 0x0002 | ||
240 | #define I2O_DSC_TCL_ERROR 0x0003 | ||
241 | #define I2O_DSC_REPLY_BUFFER_FULL 0x0004 | ||
242 | #define I2O_DSC_NO_SUCH_PAGE 0x0005 | ||
243 | #define I2O_DSC_INSUFFICIENT_RESOURCE_SOFT 0x0006 | ||
244 | #define I2O_DSC_INSUFFICIENT_RESOURCE_HARD 0x0007 | ||
245 | #define I2O_DSC_CHAIN_BUFFER_TOO_LARGE 0x0009 | ||
246 | #define I2O_DSC_UNSUPPORTED_FUNCTION 0x000A | ||
247 | #define I2O_DSC_DEVICE_LOCKED 0x000B | ||
248 | #define I2O_DSC_DEVICE_RESET 0x000C | ||
249 | #define I2O_DSC_INAPPROPRIATE_FUNCTION 0x000D | ||
250 | #define I2O_DSC_INVALID_INITIATOR_ADDRESS 0x000E | ||
251 | #define I2O_DSC_INVALID_MESSAGE_FLAGS 0x000F | ||
252 | #define I2O_DSC_INVALID_OFFSET 0x0010 | ||
253 | #define I2O_DSC_INVALID_PARAMETER 0x0011 | ||
254 | #define I2O_DSC_INVALID_REQUEST 0x0012 | ||
255 | #define I2O_DSC_INVALID_TARGET_ADDRESS 0x0013 | ||
256 | #define I2O_DSC_MESSAGE_TOO_LARGE 0x0014 | ||
257 | #define I2O_DSC_MESSAGE_TOO_SMALL 0x0015 | ||
258 | #define I2O_DSC_MISSING_PARAMETER 0x0016 | ||
259 | #define I2O_DSC_TIMEOUT 0x0017 | ||
260 | #define I2O_DSC_UNKNOWN_ERROR 0x0018 | ||
261 | #define I2O_DSC_UNKNOWN_FUNCTION 0x0019 | ||
262 | #define I2O_DSC_UNSUPPORTED_VERSION 0x001A | ||
263 | #define I2O_DSC_DEVICE_BUSY 0x001B | ||
264 | #define I2O_DSC_DEVICE_NOT_AVAILABLE 0x001C | ||
265 | |||
266 | /* DetailedStatusCode defines for Block Storage Operation: Table 6-7 Detailed | ||
267 | Status Codes.*/ | ||
268 | |||
269 | #define I2O_BSA_DSC_SUCCESS 0x0000 | ||
270 | #define I2O_BSA_DSC_MEDIA_ERROR 0x0001 | ||
271 | #define I2O_BSA_DSC_ACCESS_ERROR 0x0002 | ||
272 | #define I2O_BSA_DSC_DEVICE_FAILURE 0x0003 | ||
273 | #define I2O_BSA_DSC_DEVICE_NOT_READY 0x0004 | ||
274 | #define I2O_BSA_DSC_MEDIA_NOT_PRESENT 0x0005 | ||
275 | #define I2O_BSA_DSC_MEDIA_LOCKED 0x0006 | ||
276 | #define I2O_BSA_DSC_MEDIA_FAILURE 0x0007 | ||
277 | #define I2O_BSA_DSC_PROTOCOL_FAILURE 0x0008 | ||
278 | #define I2O_BSA_DSC_BUS_FAILURE 0x0009 | ||
279 | #define I2O_BSA_DSC_ACCESS_VIOLATION 0x000A | ||
280 | #define I2O_BSA_DSC_WRITE_PROTECTED 0x000B | ||
281 | #define I2O_BSA_DSC_DEVICE_RESET 0x000C | ||
282 | #define I2O_BSA_DSC_VOLUME_CHANGED 0x000D | ||
283 | #define I2O_BSA_DSC_TIMEOUT 0x000E | ||
284 | |||
285 | /* FailureStatusCodes, Table 3-3 Message Failure Codes */ | ||
286 | |||
287 | #define I2O_FSC_TRANSPORT_SERVICE_SUSPENDED 0x81 | ||
288 | #define I2O_FSC_TRANSPORT_SERVICE_TERMINATED 0x82 | ||
289 | #define I2O_FSC_TRANSPORT_CONGESTION 0x83 | ||
290 | #define I2O_FSC_TRANSPORT_FAILURE 0x84 | ||
291 | #define I2O_FSC_TRANSPORT_STATE_ERROR 0x85 | ||
292 | #define I2O_FSC_TRANSPORT_TIME_OUT 0x86 | ||
293 | #define I2O_FSC_TRANSPORT_ROUTING_FAILURE 0x87 | ||
294 | #define I2O_FSC_TRANSPORT_INVALID_VERSION 0x88 | ||
295 | #define I2O_FSC_TRANSPORT_INVALID_OFFSET 0x89 | ||
296 | #define I2O_FSC_TRANSPORT_INVALID_MSG_FLAGS 0x8A | ||
297 | #define I2O_FSC_TRANSPORT_FRAME_TOO_SMALL 0x8B | ||
298 | #define I2O_FSC_TRANSPORT_FRAME_TOO_LARGE 0x8C | ||
299 | #define I2O_FSC_TRANSPORT_INVALID_TARGET_ID 0x8D | ||
300 | #define I2O_FSC_TRANSPORT_INVALID_INITIATOR_ID 0x8E | ||
301 | #define I2O_FSC_TRANSPORT_INVALID_INITIATOR_CONTEXT 0x8F | ||
302 | #define I2O_FSC_TRANSPORT_UNKNOWN_FAILURE 0xFF | ||
303 | |||
304 | /* Device Claim Types */ | ||
305 | #define I2O_CLAIM_PRIMARY 0x01000000 | ||
306 | #define I2O_CLAIM_MANAGEMENT 0x02000000 | ||
307 | #define I2O_CLAIM_AUTHORIZED 0x03000000 | ||
308 | #define I2O_CLAIM_SECONDARY 0x04000000 | ||
309 | |||
310 | /* Message header defines for VersionOffset */ | ||
311 | #define I2OVER15 0x0001 | ||
312 | #define I2OVER20 0x0002 | ||
313 | |||
314 | /* Default is 1.5 */ | ||
315 | #define I2OVERSION I2OVER15 | ||
316 | |||
317 | #define SGL_OFFSET_0 I2OVERSION | ||
318 | #define SGL_OFFSET_4 (0x0040 | I2OVERSION) | ||
319 | #define SGL_OFFSET_5 (0x0050 | I2OVERSION) | ||
320 | #define SGL_OFFSET_6 (0x0060 | I2OVERSION) | ||
321 | #define SGL_OFFSET_7 (0x0070 | I2OVERSION) | ||
322 | #define SGL_OFFSET_8 (0x0080 | I2OVERSION) | ||
323 | #define SGL_OFFSET_9 (0x0090 | I2OVERSION) | ||
324 | #define SGL_OFFSET_10 (0x00A0 | I2OVERSION) | ||
325 | #define SGL_OFFSET_11 (0x00B0 | I2OVERSION) | ||
326 | #define SGL_OFFSET_12 (0x00C0 | I2OVERSION) | ||
327 | #define SGL_OFFSET(x) (((x)<<4) | I2OVERSION) | ||
328 | |||
329 | /* Transaction Reply Lists (TRL) Control Word structure */ | ||
330 | #define TRL_SINGLE_FIXED_LENGTH 0x00 | ||
331 | #define TRL_SINGLE_VARIABLE_LENGTH 0x40 | ||
332 | #define TRL_MULTIPLE_FIXED_LENGTH 0x80 | ||
333 | |||
334 | /* msg header defines for MsgFlags */ | ||
335 | #define MSG_STATIC 0x0100 | ||
336 | #define MSG_64BIT_CNTXT 0x0200 | ||
337 | #define MSG_MULTI_TRANS 0x1000 | ||
338 | #define MSG_FAIL 0x2000 | ||
339 | #define MSG_FINAL 0x4000 | ||
340 | #define MSG_REPLY 0x8000 | ||
341 | |||
342 | /* minimum size msg */ | ||
343 | #define THREE_WORD_MSG_SIZE 0x00030000 | ||
344 | #define FOUR_WORD_MSG_SIZE 0x00040000 | ||
345 | #define FIVE_WORD_MSG_SIZE 0x00050000 | ||
346 | #define SIX_WORD_MSG_SIZE 0x00060000 | ||
347 | #define SEVEN_WORD_MSG_SIZE 0x00070000 | ||
348 | #define EIGHT_WORD_MSG_SIZE 0x00080000 | ||
349 | #define NINE_WORD_MSG_SIZE 0x00090000 | ||
350 | #define TEN_WORD_MSG_SIZE 0x000A0000 | ||
351 | #define ELEVEN_WORD_MSG_SIZE 0x000B0000 | ||
352 | #define I2O_MESSAGE_SIZE(x) ((x)<<16) | ||
353 | |||
354 | /* special TID assignments */ | ||
355 | #define ADAPTER_TID 0 | ||
356 | #define HOST_TID 1 | ||
357 | |||
358 | /* outbound queue defines */ | ||
359 | #define I2O_MAX_OUTBOUND_MSG_FRAMES 128 | ||
360 | #define I2O_OUTBOUND_MSG_FRAME_SIZE 128 /* in 32-bit words */ | ||
361 | |||
362 | /* inbound queue definitions */ | ||
363 | #define I2O_MSG_INPOOL_MIN 32 | ||
364 | #define I2O_INBOUND_MSG_FRAME_SIZE 128 /* in 32-bit words */ | ||
365 | |||
366 | #define I2O_POST_WAIT_OK 0 | ||
367 | #define I2O_POST_WAIT_TIMEOUT -ETIMEDOUT | ||
368 | |||
369 | #define I2O_CONTEXT_LIST_MIN_LENGTH 15 | ||
370 | #define I2O_CONTEXT_LIST_USED 0x01 | ||
371 | #define I2O_CONTEXT_LIST_DELETED 0x02 | ||
372 | |||
373 | /* timeouts */ | ||
374 | #define I2O_TIMEOUT_INIT_OUTBOUND_QUEUE 15 | ||
375 | #define I2O_TIMEOUT_MESSAGE_GET 5 | ||
376 | #define I2O_TIMEOUT_RESET 30 | ||
377 | #define I2O_TIMEOUT_STATUS_GET 5 | ||
378 | #define I2O_TIMEOUT_LCT_GET 360 | ||
379 | #define I2O_TIMEOUT_SCSI_SCB_ABORT 240 | ||
380 | |||
381 | /* retries */ | ||
382 | #define I2O_HRT_GET_TRIES 3 | ||
383 | #define I2O_LCT_GET_TRIES 3 | ||
384 | |||
385 | /* defines for max_sectors and max_phys_segments */ | ||
386 | #define I2O_MAX_SECTORS 1024 | ||
387 | #define I2O_MAX_SECTORS_LIMITED 128 | ||
388 | #define I2O_MAX_PHYS_SEGMENTS MAX_PHYS_SEGMENTS | ||
389 | |||
390 | /* | ||
41 | * Message structures | 391 | * Message structures |
42 | */ | 392 | */ |
43 | struct i2o_message { | 393 | struct i2o_message { |
@@ -58,6 +408,12 @@ struct i2o_message { | |||
58 | u32 body[0]; | 408 | u32 body[0]; |
59 | }; | 409 | }; |
60 | 410 | ||
411 | /* MFA and I2O message used by mempool */ | ||
412 | struct i2o_msg_mfa { | ||
413 | u32 mfa; /* MFA returned by the controller */ | ||
414 | struct i2o_message msg; /* I2O message */ | ||
415 | }; | ||
416 | |||
61 | /* | 417 | /* |
62 | * Each I2O device entity has one of these. There is one per device. | 418 | * Each I2O device entity has one of these. There is one per device. |
63 | */ | 419 | */ |
@@ -130,6 +486,15 @@ struct i2o_dma { | |||
130 | }; | 486 | }; |
131 | 487 | ||
132 | /* | 488 | /* |
489 | * Contains slab cache and mempool information | ||
490 | */ | ||
491 | struct i2o_pool { | ||
492 | char *name; | ||
493 | kmem_cache_t *slab; | ||
494 | mempool_t *mempool; | ||
495 | }; | ||
496 | |||
497 | /* | ||
133 | * Contains IO mapped address information | 498 | * Contains IO mapped address information |
134 | */ | 499 | */ |
135 | struct i2o_io { | 500 | struct i2o_io { |
@@ -174,8 +539,6 @@ struct i2o_controller { | |||
174 | void __iomem *irq_status; /* Interrupt status register address */ | 539 | void __iomem *irq_status; /* Interrupt status register address */ |
175 | void __iomem *irq_mask; /* Interrupt mask register address */ | 540 | void __iomem *irq_mask; /* Interrupt mask register address */ |
176 | 541 | ||
177 | /* Dynamic LCT related data */ | ||
178 | |||
179 | struct i2o_dma status; /* IOP status block */ | 542 | struct i2o_dma status; /* IOP status block */ |
180 | 543 | ||
181 | struct i2o_dma hrt; /* HW Resource Table */ | 544 | struct i2o_dma hrt; /* HW Resource Table */ |
@@ -188,6 +551,8 @@ struct i2o_controller { | |||
188 | struct i2o_io in_queue; /* inbound message queue Host->IOP */ | 551 | struct i2o_io in_queue; /* inbound message queue Host->IOP */ |
189 | struct i2o_dma out_queue; /* outbound message queue IOP->Host */ | 552 | struct i2o_dma out_queue; /* outbound message queue IOP->Host */ |
190 | 553 | ||
554 | struct i2o_pool in_msg; /* mempool for inbound messages */ | ||
555 | |||
191 | unsigned int battery:1; /* Has a battery backup */ | 556 | unsigned int battery:1; /* Has a battery backup */ |
192 | unsigned int io_alloc:1; /* An I/O resource was allocated */ | 557 | unsigned int io_alloc:1; /* An I/O resource was allocated */ |
193 | unsigned int mem_alloc:1; /* A memory resource was allocated */ | 558 | unsigned int mem_alloc:1; /* A memory resource was allocated */ |
@@ -196,7 +561,6 @@ struct i2o_controller { | |||
196 | struct resource mem_resource; /* Mem resource allocated to the IOP */ | 561 | struct resource mem_resource; /* Mem resource allocated to the IOP */ |
197 | 562 | ||
198 | struct device device; | 563 | struct device device; |
199 | struct class_device *classdev; /* I2O controller class device */ | ||
200 | struct i2o_device *exec; /* Executive */ | 564 | struct i2o_device *exec; /* Executive */ |
201 | #if BITS_PER_LONG == 64 | 565 | #if BITS_PER_LONG == 64 |
202 | spinlock_t context_list_lock; /* lock for context_list */ | 566 | spinlock_t context_list_lock; /* lock for context_list */ |
@@ -247,16 +611,13 @@ struct i2o_sys_tbl { | |||
247 | extern struct list_head i2o_controllers; | 611 | extern struct list_head i2o_controllers; |
248 | 612 | ||
249 | /* Message functions */ | 613 | /* Message functions */ |
250 | static inline u32 i2o_msg_get(struct i2o_controller *, | 614 | static inline struct i2o_message *i2o_msg_get(struct i2o_controller *); |
251 | struct i2o_message __iomem **); | 615 | extern struct i2o_message *i2o_msg_get_wait(struct i2o_controller *, int); |
252 | extern u32 i2o_msg_get_wait(struct i2o_controller *, | 616 | static inline void i2o_msg_post(struct i2o_controller *, struct i2o_message *); |
253 | struct i2o_message __iomem **, int); | 617 | static inline int i2o_msg_post_wait(struct i2o_controller *, |
254 | static inline void i2o_msg_post(struct i2o_controller *, u32); | 618 | struct i2o_message *, unsigned long); |
255 | static inline int i2o_msg_post_wait(struct i2o_controller *, u32, | 619 | extern int i2o_msg_post_wait_mem(struct i2o_controller *, struct i2o_message *, |
256 | unsigned long); | 620 | unsigned long, struct i2o_dma *); |
257 | extern int i2o_msg_post_wait_mem(struct i2o_controller *, u32, unsigned long, | ||
258 | struct i2o_dma *); | ||
259 | extern void i2o_msg_nop(struct i2o_controller *, u32); | ||
260 | static inline void i2o_flush_reply(struct i2o_controller *, u32); | 621 | static inline void i2o_flush_reply(struct i2o_controller *, u32); |
261 | 622 | ||
262 | /* IOP functions */ | 623 | /* IOP functions */ |
@@ -384,10 +745,10 @@ static inline u16 i2o_sg_tablesize(struct i2o_controller *c, u16 body_size) | |||
384 | static inline dma_addr_t i2o_dma_map_single(struct i2o_controller *c, void *ptr, | 745 | static inline dma_addr_t i2o_dma_map_single(struct i2o_controller *c, void *ptr, |
385 | size_t size, | 746 | size_t size, |
386 | enum dma_data_direction direction, | 747 | enum dma_data_direction direction, |
387 | u32 __iomem ** sg_ptr) | 748 | u32 ** sg_ptr) |
388 | { | 749 | { |
389 | u32 sg_flags; | 750 | u32 sg_flags; |
390 | u32 __iomem *mptr = *sg_ptr; | 751 | u32 *mptr = *sg_ptr; |
391 | dma_addr_t dma_addr; | 752 | dma_addr_t dma_addr; |
392 | 753 | ||
393 | switch (direction) { | 754 | switch (direction) { |
@@ -405,16 +766,16 @@ static inline dma_addr_t i2o_dma_map_single(struct i2o_controller *c, void *ptr, | |||
405 | if (!dma_mapping_error(dma_addr)) { | 766 | if (!dma_mapping_error(dma_addr)) { |
406 | #ifdef CONFIG_I2O_EXT_ADAPTEC_DMA64 | 767 | #ifdef CONFIG_I2O_EXT_ADAPTEC_DMA64 |
407 | if ((sizeof(dma_addr_t) > 4) && c->pae_support) { | 768 | if ((sizeof(dma_addr_t) > 4) && c->pae_support) { |
408 | writel(0x7C020002, mptr++); | 769 | *mptr++ = cpu_to_le32(0x7C020002); |
409 | writel(PAGE_SIZE, mptr++); | 770 | *mptr++ = cpu_to_le32(PAGE_SIZE); |
410 | } | 771 | } |
411 | #endif | 772 | #endif |
412 | 773 | ||
413 | writel(sg_flags | size, mptr++); | 774 | *mptr++ = cpu_to_le32(sg_flags | size); |
414 | writel(i2o_dma_low(dma_addr), mptr++); | 775 | *mptr++ = cpu_to_le32(i2o_dma_low(dma_addr)); |
415 | #ifdef CONFIG_I2O_EXT_ADAPTEC_DMA64 | 776 | #ifdef CONFIG_I2O_EXT_ADAPTEC_DMA64 |
416 | if ((sizeof(dma_addr_t) > 4) && c->pae_support) | 777 | if ((sizeof(dma_addr_t) > 4) && c->pae_support) |
417 | writel(i2o_dma_high(dma_addr), mptr++); | 778 | *mptr++ = cpu_to_le32(i2o_dma_high(dma_addr)); |
418 | #endif | 779 | #endif |
419 | *sg_ptr = mptr; | 780 | *sg_ptr = mptr; |
420 | } | 781 | } |
@@ -439,10 +800,10 @@ static inline dma_addr_t i2o_dma_map_single(struct i2o_controller *c, void *ptr, | |||
439 | static inline int i2o_dma_map_sg(struct i2o_controller *c, | 800 | static inline int i2o_dma_map_sg(struct i2o_controller *c, |
440 | struct scatterlist *sg, int sg_count, | 801 | struct scatterlist *sg, int sg_count, |
441 | enum dma_data_direction direction, | 802 | enum dma_data_direction direction, |
442 | u32 __iomem ** sg_ptr) | 803 | u32 ** sg_ptr) |
443 | { | 804 | { |
444 | u32 sg_flags; | 805 | u32 sg_flags; |
445 | u32 __iomem *mptr = *sg_ptr; | 806 | u32 *mptr = *sg_ptr; |
446 | 807 | ||
447 | switch (direction) { | 808 | switch (direction) { |
448 | case DMA_TO_DEVICE: | 809 | case DMA_TO_DEVICE: |
@@ -461,19 +822,19 @@ static inline int i2o_dma_map_sg(struct i2o_controller *c, | |||
461 | 822 | ||
462 | #ifdef CONFIG_I2O_EXT_ADAPTEC_DMA64 | 823 | #ifdef CONFIG_I2O_EXT_ADAPTEC_DMA64 |
463 | if ((sizeof(dma_addr_t) > 4) && c->pae_support) { | 824 | if ((sizeof(dma_addr_t) > 4) && c->pae_support) { |
464 | writel(0x7C020002, mptr++); | 825 | *mptr++ = cpu_to_le32(0x7C020002); |
465 | writel(PAGE_SIZE, mptr++); | 826 | *mptr++ = cpu_to_le32(PAGE_SIZE); |
466 | } | 827 | } |
467 | #endif | 828 | #endif |
468 | 829 | ||
469 | while (sg_count-- > 0) { | 830 | while (sg_count-- > 0) { |
470 | if (!sg_count) | 831 | if (!sg_count) |
471 | sg_flags |= 0xC0000000; | 832 | sg_flags |= 0xC0000000; |
472 | writel(sg_flags | sg_dma_len(sg), mptr++); | 833 | *mptr++ = cpu_to_le32(sg_flags | sg_dma_len(sg)); |
473 | writel(i2o_dma_low(sg_dma_address(sg)), mptr++); | 834 | *mptr++ = cpu_to_le32(i2o_dma_low(sg_dma_address(sg))); |
474 | #ifdef CONFIG_I2O_EXT_ADAPTEC_DMA64 | 835 | #ifdef CONFIG_I2O_EXT_ADAPTEC_DMA64 |
475 | if ((sizeof(dma_addr_t) > 4) && c->pae_support) | 836 | if ((sizeof(dma_addr_t) > 4) && c->pae_support) |
476 | writel(i2o_dma_high(sg_dma_address(sg)), mptr++); | 837 | *mptr++ = cpu_to_le32(i2o_dma_high(sg_dma_address(sg))); |
477 | #endif | 838 | #endif |
478 | sg++; | 839 | sg++; |
479 | } | 840 | } |
@@ -563,6 +924,64 @@ static inline int i2o_dma_realloc(struct device *dev, struct i2o_dma *addr, | |||
563 | return 0; | 924 | return 0; |
564 | }; | 925 | }; |
565 | 926 | ||
927 | /* | ||
928 | * i2o_pool_alloc - Allocate an slab cache and mempool | ||
929 | * @mempool: pointer to struct i2o_pool to write data into. | ||
930 | * @name: name which is used to identify cache | ||
931 | * @size: size of each object | ||
932 | * @min_nr: minimum number of objects | ||
933 | * | ||
934 | * First allocates a slab cache with name and size. Then allocates a | ||
935 | * mempool which uses the slab cache for allocation and freeing. | ||
936 | * | ||
937 | * Returns 0 on success or negative error code on failure. | ||
938 | */ | ||
939 | static inline int i2o_pool_alloc(struct i2o_pool *pool, const char *name, | ||
940 | size_t size, int min_nr) | ||
941 | { | ||
942 | pool->name = kmalloc(strlen(name) + 1, GFP_KERNEL); | ||
943 | if (!pool->name) | ||
944 | goto exit; | ||
945 | strcpy(pool->name, name); | ||
946 | |||
947 | pool->slab = | ||
948 | kmem_cache_create(pool->name, size, 0, SLAB_HWCACHE_ALIGN, NULL, | ||
949 | NULL); | ||
950 | if (!pool->slab) | ||
951 | goto free_name; | ||
952 | |||
953 | pool->mempool = | ||
954 | mempool_create(min_nr, mempool_alloc_slab, mempool_free_slab, | ||
955 | pool->slab); | ||
956 | if (!pool->mempool) | ||
957 | goto free_slab; | ||
958 | |||
959 | return 0; | ||
960 | |||
961 | free_slab: | ||
962 | kmem_cache_destroy(pool->slab); | ||
963 | |||
964 | free_name: | ||
965 | kfree(pool->name); | ||
966 | |||
967 | exit: | ||
968 | return -ENOMEM; | ||
969 | }; | ||
970 | |||
971 | /* | ||
972 | * i2o_pool_free - Free slab cache and mempool again | ||
973 | * @mempool: pointer to struct i2o_pool which should be freed | ||
974 | * | ||
975 | * Note that you have to return all objects to the mempool again before | ||
976 | * calling i2o_pool_free(). | ||
977 | */ | ||
978 | static inline void i2o_pool_free(struct i2o_pool *pool) | ||
979 | { | ||
980 | mempool_destroy(pool->mempool); | ||
981 | kmem_cache_destroy(pool->slab); | ||
982 | kfree(pool->name); | ||
983 | }; | ||
984 | |||
566 | /* I2O driver (OSM) functions */ | 985 | /* I2O driver (OSM) functions */ |
567 | extern int i2o_driver_register(struct i2o_driver *); | 986 | extern int i2o_driver_register(struct i2o_driver *); |
568 | extern void i2o_driver_unregister(struct i2o_driver *); | 987 | extern void i2o_driver_unregister(struct i2o_driver *); |
@@ -638,39 +1057,89 @@ extern int i2o_exec_lct_get(struct i2o_controller *); | |||
638 | #define kobj_to_i2o_device(kobj) to_i2o_device(container_of(kobj, struct device, kobj)) | 1057 | #define kobj_to_i2o_device(kobj) to_i2o_device(container_of(kobj, struct device, kobj)) |
639 | 1058 | ||
640 | /** | 1059 | /** |
1060 | * i2o_out_to_virt - Turn an I2O message to a virtual address | ||
1061 | * @c: controller | ||
1062 | * @m: message engine value | ||
1063 | * | ||
1064 | * Turn a receive message from an I2O controller bus address into | ||
1065 | * a Linux virtual address. The shared page frame is a linear block | ||
1066 | * so we simply have to shift the offset. This function does not | ||
1067 | * work for sender side messages as they are ioremap objects | ||
1068 | * provided by the I2O controller. | ||
1069 | */ | ||
1070 | static inline struct i2o_message *i2o_msg_out_to_virt(struct i2o_controller *c, | ||
1071 | u32 m) | ||
1072 | { | ||
1073 | BUG_ON(m < c->out_queue.phys | ||
1074 | || m >= c->out_queue.phys + c->out_queue.len); | ||
1075 | |||
1076 | return c->out_queue.virt + (m - c->out_queue.phys); | ||
1077 | }; | ||
1078 | |||
1079 | /** | ||
1080 | * i2o_msg_in_to_virt - Turn an I2O message to a virtual address | ||
1081 | * @c: controller | ||
1082 | * @m: message engine value | ||
1083 | * | ||
1084 | * Turn a send message from an I2O controller bus address into | ||
1085 | * a Linux virtual address. The shared page frame is a linear block | ||
1086 | * so we simply have to shift the offset. This function does not | ||
1087 | * work for receive side messages as they are kmalloc objects | ||
1088 | * in a different pool. | ||
1089 | */ | ||
1090 | static inline struct i2o_message __iomem *i2o_msg_in_to_virt(struct | ||
1091 | i2o_controller *c, | ||
1092 | u32 m) | ||
1093 | { | ||
1094 | return c->in_queue.virt + m; | ||
1095 | }; | ||
1096 | |||
1097 | /** | ||
641 | * i2o_msg_get - obtain an I2O message from the IOP | 1098 | * i2o_msg_get - obtain an I2O message from the IOP |
642 | * @c: I2O controller | 1099 | * @c: I2O controller |
643 | * @msg: pointer to a I2O message pointer | ||
644 | * | 1100 | * |
645 | * This function tries to get a message slot. If no message slot is | 1101 | * This function tries to get a message frame. If no message frame is |
646 | * available do not wait until one is availabe (see also i2o_msg_get_wait). | 1102 | * available do not wait until one is availabe (see also i2o_msg_get_wait). |
1103 | * The returned pointer to the message frame is not in I/O memory, it is | ||
1104 | * allocated from a mempool. But because a MFA is allocated from the | ||
1105 | * controller too it is guaranteed that i2o_msg_post() will never fail. | ||
647 | * | 1106 | * |
648 | * On a success the message is returned and the pointer to the message is | 1107 | * On a success a pointer to the message frame is returned. If the message |
649 | * set in msg. The returned message is the physical page frame offset | 1108 | * queue is empty -EBUSY is returned and if no memory is available -ENOMEM |
650 | * address from the read port (see the i2o spec). If no message is | 1109 | * is returned. |
651 | * available returns I2O_QUEUE_EMPTY and msg is leaved untouched. | ||
652 | */ | 1110 | */ |
653 | static inline u32 i2o_msg_get(struct i2o_controller *c, | 1111 | static inline struct i2o_message *i2o_msg_get(struct i2o_controller *c) |
654 | struct i2o_message __iomem ** msg) | ||
655 | { | 1112 | { |
656 | u32 m = readl(c->in_port); | 1113 | struct i2o_msg_mfa *mmsg = mempool_alloc(c->in_msg.mempool, GFP_ATOMIC); |
657 | 1114 | if (!mmsg) | |
658 | if (m != I2O_QUEUE_EMPTY) | 1115 | return ERR_PTR(-ENOMEM); |
659 | *msg = c->in_queue.virt + m; | 1116 | |
1117 | mmsg->mfa = readl(c->in_port); | ||
1118 | if (mmsg->mfa == I2O_QUEUE_EMPTY) { | ||
1119 | mempool_free(mmsg, c->in_msg.mempool); | ||
1120 | return ERR_PTR(-EBUSY); | ||
1121 | } | ||
660 | 1122 | ||
661 | return m; | 1123 | return &mmsg->msg; |
662 | }; | 1124 | }; |
663 | 1125 | ||
664 | /** | 1126 | /** |
665 | * i2o_msg_post - Post I2O message to I2O controller | 1127 | * i2o_msg_post - Post I2O message to I2O controller |
666 | * @c: I2O controller to which the message should be send | 1128 | * @c: I2O controller to which the message should be send |
667 | * @m: the message identifier | 1129 | * @msg: message returned by i2o_msg_get() |
668 | * | 1130 | * |
669 | * Post the message to the I2O controller. | 1131 | * Post the message to the I2O controller and return immediately. |
670 | */ | 1132 | */ |
671 | static inline void i2o_msg_post(struct i2o_controller *c, u32 m) | 1133 | static inline void i2o_msg_post(struct i2o_controller *c, |
1134 | struct i2o_message *msg) | ||
672 | { | 1135 | { |
673 | writel(m, c->in_port); | 1136 | struct i2o_msg_mfa *mmsg; |
1137 | |||
1138 | mmsg = container_of(msg, struct i2o_msg_mfa, msg); | ||
1139 | memcpy_toio(i2o_msg_in_to_virt(c, mmsg->mfa), msg, | ||
1140 | (le32_to_cpu(msg->u.head[0]) >> 16) << 2); | ||
1141 | writel(mmsg->mfa, c->in_port); | ||
1142 | mempool_free(mmsg, c->in_msg.mempool); | ||
674 | }; | 1143 | }; |
675 | 1144 | ||
676 | /** | 1145 | /** |
@@ -685,62 +1154,66 @@ static inline void i2o_msg_post(struct i2o_controller *c, u32 m) | |||
685 | * | 1154 | * |
686 | * Returns 0 on success or negative error code on failure. | 1155 | * Returns 0 on success or negative error code on failure. |
687 | */ | 1156 | */ |
688 | static inline int i2o_msg_post_wait(struct i2o_controller *c, u32 m, | 1157 | static inline int i2o_msg_post_wait(struct i2o_controller *c, |
1158 | struct i2o_message *msg, | ||
689 | unsigned long timeout) | 1159 | unsigned long timeout) |
690 | { | 1160 | { |
691 | return i2o_msg_post_wait_mem(c, m, timeout, NULL); | 1161 | return i2o_msg_post_wait_mem(c, msg, timeout, NULL); |
692 | }; | 1162 | }; |
693 | 1163 | ||
694 | /** | 1164 | /** |
695 | * i2o_flush_reply - Flush reply from I2O controller | 1165 | * i2o_msg_nop_mfa - Returns a fetched MFA back to the controller |
696 | * @c: I2O controller | 1166 | * @c: I2O controller from which the MFA was fetched |
697 | * @m: the message identifier | 1167 | * @mfa: MFA which should be returned |
698 | * | 1168 | * |
699 | * The I2O controller must be informed that the reply message is not needed | 1169 | * This function must be used for preserved messages, because i2o_msg_nop() |
700 | * anymore. If you forget to flush the reply, the message frame can't be | 1170 | * also returns the allocated memory back to the msg_pool mempool. |
701 | * used by the controller anymore and is therefore lost. | ||
702 | */ | 1171 | */ |
703 | static inline void i2o_flush_reply(struct i2o_controller *c, u32 m) | 1172 | static inline void i2o_msg_nop_mfa(struct i2o_controller *c, u32 mfa) |
704 | { | 1173 | { |
705 | writel(m, c->out_port); | 1174 | struct i2o_message __iomem *msg; |
1175 | u32 nop[3] = { | ||
1176 | THREE_WORD_MSG_SIZE | SGL_OFFSET_0, | ||
1177 | I2O_CMD_UTIL_NOP << 24 | HOST_TID << 12 | ADAPTER_TID, | ||
1178 | 0x00000000 | ||
1179 | }; | ||
1180 | |||
1181 | msg = i2o_msg_in_to_virt(c, mfa); | ||
1182 | memcpy_toio(msg, nop, sizeof(nop)); | ||
1183 | writel(mfa, c->in_port); | ||
706 | }; | 1184 | }; |
707 | 1185 | ||
708 | /** | 1186 | /** |
709 | * i2o_out_to_virt - Turn an I2O message to a virtual address | 1187 | * i2o_msg_nop - Returns a message which is not used |
710 | * @c: controller | 1188 | * @c: I2O controller from which the message was created |
711 | * @m: message engine value | 1189 | * @msg: message which should be returned |
712 | * | 1190 | * |
713 | * Turn a receive message from an I2O controller bus address into | 1191 | * If you fetch a message via i2o_msg_get, and can't use it, you must |
714 | * a Linux virtual address. The shared page frame is a linear block | 1192 | * return the message with this function. Otherwise the MFA is lost as well |
715 | * so we simply have to shift the offset. This function does not | 1193 | * as the allocated memory from the mempool. |
716 | * work for sender side messages as they are ioremap objects | ||
717 | * provided by the I2O controller. | ||
718 | */ | 1194 | */ |
719 | static inline struct i2o_message *i2o_msg_out_to_virt(struct i2o_controller *c, | 1195 | static inline void i2o_msg_nop(struct i2o_controller *c, |
720 | u32 m) | 1196 | struct i2o_message *msg) |
721 | { | 1197 | { |
722 | BUG_ON(m < c->out_queue.phys | 1198 | struct i2o_msg_mfa *mmsg; |
723 | || m >= c->out_queue.phys + c->out_queue.len); | 1199 | mmsg = container_of(msg, struct i2o_msg_mfa, msg); |
724 | 1200 | ||
725 | return c->out_queue.virt + (m - c->out_queue.phys); | 1201 | i2o_msg_nop_mfa(c, mmsg->mfa); |
1202 | mempool_free(mmsg, c->in_msg.mempool); | ||
726 | }; | 1203 | }; |
727 | 1204 | ||
728 | /** | 1205 | /** |
729 | * i2o_msg_in_to_virt - Turn an I2O message to a virtual address | 1206 | * i2o_flush_reply - Flush reply from I2O controller |
730 | * @c: controller | 1207 | * @c: I2O controller |
731 | * @m: message engine value | 1208 | * @m: the message identifier |
732 | * | 1209 | * |
733 | * Turn a send message from an I2O controller bus address into | 1210 | * The I2O controller must be informed that the reply message is not needed |
734 | * a Linux virtual address. The shared page frame is a linear block | 1211 | * anymore. If you forget to flush the reply, the message frame can't be |
735 | * so we simply have to shift the offset. This function does not | 1212 | * used by the controller anymore and is therefore lost. |
736 | * work for receive side messages as they are kmalloc objects | ||
737 | * in a different pool. | ||
738 | */ | 1213 | */ |
739 | static inline struct i2o_message __iomem *i2o_msg_in_to_virt(struct | 1214 | static inline void i2o_flush_reply(struct i2o_controller *c, u32 m) |
740 | i2o_controller *c, | ||
741 | u32 m) | ||
742 | { | 1215 | { |
743 | return c->in_queue.virt + m; | 1216 | writel(m, c->out_port); |
744 | }; | 1217 | }; |
745 | 1218 | ||
746 | /* | 1219 | /* |
@@ -779,350 +1252,5 @@ extern void i2o_dump_message(struct i2o_message *); | |||
779 | extern void i2o_dump_hrt(struct i2o_controller *c); | 1252 | extern void i2o_dump_hrt(struct i2o_controller *c); |
780 | extern void i2o_debug_state(struct i2o_controller *c); | 1253 | extern void i2o_debug_state(struct i2o_controller *c); |
781 | 1254 | ||
782 | /* | ||
783 | * Cache strategies | ||
784 | */ | ||
785 | |||
786 | /* The NULL strategy leaves everything up to the controller. This tends to be a | ||
787 | * pessimal but functional choice. | ||
788 | */ | ||
789 | #define CACHE_NULL 0 | ||
790 | /* Prefetch data when reading. We continually attempt to load the next 32 sectors | ||
791 | * into the controller cache. | ||
792 | */ | ||
793 | #define CACHE_PREFETCH 1 | ||
794 | /* Prefetch data when reading. We sometimes attempt to load the next 32 sectors | ||
795 | * into the controller cache. When an I/O is less <= 8K we assume its probably | ||
796 | * not sequential and don't prefetch (default) | ||
797 | */ | ||
798 | #define CACHE_SMARTFETCH 2 | ||
799 | /* Data is written to the cache and then out on to the disk. The I/O must be | ||
800 | * physically on the medium before the write is acknowledged (default without | ||
801 | * NVRAM) | ||
802 | */ | ||
803 | #define CACHE_WRITETHROUGH 17 | ||
804 | /* Data is written to the cache and then out on to the disk. The controller | ||
805 | * is permitted to write back the cache any way it wants. (default if battery | ||
806 | * backed NVRAM is present). It can be useful to set this for swap regardless of | ||
807 | * battery state. | ||
808 | */ | ||
809 | #define CACHE_WRITEBACK 18 | ||
810 | /* Optimise for under powered controllers, especially on RAID1 and RAID0. We | ||
811 | * write large I/O's directly to disk bypassing the cache to avoid the extra | ||
812 | * memory copy hits. Small writes are writeback cached | ||
813 | */ | ||
814 | #define CACHE_SMARTBACK 19 | ||
815 | /* Optimise for under powered controllers, especially on RAID1 and RAID0. We | ||
816 | * write large I/O's directly to disk bypassing the cache to avoid the extra | ||
817 | * memory copy hits. Small writes are writethrough cached. Suitable for devices | ||
818 | * lacking battery backup | ||
819 | */ | ||
820 | #define CACHE_SMARTTHROUGH 20 | ||
821 | |||
822 | /* | ||
823 | * Ioctl structures | ||
824 | */ | ||
825 | |||
826 | #define BLKI2OGRSTRAT _IOR('2', 1, int) | ||
827 | #define BLKI2OGWSTRAT _IOR('2', 2, int) | ||
828 | #define BLKI2OSRSTRAT _IOW('2', 3, int) | ||
829 | #define BLKI2OSWSTRAT _IOW('2', 4, int) | ||
830 | |||
831 | /* | ||
832 | * I2O Function codes | ||
833 | */ | ||
834 | |||
835 | /* | ||
836 | * Executive Class | ||
837 | */ | ||
838 | #define I2O_CMD_ADAPTER_ASSIGN 0xB3 | ||
839 | #define I2O_CMD_ADAPTER_READ 0xB2 | ||
840 | #define I2O_CMD_ADAPTER_RELEASE 0xB5 | ||
841 | #define I2O_CMD_BIOS_INFO_SET 0xA5 | ||
842 | #define I2O_CMD_BOOT_DEVICE_SET 0xA7 | ||
843 | #define I2O_CMD_CONFIG_VALIDATE 0xBB | ||
844 | #define I2O_CMD_CONN_SETUP 0xCA | ||
845 | #define I2O_CMD_DDM_DESTROY 0xB1 | ||
846 | #define I2O_CMD_DDM_ENABLE 0xD5 | ||
847 | #define I2O_CMD_DDM_QUIESCE 0xC7 | ||
848 | #define I2O_CMD_DDM_RESET 0xD9 | ||
849 | #define I2O_CMD_DDM_SUSPEND 0xAF | ||
850 | #define I2O_CMD_DEVICE_ASSIGN 0xB7 | ||
851 | #define I2O_CMD_DEVICE_RELEASE 0xB9 | ||
852 | #define I2O_CMD_HRT_GET 0xA8 | ||
853 | #define I2O_CMD_ADAPTER_CLEAR 0xBE | ||
854 | #define I2O_CMD_ADAPTER_CONNECT 0xC9 | ||
855 | #define I2O_CMD_ADAPTER_RESET 0xBD | ||
856 | #define I2O_CMD_LCT_NOTIFY 0xA2 | ||
857 | #define I2O_CMD_OUTBOUND_INIT 0xA1 | ||
858 | #define I2O_CMD_PATH_ENABLE 0xD3 | ||
859 | #define I2O_CMD_PATH_QUIESCE 0xC5 | ||
860 | #define I2O_CMD_PATH_RESET 0xD7 | ||
861 | #define I2O_CMD_STATIC_MF_CREATE 0xDD | ||
862 | #define I2O_CMD_STATIC_MF_RELEASE 0xDF | ||
863 | #define I2O_CMD_STATUS_GET 0xA0 | ||
864 | #define I2O_CMD_SW_DOWNLOAD 0xA9 | ||
865 | #define I2O_CMD_SW_UPLOAD 0xAB | ||
866 | #define I2O_CMD_SW_REMOVE 0xAD | ||
867 | #define I2O_CMD_SYS_ENABLE 0xD1 | ||
868 | #define I2O_CMD_SYS_MODIFY 0xC1 | ||
869 | #define I2O_CMD_SYS_QUIESCE 0xC3 | ||
870 | #define I2O_CMD_SYS_TAB_SET 0xA3 | ||
871 | |||
872 | /* | ||
873 | * Utility Class | ||
874 | */ | ||
875 | #define I2O_CMD_UTIL_NOP 0x00 | ||
876 | #define I2O_CMD_UTIL_ABORT 0x01 | ||
877 | #define I2O_CMD_UTIL_CLAIM 0x09 | ||
878 | #define I2O_CMD_UTIL_RELEASE 0x0B | ||
879 | #define I2O_CMD_UTIL_PARAMS_GET 0x06 | ||
880 | #define I2O_CMD_UTIL_PARAMS_SET 0x05 | ||
881 | #define I2O_CMD_UTIL_EVT_REGISTER 0x13 | ||
882 | #define I2O_CMD_UTIL_EVT_ACK 0x14 | ||
883 | #define I2O_CMD_UTIL_CONFIG_DIALOG 0x10 | ||
884 | #define I2O_CMD_UTIL_DEVICE_RESERVE 0x0D | ||
885 | #define I2O_CMD_UTIL_DEVICE_RELEASE 0x0F | ||
886 | #define I2O_CMD_UTIL_LOCK 0x17 | ||
887 | #define I2O_CMD_UTIL_LOCK_RELEASE 0x19 | ||
888 | #define I2O_CMD_UTIL_REPLY_FAULT_NOTIFY 0x15 | ||
889 | |||
890 | /* | ||
891 | * SCSI Host Bus Adapter Class | ||
892 | */ | ||
893 | #define I2O_CMD_SCSI_EXEC 0x81 | ||
894 | #define I2O_CMD_SCSI_ABORT 0x83 | ||
895 | #define I2O_CMD_SCSI_BUSRESET 0x27 | ||
896 | |||
897 | /* | ||
898 | * Bus Adapter Class | ||
899 | */ | ||
900 | #define I2O_CMD_BUS_ADAPTER_RESET 0x85 | ||
901 | #define I2O_CMD_BUS_RESET 0x87 | ||
902 | #define I2O_CMD_BUS_SCAN 0x89 | ||
903 | #define I2O_CMD_BUS_QUIESCE 0x8b | ||
904 | |||
905 | /* | ||
906 | * Random Block Storage Class | ||
907 | */ | ||
908 | #define I2O_CMD_BLOCK_READ 0x30 | ||
909 | #define I2O_CMD_BLOCK_WRITE 0x31 | ||
910 | #define I2O_CMD_BLOCK_CFLUSH 0x37 | ||
911 | #define I2O_CMD_BLOCK_MLOCK 0x49 | ||
912 | #define I2O_CMD_BLOCK_MUNLOCK 0x4B | ||
913 | #define I2O_CMD_BLOCK_MMOUNT 0x41 | ||
914 | #define I2O_CMD_BLOCK_MEJECT 0x43 | ||
915 | #define I2O_CMD_BLOCK_POWER 0x70 | ||
916 | |||
917 | #define I2O_CMD_PRIVATE 0xFF | ||
918 | |||
919 | /* Command status values */ | ||
920 | |||
921 | #define I2O_CMD_IN_PROGRESS 0x01 | ||
922 | #define I2O_CMD_REJECTED 0x02 | ||
923 | #define I2O_CMD_FAILED 0x03 | ||
924 | #define I2O_CMD_COMPLETED 0x04 | ||
925 | |||
926 | /* I2O API function return values */ | ||
927 | |||
928 | #define I2O_RTN_NO_ERROR 0 | ||
929 | #define I2O_RTN_NOT_INIT 1 | ||
930 | #define I2O_RTN_FREE_Q_EMPTY 2 | ||
931 | #define I2O_RTN_TCB_ERROR 3 | ||
932 | #define I2O_RTN_TRANSACTION_ERROR 4 | ||
933 | #define I2O_RTN_ADAPTER_ALREADY_INIT 5 | ||
934 | #define I2O_RTN_MALLOC_ERROR 6 | ||
935 | #define I2O_RTN_ADPTR_NOT_REGISTERED 7 | ||
936 | #define I2O_RTN_MSG_REPLY_TIMEOUT 8 | ||
937 | #define I2O_RTN_NO_STATUS 9 | ||
938 | #define I2O_RTN_NO_FIRM_VER 10 | ||
939 | #define I2O_RTN_NO_LINK_SPEED 11 | ||
940 | |||
941 | /* Reply message status defines for all messages */ | ||
942 | |||
943 | #define I2O_REPLY_STATUS_SUCCESS 0x00 | ||
944 | #define I2O_REPLY_STATUS_ABORT_DIRTY 0x01 | ||
945 | #define I2O_REPLY_STATUS_ABORT_NO_DATA_TRANSFER 0x02 | ||
946 | #define I2O_REPLY_STATUS_ABORT_PARTIAL_TRANSFER 0x03 | ||
947 | #define I2O_REPLY_STATUS_ERROR_DIRTY 0x04 | ||
948 | #define I2O_REPLY_STATUS_ERROR_NO_DATA_TRANSFER 0x05 | ||
949 | #define I2O_REPLY_STATUS_ERROR_PARTIAL_TRANSFER 0x06 | ||
950 | #define I2O_REPLY_STATUS_PROCESS_ABORT_DIRTY 0x08 | ||
951 | #define I2O_REPLY_STATUS_PROCESS_ABORT_NO_DATA_TRANSFER 0x09 | ||
952 | #define I2O_REPLY_STATUS_PROCESS_ABORT_PARTIAL_TRANSFER 0x0A | ||
953 | #define I2O_REPLY_STATUS_TRANSACTION_ERROR 0x0B | ||
954 | #define I2O_REPLY_STATUS_PROGRESS_REPORT 0x80 | ||
955 | |||
956 | /* Status codes and Error Information for Parameter functions */ | ||
957 | |||
958 | #define I2O_PARAMS_STATUS_SUCCESS 0x00 | ||
959 | #define I2O_PARAMS_STATUS_BAD_KEY_ABORT 0x01 | ||
960 | #define I2O_PARAMS_STATUS_BAD_KEY_CONTINUE 0x02 | ||
961 | #define I2O_PARAMS_STATUS_BUFFER_FULL 0x03 | ||
962 | #define I2O_PARAMS_STATUS_BUFFER_TOO_SMALL 0x04 | ||
963 | #define I2O_PARAMS_STATUS_FIELD_UNREADABLE 0x05 | ||
964 | #define I2O_PARAMS_STATUS_FIELD_UNWRITEABLE 0x06 | ||
965 | #define I2O_PARAMS_STATUS_INSUFFICIENT_FIELDS 0x07 | ||
966 | #define I2O_PARAMS_STATUS_INVALID_GROUP_ID 0x08 | ||
967 | #define I2O_PARAMS_STATUS_INVALID_OPERATION 0x09 | ||
968 | #define I2O_PARAMS_STATUS_NO_KEY_FIELD 0x0A | ||
969 | #define I2O_PARAMS_STATUS_NO_SUCH_FIELD 0x0B | ||
970 | #define I2O_PARAMS_STATUS_NON_DYNAMIC_GROUP 0x0C | ||
971 | #define I2O_PARAMS_STATUS_OPERATION_ERROR 0x0D | ||
972 | #define I2O_PARAMS_STATUS_SCALAR_ERROR 0x0E | ||
973 | #define I2O_PARAMS_STATUS_TABLE_ERROR 0x0F | ||
974 | #define I2O_PARAMS_STATUS_WRONG_GROUP_TYPE 0x10 | ||
975 | |||
976 | /* DetailedStatusCode defines for Executive, DDM, Util and Transaction error | ||
977 | * messages: Table 3-2 Detailed Status Codes.*/ | ||
978 | |||
979 | #define I2O_DSC_SUCCESS 0x0000 | ||
980 | #define I2O_DSC_BAD_KEY 0x0002 | ||
981 | #define I2O_DSC_TCL_ERROR 0x0003 | ||
982 | #define I2O_DSC_REPLY_BUFFER_FULL 0x0004 | ||
983 | #define I2O_DSC_NO_SUCH_PAGE 0x0005 | ||
984 | #define I2O_DSC_INSUFFICIENT_RESOURCE_SOFT 0x0006 | ||
985 | #define I2O_DSC_INSUFFICIENT_RESOURCE_HARD 0x0007 | ||
986 | #define I2O_DSC_CHAIN_BUFFER_TOO_LARGE 0x0009 | ||
987 | #define I2O_DSC_UNSUPPORTED_FUNCTION 0x000A | ||
988 | #define I2O_DSC_DEVICE_LOCKED 0x000B | ||
989 | #define I2O_DSC_DEVICE_RESET 0x000C | ||
990 | #define I2O_DSC_INAPPROPRIATE_FUNCTION 0x000D | ||
991 | #define I2O_DSC_INVALID_INITIATOR_ADDRESS 0x000E | ||
992 | #define I2O_DSC_INVALID_MESSAGE_FLAGS 0x000F | ||
993 | #define I2O_DSC_INVALID_OFFSET 0x0010 | ||
994 | #define I2O_DSC_INVALID_PARAMETER 0x0011 | ||
995 | #define I2O_DSC_INVALID_REQUEST 0x0012 | ||
996 | #define I2O_DSC_INVALID_TARGET_ADDRESS 0x0013 | ||
997 | #define I2O_DSC_MESSAGE_TOO_LARGE 0x0014 | ||
998 | #define I2O_DSC_MESSAGE_TOO_SMALL 0x0015 | ||
999 | #define I2O_DSC_MISSING_PARAMETER 0x0016 | ||
1000 | #define I2O_DSC_TIMEOUT 0x0017 | ||
1001 | #define I2O_DSC_UNKNOWN_ERROR 0x0018 | ||
1002 | #define I2O_DSC_UNKNOWN_FUNCTION 0x0019 | ||
1003 | #define I2O_DSC_UNSUPPORTED_VERSION 0x001A | ||
1004 | #define I2O_DSC_DEVICE_BUSY 0x001B | ||
1005 | #define I2O_DSC_DEVICE_NOT_AVAILABLE 0x001C | ||
1006 | |||
1007 | /* DetailedStatusCode defines for Block Storage Operation: Table 6-7 Detailed | ||
1008 | Status Codes.*/ | ||
1009 | |||
1010 | #define I2O_BSA_DSC_SUCCESS 0x0000 | ||
1011 | #define I2O_BSA_DSC_MEDIA_ERROR 0x0001 | ||
1012 | #define I2O_BSA_DSC_ACCESS_ERROR 0x0002 | ||
1013 | #define I2O_BSA_DSC_DEVICE_FAILURE 0x0003 | ||
1014 | #define I2O_BSA_DSC_DEVICE_NOT_READY 0x0004 | ||
1015 | #define I2O_BSA_DSC_MEDIA_NOT_PRESENT 0x0005 | ||
1016 | #define I2O_BSA_DSC_MEDIA_LOCKED 0x0006 | ||
1017 | #define I2O_BSA_DSC_MEDIA_FAILURE 0x0007 | ||
1018 | #define I2O_BSA_DSC_PROTOCOL_FAILURE 0x0008 | ||
1019 | #define I2O_BSA_DSC_BUS_FAILURE 0x0009 | ||
1020 | #define I2O_BSA_DSC_ACCESS_VIOLATION 0x000A | ||
1021 | #define I2O_BSA_DSC_WRITE_PROTECTED 0x000B | ||
1022 | #define I2O_BSA_DSC_DEVICE_RESET 0x000C | ||
1023 | #define I2O_BSA_DSC_VOLUME_CHANGED 0x000D | ||
1024 | #define I2O_BSA_DSC_TIMEOUT 0x000E | ||
1025 | |||
1026 | /* FailureStatusCodes, Table 3-3 Message Failure Codes */ | ||
1027 | |||
1028 | #define I2O_FSC_TRANSPORT_SERVICE_SUSPENDED 0x81 | ||
1029 | #define I2O_FSC_TRANSPORT_SERVICE_TERMINATED 0x82 | ||
1030 | #define I2O_FSC_TRANSPORT_CONGESTION 0x83 | ||
1031 | #define I2O_FSC_TRANSPORT_FAILURE 0x84 | ||
1032 | #define I2O_FSC_TRANSPORT_STATE_ERROR 0x85 | ||
1033 | #define I2O_FSC_TRANSPORT_TIME_OUT 0x86 | ||
1034 | #define I2O_FSC_TRANSPORT_ROUTING_FAILURE 0x87 | ||
1035 | #define I2O_FSC_TRANSPORT_INVALID_VERSION 0x88 | ||
1036 | #define I2O_FSC_TRANSPORT_INVALID_OFFSET 0x89 | ||
1037 | #define I2O_FSC_TRANSPORT_INVALID_MSG_FLAGS 0x8A | ||
1038 | #define I2O_FSC_TRANSPORT_FRAME_TOO_SMALL 0x8B | ||
1039 | #define I2O_FSC_TRANSPORT_FRAME_TOO_LARGE 0x8C | ||
1040 | #define I2O_FSC_TRANSPORT_INVALID_TARGET_ID 0x8D | ||
1041 | #define I2O_FSC_TRANSPORT_INVALID_INITIATOR_ID 0x8E | ||
1042 | #define I2O_FSC_TRANSPORT_INVALID_INITIATOR_CONTEXT 0x8F | ||
1043 | #define I2O_FSC_TRANSPORT_UNKNOWN_FAILURE 0xFF | ||
1044 | |||
1045 | /* Device Claim Types */ | ||
1046 | #define I2O_CLAIM_PRIMARY 0x01000000 | ||
1047 | #define I2O_CLAIM_MANAGEMENT 0x02000000 | ||
1048 | #define I2O_CLAIM_AUTHORIZED 0x03000000 | ||
1049 | #define I2O_CLAIM_SECONDARY 0x04000000 | ||
1050 | |||
1051 | /* Message header defines for VersionOffset */ | ||
1052 | #define I2OVER15 0x0001 | ||
1053 | #define I2OVER20 0x0002 | ||
1054 | |||
1055 | /* Default is 1.5 */ | ||
1056 | #define I2OVERSION I2OVER15 | ||
1057 | |||
1058 | #define SGL_OFFSET_0 I2OVERSION | ||
1059 | #define SGL_OFFSET_4 (0x0040 | I2OVERSION) | ||
1060 | #define SGL_OFFSET_5 (0x0050 | I2OVERSION) | ||
1061 | #define SGL_OFFSET_6 (0x0060 | I2OVERSION) | ||
1062 | #define SGL_OFFSET_7 (0x0070 | I2OVERSION) | ||
1063 | #define SGL_OFFSET_8 (0x0080 | I2OVERSION) | ||
1064 | #define SGL_OFFSET_9 (0x0090 | I2OVERSION) | ||
1065 | #define SGL_OFFSET_10 (0x00A0 | I2OVERSION) | ||
1066 | #define SGL_OFFSET_11 (0x00B0 | I2OVERSION) | ||
1067 | #define SGL_OFFSET_12 (0x00C0 | I2OVERSION) | ||
1068 | #define SGL_OFFSET(x) (((x)<<4) | I2OVERSION) | ||
1069 | |||
1070 | /* Transaction Reply Lists (TRL) Control Word structure */ | ||
1071 | #define TRL_SINGLE_FIXED_LENGTH 0x00 | ||
1072 | #define TRL_SINGLE_VARIABLE_LENGTH 0x40 | ||
1073 | #define TRL_MULTIPLE_FIXED_LENGTH 0x80 | ||
1074 | |||
1075 | /* msg header defines for MsgFlags */ | ||
1076 | #define MSG_STATIC 0x0100 | ||
1077 | #define MSG_64BIT_CNTXT 0x0200 | ||
1078 | #define MSG_MULTI_TRANS 0x1000 | ||
1079 | #define MSG_FAIL 0x2000 | ||
1080 | #define MSG_FINAL 0x4000 | ||
1081 | #define MSG_REPLY 0x8000 | ||
1082 | |||
1083 | /* minimum size msg */ | ||
1084 | #define THREE_WORD_MSG_SIZE 0x00030000 | ||
1085 | #define FOUR_WORD_MSG_SIZE 0x00040000 | ||
1086 | #define FIVE_WORD_MSG_SIZE 0x00050000 | ||
1087 | #define SIX_WORD_MSG_SIZE 0x00060000 | ||
1088 | #define SEVEN_WORD_MSG_SIZE 0x00070000 | ||
1089 | #define EIGHT_WORD_MSG_SIZE 0x00080000 | ||
1090 | #define NINE_WORD_MSG_SIZE 0x00090000 | ||
1091 | #define TEN_WORD_MSG_SIZE 0x000A0000 | ||
1092 | #define ELEVEN_WORD_MSG_SIZE 0x000B0000 | ||
1093 | #define I2O_MESSAGE_SIZE(x) ((x)<<16) | ||
1094 | |||
1095 | /* special TID assignments */ | ||
1096 | #define ADAPTER_TID 0 | ||
1097 | #define HOST_TID 1 | ||
1098 | |||
1099 | /* outbound queue defines */ | ||
1100 | #define I2O_MAX_OUTBOUND_MSG_FRAMES 128 | ||
1101 | #define I2O_OUTBOUND_MSG_FRAME_SIZE 128 /* in 32-bit words */ | ||
1102 | |||
1103 | #define I2O_POST_WAIT_OK 0 | ||
1104 | #define I2O_POST_WAIT_TIMEOUT -ETIMEDOUT | ||
1105 | |||
1106 | #define I2O_CONTEXT_LIST_MIN_LENGTH 15 | ||
1107 | #define I2O_CONTEXT_LIST_USED 0x01 | ||
1108 | #define I2O_CONTEXT_LIST_DELETED 0x02 | ||
1109 | |||
1110 | /* timeouts */ | ||
1111 | #define I2O_TIMEOUT_INIT_OUTBOUND_QUEUE 15 | ||
1112 | #define I2O_TIMEOUT_MESSAGE_GET 5 | ||
1113 | #define I2O_TIMEOUT_RESET 30 | ||
1114 | #define I2O_TIMEOUT_STATUS_GET 5 | ||
1115 | #define I2O_TIMEOUT_LCT_GET 360 | ||
1116 | #define I2O_TIMEOUT_SCSI_SCB_ABORT 240 | ||
1117 | |||
1118 | /* retries */ | ||
1119 | #define I2O_HRT_GET_TRIES 3 | ||
1120 | #define I2O_LCT_GET_TRIES 3 | ||
1121 | |||
1122 | /* defines for max_sectors and max_phys_segments */ | ||
1123 | #define I2O_MAX_SECTORS 1024 | ||
1124 | #define I2O_MAX_SECTORS_LIMITED 256 | ||
1125 | #define I2O_MAX_PHYS_SEGMENTS MAX_PHYS_SEGMENTS | ||
1126 | |||
1127 | #endif /* __KERNEL__ */ | 1255 | #endif /* __KERNEL__ */ |
1128 | #endif /* _I2O_H */ | 1256 | #endif /* _I2O_H */ |
diff --git a/include/linux/ide.h b/include/linux/ide.h index a39c3c59789d..4dd6694963c0 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
@@ -23,17 +23,6 @@ | |||
23 | #include <asm/io.h> | 23 | #include <asm/io.h> |
24 | #include <asm/semaphore.h> | 24 | #include <asm/semaphore.h> |
25 | 25 | ||
26 | /* | ||
27 | * This is the multiple IDE interface driver, as evolved from hd.c. | ||
28 | * It supports up to four IDE interfaces, on one or more IRQs (usually 14 & 15). | ||
29 | * There can be up to two drives per interface, as per the ATA-2 spec. | ||
30 | * | ||
31 | * Primary i/f: ide0: major=3; (hda) minor=0; (hdb) minor=64 | ||
32 | * Secondary i/f: ide1: major=22; (hdc or hd1a) minor=0; (hdd or hd1b) minor=64 | ||
33 | * Tertiary i/f: ide2: major=33; (hde) minor=0; (hdf) minor=64 | ||
34 | * Quaternary i/f: ide3: major=34; (hdg) minor=0; (hdh) minor=64 | ||
35 | */ | ||
36 | |||
37 | /****************************************************************************** | 26 | /****************************************************************************** |
38 | * IDE driver configuration options (play with these as desired): | 27 | * IDE driver configuration options (play with these as desired): |
39 | * | 28 | * |
@@ -193,11 +182,6 @@ typedef unsigned char byte; /* used everywhere */ | |||
193 | #define WAIT_CMD (10*HZ) /* 10sec - maximum wait for an IRQ to happen */ | 182 | #define WAIT_CMD (10*HZ) /* 10sec - maximum wait for an IRQ to happen */ |
194 | #define WAIT_MIN_SLEEP (2*HZ/100) /* 20msec - minimum sleep time */ | 183 | #define WAIT_MIN_SLEEP (2*HZ/100) /* 20msec - minimum sleep time */ |
195 | 184 | ||
196 | #define HOST(hwif,chipset) \ | ||
197 | { \ | ||
198 | return ((hwif)->chipset == chipset) ? 1 : 0; \ | ||
199 | } | ||
200 | |||
201 | /* | 185 | /* |
202 | * Check for an interrupt and acknowledge the interrupt status | 186 | * Check for an interrupt and acknowledge the interrupt status |
203 | */ | 187 | */ |
@@ -391,45 +375,6 @@ typedef union { | |||
391 | } ata_nsector_t, ata_data_t, atapi_bcount_t, ata_index_t; | 375 | } ata_nsector_t, ata_data_t, atapi_bcount_t, ata_index_t; |
392 | 376 | ||
393 | /* | 377 | /* |
394 | * ATA-IDE Error Register | ||
395 | * | ||
396 | * mark : Bad address mark | ||
397 | * tzero : Couldn't find track 0 | ||
398 | * abrt : Aborted Command | ||
399 | * mcr : Media Change Request | ||
400 | * id : ID field not found | ||
401 | * mce : Media Change Event | ||
402 | * ecc : Uncorrectable ECC error | ||
403 | * bdd : dual meaing | ||
404 | */ | ||
405 | typedef union { | ||
406 | unsigned all :8; | ||
407 | struct { | ||
408 | #if defined(__LITTLE_ENDIAN_BITFIELD) | ||
409 | unsigned mark :1; | ||
410 | unsigned tzero :1; | ||
411 | unsigned abrt :1; | ||
412 | unsigned mcr :1; | ||
413 | unsigned id :1; | ||
414 | unsigned mce :1; | ||
415 | unsigned ecc :1; | ||
416 | unsigned bdd :1; | ||
417 | #elif defined(__BIG_ENDIAN_BITFIELD) | ||
418 | unsigned bdd :1; | ||
419 | unsigned ecc :1; | ||
420 | unsigned mce :1; | ||
421 | unsigned id :1; | ||
422 | unsigned mcr :1; | ||
423 | unsigned abrt :1; | ||
424 | unsigned tzero :1; | ||
425 | unsigned mark :1; | ||
426 | #else | ||
427 | #error "Please fix <asm/byteorder.h>" | ||
428 | #endif | ||
429 | } b; | ||
430 | } ata_error_t; | ||
431 | |||
432 | /* | ||
433 | * ATA-IDE Select Register, aka Device-Head | 378 | * ATA-IDE Select Register, aka Device-Head |
434 | * | 379 | * |
435 | * head : always zeros here | 380 | * head : always zeros here |
@@ -504,39 +449,6 @@ typedef union { | |||
504 | } ata_status_t, atapi_status_t; | 449 | } ata_status_t, atapi_status_t; |
505 | 450 | ||
506 | /* | 451 | /* |
507 | * ATA-IDE Control Register | ||
508 | * | ||
509 | * bit0 : Should be set to zero | ||
510 | * nIEN : device INTRQ to host | ||
511 | * SRST : host soft reset bit | ||
512 | * bit3 : ATA-2 thingy, Should be set to 1 | ||
513 | * reserved456 : Reserved | ||
514 | * HOB : 48-bit address ordering, High Ordered Bit | ||
515 | */ | ||
516 | typedef union { | ||
517 | unsigned all : 8; | ||
518 | struct { | ||
519 | #if defined(__LITTLE_ENDIAN_BITFIELD) | ||
520 | unsigned bit0 : 1; | ||
521 | unsigned nIEN : 1; | ||
522 | unsigned SRST : 1; | ||
523 | unsigned bit3 : 1; | ||
524 | unsigned reserved456 : 3; | ||
525 | unsigned HOB : 1; | ||
526 | #elif defined(__BIG_ENDIAN_BITFIELD) | ||
527 | unsigned HOB : 1; | ||
528 | unsigned reserved456 : 3; | ||
529 | unsigned bit3 : 1; | ||
530 | unsigned SRST : 1; | ||
531 | unsigned nIEN : 1; | ||
532 | unsigned bit0 : 1; | ||
533 | #else | ||
534 | #error "Please fix <asm/byteorder.h>" | ||
535 | #endif | ||
536 | } b; | ||
537 | } ata_control_t; | ||
538 | |||
539 | /* | ||
540 | * ATAPI Feature Register | 452 | * ATAPI Feature Register |
541 | * | 453 | * |
542 | * dma : Using DMA or PIO | 454 | * dma : Using DMA or PIO |
@@ -618,39 +530,6 @@ typedef union { | |||
618 | } atapi_error_t; | 530 | } atapi_error_t; |
619 | 531 | ||
620 | /* | 532 | /* |
621 | * ATAPI floppy Drive Select Register | ||
622 | * | ||
623 | * sam_lun : Logical unit number | ||
624 | * reserved3 : Reserved | ||
625 | * drv : The responding drive will be drive 0 (0) or drive 1 (1) | ||
626 | * one5 : Should be set to 1 | ||
627 | * reserved6 : Reserved | ||
628 | * one7 : Should be set to 1 | ||
629 | */ | ||
630 | typedef union { | ||
631 | unsigned all :8; | ||
632 | struct { | ||
633 | #if defined(__LITTLE_ENDIAN_BITFIELD) | ||
634 | unsigned sam_lun :3; | ||
635 | unsigned reserved3 :1; | ||
636 | unsigned drv :1; | ||
637 | unsigned one5 :1; | ||
638 | unsigned reserved6 :1; | ||
639 | unsigned one7 :1; | ||
640 | #elif defined(__BIG_ENDIAN_BITFIELD) | ||
641 | unsigned one7 :1; | ||
642 | unsigned reserved6 :1; | ||
643 | unsigned one5 :1; | ||
644 | unsigned drv :1; | ||
645 | unsigned reserved3 :1; | ||
646 | unsigned sam_lun :3; | ||
647 | #else | ||
648 | #error "Please fix <asm/byteorder.h>" | ||
649 | #endif | ||
650 | } b; | ||
651 | } atapi_select_t; | ||
652 | |||
653 | /* | ||
654 | * Status returned from various ide_ functions | 533 | * Status returned from various ide_ functions |
655 | */ | 534 | */ |
656 | typedef enum { | 535 | typedef enum { |
@@ -922,7 +801,7 @@ typedef struct hwif_s { | |||
922 | unsigned dma; | 801 | unsigned dma; |
923 | 802 | ||
924 | void (*led_act)(void *data, int rw); | 803 | void (*led_act)(void *data, int rw); |
925 | } ____cacheline_maxaligned_in_smp ide_hwif_t; | 804 | } ____cacheline_internodealigned_in_smp ide_hwif_t; |
926 | 805 | ||
927 | /* | 806 | /* |
928 | * internal ide interrupt handler type | 807 | * internal ide interrupt handler type |
@@ -1101,10 +980,7 @@ typedef struct ide_driver_s { | |||
1101 | int (*end_request)(ide_drive_t *, int, int); | 980 | int (*end_request)(ide_drive_t *, int, int); |
1102 | ide_startstop_t (*error)(ide_drive_t *, struct request *rq, u8, u8); | 981 | ide_startstop_t (*error)(ide_drive_t *, struct request *rq, u8, u8); |
1103 | ide_startstop_t (*abort)(ide_drive_t *, struct request *rq); | 982 | ide_startstop_t (*abort)(ide_drive_t *, struct request *rq); |
1104 | int (*ioctl)(ide_drive_t *, struct inode *, struct file *, unsigned int, unsigned long); | ||
1105 | ide_proc_entry_t *proc; | 983 | ide_proc_entry_t *proc; |
1106 | void (*ata_prebuilder)(ide_drive_t *); | ||
1107 | void (*atapi_prebuilder)(ide_drive_t *); | ||
1108 | struct device_driver gen_driver; | 984 | struct device_driver gen_driver; |
1109 | } ide_driver_t; | 985 | } ide_driver_t; |
1110 | 986 | ||
@@ -1298,7 +1174,6 @@ extern int ide_spin_wait_hwgroup(ide_drive_t *); | |||
1298 | extern void ide_timer_expiry(unsigned long); | 1174 | extern void ide_timer_expiry(unsigned long); |
1299 | extern irqreturn_t ide_intr(int irq, void *dev_id, struct pt_regs *regs); | 1175 | extern irqreturn_t ide_intr(int irq, void *dev_id, struct pt_regs *regs); |
1300 | extern void do_ide_request(request_queue_t *); | 1176 | extern void do_ide_request(request_queue_t *); |
1301 | extern void ide_init_subdrivers(void); | ||
1302 | 1177 | ||
1303 | void ide_init_disk(struct gendisk *, ide_drive_t *); | 1178 | void ide_init_disk(struct gendisk *, ide_drive_t *); |
1304 | 1179 | ||
@@ -1371,6 +1246,12 @@ void ide_init_sg_cmd(ide_drive_t *, struct request *); | |||
1371 | #define GOOD_DMA_DRIVE 1 | 1246 | #define GOOD_DMA_DRIVE 1 |
1372 | 1247 | ||
1373 | #ifdef CONFIG_BLK_DEV_IDEDMA | 1248 | #ifdef CONFIG_BLK_DEV_IDEDMA |
1249 | struct drive_list_entry { | ||
1250 | const char *id_model; | ||
1251 | const char *id_firmware; | ||
1252 | }; | ||
1253 | |||
1254 | int ide_in_drive_list(struct hd_driveid *, const struct drive_list_entry *); | ||
1374 | int __ide_dma_bad_drive(ide_drive_t *); | 1255 | int __ide_dma_bad_drive(ide_drive_t *); |
1375 | int __ide_dma_good_drive(ide_drive_t *); | 1256 | int __ide_dma_good_drive(ide_drive_t *); |
1376 | int ide_use_dma(ide_drive_t *); | 1257 | int ide_use_dma(ide_drive_t *); |
diff --git a/include/linux/if_frad.h b/include/linux/if_frad.h index 511999c7eeda..395f0aad9cbf 100644 --- a/include/linux/if_frad.h +++ b/include/linux/if_frad.h | |||
@@ -131,17 +131,17 @@ struct frad_conf | |||
131 | /* these are the fields of an RFC 1490 header */ | 131 | /* these are the fields of an RFC 1490 header */ |
132 | struct frhdr | 132 | struct frhdr |
133 | { | 133 | { |
134 | unsigned char control __attribute__((packed)); | 134 | unsigned char control; |
135 | 135 | ||
136 | /* for IP packets, this can be the NLPID */ | 136 | /* for IP packets, this can be the NLPID */ |
137 | unsigned char pad __attribute__((packed)); | 137 | unsigned char pad; |
138 | 138 | ||
139 | unsigned char NLPID __attribute__((packed)); | 139 | unsigned char NLPID; |
140 | unsigned char OUI[3] __attribute__((packed)); | 140 | unsigned char OUI[3]; |
141 | unsigned short PID __attribute__((packed)); | 141 | unsigned short PID; |
142 | 142 | ||
143 | #define IP_NLPID pad | 143 | #define IP_NLPID pad |
144 | }; | 144 | } __attribute__((packed)); |
145 | 145 | ||
146 | /* see RFC 1490 for the definition of the following */ | 146 | /* see RFC 1490 for the definition of the following */ |
147 | #define FRAD_I_UI 0x03 | 147 | #define FRAD_I_UI 0x03 |
diff --git a/include/linux/if_pppox.h b/include/linux/if_pppox.h index e677f73f13dd..4fab3d0a4bce 100644 --- a/include/linux/if_pppox.h +++ b/include/linux/if_pppox.h | |||
@@ -157,8 +157,7 @@ struct pppox_proto { | |||
157 | extern int register_pppox_proto(int proto_num, struct pppox_proto *pp); | 157 | extern int register_pppox_proto(int proto_num, struct pppox_proto *pp); |
158 | extern void unregister_pppox_proto(int proto_num); | 158 | extern void unregister_pppox_proto(int proto_num); |
159 | extern void pppox_unbind_sock(struct sock *sk);/* delete ppp-channel binding */ | 159 | extern void pppox_unbind_sock(struct sock *sk);/* delete ppp-channel binding */ |
160 | extern int pppox_channel_ioctl(struct ppp_channel *pc, unsigned int cmd, | 160 | extern int pppox_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg); |
161 | unsigned long arg); | ||
162 | 161 | ||
163 | /* PPPoX socket states */ | 162 | /* PPPoX socket states */ |
164 | enum { | 163 | enum { |
diff --git a/include/linux/inet.h b/include/linux/inet.h index 3b5e9fdff872..6c5587af118d 100644 --- a/include/linux/inet.h +++ b/include/linux/inet.h | |||
@@ -45,6 +45,6 @@ | |||
45 | #ifdef __KERNEL__ | 45 | #ifdef __KERNEL__ |
46 | #include <linux/types.h> | 46 | #include <linux/types.h> |
47 | 47 | ||
48 | extern __u32 in_aton(const char *str); | 48 | extern __be32 in_aton(const char *str); |
49 | #endif | 49 | #endif |
50 | #endif /* _LINUX_INET_H */ | 50 | #endif /* _LINUX_INET_H */ |
diff --git a/include/linux/inotify.h b/include/linux/inotify.h index ee5b239092ed..267c88b5f742 100644 --- a/include/linux/inotify.h +++ b/include/linux/inotify.h | |||
@@ -47,6 +47,8 @@ struct inotify_event { | |||
47 | #define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO) /* moves */ | 47 | #define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO) /* moves */ |
48 | 48 | ||
49 | /* special flags */ | 49 | /* special flags */ |
50 | #define IN_ONLYDIR 0x01000000 /* only watch the path if it is a directory */ | ||
51 | #define IN_DONT_FOLLOW 0x02000000 /* don't follow a sym link */ | ||
50 | #define IN_MASK_ADD 0x20000000 /* add to the mask of an already existing watch */ | 52 | #define IN_MASK_ADD 0x20000000 /* add to the mask of an already existing watch */ |
51 | #define IN_ISDIR 0x40000000 /* event occurred against dir */ | 53 | #define IN_ISDIR 0x40000000 /* event occurred against dir */ |
52 | #define IN_ONESHOT 0x80000000 /* only send event once */ | 54 | #define IN_ONESHOT 0x80000000 /* only send event once */ |
diff --git a/include/linux/input.h b/include/linux/input.h index 3c5823368ddb..6d4cc3c110d6 100644 --- a/include/linux/input.h +++ b/include/linux/input.h | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/time.h> | 13 | #include <linux/time.h> |
14 | #include <linux/list.h> | 14 | #include <linux/list.h> |
15 | #include <linux/device.h> | 15 | #include <linux/device.h> |
16 | #include <linux/mod_devicetable.h> | ||
16 | #else | 17 | #else |
17 | #include <sys/time.h> | 18 | #include <sys/time.h> |
18 | #include <sys/ioctl.h> | 19 | #include <sys/ioctl.h> |
@@ -511,6 +512,8 @@ struct input_absinfo { | |||
511 | #define KEY_FN_S 0x1e3 | 512 | #define KEY_FN_S 0x1e3 |
512 | #define KEY_FN_B 0x1e4 | 513 | #define KEY_FN_B 0x1e4 |
513 | 514 | ||
515 | /* We avoid low common keys in module aliases so they don't get huge. */ | ||
516 | #define KEY_MIN_INTERESTING KEY_MUTE | ||
514 | #define KEY_MAX 0x1ff | 517 | #define KEY_MAX 0x1ff |
515 | 518 | ||
516 | /* | 519 | /* |
@@ -793,6 +796,44 @@ struct ff_effect { | |||
793 | 796 | ||
794 | #define FF_MAX 0x7f | 797 | #define FF_MAX 0x7f |
795 | 798 | ||
799 | struct input_device_id { | ||
800 | |||
801 | kernel_ulong_t flags; | ||
802 | |||
803 | struct input_id id; | ||
804 | |||
805 | kernel_ulong_t evbit[EV_MAX/BITS_PER_LONG+1]; | ||
806 | kernel_ulong_t keybit[KEY_MAX/BITS_PER_LONG+1]; | ||
807 | kernel_ulong_t relbit[REL_MAX/BITS_PER_LONG+1]; | ||
808 | kernel_ulong_t absbit[ABS_MAX/BITS_PER_LONG+1]; | ||
809 | kernel_ulong_t mscbit[MSC_MAX/BITS_PER_LONG+1]; | ||
810 | kernel_ulong_t ledbit[LED_MAX/BITS_PER_LONG+1]; | ||
811 | kernel_ulong_t sndbit[SND_MAX/BITS_PER_LONG+1]; | ||
812 | kernel_ulong_t ffbit[FF_MAX/BITS_PER_LONG+1]; | ||
813 | kernel_ulong_t swbit[SW_MAX/BITS_PER_LONG+1]; | ||
814 | |||
815 | kernel_ulong_t driver_info; | ||
816 | }; | ||
817 | |||
818 | /* | ||
819 | * Structure for hotplug & device<->driver matching. | ||
820 | */ | ||
821 | |||
822 | #define INPUT_DEVICE_ID_MATCH_BUS 1 | ||
823 | #define INPUT_DEVICE_ID_MATCH_VENDOR 2 | ||
824 | #define INPUT_DEVICE_ID_MATCH_PRODUCT 4 | ||
825 | #define INPUT_DEVICE_ID_MATCH_VERSION 8 | ||
826 | |||
827 | #define INPUT_DEVICE_ID_MATCH_EVBIT 0x010 | ||
828 | #define INPUT_DEVICE_ID_MATCH_KEYBIT 0x020 | ||
829 | #define INPUT_DEVICE_ID_MATCH_RELBIT 0x040 | ||
830 | #define INPUT_DEVICE_ID_MATCH_ABSBIT 0x080 | ||
831 | #define INPUT_DEVICE_ID_MATCH_MSCIT 0x100 | ||
832 | #define INPUT_DEVICE_ID_MATCH_LEDBIT 0x200 | ||
833 | #define INPUT_DEVICE_ID_MATCH_SNDBIT 0x400 | ||
834 | #define INPUT_DEVICE_ID_MATCH_FFBIT 0x800 | ||
835 | #define INPUT_DEVICE_ID_MATCH_SWBIT 0x1000 | ||
836 | |||
796 | #ifdef __KERNEL__ | 837 | #ifdef __KERNEL__ |
797 | 838 | ||
798 | /* | 839 | /* |
@@ -901,49 +942,11 @@ struct input_dev { | |||
901 | }; | 942 | }; |
902 | #define to_input_dev(d) container_of(d, struct input_dev, cdev) | 943 | #define to_input_dev(d) container_of(d, struct input_dev, cdev) |
903 | 944 | ||
904 | /* | ||
905 | * Structure for hotplug & device<->driver matching. | ||
906 | */ | ||
907 | |||
908 | #define INPUT_DEVICE_ID_MATCH_BUS 1 | ||
909 | #define INPUT_DEVICE_ID_MATCH_VENDOR 2 | ||
910 | #define INPUT_DEVICE_ID_MATCH_PRODUCT 4 | ||
911 | #define INPUT_DEVICE_ID_MATCH_VERSION 8 | ||
912 | |||
913 | #define INPUT_DEVICE_ID_MATCH_EVBIT 0x010 | ||
914 | #define INPUT_DEVICE_ID_MATCH_KEYBIT 0x020 | ||
915 | #define INPUT_DEVICE_ID_MATCH_RELBIT 0x040 | ||
916 | #define INPUT_DEVICE_ID_MATCH_ABSBIT 0x080 | ||
917 | #define INPUT_DEVICE_ID_MATCH_MSCIT 0x100 | ||
918 | #define INPUT_DEVICE_ID_MATCH_LEDBIT 0x200 | ||
919 | #define INPUT_DEVICE_ID_MATCH_SNDBIT 0x400 | ||
920 | #define INPUT_DEVICE_ID_MATCH_FFBIT 0x800 | ||
921 | #define INPUT_DEVICE_ID_MATCH_SWBIT 0x1000 | ||
922 | |||
923 | #define INPUT_DEVICE_ID_MATCH_DEVICE\ | 945 | #define INPUT_DEVICE_ID_MATCH_DEVICE\ |
924 | (INPUT_DEVICE_ID_MATCH_BUS | INPUT_DEVICE_ID_MATCH_VENDOR | INPUT_DEVICE_ID_MATCH_PRODUCT) | 946 | (INPUT_DEVICE_ID_MATCH_BUS | INPUT_DEVICE_ID_MATCH_VENDOR | INPUT_DEVICE_ID_MATCH_PRODUCT) |
925 | #define INPUT_DEVICE_ID_MATCH_DEVICE_AND_VERSION\ | 947 | #define INPUT_DEVICE_ID_MATCH_DEVICE_AND_VERSION\ |
926 | (INPUT_DEVICE_ID_MATCH_DEVICE | INPUT_DEVICE_ID_MATCH_VERSION) | 948 | (INPUT_DEVICE_ID_MATCH_DEVICE | INPUT_DEVICE_ID_MATCH_VERSION) |
927 | 949 | ||
928 | struct input_device_id { | ||
929 | |||
930 | unsigned long flags; | ||
931 | |||
932 | struct input_id id; | ||
933 | |||
934 | unsigned long evbit[NBITS(EV_MAX)]; | ||
935 | unsigned long keybit[NBITS(KEY_MAX)]; | ||
936 | unsigned long relbit[NBITS(REL_MAX)]; | ||
937 | unsigned long absbit[NBITS(ABS_MAX)]; | ||
938 | unsigned long mscbit[NBITS(MSC_MAX)]; | ||
939 | unsigned long ledbit[NBITS(LED_MAX)]; | ||
940 | unsigned long sndbit[NBITS(SND_MAX)]; | ||
941 | unsigned long ffbit[NBITS(FF_MAX)]; | ||
942 | unsigned long swbit[NBITS(SW_MAX)]; | ||
943 | |||
944 | unsigned long driver_info; | ||
945 | }; | ||
946 | |||
947 | struct input_handle; | 950 | struct input_handle; |
948 | 951 | ||
949 | struct input_handler { | 952 | struct input_handler { |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 41f150a3d2dd..e50a95fbeb11 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
@@ -79,7 +79,7 @@ static inline void __deprecated save_flags(unsigned long *x) | |||
79 | { | 79 | { |
80 | local_save_flags(*x); | 80 | local_save_flags(*x); |
81 | } | 81 | } |
82 | #define save_flags(x) save_flags(&x); | 82 | #define save_flags(x) save_flags(&x) |
83 | static inline void __deprecated restore_flags(unsigned long x) | 83 | static inline void __deprecated restore_flags(unsigned long x) |
84 | { | 84 | { |
85 | local_irq_restore(x); | 85 | local_irq_restore(x); |
diff --git a/include/linux/ip.h b/include/linux/ip.h index 33e8a19a1a0f..4b55cf1df732 100644 --- a/include/linux/ip.h +++ b/include/linux/ip.h | |||
@@ -16,6 +16,7 @@ | |||
16 | */ | 16 | */ |
17 | #ifndef _LINUX_IP_H | 17 | #ifndef _LINUX_IP_H |
18 | #define _LINUX_IP_H | 18 | #define _LINUX_IP_H |
19 | #include <linux/types.h> | ||
19 | #include <asm/byteorder.h> | 20 | #include <asm/byteorder.h> |
20 | 21 | ||
21 | #define IPTOS_TOS_MASK 0x1E | 22 | #define IPTOS_TOS_MASK 0x1E |
@@ -78,126 +79,6 @@ | |||
78 | #define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */ | 79 | #define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */ |
79 | #define IPOPT_TS_PRESPEC 3 /* specified modules only */ | 80 | #define IPOPT_TS_PRESPEC 3 /* specified modules only */ |
80 | 81 | ||
81 | #ifdef __KERNEL__ | ||
82 | #include <linux/config.h> | ||
83 | #include <linux/types.h> | ||
84 | #include <net/request_sock.h> | ||
85 | #include <net/sock.h> | ||
86 | #include <linux/igmp.h> | ||
87 | #include <net/flow.h> | ||
88 | |||
89 | struct ip_options { | ||
90 | __u32 faddr; /* Saved first hop address */ | ||
91 | unsigned char optlen; | ||
92 | unsigned char srr; | ||
93 | unsigned char rr; | ||
94 | unsigned char ts; | ||
95 | unsigned char is_setbyuser:1, /* Set by setsockopt? */ | ||
96 | is_data:1, /* Options in __data, rather than skb */ | ||
97 | is_strictroute:1, /* Strict source route */ | ||
98 | srr_is_hit:1, /* Packet destination addr was our one */ | ||
99 | is_changed:1, /* IP checksum more not valid */ | ||
100 | rr_needaddr:1, /* Need to record addr of outgoing dev */ | ||
101 | ts_needtime:1, /* Need to record timestamp */ | ||
102 | ts_needaddr:1; /* Need to record addr of outgoing dev */ | ||
103 | unsigned char router_alert; | ||
104 | unsigned char __pad1; | ||
105 | unsigned char __pad2; | ||
106 | unsigned char __data[0]; | ||
107 | }; | ||
108 | |||
109 | #define optlength(opt) (sizeof(struct ip_options) + opt->optlen) | ||
110 | |||
111 | struct inet_request_sock { | ||
112 | struct request_sock req; | ||
113 | u32 loc_addr; | ||
114 | u32 rmt_addr; | ||
115 | u16 rmt_port; | ||
116 | u16 snd_wscale : 4, | ||
117 | rcv_wscale : 4, | ||
118 | tstamp_ok : 1, | ||
119 | sack_ok : 1, | ||
120 | wscale_ok : 1, | ||
121 | ecn_ok : 1, | ||
122 | acked : 1; | ||
123 | struct ip_options *opt; | ||
124 | }; | ||
125 | |||
126 | static inline struct inet_request_sock *inet_rsk(const struct request_sock *sk) | ||
127 | { | ||
128 | return (struct inet_request_sock *)sk; | ||
129 | } | ||
130 | |||
131 | struct ipv6_pinfo; | ||
132 | |||
133 | struct inet_sock { | ||
134 | /* sk and pinet6 has to be the first two members of inet_sock */ | ||
135 | struct sock sk; | ||
136 | #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) | ||
137 | struct ipv6_pinfo *pinet6; | ||
138 | #endif | ||
139 | /* Socket demultiplex comparisons on incoming packets. */ | ||
140 | __u32 daddr; /* Foreign IPv4 addr */ | ||
141 | __u32 rcv_saddr; /* Bound local IPv4 addr */ | ||
142 | __u16 dport; /* Destination port */ | ||
143 | __u16 num; /* Local port */ | ||
144 | __u32 saddr; /* Sending source */ | ||
145 | __s16 uc_ttl; /* Unicast TTL */ | ||
146 | __u16 cmsg_flags; | ||
147 | struct ip_options *opt; | ||
148 | __u16 sport; /* Source port */ | ||
149 | __u16 id; /* ID counter for DF pkts */ | ||
150 | __u8 tos; /* TOS */ | ||
151 | __u8 mc_ttl; /* Multicasting TTL */ | ||
152 | __u8 pmtudisc; | ||
153 | unsigned recverr : 1, | ||
154 | freebind : 1, | ||
155 | hdrincl : 1, | ||
156 | mc_loop : 1; | ||
157 | int mc_index; /* Multicast device index */ | ||
158 | __u32 mc_addr; | ||
159 | struct ip_mc_socklist *mc_list; /* Group array */ | ||
160 | /* | ||
161 | * Following members are used to retain the infomation to build | ||
162 | * an ip header on each ip fragmentation while the socket is corked. | ||
163 | */ | ||
164 | struct { | ||
165 | unsigned int flags; | ||
166 | unsigned int fragsize; | ||
167 | struct ip_options *opt; | ||
168 | struct rtable *rt; | ||
169 | int length; /* Total length of all frames */ | ||
170 | u32 addr; | ||
171 | struct flowi fl; | ||
172 | } cork; | ||
173 | }; | ||
174 | |||
175 | #define IPCORK_OPT 1 /* ip-options has been held in ipcork.opt */ | ||
176 | #define IPCORK_ALLFRAG 2 /* always fragment (for ipv6 for now) */ | ||
177 | |||
178 | static inline struct inet_sock *inet_sk(const struct sock *sk) | ||
179 | { | ||
180 | return (struct inet_sock *)sk; | ||
181 | } | ||
182 | |||
183 | static inline void __inet_sk_copy_descendant(struct sock *sk_to, | ||
184 | const struct sock *sk_from, | ||
185 | const int ancestor_size) | ||
186 | { | ||
187 | memcpy(inet_sk(sk_to) + 1, inet_sk(sk_from) + 1, | ||
188 | sk_from->sk_prot->obj_size - ancestor_size); | ||
189 | } | ||
190 | #if !(defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)) | ||
191 | static inline void inet_sk_copy_descendant(struct sock *sk_to, | ||
192 | const struct sock *sk_from) | ||
193 | { | ||
194 | __inet_sk_copy_descendant(sk_to, sk_from, sizeof(struct inet_sock)); | ||
195 | } | ||
196 | #endif | ||
197 | #endif | ||
198 | |||
199 | extern int inet_sk_rebuild_header(struct sock *sk); | ||
200 | |||
201 | struct iphdr { | 82 | struct iphdr { |
202 | #if defined(__LITTLE_ENDIAN_BITFIELD) | 83 | #if defined(__LITTLE_ENDIAN_BITFIELD) |
203 | __u8 ihl:4, | 84 | __u8 ihl:4, |
@@ -209,14 +90,14 @@ struct iphdr { | |||
209 | #error "Please fix <asm/byteorder.h>" | 90 | #error "Please fix <asm/byteorder.h>" |
210 | #endif | 91 | #endif |
211 | __u8 tos; | 92 | __u8 tos; |
212 | __u16 tot_len; | 93 | __be16 tot_len; |
213 | __u16 id; | 94 | __be16 id; |
214 | __u16 frag_off; | 95 | __be16 frag_off; |
215 | __u8 ttl; | 96 | __u8 ttl; |
216 | __u8 protocol; | 97 | __u8 protocol; |
217 | __u16 check; | 98 | __u16 check; |
218 | __u32 saddr; | 99 | __be32 saddr; |
219 | __u32 daddr; | 100 | __be32 daddr; |
220 | /*The options start here. */ | 101 | /*The options start here. */ |
221 | }; | 102 | }; |
222 | 103 | ||
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h index e0b922785d98..9c8f4c9ed429 100644 --- a/include/linux/ipv6.h +++ b/include/linux/ipv6.h | |||
@@ -171,12 +171,13 @@ enum { | |||
171 | }; | 171 | }; |
172 | 172 | ||
173 | #ifdef __KERNEL__ | 173 | #ifdef __KERNEL__ |
174 | #include <linux/in6.h> /* struct sockaddr_in6 */ | ||
175 | #include <linux/icmpv6.h> | 174 | #include <linux/icmpv6.h> |
176 | #include <net/if_inet6.h> /* struct ipv6_mc_socklist */ | ||
177 | #include <linux/tcp.h> | 175 | #include <linux/tcp.h> |
178 | #include <linux/udp.h> | 176 | #include <linux/udp.h> |
179 | 177 | ||
178 | #include <net/if_inet6.h> /* struct ipv6_mc_socklist */ | ||
179 | #include <net/inet_sock.h> | ||
180 | |||
180 | /* | 181 | /* |
181 | This structure contains results of exthdrs parsing | 182 | This structure contains results of exthdrs parsing |
182 | as offsets from skb->nh. | 183 | as offsets from skb->nh. |
@@ -190,6 +191,10 @@ struct inet6_skb_parm { | |||
190 | __u16 srcrt; | 191 | __u16 srcrt; |
191 | __u16 dst1; | 192 | __u16 dst1; |
192 | __u16 lastopt; | 193 | __u16 lastopt; |
194 | __u32 nhoff; | ||
195 | __u16 flags; | ||
196 | |||
197 | #define IP6SKB_XFRM_TRANSFORMED 1 | ||
193 | }; | 198 | }; |
194 | 199 | ||
195 | #define IP6CB(skb) ((struct inet6_skb_parm*)((skb)->cb)) | 200 | #define IP6CB(skb) ((struct inet6_skb_parm*)((skb)->cb)) |
@@ -199,18 +204,17 @@ static inline int inet6_iif(const struct sk_buff *skb) | |||
199 | return IP6CB(skb)->iif; | 204 | return IP6CB(skb)->iif; |
200 | } | 205 | } |
201 | 206 | ||
202 | struct tcp6_request_sock { | 207 | struct inet6_request_sock { |
203 | struct tcp_request_sock req; | ||
204 | struct in6_addr loc_addr; | 208 | struct in6_addr loc_addr; |
205 | struct in6_addr rmt_addr; | 209 | struct in6_addr rmt_addr; |
206 | struct sk_buff *pktopts; | 210 | struct sk_buff *pktopts; |
207 | int iif; | 211 | int iif; |
208 | }; | 212 | }; |
209 | 213 | ||
210 | static inline struct tcp6_request_sock *tcp6_rsk(const struct request_sock *sk) | 214 | struct tcp6_request_sock { |
211 | { | 215 | struct tcp_request_sock tcp6rsk_tcp; |
212 | return (struct tcp6_request_sock *)sk; | 216 | struct inet6_request_sock tcp6rsk_inet6; |
213 | } | 217 | }; |
214 | 218 | ||
215 | /** | 219 | /** |
216 | * struct ipv6_pinfo - ipv6 private area | 220 | * struct ipv6_pinfo - ipv6 private area |
@@ -298,12 +302,36 @@ struct tcp6_sock { | |||
298 | struct ipv6_pinfo inet6; | 302 | struct ipv6_pinfo inet6; |
299 | }; | 303 | }; |
300 | 304 | ||
305 | extern int inet6_sk_rebuild_header(struct sock *sk); | ||
306 | |||
301 | #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) | 307 | #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) |
302 | static inline struct ipv6_pinfo * inet6_sk(const struct sock *__sk) | 308 | static inline struct ipv6_pinfo * inet6_sk(const struct sock *__sk) |
303 | { | 309 | { |
304 | return inet_sk(__sk)->pinet6; | 310 | return inet_sk(__sk)->pinet6; |
305 | } | 311 | } |
306 | 312 | ||
313 | static inline struct inet6_request_sock * | ||
314 | inet6_rsk(const struct request_sock *rsk) | ||
315 | { | ||
316 | return (struct inet6_request_sock *)(((u8 *)rsk) + | ||
317 | inet_rsk(rsk)->inet6_rsk_offset); | ||
318 | } | ||
319 | |||
320 | static inline u32 inet6_rsk_offset(struct request_sock *rsk) | ||
321 | { | ||
322 | return rsk->rsk_ops->obj_size - sizeof(struct inet6_request_sock); | ||
323 | } | ||
324 | |||
325 | static inline struct request_sock *inet6_reqsk_alloc(struct request_sock_ops *ops) | ||
326 | { | ||
327 | struct request_sock *req = reqsk_alloc(ops); | ||
328 | |||
329 | if (req != NULL) | ||
330 | inet_rsk(req)->inet6_rsk_offset = inet6_rsk_offset(req); | ||
331 | |||
332 | return req; | ||
333 | } | ||
334 | |||
307 | static inline struct raw6_sock *raw6_sk(const struct sock *sk) | 335 | static inline struct raw6_sock *raw6_sk(const struct sock *sk) |
308 | { | 336 | { |
309 | return (struct raw6_sock *)sk; | 337 | return (struct raw6_sock *)sk; |
@@ -323,28 +351,37 @@ static inline void inet_sk_copy_descendant(struct sock *sk_to, | |||
323 | #define __ipv6_only_sock(sk) (inet6_sk(sk)->ipv6only) | 351 | #define __ipv6_only_sock(sk) (inet6_sk(sk)->ipv6only) |
324 | #define ipv6_only_sock(sk) ((sk)->sk_family == PF_INET6 && __ipv6_only_sock(sk)) | 352 | #define ipv6_only_sock(sk) ((sk)->sk_family == PF_INET6 && __ipv6_only_sock(sk)) |
325 | 353 | ||
326 | #include <linux/tcp.h> | 354 | struct inet6_timewait_sock { |
355 | struct in6_addr tw_v6_daddr; | ||
356 | struct in6_addr tw_v6_rcv_saddr; | ||
357 | }; | ||
327 | 358 | ||
328 | struct tcp6_timewait_sock { | 359 | struct tcp6_timewait_sock { |
329 | struct tcp_timewait_sock tw_v6_sk; | 360 | struct tcp_timewait_sock tcp6tw_tcp; |
330 | struct in6_addr tw_v6_daddr; | 361 | struct inet6_timewait_sock tcp6tw_inet6; |
331 | struct in6_addr tw_v6_rcv_saddr; | ||
332 | }; | 362 | }; |
333 | 363 | ||
334 | static inline struct tcp6_timewait_sock *tcp6_twsk(const struct sock *sk) | 364 | static inline u16 inet6_tw_offset(const struct proto *prot) |
335 | { | 365 | { |
336 | return (struct tcp6_timewait_sock *)sk; | 366 | return prot->twsk_prot->twsk_obj_size - |
367 | sizeof(struct inet6_timewait_sock); | ||
337 | } | 368 | } |
338 | 369 | ||
339 | static inline struct in6_addr *__tcp_v6_rcv_saddr(const struct sock *sk) | 370 | static inline struct inet6_timewait_sock *inet6_twsk(const struct sock *sk) |
371 | { | ||
372 | return (struct inet6_timewait_sock *)(((u8 *)sk) + | ||
373 | inet_twsk(sk)->tw_ipv6_offset); | ||
374 | } | ||
375 | |||
376 | static inline struct in6_addr *__inet6_rcv_saddr(const struct sock *sk) | ||
340 | { | 377 | { |
341 | return likely(sk->sk_state != TCP_TIME_WAIT) ? | 378 | return likely(sk->sk_state != TCP_TIME_WAIT) ? |
342 | &inet6_sk(sk)->rcv_saddr : &tcp6_twsk(sk)->tw_v6_rcv_saddr; | 379 | &inet6_sk(sk)->rcv_saddr : &inet6_twsk(sk)->tw_v6_rcv_saddr; |
343 | } | 380 | } |
344 | 381 | ||
345 | static inline struct in6_addr *tcp_v6_rcv_saddr(const struct sock *sk) | 382 | static inline struct in6_addr *inet6_rcv_saddr(const struct sock *sk) |
346 | { | 383 | { |
347 | return sk->sk_family == AF_INET6 ? __tcp_v6_rcv_saddr(sk) : NULL; | 384 | return sk->sk_family == AF_INET6 ? __inet6_rcv_saddr(sk) : NULL; |
348 | } | 385 | } |
349 | 386 | ||
350 | static inline int inet_v6_ipv6only(const struct sock *sk) | 387 | static inline int inet_v6_ipv6only(const struct sock *sk) |
@@ -361,13 +398,19 @@ static inline struct ipv6_pinfo * inet6_sk(const struct sock *__sk) | |||
361 | return NULL; | 398 | return NULL; |
362 | } | 399 | } |
363 | 400 | ||
401 | static inline struct inet6_request_sock * | ||
402 | inet6_rsk(const struct request_sock *rsk) | ||
403 | { | ||
404 | return NULL; | ||
405 | } | ||
406 | |||
364 | static inline struct raw6_sock *raw6_sk(const struct sock *sk) | 407 | static inline struct raw6_sock *raw6_sk(const struct sock *sk) |
365 | { | 408 | { |
366 | return NULL; | 409 | return NULL; |
367 | } | 410 | } |
368 | 411 | ||
369 | #define __tcp_v6_rcv_saddr(__sk) NULL | 412 | #define __inet6_rcv_saddr(__sk) NULL |
370 | #define tcp_v6_rcv_saddr(__sk) NULL | 413 | #define inet6_rcv_saddr(__sk) NULL |
371 | #define tcp_twsk_ipv6only(__sk) 0 | 414 | #define tcp_twsk_ipv6only(__sk) 0 |
372 | #define inet_v6_ipv6only(__sk) 0 | 415 | #define inet_v6_ipv6only(__sk) 0 |
373 | #endif /* defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) */ | 416 | #endif /* defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) */ |
diff --git a/include/linux/ipv6_route.h b/include/linux/ipv6_route.h index e2f935038013..d7c41d1d706a 100644 --- a/include/linux/ipv6_route.h +++ b/include/linux/ipv6_route.h | |||
@@ -18,6 +18,7 @@ | |||
18 | fallback, no routers on link */ | 18 | fallback, no routers on link */ |
19 | #define RTF_ADDRCONF 0x00040000 /* addrconf route - RA */ | 19 | #define RTF_ADDRCONF 0x00040000 /* addrconf route - RA */ |
20 | #define RTF_PREFIX_RT 0x00080000 /* A prefix only route - RA */ | 20 | #define RTF_PREFIX_RT 0x00080000 /* A prefix only route - RA */ |
21 | #define RTF_ANYCAST 0x00100000 /* Anycast */ | ||
21 | 22 | ||
22 | #define RTF_NONEXTHOP 0x00200000 /* route with no nexthop */ | 23 | #define RTF_NONEXTHOP 0x00200000 /* route with no nexthop */ |
23 | #define RTF_EXPIRES 0x00400000 | 24 | #define RTF_EXPIRES 0x00400000 |
diff --git a/include/linux/irq.h b/include/linux/irq.h index c516382fbec2..6c5d4c898ccb 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
@@ -10,9 +10,9 @@ | |||
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/config.h> | 12 | #include <linux/config.h> |
13 | #include <asm/smp.h> /* cpu_online_map */ | 13 | #include <linux/smp.h> |
14 | 14 | ||
15 | #if !defined(CONFIG_ARCH_S390) | 15 | #if !defined(CONFIG_S390) |
16 | 16 | ||
17 | #include <linux/linkage.h> | 17 | #include <linux/linkage.h> |
18 | #include <linux/cache.h> | 18 | #include <linux/cache.h> |
@@ -221,6 +221,17 @@ extern void note_interrupt(unsigned int irq, irq_desc_t *desc, | |||
221 | extern int can_request_irq(unsigned int irq, unsigned long irqflags); | 221 | extern int can_request_irq(unsigned int irq, unsigned long irqflags); |
222 | 222 | ||
223 | extern void init_irq_proc(void); | 223 | extern void init_irq_proc(void); |
224 | |||
225 | #ifdef CONFIG_AUTO_IRQ_AFFINITY | ||
226 | extern int select_smp_affinity(unsigned int irq); | ||
227 | #else | ||
228 | static inline int | ||
229 | select_smp_affinity(unsigned int irq) | ||
230 | { | ||
231 | return 1; | ||
232 | } | ||
233 | #endif | ||
234 | |||
224 | #endif | 235 | #endif |
225 | 236 | ||
226 | extern hw_irq_controller no_irq_type; /* needed in every arch ? */ | 237 | extern hw_irq_controller no_irq_type; /* needed in every arch ? */ |
diff --git a/include/linux/isdnif.h b/include/linux/isdnif.h index 7a4eacd77cb2..04e10f9f14f8 100644 --- a/include/linux/isdnif.h +++ b/include/linux/isdnif.h | |||
@@ -282,43 +282,43 @@ typedef struct setup_parm { | |||
282 | 282 | ||
283 | typedef struct T30_s { | 283 | typedef struct T30_s { |
284 | /* session parameters */ | 284 | /* session parameters */ |
285 | __u8 resolution __attribute__ ((packed)); | 285 | __u8 resolution; |
286 | __u8 rate __attribute__ ((packed)); | 286 | __u8 rate; |
287 | __u8 width __attribute__ ((packed)); | 287 | __u8 width; |
288 | __u8 length __attribute__ ((packed)); | 288 | __u8 length; |
289 | __u8 compression __attribute__ ((packed)); | 289 | __u8 compression; |
290 | __u8 ecm __attribute__ ((packed)); | 290 | __u8 ecm; |
291 | __u8 binary __attribute__ ((packed)); | 291 | __u8 binary; |
292 | __u8 scantime __attribute__ ((packed)); | 292 | __u8 scantime; |
293 | __u8 id[FAXIDLEN] __attribute__ ((packed)); | 293 | __u8 id[FAXIDLEN]; |
294 | /* additional parameters */ | 294 | /* additional parameters */ |
295 | __u8 phase __attribute__ ((packed)); | 295 | __u8 phase; |
296 | __u8 direction __attribute__ ((packed)); | 296 | __u8 direction; |
297 | __u8 code __attribute__ ((packed)); | 297 | __u8 code; |
298 | __u8 badlin __attribute__ ((packed)); | 298 | __u8 badlin; |
299 | __u8 badmul __attribute__ ((packed)); | 299 | __u8 badmul; |
300 | __u8 bor __attribute__ ((packed)); | 300 | __u8 bor; |
301 | __u8 fet __attribute__ ((packed)); | 301 | __u8 fet; |
302 | __u8 pollid[FAXIDLEN] __attribute__ ((packed)); | 302 | __u8 pollid[FAXIDLEN]; |
303 | __u8 cq __attribute__ ((packed)); | 303 | __u8 cq; |
304 | __u8 cr __attribute__ ((packed)); | 304 | __u8 cr; |
305 | __u8 ctcrty __attribute__ ((packed)); | 305 | __u8 ctcrty; |
306 | __u8 minsp __attribute__ ((packed)); | 306 | __u8 minsp; |
307 | __u8 phcto __attribute__ ((packed)); | 307 | __u8 phcto; |
308 | __u8 rel __attribute__ ((packed)); | 308 | __u8 rel; |
309 | __u8 nbc __attribute__ ((packed)); | 309 | __u8 nbc; |
310 | /* remote station parameters */ | 310 | /* remote station parameters */ |
311 | __u8 r_resolution __attribute__ ((packed)); | 311 | __u8 r_resolution; |
312 | __u8 r_rate __attribute__ ((packed)); | 312 | __u8 r_rate; |
313 | __u8 r_width __attribute__ ((packed)); | 313 | __u8 r_width; |
314 | __u8 r_length __attribute__ ((packed)); | 314 | __u8 r_length; |
315 | __u8 r_compression __attribute__ ((packed)); | 315 | __u8 r_compression; |
316 | __u8 r_ecm __attribute__ ((packed)); | 316 | __u8 r_ecm; |
317 | __u8 r_binary __attribute__ ((packed)); | 317 | __u8 r_binary; |
318 | __u8 r_scantime __attribute__ ((packed)); | 318 | __u8 r_scantime; |
319 | __u8 r_id[FAXIDLEN] __attribute__ ((packed)); | 319 | __u8 r_id[FAXIDLEN]; |
320 | __u8 r_code __attribute__ ((packed)); | 320 | __u8 r_code; |
321 | } T30_s; | 321 | } __attribute__((packed)) T30_s; |
322 | 322 | ||
323 | #define ISDN_TTY_FAX_CONN_IN 0 | 323 | #define ISDN_TTY_FAX_CONN_IN 0 |
324 | #define ISDN_TTY_FAX_CONN_OUT 1 | 324 | #define ISDN_TTY_FAX_CONN_OUT 1 |
diff --git a/include/linux/jbd.h b/include/linux/jbd.h index dcde7adfdce5..558cb4c26ec9 100644 --- a/include/linux/jbd.h +++ b/include/linux/jbd.h | |||
@@ -498,6 +498,12 @@ struct transaction_s | |||
498 | struct journal_head *t_checkpoint_list; | 498 | struct journal_head *t_checkpoint_list; |
499 | 499 | ||
500 | /* | 500 | /* |
501 | * Doubly-linked circular list of all buffers submitted for IO while | ||
502 | * checkpointing. [j_list_lock] | ||
503 | */ | ||
504 | struct journal_head *t_checkpoint_io_list; | ||
505 | |||
506 | /* | ||
501 | * Doubly-linked circular list of temporary buffers currently undergoing | 507 | * Doubly-linked circular list of temporary buffers currently undergoing |
502 | * IO in the log [j_list_lock] | 508 | * IO in the log [j_list_lock] |
503 | */ | 509 | */ |
@@ -843,7 +849,7 @@ extern void journal_commit_transaction(journal_t *); | |||
843 | 849 | ||
844 | /* Checkpoint list management */ | 850 | /* Checkpoint list management */ |
845 | int __journal_clean_checkpoint_list(journal_t *journal); | 851 | int __journal_clean_checkpoint_list(journal_t *journal); |
846 | void __journal_remove_checkpoint(struct journal_head *); | 852 | int __journal_remove_checkpoint(struct journal_head *); |
847 | void __journal_insert_checkpoint(struct journal_head *, transaction_t *); | 853 | void __journal_insert_checkpoint(struct journal_head *, transaction_t *); |
848 | 854 | ||
849 | /* Buffer IO */ | 855 | /* Buffer IO */ |
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index b1e407a4fbda..ca7ff8fdd090 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
@@ -316,8 +316,6 @@ extern int randomize_va_space; | |||
316 | #endif | 316 | #endif |
317 | 317 | ||
318 | /* Trap pasters of __FUNCTION__ at compile-time */ | 318 | /* Trap pasters of __FUNCTION__ at compile-time */ |
319 | #if __GNUC__ > 2 || __GNUC_MINOR__ >= 95 | ||
320 | #define __FUNCTION__ (__func__) | 319 | #define __FUNCTION__ (__func__) |
321 | #endif | ||
322 | 320 | ||
323 | #endif | 321 | #endif |
diff --git a/include/linux/key.h b/include/linux/key.h index 53513a3be53b..cbf464ad9589 100644 --- a/include/linux/key.h +++ b/include/linux/key.h | |||
@@ -177,6 +177,8 @@ struct key { | |||
177 | /* | 177 | /* |
178 | * kernel managed key type definition | 178 | * kernel managed key type definition |
179 | */ | 179 | */ |
180 | typedef int (*request_key_actor_t)(struct key *key, struct key *authkey, const char *op); | ||
181 | |||
180 | struct key_type { | 182 | struct key_type { |
181 | /* name of the type */ | 183 | /* name of the type */ |
182 | const char *name; | 184 | const char *name; |
@@ -193,14 +195,6 @@ struct key_type { | |||
193 | */ | 195 | */ |
194 | int (*instantiate)(struct key *key, const void *data, size_t datalen); | 196 | int (*instantiate)(struct key *key, const void *data, size_t datalen); |
195 | 197 | ||
196 | /* duplicate a key of this type (optional) | ||
197 | * - the source key will be locked against change | ||
198 | * - the new description will be attached | ||
199 | * - the quota will have been adjusted automatically from | ||
200 | * source->quotalen | ||
201 | */ | ||
202 | int (*duplicate)(struct key *key, const struct key *source); | ||
203 | |||
204 | /* update a key of this type (optional) | 198 | /* update a key of this type (optional) |
205 | * - this method should call key_payload_reserve() to recalculate the | 199 | * - this method should call key_payload_reserve() to recalculate the |
206 | * quota consumption | 200 | * quota consumption |
@@ -226,6 +220,16 @@ struct key_type { | |||
226 | */ | 220 | */ |
227 | long (*read)(const struct key *key, char __user *buffer, size_t buflen); | 221 | long (*read)(const struct key *key, char __user *buffer, size_t buflen); |
228 | 222 | ||
223 | /* handle request_key() for this type instead of invoking | ||
224 | * /sbin/request-key (optional) | ||
225 | * - key is the key to instantiate | ||
226 | * - authkey is the authority to assume when instantiating this key | ||
227 | * - op is the operation to be done, usually "create" | ||
228 | * - the call must not return until the instantiation process has run | ||
229 | * its course | ||
230 | */ | ||
231 | request_key_actor_t request_key; | ||
232 | |||
229 | /* internal fields */ | 233 | /* internal fields */ |
230 | struct list_head link; /* link in types list */ | 234 | struct list_head link; /* link in types list */ |
231 | }; | 235 | }; |
diff --git a/include/linux/keyctl.h b/include/linux/keyctl.h index 8d7c59a29e09..3365945640c9 100644 --- a/include/linux/keyctl.h +++ b/include/linux/keyctl.h | |||
@@ -19,6 +19,7 @@ | |||
19 | #define KEY_SPEC_USER_KEYRING -4 /* - key ID for UID-specific keyring */ | 19 | #define KEY_SPEC_USER_KEYRING -4 /* - key ID for UID-specific keyring */ |
20 | #define KEY_SPEC_USER_SESSION_KEYRING -5 /* - key ID for UID-session keyring */ | 20 | #define KEY_SPEC_USER_SESSION_KEYRING -5 /* - key ID for UID-session keyring */ |
21 | #define KEY_SPEC_GROUP_KEYRING -6 /* - key ID for GID-specific keyring */ | 21 | #define KEY_SPEC_GROUP_KEYRING -6 /* - key ID for GID-specific keyring */ |
22 | #define KEY_SPEC_REQKEY_AUTH_KEY -7 /* - key ID for assumed request_key auth key */ | ||
22 | 23 | ||
23 | /* request-key default keyrings */ | 24 | /* request-key default keyrings */ |
24 | #define KEY_REQKEY_DEFL_NO_CHANGE -1 | 25 | #define KEY_REQKEY_DEFL_NO_CHANGE -1 |
@@ -46,5 +47,7 @@ | |||
46 | #define KEYCTL_INSTANTIATE 12 /* instantiate a partially constructed key */ | 47 | #define KEYCTL_INSTANTIATE 12 /* instantiate a partially constructed key */ |
47 | #define KEYCTL_NEGATE 13 /* negate a partially constructed key */ | 48 | #define KEYCTL_NEGATE 13 /* negate a partially constructed key */ |
48 | #define KEYCTL_SET_REQKEY_KEYRING 14 /* set default request-key keyring */ | 49 | #define KEYCTL_SET_REQKEY_KEYRING 14 /* set default request-key keyring */ |
50 | #define KEYCTL_SET_TIMEOUT 15 /* set key timeout */ | ||
51 | #define KEYCTL_ASSUME_AUTHORITY 16 /* assume request_key() authorisation */ | ||
49 | 52 | ||
50 | #endif /* _LINUX_KEYCTL_H */ | 53 | #endif /* _LINUX_KEYCTL_H */ |
diff --git a/include/linux/kobject.h b/include/linux/kobject.h index 7f7403aa4a41..2a8d8da70961 100644 --- a/include/linux/kobject.h +++ b/include/linux/kobject.h | |||
@@ -23,14 +23,27 @@ | |||
23 | #include <linux/spinlock.h> | 23 | #include <linux/spinlock.h> |
24 | #include <linux/rwsem.h> | 24 | #include <linux/rwsem.h> |
25 | #include <linux/kref.h> | 25 | #include <linux/kref.h> |
26 | #include <linux/kobject_uevent.h> | ||
27 | #include <linux/kernel.h> | 26 | #include <linux/kernel.h> |
28 | #include <asm/atomic.h> | 27 | #include <asm/atomic.h> |
29 | 28 | ||
30 | #define KOBJ_NAME_LEN 20 | 29 | #define KOBJ_NAME_LEN 20 |
30 | #define UEVENT_HELPER_PATH_LEN 256 | ||
31 | 31 | ||
32 | /* counter to tag the hotplug event, read only except for the kobject core */ | 32 | /* path to the userspace helper executed on an event */ |
33 | extern u64 hotplug_seqnum; | 33 | extern char uevent_helper[]; |
34 | |||
35 | /* counter to tag the uevent, read only except for the kobject core */ | ||
36 | extern u64 uevent_seqnum; | ||
37 | |||
38 | /* the actions here must match the proper string in lib/kobject_uevent.c */ | ||
39 | typedef int __bitwise kobject_action_t; | ||
40 | enum kobject_action { | ||
41 | KOBJ_ADD = (__force kobject_action_t) 0x01, /* exclusive to core */ | ||
42 | KOBJ_REMOVE = (__force kobject_action_t) 0x02, /* exclusive to core */ | ||
43 | KOBJ_CHANGE = (__force kobject_action_t) 0x03, /* device state change */ | ||
44 | KOBJ_OFFLINE = (__force kobject_action_t) 0x04, /* device offline */ | ||
45 | KOBJ_ONLINE = (__force kobject_action_t) 0x05, /* device online */ | ||
46 | }; | ||
34 | 47 | ||
35 | struct kobject { | 48 | struct kobject { |
36 | const char * k_name; | 49 | const char * k_name; |
@@ -87,15 +100,14 @@ struct kobj_type { | |||
87 | * of object; multiple ksets can belong to one subsystem. All | 100 | * of object; multiple ksets can belong to one subsystem. All |
88 | * ksets of a subsystem share the subsystem's lock. | 101 | * ksets of a subsystem share the subsystem's lock. |
89 | * | 102 | * |
90 | * Each kset can support hotplugging; if it does, it will be given | 103 | * Each kset can support specific event variables; it can |
91 | * the opportunity to filter out specific kobjects from being | 104 | * supress the event generation or add subsystem specific |
92 | * reported, as well as to add its own "data" elements to the | 105 | * variables carried with the event. |
93 | * environment being passed to the hotplug helper. | ||
94 | */ | 106 | */ |
95 | struct kset_hotplug_ops { | 107 | struct kset_uevent_ops { |
96 | int (*filter)(struct kset *kset, struct kobject *kobj); | 108 | int (*filter)(struct kset *kset, struct kobject *kobj); |
97 | const char *(*name)(struct kset *kset, struct kobject *kobj); | 109 | const char *(*name)(struct kset *kset, struct kobject *kobj); |
98 | int (*hotplug)(struct kset *kset, struct kobject *kobj, char **envp, | 110 | int (*uevent)(struct kset *kset, struct kobject *kobj, char **envp, |
99 | int num_envp, char *buffer, int buffer_size); | 111 | int num_envp, char *buffer, int buffer_size); |
100 | }; | 112 | }; |
101 | 113 | ||
@@ -105,7 +117,7 @@ struct kset { | |||
105 | struct list_head list; | 117 | struct list_head list; |
106 | spinlock_t list_lock; | 118 | spinlock_t list_lock; |
107 | struct kobject kobj; | 119 | struct kobject kobj; |
108 | struct kset_hotplug_ops * hotplug_ops; | 120 | struct kset_uevent_ops * uevent_ops; |
109 | }; | 121 | }; |
110 | 122 | ||
111 | 123 | ||
@@ -153,20 +165,20 @@ struct subsystem { | |||
153 | struct rw_semaphore rwsem; | 165 | struct rw_semaphore rwsem; |
154 | }; | 166 | }; |
155 | 167 | ||
156 | #define decl_subsys(_name,_type,_hotplug_ops) \ | 168 | #define decl_subsys(_name,_type,_uevent_ops) \ |
157 | struct subsystem _name##_subsys = { \ | 169 | struct subsystem _name##_subsys = { \ |
158 | .kset = { \ | 170 | .kset = { \ |
159 | .kobj = { .name = __stringify(_name) }, \ | 171 | .kobj = { .name = __stringify(_name) }, \ |
160 | .ktype = _type, \ | 172 | .ktype = _type, \ |
161 | .hotplug_ops =_hotplug_ops, \ | 173 | .uevent_ops =_uevent_ops, \ |
162 | } \ | 174 | } \ |
163 | } | 175 | } |
164 | #define decl_subsys_name(_varname,_name,_type,_hotplug_ops) \ | 176 | #define decl_subsys_name(_varname,_name,_type,_uevent_ops) \ |
165 | struct subsystem _varname##_subsys = { \ | 177 | struct subsystem _varname##_subsys = { \ |
166 | .kset = { \ | 178 | .kset = { \ |
167 | .kobj = { .name = __stringify(_name) }, \ | 179 | .kobj = { .name = __stringify(_name) }, \ |
168 | .ktype = _type, \ | 180 | .ktype = _type, \ |
169 | .hotplug_ops =_hotplug_ops, \ | 181 | .uevent_ops =_uevent_ops, \ |
170 | } \ | 182 | } \ |
171 | } | 183 | } |
172 | 184 | ||
@@ -241,15 +253,17 @@ struct subsys_attribute { | |||
241 | extern int subsys_create_file(struct subsystem * , struct subsys_attribute *); | 253 | extern int subsys_create_file(struct subsystem * , struct subsys_attribute *); |
242 | extern void subsys_remove_file(struct subsystem * , struct subsys_attribute *); | 254 | extern void subsys_remove_file(struct subsystem * , struct subsys_attribute *); |
243 | 255 | ||
244 | #ifdef CONFIG_HOTPLUG | 256 | #if defined(CONFIG_HOTPLUG) & defined(CONFIG_NET) |
245 | void kobject_hotplug(struct kobject *kobj, enum kobject_action action); | 257 | void kobject_uevent(struct kobject *kobj, enum kobject_action action); |
246 | int add_hotplug_env_var(char **envp, int num_envp, int *cur_index, | 258 | |
259 | int add_uevent_var(char **envp, int num_envp, int *cur_index, | ||
247 | char *buffer, int buffer_size, int *cur_len, | 260 | char *buffer, int buffer_size, int *cur_len, |
248 | const char *format, ...) | 261 | const char *format, ...) |
249 | __attribute__((format (printf, 7, 8))); | 262 | __attribute__((format (printf, 7, 8))); |
250 | #else | 263 | #else |
251 | static inline void kobject_hotplug(struct kobject *kobj, enum kobject_action action) { } | 264 | static inline void kobject_uevent(struct kobject *kobj, enum kobject_action action) { } |
252 | static inline int add_hotplug_env_var(char **envp, int num_envp, int *cur_index, | 265 | |
266 | static inline int add_uevent_var(char **envp, int num_envp, int *cur_index, | ||
253 | char *buffer, int buffer_size, int *cur_len, | 267 | char *buffer, int buffer_size, int *cur_len, |
254 | const char *format, ...) | 268 | const char *format, ...) |
255 | { return 0; } | 269 | { return 0; } |
diff --git a/include/linux/kobject_uevent.h b/include/linux/kobject_uevent.h deleted file mode 100644 index aa664fe7e561..000000000000 --- a/include/linux/kobject_uevent.h +++ /dev/null | |||
@@ -1,57 +0,0 @@ | |||
1 | /* | ||
2 | * kobject_uevent.h - list of kobject user events that can be generated | ||
3 | * | ||
4 | * Copyright (C) 2004 IBM Corp. | ||
5 | * Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com> | ||
6 | * | ||
7 | * This file is released under the GPLv2. | ||
8 | * | ||
9 | */ | ||
10 | |||
11 | #ifndef _KOBJECT_EVENT_H_ | ||
12 | #define _KOBJECT_EVENT_H_ | ||
13 | |||
14 | #define HOTPLUG_PATH_LEN 256 | ||
15 | |||
16 | /* path to the hotplug userspace helper executed on an event */ | ||
17 | extern char hotplug_path[]; | ||
18 | |||
19 | /* | ||
20 | * If you add an action here, you must also add the proper string to the | ||
21 | * lib/kobject_uevent.c file. | ||
22 | */ | ||
23 | typedef int __bitwise kobject_action_t; | ||
24 | enum kobject_action { | ||
25 | KOBJ_ADD = (__force kobject_action_t) 0x01, /* add event, for hotplug */ | ||
26 | KOBJ_REMOVE = (__force kobject_action_t) 0x02, /* remove event, for hotplug */ | ||
27 | KOBJ_CHANGE = (__force kobject_action_t) 0x03, /* a sysfs attribute file has changed */ | ||
28 | KOBJ_MOUNT = (__force kobject_action_t) 0x04, /* mount event for block devices */ | ||
29 | KOBJ_UMOUNT = (__force kobject_action_t) 0x05, /* umount event for block devices */ | ||
30 | KOBJ_OFFLINE = (__force kobject_action_t) 0x06, /* offline event for hotplug devices */ | ||
31 | KOBJ_ONLINE = (__force kobject_action_t) 0x07, /* online event for hotplug devices */ | ||
32 | }; | ||
33 | |||
34 | |||
35 | #ifdef CONFIG_KOBJECT_UEVENT | ||
36 | int kobject_uevent(struct kobject *kobj, | ||
37 | enum kobject_action action, | ||
38 | struct attribute *attr); | ||
39 | int kobject_uevent_atomic(struct kobject *kobj, | ||
40 | enum kobject_action action, | ||
41 | struct attribute *attr); | ||
42 | #else | ||
43 | static inline int kobject_uevent(struct kobject *kobj, | ||
44 | enum kobject_action action, | ||
45 | struct attribute *attr) | ||
46 | { | ||
47 | return 0; | ||
48 | } | ||
49 | static inline int kobject_uevent_atomic(struct kobject *kobj, | ||
50 | enum kobject_action action, | ||
51 | struct attribute *attr) | ||
52 | { | ||
53 | return 0; | ||
54 | } | ||
55 | #endif | ||
56 | |||
57 | #endif | ||
diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h index e373c4a9de53..c03f2dc933de 100644 --- a/include/linux/kprobes.h +++ b/include/linux/kprobes.h | |||
@@ -37,6 +37,7 @@ | |||
37 | #include <linux/spinlock.h> | 37 | #include <linux/spinlock.h> |
38 | #include <linux/rcupdate.h> | 38 | #include <linux/rcupdate.h> |
39 | 39 | ||
40 | #ifdef CONFIG_KPROBES | ||
40 | #include <asm/kprobes.h> | 41 | #include <asm/kprobes.h> |
41 | 42 | ||
42 | /* kprobe_status settings */ | 43 | /* kprobe_status settings */ |
@@ -147,7 +148,6 @@ struct kretprobe_instance { | |||
147 | struct task_struct *task; | 148 | struct task_struct *task; |
148 | }; | 149 | }; |
149 | 150 | ||
150 | #ifdef CONFIG_KPROBES | ||
151 | extern spinlock_t kretprobe_lock; | 151 | extern spinlock_t kretprobe_lock; |
152 | extern int arch_prepare_kprobe(struct kprobe *p); | 152 | extern int arch_prepare_kprobe(struct kprobe *p); |
153 | extern void arch_copy_kprobe(struct kprobe *p); | 153 | extern void arch_copy_kprobe(struct kprobe *p); |
@@ -158,6 +158,7 @@ extern int arch_init_kprobes(void); | |||
158 | extern void show_registers(struct pt_regs *regs); | 158 | extern void show_registers(struct pt_regs *regs); |
159 | extern kprobe_opcode_t *get_insn_slot(void); | 159 | extern kprobe_opcode_t *get_insn_slot(void); |
160 | extern void free_insn_slot(kprobe_opcode_t *slot); | 160 | extern void free_insn_slot(kprobe_opcode_t *slot); |
161 | extern void kprobes_inc_nmissed_count(struct kprobe *p); | ||
161 | 162 | ||
162 | /* Get the kprobe at this addr (if any) - called with preemption disabled */ | 163 | /* Get the kprobe at this addr (if any) - called with preemption disabled */ |
163 | struct kprobe *get_kprobe(void *addr); | 164 | struct kprobe *get_kprobe(void *addr); |
@@ -195,6 +196,11 @@ void add_rp_inst(struct kretprobe_instance *ri); | |||
195 | void kprobe_flush_task(struct task_struct *tk); | 196 | void kprobe_flush_task(struct task_struct *tk); |
196 | void recycle_rp_inst(struct kretprobe_instance *ri); | 197 | void recycle_rp_inst(struct kretprobe_instance *ri); |
197 | #else /* CONFIG_KPROBES */ | 198 | #else /* CONFIG_KPROBES */ |
199 | |||
200 | #define __kprobes /**/ | ||
201 | struct jprobe; | ||
202 | struct kretprobe; | ||
203 | |||
198 | static inline struct kprobe *kprobe_running(void) | 204 | static inline struct kprobe *kprobe_running(void) |
199 | { | 205 | { |
200 | return NULL; | 206 | return NULL; |
diff --git a/include/linux/libata.h b/include/linux/libata.h index f2dbb684ce9e..a43c95f8f968 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
@@ -122,6 +122,9 @@ enum { | |||
122 | ATA_FLAG_NOINTR = (1 << 9), /* FIXME: Remove this once | 122 | ATA_FLAG_NOINTR = (1 << 9), /* FIXME: Remove this once |
123 | * proper HSM is in place. */ | 123 | * proper HSM is in place. */ |
124 | ATA_FLAG_DEBUGMSG = (1 << 10), | 124 | ATA_FLAG_DEBUGMSG = (1 << 10), |
125 | ATA_FLAG_NO_ATAPI = (1 << 11), /* No ATAPI support */ | ||
126 | |||
127 | ATA_FLAG_SUSPENDED = (1 << 12), /* port is suspended */ | ||
125 | 128 | ||
126 | ATA_QCFLAG_ACTIVE = (1 << 1), /* cmd not yet ack'd to scsi lyer */ | 129 | ATA_QCFLAG_ACTIVE = (1 << 1), /* cmd not yet ack'd to scsi lyer */ |
127 | ATA_QCFLAG_SG = (1 << 3), /* have s/g table? */ | 130 | ATA_QCFLAG_SG = (1 << 3), /* have s/g table? */ |
@@ -135,6 +138,8 @@ enum { | |||
135 | ATA_TMOUT_BOOT_QUICK = 7 * HZ, /* hueristic */ | 138 | ATA_TMOUT_BOOT_QUICK = 7 * HZ, /* hueristic */ |
136 | ATA_TMOUT_CDB = 30 * HZ, | 139 | ATA_TMOUT_CDB = 30 * HZ, |
137 | ATA_TMOUT_CDB_QUICK = 5 * HZ, | 140 | ATA_TMOUT_CDB_QUICK = 5 * HZ, |
141 | ATA_TMOUT_INTERNAL = 30 * HZ, | ||
142 | ATA_TMOUT_INTERNAL_QUICK = 5 * HZ, | ||
138 | 143 | ||
139 | /* ATA bus states */ | 144 | /* ATA bus states */ |
140 | BUS_UNKNOWN = 0, | 145 | BUS_UNKNOWN = 0, |
@@ -194,7 +199,7 @@ struct ata_port; | |||
194 | struct ata_queued_cmd; | 199 | struct ata_queued_cmd; |
195 | 200 | ||
196 | /* typedefs */ | 201 | /* typedefs */ |
197 | typedef int (*ata_qc_cb_t) (struct ata_queued_cmd *qc, unsigned int err_mask); | 202 | typedef int (*ata_qc_cb_t) (struct ata_queued_cmd *qc); |
198 | 203 | ||
199 | struct ata_ioports { | 204 | struct ata_ioports { |
200 | unsigned long cmd_addr; | 205 | unsigned long cmd_addr; |
@@ -279,9 +284,9 @@ struct ata_queued_cmd { | |||
279 | /* DO NOT iterate over __sg manually, use ata_for_each_sg() */ | 284 | /* DO NOT iterate over __sg manually, use ata_for_each_sg() */ |
280 | struct scatterlist *__sg; | 285 | struct scatterlist *__sg; |
281 | 286 | ||
282 | ata_qc_cb_t complete_fn; | 287 | unsigned int err_mask; |
283 | 288 | ||
284 | struct completion *waiting; | 289 | ata_qc_cb_t complete_fn; |
285 | 290 | ||
286 | void *private_data; | 291 | void *private_data; |
287 | }; | 292 | }; |
@@ -330,8 +335,6 @@ struct ata_port { | |||
330 | 335 | ||
331 | u8 ctl; /* cache of ATA control register */ | 336 | u8 ctl; /* cache of ATA control register */ |
332 | u8 last_ctl; /* Cache last written value */ | 337 | u8 last_ctl; /* Cache last written value */ |
333 | unsigned int bus_state; | ||
334 | unsigned int port_state; | ||
335 | unsigned int pio_mask; | 338 | unsigned int pio_mask; |
336 | unsigned int mwdma_mask; | 339 | unsigned int mwdma_mask; |
337 | unsigned int udma_mask; | 340 | unsigned int udma_mask; |
@@ -435,6 +438,8 @@ extern void ata_std_ports(struct ata_ioports *ioaddr); | |||
435 | extern int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info, | 438 | extern int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info, |
436 | unsigned int n_ports); | 439 | unsigned int n_ports); |
437 | extern void ata_pci_remove_one (struct pci_dev *pdev); | 440 | extern void ata_pci_remove_one (struct pci_dev *pdev); |
441 | extern int ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t state); | ||
442 | extern int ata_pci_device_resume(struct pci_dev *pdev); | ||
438 | #endif /* CONFIG_PCI */ | 443 | #endif /* CONFIG_PCI */ |
439 | extern int ata_device_add(const struct ata_probe_ent *ent); | 444 | extern int ata_device_add(const struct ata_probe_ent *ent); |
440 | extern void ata_host_set_remove(struct ata_host_set *host_set); | 445 | extern void ata_host_set_remove(struct ata_host_set *host_set); |
@@ -444,6 +449,10 @@ extern int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmn | |||
444 | extern int ata_scsi_error(struct Scsi_Host *host); | 449 | extern int ata_scsi_error(struct Scsi_Host *host); |
445 | extern int ata_scsi_release(struct Scsi_Host *host); | 450 | extern int ata_scsi_release(struct Scsi_Host *host); |
446 | extern unsigned int ata_host_intr(struct ata_port *ap, struct ata_queued_cmd *qc); | 451 | extern unsigned int ata_host_intr(struct ata_port *ap, struct ata_queued_cmd *qc); |
452 | extern int ata_scsi_device_resume(struct scsi_device *); | ||
453 | extern int ata_scsi_device_suspend(struct scsi_device *); | ||
454 | extern int ata_device_resume(struct ata_port *, struct ata_device *); | ||
455 | extern int ata_device_suspend(struct ata_port *, struct ata_device *); | ||
447 | extern int ata_ratelimit(void); | 456 | extern int ata_ratelimit(void); |
448 | 457 | ||
449 | /* | 458 | /* |
@@ -477,9 +486,10 @@ extern void ata_bmdma_start (struct ata_queued_cmd *qc); | |||
477 | extern void ata_bmdma_stop(struct ata_queued_cmd *qc); | 486 | extern void ata_bmdma_stop(struct ata_queued_cmd *qc); |
478 | extern u8 ata_bmdma_status(struct ata_port *ap); | 487 | extern u8 ata_bmdma_status(struct ata_port *ap); |
479 | extern void ata_bmdma_irq_clear(struct ata_port *ap); | 488 | extern void ata_bmdma_irq_clear(struct ata_port *ap); |
480 | extern void ata_qc_complete(struct ata_queued_cmd *qc, unsigned int err_mask); | 489 | extern void ata_qc_complete(struct ata_queued_cmd *qc); |
481 | extern void ata_eng_timeout(struct ata_port *ap); | 490 | extern void ata_eng_timeout(struct ata_port *ap); |
482 | extern void ata_scsi_simulate(u16 *id, struct scsi_cmnd *cmd, | 491 | extern void ata_scsi_simulate(struct ata_port *ap, struct ata_device *dev, |
492 | struct scsi_cmnd *cmd, | ||
483 | void (*done)(struct scsi_cmnd *)); | 493 | void (*done)(struct scsi_cmnd *)); |
484 | extern int ata_std_bios_param(struct scsi_device *sdev, | 494 | extern int ata_std_bios_param(struct scsi_device *sdev, |
485 | struct block_device *bdev, | 495 | struct block_device *bdev, |
@@ -669,6 +679,7 @@ static inline void ata_qc_reinit(struct ata_queued_cmd *qc) | |||
669 | qc->cursect = qc->cursg = qc->cursg_ofs = 0; | 679 | qc->cursect = qc->cursg = qc->cursg_ofs = 0; |
670 | qc->nsect = 0; | 680 | qc->nsect = 0; |
671 | qc->nbytes = qc->curbytes = 0; | 681 | qc->nbytes = qc->curbytes = 0; |
682 | qc->err_mask = 0; | ||
672 | 683 | ||
673 | ata_tf_init(qc->ap, &qc->tf, qc->dev->devno); | 684 | ata_tf_init(qc->ap, &qc->tf, qc->dev->devno); |
674 | } | 685 | } |
diff --git a/include/linux/list.h b/include/linux/list.h index fbfca73355a3..8e3388284530 100644 --- a/include/linux/list.h +++ b/include/linux/list.h | |||
@@ -202,12 +202,15 @@ static inline void list_del_rcu(struct list_head *entry) | |||
202 | * | 202 | * |
203 | * The old entry will be replaced with the new entry atomically. | 203 | * The old entry will be replaced with the new entry atomically. |
204 | */ | 204 | */ |
205 | static inline void list_replace_rcu(struct list_head *old, struct list_head *new){ | 205 | static inline void list_replace_rcu(struct list_head *old, |
206 | struct list_head *new) | ||
207 | { | ||
206 | new->next = old->next; | 208 | new->next = old->next; |
207 | new->prev = old->prev; | 209 | new->prev = old->prev; |
208 | smp_wmb(); | 210 | smp_wmb(); |
209 | new->next->prev = new; | 211 | new->next->prev = new; |
210 | new->prev->next = new; | 212 | new->prev->next = new; |
213 | old->prev = LIST_POISON2; | ||
211 | } | 214 | } |
212 | 215 | ||
213 | /** | 216 | /** |
@@ -578,6 +581,27 @@ static inline void hlist_del_init(struct hlist_node *n) | |||
578 | } | 581 | } |
579 | } | 582 | } |
580 | 583 | ||
584 | /* | ||
585 | * hlist_replace_rcu - replace old entry by new one | ||
586 | * @old : the element to be replaced | ||
587 | * @new : the new element to insert | ||
588 | * | ||
589 | * The old entry will be replaced with the new entry atomically. | ||
590 | */ | ||
591 | static inline void hlist_replace_rcu(struct hlist_node *old, | ||
592 | struct hlist_node *new) | ||
593 | { | ||
594 | struct hlist_node *next = old->next; | ||
595 | |||
596 | new->next = next; | ||
597 | new->pprev = old->pprev; | ||
598 | smp_wmb(); | ||
599 | if (next) | ||
600 | new->next->pprev = &new->next; | ||
601 | *new->pprev = new; | ||
602 | old->pprev = LIST_POISON2; | ||
603 | } | ||
604 | |||
581 | static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h) | 605 | static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h) |
582 | { | 606 | { |
583 | struct hlist_node *first = h->first; | 607 | struct hlist_node *first = h->first; |
diff --git a/include/linux/lockd/lockd.h b/include/linux/lockd/lockd.h index 16d4e5a08e1d..95c8fea293ba 100644 --- a/include/linux/lockd/lockd.h +++ b/include/linux/lockd/lockd.h | |||
@@ -172,7 +172,7 @@ extern struct nlm_host *nlm_find_client(void); | |||
172 | /* | 172 | /* |
173 | * Server-side lock handling | 173 | * Server-side lock handling |
174 | */ | 174 | */ |
175 | int nlmsvc_async_call(struct nlm_rqst *, u32, rpc_action); | 175 | int nlmsvc_async_call(struct nlm_rqst *, u32, const struct rpc_call_ops *); |
176 | u32 nlmsvc_lock(struct svc_rqst *, struct nlm_file *, | 176 | u32 nlmsvc_lock(struct svc_rqst *, struct nlm_file *, |
177 | struct nlm_lock *, int, struct nlm_cookie *); | 177 | struct nlm_lock *, int, struct nlm_cookie *); |
178 | u32 nlmsvc_unlock(struct nlm_file *, struct nlm_lock *); | 178 | u32 nlmsvc_unlock(struct nlm_file *, struct nlm_lock *); |
diff --git a/include/linux/memory.h b/include/linux/memory.h index 9a424383e6c6..e251dc43d0f5 100644 --- a/include/linux/memory.h +++ b/include/linux/memory.h | |||
@@ -70,22 +70,15 @@ static inline void unregister_memory_notifier(struct notifier_block *nb) | |||
70 | { | 70 | { |
71 | } | 71 | } |
72 | #else | 72 | #else |
73 | extern int register_memory(struct memory_block *, struct mem_section *section, struct node *); | ||
74 | extern int register_new_memory(struct mem_section *); | 73 | extern int register_new_memory(struct mem_section *); |
75 | extern int unregister_memory_section(struct mem_section *); | 74 | extern int unregister_memory_section(struct mem_section *); |
76 | extern int memory_dev_init(void); | 75 | extern int memory_dev_init(void); |
77 | extern int register_memory_notifier(struct notifier_block *nb); | 76 | extern int remove_memory_block(unsigned long, struct mem_section *, int); |
78 | extern void unregister_memory_notifier(struct notifier_block *nb); | ||
79 | 77 | ||
80 | #define CONFIG_MEM_BLOCK_SIZE (PAGES_PER_SECTION<<PAGE_SHIFT) | 78 | #define CONFIG_MEM_BLOCK_SIZE (PAGES_PER_SECTION<<PAGE_SHIFT) |
81 | 79 | ||
82 | extern int invalidate_phys_mapping(unsigned long, unsigned long); | ||
83 | struct notifier_block; | 80 | struct notifier_block; |
84 | 81 | ||
85 | extern int register_memory_notifier(struct notifier_block *nb); | ||
86 | extern void unregister_memory_notifier(struct notifier_block *nb); | ||
87 | |||
88 | extern struct sysdev_class memory_sysdev_class; | ||
89 | #endif /* CONFIG_MEMORY_HOTPLUG */ | 82 | #endif /* CONFIG_MEMORY_HOTPLUG */ |
90 | 83 | ||
91 | #define hotplug_memory_notifier(fn, pri) { \ | 84 | #define hotplug_memory_notifier(fn, pri) { \ |
diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h index 8b67cf837ca9..c7ac77e873b3 100644 --- a/include/linux/mempolicy.h +++ b/include/linux/mempolicy.h | |||
@@ -22,6 +22,9 @@ | |||
22 | 22 | ||
23 | /* Flags for mbind */ | 23 | /* Flags for mbind */ |
24 | #define MPOL_MF_STRICT (1<<0) /* Verify existing pages in the mapping */ | 24 | #define MPOL_MF_STRICT (1<<0) /* Verify existing pages in the mapping */ |
25 | #define MPOL_MF_MOVE (1<<1) /* Move pages owned by this process to conform to mapping */ | ||
26 | #define MPOL_MF_MOVE_ALL (1<<2) /* Move every page to conform to mapping */ | ||
27 | #define MPOL_MF_INTERNAL (1<<3) /* Internal flags start here */ | ||
25 | 28 | ||
26 | #ifdef __KERNEL__ | 29 | #ifdef __KERNEL__ |
27 | 30 | ||
@@ -65,6 +68,7 @@ struct mempolicy { | |||
65 | nodemask_t nodes; /* interleave */ | 68 | nodemask_t nodes; /* interleave */ |
66 | /* undefined for default */ | 69 | /* undefined for default */ |
67 | } v; | 70 | } v; |
71 | nodemask_t cpuset_mems_allowed; /* mempolicy relative to these nodes */ | ||
68 | }; | 72 | }; |
69 | 73 | ||
70 | /* | 74 | /* |
@@ -110,14 +114,6 @@ static inline int mpol_equal(struct mempolicy *a, struct mempolicy *b) | |||
110 | #define mpol_set_vma_default(vma) ((vma)->vm_policy = NULL) | 114 | #define mpol_set_vma_default(vma) ((vma)->vm_policy = NULL) |
111 | 115 | ||
112 | /* | 116 | /* |
113 | * Hugetlb policy. i386 hugetlb so far works with node numbers | ||
114 | * instead of zone lists, so give it special interfaces for now. | ||
115 | */ | ||
116 | extern int mpol_first_node(struct vm_area_struct *vma, unsigned long addr); | ||
117 | extern int mpol_node_valid(int nid, struct vm_area_struct *vma, | ||
118 | unsigned long addr); | ||
119 | |||
120 | /* | ||
121 | * Tree of shared policies for a shared memory region. | 117 | * Tree of shared policies for a shared memory region. |
122 | * Maintain the policies in a pseudo mm that contains vmas. The vmas | 118 | * Maintain the policies in a pseudo mm that contains vmas. The vmas |
123 | * carry the policy. As a special twist the pseudo mm is indexed in pages, not | 119 | * carry the policy. As a special twist the pseudo mm is indexed in pages, not |
@@ -149,13 +145,37 @@ void mpol_free_shared_policy(struct shared_policy *p); | |||
149 | struct mempolicy *mpol_shared_policy_lookup(struct shared_policy *sp, | 145 | struct mempolicy *mpol_shared_policy_lookup(struct shared_policy *sp, |
150 | unsigned long idx); | 146 | unsigned long idx); |
151 | 147 | ||
152 | struct mempolicy *get_vma_policy(struct task_struct *task, | ||
153 | struct vm_area_struct *vma, unsigned long addr); | ||
154 | |||
155 | extern void numa_default_policy(void); | 148 | extern void numa_default_policy(void); |
156 | extern void numa_policy_init(void); | 149 | extern void numa_policy_init(void); |
157 | extern void numa_policy_rebind(const nodemask_t *old, const nodemask_t *new); | 150 | extern void mpol_rebind_policy(struct mempolicy *pol, const nodemask_t *new); |
151 | extern void mpol_rebind_task(struct task_struct *tsk, | ||
152 | const nodemask_t *new); | ||
153 | extern void mpol_rebind_mm(struct mm_struct *mm, nodemask_t *new); | ||
154 | #define set_cpuset_being_rebound(x) (cpuset_being_rebound = (x)) | ||
155 | |||
156 | #ifdef CONFIG_CPUSET | ||
157 | #define current_cpuset_is_being_rebound() \ | ||
158 | (cpuset_being_rebound == current->cpuset) | ||
159 | #else | ||
160 | #define current_cpuset_is_being_rebound() 0 | ||
161 | #endif | ||
162 | |||
158 | extern struct mempolicy default_policy; | 163 | extern struct mempolicy default_policy; |
164 | extern struct zonelist *huge_zonelist(struct vm_area_struct *vma, | ||
165 | unsigned long addr); | ||
166 | |||
167 | extern int policy_zone; | ||
168 | |||
169 | static inline void check_highest_zone(int k) | ||
170 | { | ||
171 | if (k > policy_zone) | ||
172 | policy_zone = k; | ||
173 | } | ||
174 | |||
175 | int do_migrate_pages(struct mm_struct *mm, | ||
176 | const nodemask_t *from_nodes, const nodemask_t *to_nodes, int flags); | ||
177 | |||
178 | extern void *cpuset_being_rebound; /* Trigger mpol_copy vma rebind */ | ||
159 | 179 | ||
160 | #else | 180 | #else |
161 | 181 | ||
@@ -182,17 +202,6 @@ static inline struct mempolicy *mpol_copy(struct mempolicy *old) | |||
182 | return NULL; | 202 | return NULL; |
183 | } | 203 | } |
184 | 204 | ||
185 | static inline int mpol_first_node(struct vm_area_struct *vma, unsigned long a) | ||
186 | { | ||
187 | return numa_node_id(); | ||
188 | } | ||
189 | |||
190 | static inline int | ||
191 | mpol_node_valid(int nid, struct vm_area_struct *vma, unsigned long a) | ||
192 | { | ||
193 | return 1; | ||
194 | } | ||
195 | |||
196 | struct shared_policy {}; | 205 | struct shared_policy {}; |
197 | 206 | ||
198 | static inline int mpol_set_shared_policy(struct shared_policy *info, | 207 | static inline int mpol_set_shared_policy(struct shared_policy *info, |
@@ -227,11 +236,38 @@ static inline void numa_default_policy(void) | |||
227 | { | 236 | { |
228 | } | 237 | } |
229 | 238 | ||
230 | static inline void numa_policy_rebind(const nodemask_t *old, | 239 | static inline void mpol_rebind_policy(struct mempolicy *pol, |
231 | const nodemask_t *new) | 240 | const nodemask_t *new) |
232 | { | 241 | { |
233 | } | 242 | } |
234 | 243 | ||
244 | static inline void mpol_rebind_task(struct task_struct *tsk, | ||
245 | const nodemask_t *new) | ||
246 | { | ||
247 | } | ||
248 | |||
249 | static inline void mpol_rebind_mm(struct mm_struct *mm, nodemask_t *new) | ||
250 | { | ||
251 | } | ||
252 | |||
253 | #define set_cpuset_being_rebound(x) do {} while (0) | ||
254 | |||
255 | static inline struct zonelist *huge_zonelist(struct vm_area_struct *vma, | ||
256 | unsigned long addr) | ||
257 | { | ||
258 | return NODE_DATA(0)->node_zonelists + gfp_zone(GFP_HIGHUSER); | ||
259 | } | ||
260 | |||
261 | static inline int do_migrate_pages(struct mm_struct *mm, | ||
262 | const nodemask_t *from_nodes, | ||
263 | const nodemask_t *to_nodes, int flags) | ||
264 | { | ||
265 | return 0; | ||
266 | } | ||
267 | |||
268 | static inline void check_highest_zone(int k) | ||
269 | { | ||
270 | } | ||
235 | #endif /* CONFIG_NUMA */ | 271 | #endif /* CONFIG_NUMA */ |
236 | #endif /* __KERNEL__ */ | 272 | #endif /* __KERNEL__ */ |
237 | 273 | ||
diff --git a/include/linux/mm.h b/include/linux/mm.h index f0cdfd18db55..df80e63903b5 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -145,7 +145,7 @@ extern unsigned int kobjsize(const void *objp); | |||
145 | #define VM_GROWSDOWN 0x00000100 /* general info on the segment */ | 145 | #define VM_GROWSDOWN 0x00000100 /* general info on the segment */ |
146 | #define VM_GROWSUP 0x00000200 | 146 | #define VM_GROWSUP 0x00000200 |
147 | #define VM_SHM 0x00000000 /* Means nothing: delete it later */ | 147 | #define VM_SHM 0x00000000 /* Means nothing: delete it later */ |
148 | #define VM_UNPAGED 0x00000400 /* Pages managed without map count */ | 148 | #define VM_PFNMAP 0x00000400 /* Page-ranges managed without "struct page", just pure PFN */ |
149 | #define VM_DENYWRITE 0x00000800 /* ETXTBSY on write attempts.. */ | 149 | #define VM_DENYWRITE 0x00000800 /* ETXTBSY on write attempts.. */ |
150 | 150 | ||
151 | #define VM_EXECUTABLE 0x00001000 | 151 | #define VM_EXECUTABLE 0x00001000 |
@@ -163,6 +163,7 @@ extern unsigned int kobjsize(const void *objp); | |||
163 | #define VM_HUGETLB 0x00400000 /* Huge TLB Page VM */ | 163 | #define VM_HUGETLB 0x00400000 /* Huge TLB Page VM */ |
164 | #define VM_NONLINEAR 0x00800000 /* Is non-linear (remap_file_pages) */ | 164 | #define VM_NONLINEAR 0x00800000 /* Is non-linear (remap_file_pages) */ |
165 | #define VM_MAPPED_COPY 0x01000000 /* T if mapped copy of data (nommu mmap) */ | 165 | #define VM_MAPPED_COPY 0x01000000 /* T if mapped copy of data (nommu mmap) */ |
166 | #define VM_INSERTPAGE 0x02000000 /* The vma has had "vm_insert_page()" done on it */ | ||
166 | 167 | ||
167 | #ifndef VM_STACK_DEFAULT_FLAGS /* arch can override this */ | 168 | #ifndef VM_STACK_DEFAULT_FLAGS /* arch can override this */ |
168 | #define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS | 169 | #define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS |
@@ -222,24 +223,27 @@ struct page { | |||
222 | * & limit reverse map searches. | 223 | * & limit reverse map searches. |
223 | */ | 224 | */ |
224 | union { | 225 | union { |
225 | unsigned long private; /* Mapping-private opaque data: | 226 | struct { |
226 | * usually used for buffer_heads | 227 | unsigned long private; /* Mapping-private opaque data: |
227 | * if PagePrivate set; used for | 228 | * usually used for buffer_heads |
228 | * swp_entry_t if PageSwapCache | 229 | * if PagePrivate set; used for |
229 | * When page is free, this indicates | 230 | * swp_entry_t if PageSwapCache. |
230 | * order in the buddy system. | 231 | * When page is free, this |
231 | */ | 232 | * indicates order in the buddy |
233 | * system. | ||
234 | */ | ||
235 | struct address_space *mapping; /* If low bit clear, points to | ||
236 | * inode address_space, or NULL. | ||
237 | * If page mapped as anonymous | ||
238 | * memory, low bit is set, and | ||
239 | * it points to anon_vma object: | ||
240 | * see PAGE_MAPPING_ANON below. | ||
241 | */ | ||
242 | }; | ||
232 | #if NR_CPUS >= CONFIG_SPLIT_PTLOCK_CPUS | 243 | #if NR_CPUS >= CONFIG_SPLIT_PTLOCK_CPUS |
233 | spinlock_t ptl; | 244 | spinlock_t ptl; |
234 | #endif | 245 | #endif |
235 | } u; | 246 | }; |
236 | struct address_space *mapping; /* If low bit clear, points to | ||
237 | * inode address_space, or NULL. | ||
238 | * If page mapped as anonymous | ||
239 | * memory, low bit is set, and | ||
240 | * it points to anon_vma object: | ||
241 | * see PAGE_MAPPING_ANON below. | ||
242 | */ | ||
243 | pgoff_t index; /* Our offset within mapping. */ | 247 | pgoff_t index; /* Our offset within mapping. */ |
244 | struct list_head lru; /* Pageout list, eg. active_list | 248 | struct list_head lru; /* Pageout list, eg. active_list |
245 | * protected by zone->lru_lock ! | 249 | * protected by zone->lru_lock ! |
@@ -260,8 +264,8 @@ struct page { | |||
260 | #endif /* WANT_PAGE_VIRTUAL */ | 264 | #endif /* WANT_PAGE_VIRTUAL */ |
261 | }; | 265 | }; |
262 | 266 | ||
263 | #define page_private(page) ((page)->u.private) | 267 | #define page_private(page) ((page)->private) |
264 | #define set_page_private(page, v) ((page)->u.private = (v)) | 268 | #define set_page_private(page, v) ((page)->private = (v)) |
265 | 269 | ||
266 | /* | 270 | /* |
267 | * FIXME: take this include out, include page-flags.h in | 271 | * FIXME: take this include out, include page-flags.h in |
@@ -307,7 +311,7 @@ struct page { | |||
307 | */ | 311 | */ |
308 | #define get_page_testone(p) atomic_inc_and_test(&(p)->_count) | 312 | #define get_page_testone(p) atomic_inc_and_test(&(p)->_count) |
309 | 313 | ||
310 | #define set_page_count(p,v) atomic_set(&(p)->_count, v - 1) | 314 | #define set_page_count(p,v) atomic_set(&(p)->_count, (v) - 1) |
311 | #define __put_page(p) atomic_dec(&(p)->_count) | 315 | #define __put_page(p) atomic_dec(&(p)->_count) |
312 | 316 | ||
313 | extern void FASTCALL(__page_cache_release(struct page *)); | 317 | extern void FASTCALL(__page_cache_release(struct page *)); |
@@ -633,14 +637,38 @@ struct mempolicy *shmem_get_policy(struct vm_area_struct *vma, | |||
633 | int shmem_lock(struct file *file, int lock, struct user_struct *user); | 637 | int shmem_lock(struct file *file, int lock, struct user_struct *user); |
634 | #else | 638 | #else |
635 | #define shmem_nopage filemap_nopage | 639 | #define shmem_nopage filemap_nopage |
636 | #define shmem_lock(a, b, c) ({0;}) /* always in memory, no need to lock */ | 640 | |
637 | #define shmem_set_policy(a, b) (0) | 641 | static inline int shmem_lock(struct file *file, int lock, |
638 | #define shmem_get_policy(a, b) (NULL) | 642 | struct user_struct *user) |
643 | { | ||
644 | return 0; | ||
645 | } | ||
646 | |||
647 | static inline int shmem_set_policy(struct vm_area_struct *vma, | ||
648 | struct mempolicy *new) | ||
649 | { | ||
650 | return 0; | ||
651 | } | ||
652 | |||
653 | static inline struct mempolicy *shmem_get_policy(struct vm_area_struct *vma, | ||
654 | unsigned long addr) | ||
655 | { | ||
656 | return NULL; | ||
657 | } | ||
639 | #endif | 658 | #endif |
640 | struct file *shmem_file_setup(char *name, loff_t size, unsigned long flags); | 659 | struct file *shmem_file_setup(char *name, loff_t size, unsigned long flags); |
660 | extern int shmem_mmap(struct file *file, struct vm_area_struct *vma); | ||
641 | 661 | ||
642 | int shmem_zero_setup(struct vm_area_struct *); | 662 | int shmem_zero_setup(struct vm_area_struct *); |
643 | 663 | ||
664 | #ifndef CONFIG_MMU | ||
665 | extern unsigned long shmem_get_unmapped_area(struct file *file, | ||
666 | unsigned long addr, | ||
667 | unsigned long len, | ||
668 | unsigned long pgoff, | ||
669 | unsigned long flags); | ||
670 | #endif | ||
671 | |||
644 | static inline int can_do_mlock(void) | 672 | static inline int can_do_mlock(void) |
645 | { | 673 | { |
646 | if (capable(CAP_IPC_LOCK)) | 674 | if (capable(CAP_IPC_LOCK)) |
@@ -664,6 +692,7 @@ struct zap_details { | |||
664 | unsigned long truncate_count; /* Compare vm_truncate_count */ | 692 | unsigned long truncate_count; /* Compare vm_truncate_count */ |
665 | }; | 693 | }; |
666 | 694 | ||
695 | struct page *vm_normal_page(struct vm_area_struct *, unsigned long, pte_t); | ||
667 | unsigned long zap_page_range(struct vm_area_struct *vma, unsigned long address, | 696 | unsigned long zap_page_range(struct vm_area_struct *vma, unsigned long address, |
668 | unsigned long size, struct zap_details *); | 697 | unsigned long size, struct zap_details *); |
669 | unsigned long unmap_vmas(struct mmu_gather **tlb, | 698 | unsigned long unmap_vmas(struct mmu_gather **tlb, |
@@ -688,14 +717,31 @@ static inline void unmap_shared_mapping_range(struct address_space *mapping, | |||
688 | } | 717 | } |
689 | 718 | ||
690 | extern int vmtruncate(struct inode * inode, loff_t offset); | 719 | extern int vmtruncate(struct inode * inode, loff_t offset); |
720 | extern int vmtruncate_range(struct inode * inode, loff_t offset, loff_t end); | ||
691 | extern int install_page(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, struct page *page, pgprot_t prot); | 721 | extern int install_page(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, struct page *page, pgprot_t prot); |
692 | extern int install_file_pte(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, unsigned long pgoff, pgprot_t prot); | 722 | extern int install_file_pte(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, unsigned long pgoff, pgprot_t prot); |
693 | extern int __handle_mm_fault(struct mm_struct *mm,struct vm_area_struct *vma, unsigned long address, int write_access); | ||
694 | 723 | ||
695 | static inline int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long address, int write_access) | 724 | #ifdef CONFIG_MMU |
725 | extern int __handle_mm_fault(struct mm_struct *mm,struct vm_area_struct *vma, | ||
726 | unsigned long address, int write_access); | ||
727 | |||
728 | static inline int handle_mm_fault(struct mm_struct *mm, | ||
729 | struct vm_area_struct *vma, unsigned long address, | ||
730 | int write_access) | ||
696 | { | 731 | { |
697 | return __handle_mm_fault(mm, vma, address, write_access) & (~VM_FAULT_WRITE); | 732 | return __handle_mm_fault(mm, vma, address, write_access) & |
733 | (~VM_FAULT_WRITE); | ||
698 | } | 734 | } |
735 | #else | ||
736 | static inline int handle_mm_fault(struct mm_struct *mm, | ||
737 | struct vm_area_struct *vma, unsigned long address, | ||
738 | int write_access) | ||
739 | { | ||
740 | /* should never happen if there's no MMU */ | ||
741 | BUG(); | ||
742 | return VM_FAULT_SIGBUS; | ||
743 | } | ||
744 | #endif | ||
699 | 745 | ||
700 | extern int make_pages_present(unsigned long addr, unsigned long end); | 746 | extern int make_pages_present(unsigned long addr, unsigned long end); |
701 | extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write); | 747 | extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write); |
@@ -740,6 +786,8 @@ struct shrinker; | |||
740 | extern struct shrinker *set_shrinker(int, shrinker_t); | 786 | extern struct shrinker *set_shrinker(int, shrinker_t); |
741 | extern void remove_shrinker(struct shrinker *shrinker); | 787 | extern void remove_shrinker(struct shrinker *shrinker); |
742 | 788 | ||
789 | extern pte_t *FASTCALL(get_locked_pte(struct mm_struct *mm, unsigned long addr, spinlock_t **ptl)); | ||
790 | |||
743 | int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address); | 791 | int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address); |
744 | int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address); | 792 | int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address); |
745 | int __pte_alloc(struct mm_struct *mm, pmd_t *pmd, unsigned long address); | 793 | int __pte_alloc(struct mm_struct *mm, pmd_t *pmd, unsigned long address); |
@@ -770,7 +818,7 @@ static inline pmd_t *pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long a | |||
770 | * overflow into the next struct page (as it might with DEBUG_SPINLOCK). | 818 | * overflow into the next struct page (as it might with DEBUG_SPINLOCK). |
771 | * When freeing, reset page->mapping so free_pages_check won't complain. | 819 | * When freeing, reset page->mapping so free_pages_check won't complain. |
772 | */ | 820 | */ |
773 | #define __pte_lockptr(page) &((page)->u.ptl) | 821 | #define __pte_lockptr(page) &((page)->ptl) |
774 | #define pte_lock_init(_page) do { \ | 822 | #define pte_lock_init(_page) do { \ |
775 | spin_lock_init(__pte_lockptr(_page)); \ | 823 | spin_lock_init(__pte_lockptr(_page)); \ |
776 | } while (0) | 824 | } while (0) |
@@ -892,6 +940,8 @@ extern unsigned long do_brk(unsigned long, unsigned long); | |||
892 | /* filemap.c */ | 940 | /* filemap.c */ |
893 | extern unsigned long page_unuse(struct page *); | 941 | extern unsigned long page_unuse(struct page *); |
894 | extern void truncate_inode_pages(struct address_space *, loff_t); | 942 | extern void truncate_inode_pages(struct address_space *, loff_t); |
943 | extern void truncate_inode_pages_range(struct address_space *, | ||
944 | loff_t lstart, loff_t lend); | ||
895 | 945 | ||
896 | /* generic vm_area_ops exported for stackable file systems */ | 946 | /* generic vm_area_ops exported for stackable file systems */ |
897 | extern struct page *filemap_nopage(struct vm_area_struct *, unsigned long, int *); | 947 | extern struct page *filemap_nopage(struct vm_area_struct *, unsigned long, int *); |
@@ -952,8 +1002,9 @@ struct page *vmalloc_to_page(void *addr); | |||
952 | unsigned long vmalloc_to_pfn(void *addr); | 1002 | unsigned long vmalloc_to_pfn(void *addr); |
953 | int remap_pfn_range(struct vm_area_struct *, unsigned long addr, | 1003 | int remap_pfn_range(struct vm_area_struct *, unsigned long addr, |
954 | unsigned long pfn, unsigned long size, pgprot_t); | 1004 | unsigned long pfn, unsigned long size, pgprot_t); |
1005 | int vm_insert_page(struct vm_area_struct *, unsigned long addr, struct page *); | ||
955 | 1006 | ||
956 | struct page *follow_page(struct mm_struct *, unsigned long address, | 1007 | struct page *follow_page(struct vm_area_struct *, unsigned long address, |
957 | unsigned int foll_flags); | 1008 | unsigned int foll_flags); |
958 | #define FOLL_WRITE 0x01 /* check pte is writable */ | 1009 | #define FOLL_WRITE 0x01 /* check pte is writable */ |
959 | #define FOLL_TOUCH 0x02 /* mark page accessed */ | 1010 | #define FOLL_TOUCH 0x02 /* mark page accessed */ |
@@ -988,5 +1039,12 @@ int in_gate_area_no_task(unsigned long addr); | |||
988 | /* /proc/<pid>/oom_adj set to -17 protects from the oom-killer */ | 1039 | /* /proc/<pid>/oom_adj set to -17 protects from the oom-killer */ |
989 | #define OOM_DISABLE -17 | 1040 | #define OOM_DISABLE -17 |
990 | 1041 | ||
1042 | int drop_caches_sysctl_handler(struct ctl_table *, int, struct file *, | ||
1043 | void __user *, size_t *, loff_t *); | ||
1044 | int shrink_slab(unsigned long scanned, gfp_t gfp_mask, | ||
1045 | unsigned long lru_pages); | ||
1046 | void drop_pagecache(void); | ||
1047 | void drop_slab(void); | ||
1048 | |||
991 | #endif /* __KERNEL__ */ | 1049 | #endif /* __KERNEL__ */ |
992 | #endif /* _LINUX_MM_H */ | 1050 | #endif /* _LINUX_MM_H */ |
diff --git a/include/linux/mm_inline.h b/include/linux/mm_inline.h index 47762ca695a5..49cc68af01f8 100644 --- a/include/linux/mm_inline.h +++ b/include/linux/mm_inline.h | |||
@@ -38,3 +38,25 @@ del_page_from_lru(struct zone *zone, struct page *page) | |||
38 | zone->nr_inactive--; | 38 | zone->nr_inactive--; |
39 | } | 39 | } |
40 | } | 40 | } |
41 | |||
42 | /* | ||
43 | * Isolate one page from the LRU lists. | ||
44 | * | ||
45 | * - zone->lru_lock must be held | ||
46 | */ | ||
47 | static inline int __isolate_lru_page(struct page *page) | ||
48 | { | ||
49 | if (unlikely(!TestClearPageLRU(page))) | ||
50 | return 0; | ||
51 | |||
52 | if (get_page_testone(page)) { | ||
53 | /* | ||
54 | * It is being freed elsewhere | ||
55 | */ | ||
56 | __put_page(page); | ||
57 | SetPageLRU(page); | ||
58 | return -ENOENT; | ||
59 | } | ||
60 | |||
61 | return 1; | ||
62 | } | ||
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h index 18fc77f682de..30dd978c1ec8 100644 --- a/include/linux/mmc/card.h +++ b/include/linux/mmc/card.h | |||
@@ -30,7 +30,12 @@ struct mmc_csd { | |||
30 | unsigned int tacc_ns; | 30 | unsigned int tacc_ns; |
31 | unsigned int max_dtr; | 31 | unsigned int max_dtr; |
32 | unsigned int read_blkbits; | 32 | unsigned int read_blkbits; |
33 | unsigned int write_blkbits; | ||
33 | unsigned int capacity; | 34 | unsigned int capacity; |
35 | unsigned int read_partial:1, | ||
36 | read_misalign:1, | ||
37 | write_partial:1, | ||
38 | write_misalign:1; | ||
34 | }; | 39 | }; |
35 | 40 | ||
36 | struct sd_scr { | 41 | struct sd_scr { |
diff --git a/include/linux/mmc/protocol.h b/include/linux/mmc/protocol.h index f819cae92266..a14dc306545b 100644 --- a/include/linux/mmc/protocol.h +++ b/include/linux/mmc/protocol.h | |||
@@ -63,7 +63,7 @@ | |||
63 | /* class 5 */ | 63 | /* class 5 */ |
64 | #define MMC_ERASE_GROUP_START 35 /* ac [31:0] data addr R1 */ | 64 | #define MMC_ERASE_GROUP_START 35 /* ac [31:0] data addr R1 */ |
65 | #define MMC_ERASE_GROUP_END 36 /* ac [31:0] data addr R1 */ | 65 | #define MMC_ERASE_GROUP_END 36 /* ac [31:0] data addr R1 */ |
66 | #define MMC_ERASE 37 /* ac R1b */ | 66 | #define MMC_ERASE 38 /* ac R1b */ |
67 | 67 | ||
68 | /* class 9 */ | 68 | /* class 9 */ |
69 | #define MMC_FAST_IO 39 /* ac <Complex> R4 */ | 69 | #define MMC_FAST_IO 39 /* ac <Complex> R4 */ |
@@ -74,7 +74,7 @@ | |||
74 | 74 | ||
75 | /* class 8 */ | 75 | /* class 8 */ |
76 | #define MMC_APP_CMD 55 /* ac [31:16] RCA R1 */ | 76 | #define MMC_APP_CMD 55 /* ac [31:16] RCA R1 */ |
77 | #define MMC_GEN_CMD 56 /* adtc [0] RD/WR R1b */ | 77 | #define MMC_GEN_CMD 56 /* adtc [0] RD/WR R1 */ |
78 | 78 | ||
79 | /* SD commands type argument response */ | 79 | /* SD commands type argument response */ |
80 | /* class 8 */ | 80 | /* class 8 */ |
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 9f22090df7dd..7e4ae6ab1977 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
@@ -38,7 +38,7 @@ struct pglist_data; | |||
38 | #if defined(CONFIG_SMP) | 38 | #if defined(CONFIG_SMP) |
39 | struct zone_padding { | 39 | struct zone_padding { |
40 | char x[0]; | 40 | char x[0]; |
41 | } ____cacheline_maxaligned_in_smp; | 41 | } ____cacheline_internodealigned_in_smp; |
42 | #define ZONE_PADDING(name) struct zone_padding name; | 42 | #define ZONE_PADDING(name) struct zone_padding name; |
43 | #else | 43 | #else |
44 | #define ZONE_PADDING(name) | 44 | #define ZONE_PADDING(name) |
@@ -46,7 +46,6 @@ struct zone_padding { | |||
46 | 46 | ||
47 | struct per_cpu_pages { | 47 | struct per_cpu_pages { |
48 | int count; /* number of pages in the list */ | 48 | int count; /* number of pages in the list */ |
49 | int low; /* low watermark, refill needed */ | ||
50 | int high; /* high watermark, emptying needed */ | 49 | int high; /* high watermark, emptying needed */ |
51 | int batch; /* chunk size for buddy add/remove */ | 50 | int batch; /* chunk size for buddy add/remove */ |
52 | struct list_head list; /* the list of pages */ | 51 | struct list_head list; /* the list of pages */ |
@@ -234,7 +233,7 @@ struct zone { | |||
234 | * rarely used fields: | 233 | * rarely used fields: |
235 | */ | 234 | */ |
236 | char *name; | 235 | char *name; |
237 | } ____cacheline_maxaligned_in_smp; | 236 | } ____cacheline_internodealigned_in_smp; |
238 | 237 | ||
239 | 238 | ||
240 | /* | 239 | /* |
@@ -389,6 +388,11 @@ static inline struct zone *next_zone(struct zone *zone) | |||
389 | #define for_each_zone(zone) \ | 388 | #define for_each_zone(zone) \ |
390 | for (zone = pgdat_list->node_zones; zone; zone = next_zone(zone)) | 389 | for (zone = pgdat_list->node_zones; zone; zone = next_zone(zone)) |
391 | 390 | ||
391 | static inline int populated_zone(struct zone *zone) | ||
392 | { | ||
393 | return (!!zone->present_pages); | ||
394 | } | ||
395 | |||
392 | static inline int is_highmem_idx(int idx) | 396 | static inline int is_highmem_idx(int idx) |
393 | { | 397 | { |
394 | return (idx == ZONE_HIGHMEM); | 398 | return (idx == ZONE_HIGHMEM); |
@@ -398,6 +402,7 @@ static inline int is_normal_idx(int idx) | |||
398 | { | 402 | { |
399 | return (idx == ZONE_NORMAL); | 403 | return (idx == ZONE_NORMAL); |
400 | } | 404 | } |
405 | |||
401 | /** | 406 | /** |
402 | * is_highmem - helper function to quickly check if a struct zone is a | 407 | * is_highmem - helper function to quickly check if a struct zone is a |
403 | * highmem zone or not. This is an attempt to keep references | 408 | * highmem zone or not. This is an attempt to keep references |
@@ -414,6 +419,16 @@ static inline int is_normal(struct zone *zone) | |||
414 | return zone == zone->zone_pgdat->node_zones + ZONE_NORMAL; | 419 | return zone == zone->zone_pgdat->node_zones + ZONE_NORMAL; |
415 | } | 420 | } |
416 | 421 | ||
422 | static inline int is_dma32(struct zone *zone) | ||
423 | { | ||
424 | return zone == zone->zone_pgdat->node_zones + ZONE_DMA32; | ||
425 | } | ||
426 | |||
427 | static inline int is_dma(struct zone *zone) | ||
428 | { | ||
429 | return zone == zone->zone_pgdat->node_zones + ZONE_DMA; | ||
430 | } | ||
431 | |||
417 | /* These two functions are used to setup the per zone pages min values */ | 432 | /* These two functions are used to setup the per zone pages min values */ |
418 | struct ctl_table; | 433 | struct ctl_table; |
419 | struct file; | 434 | struct file; |
@@ -422,6 +437,8 @@ int min_free_kbytes_sysctl_handler(struct ctl_table *, int, struct file *, | |||
422 | extern int sysctl_lowmem_reserve_ratio[MAX_NR_ZONES-1]; | 437 | extern int sysctl_lowmem_reserve_ratio[MAX_NR_ZONES-1]; |
423 | int lowmem_reserve_ratio_sysctl_handler(struct ctl_table *, int, struct file *, | 438 | int lowmem_reserve_ratio_sysctl_handler(struct ctl_table *, int, struct file *, |
424 | void __user *, size_t *, loff_t *); | 439 | void __user *, size_t *, loff_t *); |
440 | int percpu_pagelist_fraction_sysctl_handler(struct ctl_table *, int, struct file *, | ||
441 | void __user *, size_t *, loff_t *); | ||
425 | 442 | ||
426 | #include <linux/topology.h> | 443 | #include <linux/topology.h> |
427 | /* Returns the number of the current Node. */ | 444 | /* Returns the number of the current Node. */ |
@@ -435,7 +452,6 @@ extern struct pglist_data contig_page_data; | |||
435 | #define NODE_DATA(nid) (&contig_page_data) | 452 | #define NODE_DATA(nid) (&contig_page_data) |
436 | #define NODE_MEM_MAP(nid) mem_map | 453 | #define NODE_MEM_MAP(nid) mem_map |
437 | #define MAX_NODES_SHIFT 1 | 454 | #define MAX_NODES_SHIFT 1 |
438 | #define pfn_to_nid(pfn) (0) | ||
439 | 455 | ||
440 | #else /* CONFIG_NEED_MULTIPLE_NODES */ | 456 | #else /* CONFIG_NEED_MULTIPLE_NODES */ |
441 | 457 | ||
@@ -470,6 +486,10 @@ extern struct pglist_data contig_page_data; | |||
470 | #define early_pfn_to_nid(nid) (0UL) | 486 | #define early_pfn_to_nid(nid) (0UL) |
471 | #endif | 487 | #endif |
472 | 488 | ||
489 | #ifdef CONFIG_FLATMEM | ||
490 | #define pfn_to_nid(pfn) (0) | ||
491 | #endif | ||
492 | |||
473 | #define pfn_to_section_nr(pfn) ((pfn) >> PFN_SECTION_SHIFT) | 493 | #define pfn_to_section_nr(pfn) ((pfn) >> PFN_SECTION_SHIFT) |
474 | #define section_nr_to_pfn(sec) ((sec) << PFN_SECTION_SHIFT) | 494 | #define section_nr_to_pfn(sec) ((sec) << PFN_SECTION_SHIFT) |
475 | 495 | ||
@@ -564,11 +584,6 @@ static inline int valid_section_nr(unsigned long nr) | |||
564 | return valid_section(__nr_to_section(nr)); | 584 | return valid_section(__nr_to_section(nr)); |
565 | } | 585 | } |
566 | 586 | ||
567 | /* | ||
568 | * Given a kernel address, find the home node of the underlying memory. | ||
569 | */ | ||
570 | #define kvaddr_to_nid(kaddr) pfn_to_nid(__pa(kaddr) >> PAGE_SHIFT) | ||
571 | |||
572 | static inline struct mem_section *__pfn_to_section(unsigned long pfn) | 587 | static inline struct mem_section *__pfn_to_section(unsigned long pfn) |
573 | { | 588 | { |
574 | return __nr_to_section(pfn_to_section_nr(pfn)); | 589 | return __nr_to_section(pfn_to_section_nr(pfn)); |
@@ -598,13 +613,14 @@ static inline int pfn_valid(unsigned long pfn) | |||
598 | * this restriction. | 613 | * this restriction. |
599 | */ | 614 | */ |
600 | #ifdef CONFIG_NUMA | 615 | #ifdef CONFIG_NUMA |
601 | #define pfn_to_nid early_pfn_to_nid | 616 | #define pfn_to_nid(pfn) \ |
602 | #endif | ||
603 | |||
604 | #define pfn_to_pgdat(pfn) \ | ||
605 | ({ \ | 617 | ({ \ |
606 | NODE_DATA(pfn_to_nid(pfn)); \ | 618 | unsigned long __pfn_to_nid_pfn = (pfn); \ |
619 | page_to_nid(pfn_to_page(__pfn_to_nid_pfn)); \ | ||
607 | }) | 620 | }) |
621 | #else | ||
622 | #define pfn_to_nid(pfn) (0) | ||
623 | #endif | ||
608 | 624 | ||
609 | #define early_pfn_valid(pfn) pfn_valid(pfn) | 625 | #define early_pfn_valid(pfn) pfn_valid(pfn) |
610 | void sparse_init(void); | 626 | void sparse_init(void); |
@@ -613,12 +629,6 @@ void sparse_init(void); | |||
613 | #define sparse_index_init(_sec, _nid) do {} while (0) | 629 | #define sparse_index_init(_sec, _nid) do {} while (0) |
614 | #endif /* CONFIG_SPARSEMEM */ | 630 | #endif /* CONFIG_SPARSEMEM */ |
615 | 631 | ||
616 | #ifdef CONFIG_NODES_SPAN_OTHER_NODES | ||
617 | #define early_pfn_in_nid(pfn, nid) (early_pfn_to_nid(pfn) == (nid)) | ||
618 | #else | ||
619 | #define early_pfn_in_nid(pfn, nid) (1) | ||
620 | #endif | ||
621 | |||
622 | #ifndef early_pfn_valid | 632 | #ifndef early_pfn_valid |
623 | #define early_pfn_valid(pfn) (1) | 633 | #define early_pfn_valid(pfn) (1) |
624 | #endif | 634 | #endif |
diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h index 368ec8e45bd0..b5c98c43779e 100644 --- a/include/linux/moduleparam.h +++ b/include/linux/moduleparam.h | |||
@@ -10,7 +10,7 @@ | |||
10 | #ifdef MODULE | 10 | #ifdef MODULE |
11 | #define MODULE_PARAM_PREFIX /* empty */ | 11 | #define MODULE_PARAM_PREFIX /* empty */ |
12 | #else | 12 | #else |
13 | #define MODULE_PARAM_PREFIX __stringify(KBUILD_MODNAME) "." | 13 | #define MODULE_PARAM_PREFIX KBUILD_MODNAME "." |
14 | #endif | 14 | #endif |
15 | 15 | ||
16 | #ifdef MODULE | 16 | #ifdef MODULE |
diff --git a/include/linux/mount.h b/include/linux/mount.h index dd4e83eba933..b98a709f1794 100644 --- a/include/linux/mount.h +++ b/include/linux/mount.h | |||
@@ -22,7 +22,8 @@ | |||
22 | #define MNT_NOEXEC 0x04 | 22 | #define MNT_NOEXEC 0x04 |
23 | #define MNT_SHARED 0x10 /* if the vfsmount is a shared mount */ | 23 | #define MNT_SHARED 0x10 /* if the vfsmount is a shared mount */ |
24 | #define MNT_UNBINDABLE 0x20 /* if the vfsmount is a unbindable mount */ | 24 | #define MNT_UNBINDABLE 0x20 /* if the vfsmount is a unbindable mount */ |
25 | #define MNT_PNODE_MASK 0x30 /* propogation flag mask */ | 25 | |
26 | #define MNT_PNODE_MASK (MNT_SHARED | MNT_UNBINDABLE) | ||
26 | 27 | ||
27 | struct vfsmount { | 28 | struct vfsmount { |
28 | struct list_head mnt_hash; | 29 | struct list_head mnt_hash; |
diff --git a/include/linux/msdos_fs.h b/include/linux/msdos_fs.h index 941da5c016a0..e933e2a355ad 100644 --- a/include/linux/msdos_fs.h +++ b/include/linux/msdos_fs.h | |||
@@ -329,7 +329,8 @@ static inline void fatwchar_to16(__u8 *dst, const wchar_t *src, size_t len) | |||
329 | extern void fat_cache_inval_inode(struct inode *inode); | 329 | extern void fat_cache_inval_inode(struct inode *inode); |
330 | extern int fat_get_cluster(struct inode *inode, int cluster, | 330 | extern int fat_get_cluster(struct inode *inode, int cluster, |
331 | int *fclus, int *dclus); | 331 | int *fclus, int *dclus); |
332 | extern int fat_bmap(struct inode *inode, sector_t sector, sector_t *phys); | 332 | extern int fat_bmap(struct inode *inode, sector_t sector, sector_t *phys, |
333 | unsigned long *mapped_blocks); | ||
333 | 334 | ||
334 | /* fat/dir.c */ | 335 | /* fat/dir.c */ |
335 | extern struct file_operations fat_dir_operations; | 336 | extern struct file_operations fat_dir_operations; |
diff --git a/include/linux/mtd/cfi.h b/include/linux/mtd/cfi.h index 3c9ea4b7adda..23a568910341 100644 --- a/include/linux/mtd/cfi.h +++ b/include/linux/mtd/cfi.h | |||
@@ -1,7 +1,7 @@ | |||
1 | 1 | ||
2 | /* Common Flash Interface structures | 2 | /* Common Flash Interface structures |
3 | * See http://support.intel.com/design/flash/technote/index.htm | 3 | * See http://support.intel.com/design/flash/technote/index.htm |
4 | * $Id: cfi.h,v 1.56 2005/11/07 11:14:54 gleixner Exp $ | 4 | * $Id: cfi.h,v 1.57 2005/11/15 23:28:17 tpoynor Exp $ |
5 | */ | 5 | */ |
6 | 6 | ||
7 | #ifndef __MTD_CFI_H__ | 7 | #ifndef __MTD_CFI_H__ |
@@ -426,6 +426,22 @@ static inline uint8_t cfi_read_query(struct map_info *map, uint32_t addr) | |||
426 | } | 426 | } |
427 | } | 427 | } |
428 | 428 | ||
429 | static inline uint16_t cfi_read_query16(struct map_info *map, uint32_t addr) | ||
430 | { | ||
431 | map_word val = map_read(map, addr); | ||
432 | |||
433 | if (map_bankwidth_is_1(map)) { | ||
434 | return val.x[0] & 0xff; | ||
435 | } else if (map_bankwidth_is_2(map)) { | ||
436 | return cfi16_to_cpu(val.x[0]); | ||
437 | } else { | ||
438 | /* No point in a 64-bit byteswap since that would just be | ||
439 | swapping the responses from different chips, and we are | ||
440 | only interested in one chip (a representative sample) */ | ||
441 | return cfi32_to_cpu(val.x[0]); | ||
442 | } | ||
443 | } | ||
444 | |||
429 | static inline void cfi_udelay(int us) | 445 | static inline void cfi_udelay(int us) |
430 | { | 446 | { |
431 | if (us >= 1000) { | 447 | if (us >= 1000) { |
diff --git a/include/linux/mtd/onenand.h b/include/linux/mtd/onenand.h index f1fd4215686a..7419b5fab133 100644 --- a/include/linux/mtd/onenand.h +++ b/include/linux/mtd/onenand.h | |||
@@ -17,7 +17,6 @@ | |||
17 | #include <linux/mtd/bbm.h> | 17 | #include <linux/mtd/bbm.h> |
18 | 18 | ||
19 | #define MAX_BUFFERRAM 2 | 19 | #define MAX_BUFFERRAM 2 |
20 | #define MAX_ONENAND_PAGESIZE (2048 + 64) | ||
21 | 20 | ||
22 | /* Scan and identify a OneNAND device */ | 21 | /* Scan and identify a OneNAND device */ |
23 | extern int onenand_scan(struct mtd_info *mtd, int max_chips); | 22 | extern int onenand_scan(struct mtd_info *mtd, int max_chips); |
@@ -110,6 +109,7 @@ struct onenand_chip { | |||
110 | spinlock_t chip_lock; | 109 | spinlock_t chip_lock; |
111 | wait_queue_head_t wq; | 110 | wait_queue_head_t wq; |
112 | onenand_state_t state; | 111 | onenand_state_t state; |
112 | unsigned char *page_buf; | ||
113 | 113 | ||
114 | struct nand_oobinfo *autooob; | 114 | struct nand_oobinfo *autooob; |
115 | 115 | ||
@@ -134,13 +134,12 @@ struct onenand_chip { | |||
134 | * Options bits | 134 | * Options bits |
135 | */ | 135 | */ |
136 | #define ONENAND_CONT_LOCK (0x0001) | 136 | #define ONENAND_CONT_LOCK (0x0001) |
137 | 137 | #define ONENAND_PAGEBUF_ALLOC (0x1000) | |
138 | 138 | ||
139 | /* | 139 | /* |
140 | * OneNAND Flash Manufacturer ID Codes | 140 | * OneNAND Flash Manufacturer ID Codes |
141 | */ | 141 | */ |
142 | #define ONENAND_MFR_SAMSUNG 0xec | 142 | #define ONENAND_MFR_SAMSUNG 0xec |
143 | #define ONENAND_MFR_UNKNOWN 0x00 | ||
144 | 143 | ||
145 | /** | 144 | /** |
146 | * struct nand_manufacturers - NAND Flash Manufacturer ID Structure | 145 | * struct nand_manufacturers - NAND Flash Manufacturer ID Structure |
diff --git a/include/linux/n_r3964.h b/include/linux/n_r3964.h index 2352bcd31a06..db4f3776978a 100644 --- a/include/linux/n_r3964.h +++ b/include/linux/n_r3964.h | |||
@@ -13,6 +13,10 @@ | |||
13 | * L. Haag | 13 | * L. Haag |
14 | * | 14 | * |
15 | * $Log: r3964.h,v $ | 15 | * $Log: r3964.h,v $ |
16 | * Revision 1.4 2005/12/21 19:54:24 Kurt Huwig <kurt huwig de> | ||
17 | * Fixed HZ usage on 2.6 kernels | ||
18 | * Removed unnecessary include | ||
19 | * | ||
16 | * Revision 1.3 2001/03/18 13:02:24 dwmw2 | 20 | * Revision 1.3 2001/03/18 13:02:24 dwmw2 |
17 | * Fix timer usage, use spinlocks properly. | 21 | * Fix timer usage, use spinlocks properly. |
18 | * | 22 | * |
@@ -45,9 +49,11 @@ | |||
45 | #define __LINUX_N_R3964_H__ | 49 | #define __LINUX_N_R3964_H__ |
46 | 50 | ||
47 | /* line disciplines for r3964 protocol */ | 51 | /* line disciplines for r3964 protocol */ |
48 | #include <asm/termios.h> | ||
49 | 52 | ||
50 | #ifdef __KERNEL__ | 53 | #ifdef __KERNEL__ |
54 | |||
55 | #include <linux/param.h> | ||
56 | |||
51 | /* | 57 | /* |
52 | * Common ascii handshake characters: | 58 | * Common ascii handshake characters: |
53 | */ | 59 | */ |
@@ -58,14 +64,14 @@ | |||
58 | #define NAK 0x15 | 64 | #define NAK 0x15 |
59 | 65 | ||
60 | /* | 66 | /* |
61 | * Timeouts (msecs/10 msecs per timer interrupt): | 67 | * Timeouts (from milliseconds to jiffies) |
62 | */ | 68 | */ |
63 | 69 | ||
64 | #define R3964_TO_QVZ 550/10 | 70 | #define R3964_TO_QVZ ((550)*HZ/1000) |
65 | #define R3964_TO_ZVZ 220/10 | 71 | #define R3964_TO_ZVZ ((220)*HZ/1000) |
66 | #define R3964_TO_NO_BUF 400/10 | 72 | #define R3964_TO_NO_BUF ((400)*HZ/1000) |
67 | #define R3964_NO_TX_ROOM 100/10 | 73 | #define R3964_NO_TX_ROOM ((100)*HZ/1000) |
68 | #define R3964_TO_RX_PANIC 4000/10 | 74 | #define R3964_TO_RX_PANIC ((4000)*HZ/1000) |
69 | #define R3964_MAX_RETRIES 5 | 75 | #define R3964_MAX_RETRIES 5 |
70 | 76 | ||
71 | #endif | 77 | #endif |
diff --git a/include/linux/nbd.h b/include/linux/nbd.h index 090e210e98f0..f95d51fae733 100644 --- a/include/linux/nbd.h +++ b/include/linux/nbd.h | |||
@@ -37,18 +37,26 @@ enum { | |||
37 | /* userspace doesn't need the nbd_device structure */ | 37 | /* userspace doesn't need the nbd_device structure */ |
38 | #ifdef __KERNEL__ | 38 | #ifdef __KERNEL__ |
39 | 39 | ||
40 | #include <linux/wait.h> | ||
41 | |||
40 | /* values for flags field */ | 42 | /* values for flags field */ |
41 | #define NBD_READ_ONLY 0x0001 | 43 | #define NBD_READ_ONLY 0x0001 |
42 | #define NBD_WRITE_NOCHK 0x0002 | 44 | #define NBD_WRITE_NOCHK 0x0002 |
43 | 45 | ||
46 | struct request; | ||
47 | |||
44 | struct nbd_device { | 48 | struct nbd_device { |
45 | int flags; | 49 | int flags; |
46 | int harderror; /* Code of hard error */ | 50 | int harderror; /* Code of hard error */ |
47 | struct socket * sock; | 51 | struct socket * sock; |
48 | struct file * file; /* If == NULL, device is not ready, yet */ | 52 | struct file * file; /* If == NULL, device is not ready, yet */ |
49 | int magic; | 53 | int magic; |
54 | |||
50 | spinlock_t queue_lock; | 55 | spinlock_t queue_lock; |
51 | struct list_head queue_head;/* Requests are added here... */ | 56 | struct list_head queue_head;/* Requests are added here... */ |
57 | struct request *active_req; | ||
58 | wait_queue_head_t active_wq; | ||
59 | |||
52 | struct semaphore tx_lock; | 60 | struct semaphore tx_lock; |
53 | struct gendisk *disk; | 61 | struct gendisk *disk; |
54 | int blksize; | 62 | int blksize; |
diff --git a/include/linux/ncp.h b/include/linux/ncp.h index 99f77876b716..99f0adeeb3f3 100644 --- a/include/linux/ncp.h +++ b/include/linux/ncp.h | |||
@@ -20,29 +20,29 @@ | |||
20 | #define NCP_DEALLOC_SLOT_REQUEST (0x5555) | 20 | #define NCP_DEALLOC_SLOT_REQUEST (0x5555) |
21 | 21 | ||
22 | struct ncp_request_header { | 22 | struct ncp_request_header { |
23 | __u16 type __attribute__((packed)); | 23 | __u16 type; |
24 | __u8 sequence __attribute__((packed)); | 24 | __u8 sequence; |
25 | __u8 conn_low __attribute__((packed)); | 25 | __u8 conn_low; |
26 | __u8 task __attribute__((packed)); | 26 | __u8 task; |
27 | __u8 conn_high __attribute__((packed)); | 27 | __u8 conn_high; |
28 | __u8 function __attribute__((packed)); | 28 | __u8 function; |
29 | __u8 data[0] __attribute__((packed)); | 29 | __u8 data[0]; |
30 | }; | 30 | } __attribute__((packed)); |
31 | 31 | ||
32 | #define NCP_REPLY (0x3333) | 32 | #define NCP_REPLY (0x3333) |
33 | #define NCP_WATCHDOG (0x3E3E) | 33 | #define NCP_WATCHDOG (0x3E3E) |
34 | #define NCP_POSITIVE_ACK (0x9999) | 34 | #define NCP_POSITIVE_ACK (0x9999) |
35 | 35 | ||
36 | struct ncp_reply_header { | 36 | struct ncp_reply_header { |
37 | __u16 type __attribute__((packed)); | 37 | __u16 type; |
38 | __u8 sequence __attribute__((packed)); | 38 | __u8 sequence; |
39 | __u8 conn_low __attribute__((packed)); | 39 | __u8 conn_low; |
40 | __u8 task __attribute__((packed)); | 40 | __u8 task; |
41 | __u8 conn_high __attribute__((packed)); | 41 | __u8 conn_high; |
42 | __u8 completion_code __attribute__((packed)); | 42 | __u8 completion_code; |
43 | __u8 connection_state __attribute__((packed)); | 43 | __u8 connection_state; |
44 | __u8 data[0] __attribute__((packed)); | 44 | __u8 data[0]; |
45 | }; | 45 | } __attribute__((packed)); |
46 | 46 | ||
47 | #define NCP_VOLNAME_LEN (16) | 47 | #define NCP_VOLNAME_LEN (16) |
48 | #define NCP_NUMBER_OF_VOLUMES (256) | 48 | #define NCP_NUMBER_OF_VOLUMES (256) |
@@ -128,37 +128,37 @@ struct nw_nfs_info { | |||
128 | }; | 128 | }; |
129 | 129 | ||
130 | struct nw_info_struct { | 130 | struct nw_info_struct { |
131 | __u32 spaceAlloc __attribute__((packed)); | 131 | __u32 spaceAlloc; |
132 | __le32 attributes __attribute__((packed)); | 132 | __le32 attributes; |
133 | __u16 flags __attribute__((packed)); | 133 | __u16 flags; |
134 | __le32 dataStreamSize __attribute__((packed)); | 134 | __le32 dataStreamSize; |
135 | __le32 totalStreamSize __attribute__((packed)); | 135 | __le32 totalStreamSize; |
136 | __u16 numberOfStreams __attribute__((packed)); | 136 | __u16 numberOfStreams; |
137 | __le16 creationTime __attribute__((packed)); | 137 | __le16 creationTime; |
138 | __le16 creationDate __attribute__((packed)); | 138 | __le16 creationDate; |
139 | __u32 creatorID __attribute__((packed)); | 139 | __u32 creatorID; |
140 | __le16 modifyTime __attribute__((packed)); | 140 | __le16 modifyTime; |
141 | __le16 modifyDate __attribute__((packed)); | 141 | __le16 modifyDate; |
142 | __u32 modifierID __attribute__((packed)); | 142 | __u32 modifierID; |
143 | __le16 lastAccessDate __attribute__((packed)); | 143 | __le16 lastAccessDate; |
144 | __u16 archiveTime __attribute__((packed)); | 144 | __u16 archiveTime; |
145 | __u16 archiveDate __attribute__((packed)); | 145 | __u16 archiveDate; |
146 | __u32 archiverID __attribute__((packed)); | 146 | __u32 archiverID; |
147 | __u16 inheritedRightsMask __attribute__((packed)); | 147 | __u16 inheritedRightsMask; |
148 | __le32 dirEntNum __attribute__((packed)); | 148 | __le32 dirEntNum; |
149 | __le32 DosDirNum __attribute__((packed)); | 149 | __le32 DosDirNum; |
150 | __u32 volNumber __attribute__((packed)); | 150 | __u32 volNumber; |
151 | __u32 EADataSize __attribute__((packed)); | 151 | __u32 EADataSize; |
152 | __u32 EAKeyCount __attribute__((packed)); | 152 | __u32 EAKeyCount; |
153 | __u32 EAKeySize __attribute__((packed)); | 153 | __u32 EAKeySize; |
154 | __u32 NSCreator __attribute__((packed)); | 154 | __u32 NSCreator; |
155 | __u8 nameLen __attribute__((packed)); | 155 | __u8 nameLen; |
156 | __u8 entryName[256] __attribute__((packed)); | 156 | __u8 entryName[256]; |
157 | /* libncp may depend on there being nothing after entryName */ | 157 | /* libncp may depend on there being nothing after entryName */ |
158 | #ifdef __KERNEL__ | 158 | #ifdef __KERNEL__ |
159 | struct nw_nfs_info nfs; | 159 | struct nw_nfs_info nfs; |
160 | #endif | 160 | #endif |
161 | }; | 161 | } __attribute__((packed)); |
162 | 162 | ||
163 | /* modify mask - use with MODIFY_DOS_INFO structure */ | 163 | /* modify mask - use with MODIFY_DOS_INFO structure */ |
164 | #define DM_ATTRIBUTES (cpu_to_le32(0x02)) | 164 | #define DM_ATTRIBUTES (cpu_to_le32(0x02)) |
@@ -176,26 +176,26 @@ struct nw_info_struct { | |||
176 | #define DM_MAXIMUM_SPACE (cpu_to_le32(0x2000)) | 176 | #define DM_MAXIMUM_SPACE (cpu_to_le32(0x2000)) |
177 | 177 | ||
178 | struct nw_modify_dos_info { | 178 | struct nw_modify_dos_info { |
179 | __le32 attributes __attribute__((packed)); | 179 | __le32 attributes; |
180 | __le16 creationDate __attribute__((packed)); | 180 | __le16 creationDate; |
181 | __le16 creationTime __attribute__((packed)); | 181 | __le16 creationTime; |
182 | __u32 creatorID __attribute__((packed)); | 182 | __u32 creatorID; |
183 | __le16 modifyDate __attribute__((packed)); | 183 | __le16 modifyDate; |
184 | __le16 modifyTime __attribute__((packed)); | 184 | __le16 modifyTime; |
185 | __u32 modifierID __attribute__((packed)); | 185 | __u32 modifierID; |
186 | __u16 archiveDate __attribute__((packed)); | 186 | __u16 archiveDate; |
187 | __u16 archiveTime __attribute__((packed)); | 187 | __u16 archiveTime; |
188 | __u32 archiverID __attribute__((packed)); | 188 | __u32 archiverID; |
189 | __le16 lastAccessDate __attribute__((packed)); | 189 | __le16 lastAccessDate; |
190 | __u16 inheritanceGrantMask __attribute__((packed)); | 190 | __u16 inheritanceGrantMask; |
191 | __u16 inheritanceRevokeMask __attribute__((packed)); | 191 | __u16 inheritanceRevokeMask; |
192 | __u32 maximumSpace __attribute__((packed)); | 192 | __u32 maximumSpace; |
193 | }; | 193 | } __attribute__((packed)); |
194 | 194 | ||
195 | struct nw_search_sequence { | 195 | struct nw_search_sequence { |
196 | __u8 volNumber __attribute__((packed)); | 196 | __u8 volNumber; |
197 | __u32 dirBase __attribute__((packed)); | 197 | __u32 dirBase; |
198 | __u32 sequence __attribute__((packed)); | 198 | __u32 sequence; |
199 | }; | 199 | } __attribute__((packed)); |
200 | 200 | ||
201 | #endif /* _LINUX_NCP_H */ | 201 | #endif /* _LINUX_NCP_H */ |
diff --git a/include/linux/net.h b/include/linux/net.h index d6a41e6577f6..28195a2d8ff0 100644 --- a/include/linux/net.h +++ b/include/linux/net.h | |||
@@ -107,7 +107,7 @@ enum sock_type { | |||
107 | struct socket { | 107 | struct socket { |
108 | socket_state state; | 108 | socket_state state; |
109 | unsigned long flags; | 109 | unsigned long flags; |
110 | struct proto_ops *ops; | 110 | const struct proto_ops *ops; |
111 | struct fasync_struct *fasync_list; | 111 | struct fasync_struct *fasync_list; |
112 | struct file *file; | 112 | struct file *file; |
113 | struct sock *sk; | 113 | struct sock *sk; |
@@ -260,7 +260,7 @@ SOCKCALL_WRAP(name, recvmsg, (struct kiocb *iocb, struct socket *sock, struct ms | |||
260 | SOCKCALL_WRAP(name, mmap, (struct file *file, struct socket *sock, struct vm_area_struct *vma), \ | 260 | SOCKCALL_WRAP(name, mmap, (struct file *file, struct socket *sock, struct vm_area_struct *vma), \ |
261 | (file, sock, vma)) \ | 261 | (file, sock, vma)) \ |
262 | \ | 262 | \ |
263 | static struct proto_ops name##_ops = { \ | 263 | static const struct proto_ops name##_ops = { \ |
264 | .family = fam, \ | 264 | .family = fam, \ |
265 | .owner = THIS_MODULE, \ | 265 | .owner = THIS_MODULE, \ |
266 | .release = __lock_##name##_release, \ | 266 | .release = __lock_##name##_release, \ |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 936f8b76114e..7fda03d338d1 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -684,6 +684,7 @@ extern int netif_rx(struct sk_buff *skb); | |||
684 | extern int netif_rx_ni(struct sk_buff *skb); | 684 | extern int netif_rx_ni(struct sk_buff *skb); |
685 | #define HAVE_NETIF_RECEIVE_SKB 1 | 685 | #define HAVE_NETIF_RECEIVE_SKB 1 |
686 | extern int netif_receive_skb(struct sk_buff *skb); | 686 | extern int netif_receive_skb(struct sk_buff *skb); |
687 | extern int dev_valid_name(const char *name); | ||
687 | extern int dev_ioctl(unsigned int cmd, void __user *); | 688 | extern int dev_ioctl(unsigned int cmd, void __user *); |
688 | extern int dev_ethtool(struct ifreq *); | 689 | extern int dev_ethtool(struct ifreq *); |
689 | extern unsigned dev_get_flags(const struct net_device *); | 690 | extern unsigned dev_get_flags(const struct net_device *); |
@@ -801,12 +802,16 @@ static inline u32 netif_msg_init(int debug_value, int default_msg_enable_bits) | |||
801 | return (1 << debug_value) - 1; | 802 | return (1 << debug_value) - 1; |
802 | } | 803 | } |
803 | 804 | ||
804 | /* Schedule rx intr now? */ | 805 | /* Test if receive needs to be scheduled */ |
806 | static inline int __netif_rx_schedule_prep(struct net_device *dev) | ||
807 | { | ||
808 | return !test_and_set_bit(__LINK_STATE_RX_SCHED, &dev->state); | ||
809 | } | ||
805 | 810 | ||
811 | /* Test if receive needs to be scheduled but only if up */ | ||
806 | static inline int netif_rx_schedule_prep(struct net_device *dev) | 812 | static inline int netif_rx_schedule_prep(struct net_device *dev) |
807 | { | 813 | { |
808 | return netif_running(dev) && | 814 | return netif_running(dev) && __netif_rx_schedule_prep(dev); |
809 | !test_and_set_bit(__LINK_STATE_RX_SCHED, &dev->state); | ||
810 | } | 815 | } |
811 | 816 | ||
812 | /* Add interface to tail of rx poll list. This assumes that _prep has | 817 | /* Add interface to tail of rx poll list. This assumes that _prep has |
diff --git a/include/linux/netfilter.h b/include/linux/netfilter.h index be365e70ee99..4cf6088625c1 100644 --- a/include/linux/netfilter.h +++ b/include/linux/netfilter.h | |||
@@ -168,6 +168,37 @@ void nf_log_packet(int pf, | |||
168 | const struct net_device *out, | 168 | const struct net_device *out, |
169 | struct nf_loginfo *li, | 169 | struct nf_loginfo *li, |
170 | const char *fmt, ...); | 170 | const char *fmt, ...); |
171 | |||
172 | int nf_hook_slow(int pf, unsigned int hook, struct sk_buff **pskb, | ||
173 | struct net_device *indev, struct net_device *outdev, | ||
174 | int (*okfn)(struct sk_buff *), int thresh); | ||
175 | |||
176 | /** | ||
177 | * nf_hook_thresh - call a netfilter hook | ||
178 | * | ||
179 | * Returns 1 if the hook has allowed the packet to pass. The function | ||
180 | * okfn must be invoked by the caller in this case. Any other return | ||
181 | * value indicates the packet has been consumed by the hook. | ||
182 | */ | ||
183 | static inline int nf_hook_thresh(int pf, unsigned int hook, | ||
184 | struct sk_buff **pskb, | ||
185 | struct net_device *indev, | ||
186 | struct net_device *outdev, | ||
187 | int (*okfn)(struct sk_buff *), int thresh) | ||
188 | { | ||
189 | #ifndef CONFIG_NETFILTER_DEBUG | ||
190 | if (list_empty(&nf_hooks[pf][hook])) | ||
191 | return 1; | ||
192 | #endif | ||
193 | return nf_hook_slow(pf, hook, pskb, indev, outdev, okfn, thresh); | ||
194 | } | ||
195 | |||
196 | static inline int nf_hook(int pf, unsigned int hook, struct sk_buff **pskb, | ||
197 | struct net_device *indev, struct net_device *outdev, | ||
198 | int (*okfn)(struct sk_buff *)) | ||
199 | { | ||
200 | return nf_hook_thresh(pf, hook, pskb, indev, outdev, okfn, INT_MIN); | ||
201 | } | ||
171 | 202 | ||
172 | /* Activate hook; either okfn or kfree_skb called, unless a hook | 203 | /* Activate hook; either okfn or kfree_skb called, unless a hook |
173 | returns NF_STOLEN (in which case, it's up to the hook to deal with | 204 | returns NF_STOLEN (in which case, it's up to the hook to deal with |
@@ -188,35 +219,17 @@ void nf_log_packet(int pf, | |||
188 | 219 | ||
189 | /* This is gross, but inline doesn't cut it for avoiding the function | 220 | /* This is gross, but inline doesn't cut it for avoiding the function |
190 | call in fast path: gcc doesn't inline (needs value tracking?). --RR */ | 221 | call in fast path: gcc doesn't inline (needs value tracking?). --RR */ |
191 | #ifdef CONFIG_NETFILTER_DEBUG | 222 | |
192 | #define NF_HOOK(pf, hook, skb, indev, outdev, okfn) \ | 223 | /* HX: It's slightly less gross now. */ |
193 | ({int __ret; \ | 224 | |
194 | if ((__ret=nf_hook_slow(pf, hook, &(skb), indev, outdev, okfn, INT_MIN)) == 1) \ | ||
195 | __ret = (okfn)(skb); \ | ||
196 | __ret;}) | ||
197 | #define NF_HOOK_THRESH(pf, hook, skb, indev, outdev, okfn, thresh) \ | ||
198 | ({int __ret; \ | ||
199 | if ((__ret=nf_hook_slow(pf, hook, &(skb), indev, outdev, okfn, thresh)) == 1) \ | ||
200 | __ret = (okfn)(skb); \ | ||
201 | __ret;}) | ||
202 | #else | ||
203 | #define NF_HOOK(pf, hook, skb, indev, outdev, okfn) \ | ||
204 | ({int __ret; \ | ||
205 | if (list_empty(&nf_hooks[pf][hook]) || \ | ||
206 | (__ret=nf_hook_slow(pf, hook, &(skb), indev, outdev, okfn, INT_MIN)) == 1) \ | ||
207 | __ret = (okfn)(skb); \ | ||
208 | __ret;}) | ||
209 | #define NF_HOOK_THRESH(pf, hook, skb, indev, outdev, okfn, thresh) \ | 225 | #define NF_HOOK_THRESH(pf, hook, skb, indev, outdev, okfn, thresh) \ |
210 | ({int __ret; \ | 226 | ({int __ret; \ |
211 | if (list_empty(&nf_hooks[pf][hook]) || \ | 227 | if ((__ret=nf_hook_thresh(pf, hook, &(skb), indev, outdev, okfn, thresh)) == 1)\ |
212 | (__ret=nf_hook_slow(pf, hook, &(skb), indev, outdev, okfn, thresh)) == 1) \ | ||
213 | __ret = (okfn)(skb); \ | 228 | __ret = (okfn)(skb); \ |
214 | __ret;}) | 229 | __ret;}) |
215 | #endif | ||
216 | 230 | ||
217 | int nf_hook_slow(int pf, unsigned int hook, struct sk_buff **pskb, | 231 | #define NF_HOOK(pf, hook, skb, indev, outdev, okfn) \ |
218 | struct net_device *indev, struct net_device *outdev, | 232 | NF_HOOK_THRESH(pf, hook, skb, indev, outdev, okfn, INT_MIN) |
219 | int (*okfn)(struct sk_buff *), int thresh); | ||
220 | 233 | ||
221 | /* Call setsockopt() */ | 234 | /* Call setsockopt() */ |
222 | int nf_setsockopt(struct sock *sk, int pf, int optval, char __user *opt, | 235 | int nf_setsockopt(struct sock *sk, int pf, int optval, char __user *opt, |
@@ -261,6 +274,20 @@ struct nf_queue_rerouter { | |||
261 | extern int nf_register_queue_rerouter(int pf, struct nf_queue_rerouter *rer); | 274 | extern int nf_register_queue_rerouter(int pf, struct nf_queue_rerouter *rer); |
262 | extern int nf_unregister_queue_rerouter(int pf); | 275 | extern int nf_unregister_queue_rerouter(int pf); |
263 | 276 | ||
277 | #include <net/flow.h> | ||
278 | extern void (*ip_nat_decode_session)(struct sk_buff *, struct flowi *); | ||
279 | |||
280 | static inline void | ||
281 | nf_nat_decode_session(struct sk_buff *skb, struct flowi *fl, int family) | ||
282 | { | ||
283 | #ifdef CONFIG_IP_NF_NAT_NEEDED | ||
284 | void (*decodefn)(struct sk_buff *, struct flowi *); | ||
285 | |||
286 | if (family == AF_INET && (decodefn = ip_nat_decode_session) != NULL) | ||
287 | decodefn(skb, fl); | ||
288 | #endif | ||
289 | } | ||
290 | |||
264 | #ifdef CONFIG_PROC_FS | 291 | #ifdef CONFIG_PROC_FS |
265 | #include <linux/proc_fs.h> | 292 | #include <linux/proc_fs.h> |
266 | extern struct proc_dir_entry *proc_net_netfilter; | 293 | extern struct proc_dir_entry *proc_net_netfilter; |
@@ -268,7 +295,24 @@ extern struct proc_dir_entry *proc_net_netfilter; | |||
268 | 295 | ||
269 | #else /* !CONFIG_NETFILTER */ | 296 | #else /* !CONFIG_NETFILTER */ |
270 | #define NF_HOOK(pf, hook, skb, indev, outdev, okfn) (okfn)(skb) | 297 | #define NF_HOOK(pf, hook, skb, indev, outdev, okfn) (okfn)(skb) |
298 | static inline int nf_hook_thresh(int pf, unsigned int hook, | ||
299 | struct sk_buff **pskb, | ||
300 | struct net_device *indev, | ||
301 | struct net_device *outdev, | ||
302 | int (*okfn)(struct sk_buff *), int thresh) | ||
303 | { | ||
304 | return okfn(*pskb); | ||
305 | } | ||
306 | static inline int nf_hook(int pf, unsigned int hook, struct sk_buff **pskb, | ||
307 | struct net_device *indev, struct net_device *outdev, | ||
308 | int (*okfn)(struct sk_buff *)) | ||
309 | { | ||
310 | return okfn(*pskb); | ||
311 | } | ||
271 | static inline void nf_ct_attach(struct sk_buff *new, struct sk_buff *skb) {} | 312 | static inline void nf_ct_attach(struct sk_buff *new, struct sk_buff *skb) {} |
313 | struct flowi; | ||
314 | static inline void | ||
315 | nf_nat_decode_session(struct sk_buff *skb, struct flowi *fl, int family) {} | ||
272 | #endif /*CONFIG_NETFILTER*/ | 316 | #endif /*CONFIG_NETFILTER*/ |
273 | 317 | ||
274 | #endif /*__KERNEL__*/ | 318 | #endif /*__KERNEL__*/ |
diff --git a/include/linux/netfilter/nfnetlink_conntrack.h b/include/linux/netfilter/nfnetlink_conntrack.h index 116fcaced909..668ec946c8e2 100644 --- a/include/linux/netfilter/nfnetlink_conntrack.h +++ b/include/linux/netfilter/nfnetlink_conntrack.h | |||
@@ -64,6 +64,9 @@ enum ctattr_l4proto { | |||
64 | CTA_PROTO_ICMP_ID, | 64 | CTA_PROTO_ICMP_ID, |
65 | CTA_PROTO_ICMP_TYPE, | 65 | CTA_PROTO_ICMP_TYPE, |
66 | CTA_PROTO_ICMP_CODE, | 66 | CTA_PROTO_ICMP_CODE, |
67 | CTA_PROTO_ICMPV6_ID, | ||
68 | CTA_PROTO_ICMPV6_TYPE, | ||
69 | CTA_PROTO_ICMPV6_CODE, | ||
67 | __CTA_PROTO_MAX | 70 | __CTA_PROTO_MAX |
68 | }; | 71 | }; |
69 | #define CTA_PROTO_MAX (__CTA_PROTO_MAX - 1) | 72 | #define CTA_PROTO_MAX (__CTA_PROTO_MAX - 1) |
@@ -128,6 +131,4 @@ enum ctattr_help { | |||
128 | }; | 131 | }; |
129 | #define CTA_HELP_MAX (__CTA_HELP_MAX - 1) | 132 | #define CTA_HELP_MAX (__CTA_HELP_MAX - 1) |
130 | 133 | ||
131 | #define CTA_HELP_MAXNAMESIZE 32 | ||
132 | |||
133 | #endif /* _IPCONNTRACK_NETLINK_H */ | 134 | #endif /* _IPCONNTRACK_NETLINK_H */ |
diff --git a/include/linux/netfilter_ipv4/ipt_policy.h b/include/linux/netfilter_ipv4/ipt_policy.h new file mode 100644 index 000000000000..7fd1bec453f1 --- /dev/null +++ b/include/linux/netfilter_ipv4/ipt_policy.h | |||
@@ -0,0 +1,52 @@ | |||
1 | #ifndef _IPT_POLICY_H | ||
2 | #define _IPT_POLICY_H | ||
3 | |||
4 | #define IPT_POLICY_MAX_ELEM 4 | ||
5 | |||
6 | enum ipt_policy_flags | ||
7 | { | ||
8 | IPT_POLICY_MATCH_IN = 0x1, | ||
9 | IPT_POLICY_MATCH_OUT = 0x2, | ||
10 | IPT_POLICY_MATCH_NONE = 0x4, | ||
11 | IPT_POLICY_MATCH_STRICT = 0x8, | ||
12 | }; | ||
13 | |||
14 | enum ipt_policy_modes | ||
15 | { | ||
16 | IPT_POLICY_MODE_TRANSPORT, | ||
17 | IPT_POLICY_MODE_TUNNEL | ||
18 | }; | ||
19 | |||
20 | struct ipt_policy_spec | ||
21 | { | ||
22 | u_int8_t saddr:1, | ||
23 | daddr:1, | ||
24 | proto:1, | ||
25 | mode:1, | ||
26 | spi:1, | ||
27 | reqid:1; | ||
28 | }; | ||
29 | |||
30 | struct ipt_policy_elem | ||
31 | { | ||
32 | u_int32_t saddr; | ||
33 | u_int32_t smask; | ||
34 | u_int32_t daddr; | ||
35 | u_int32_t dmask; | ||
36 | u_int32_t spi; | ||
37 | u_int32_t reqid; | ||
38 | u_int8_t proto; | ||
39 | u_int8_t mode; | ||
40 | |||
41 | struct ipt_policy_spec match; | ||
42 | struct ipt_policy_spec invert; | ||
43 | }; | ||
44 | |||
45 | struct ipt_policy_info | ||
46 | { | ||
47 | struct ipt_policy_elem pol[IPT_POLICY_MAX_ELEM]; | ||
48 | u_int16_t flags; | ||
49 | u_int16_t len; | ||
50 | }; | ||
51 | |||
52 | #endif /* _IPT_POLICY_H */ | ||
diff --git a/include/linux/netfilter_ipv6/ip6_tables.h b/include/linux/netfilter_ipv6/ip6_tables.h index 2efc046d9e94..c163ba31aab7 100644 --- a/include/linux/netfilter_ipv6/ip6_tables.h +++ b/include/linux/netfilter_ipv6/ip6_tables.h | |||
@@ -474,7 +474,11 @@ extern unsigned int ip6t_do_table(struct sk_buff **pskb, | |||
474 | extern int ip6t_ext_hdr(u8 nexthdr); | 474 | extern int ip6t_ext_hdr(u8 nexthdr); |
475 | /* find specified header and get offset to it */ | 475 | /* find specified header and get offset to it */ |
476 | extern int ipv6_find_hdr(const struct sk_buff *skb, unsigned int *offset, | 476 | extern int ipv6_find_hdr(const struct sk_buff *skb, unsigned int *offset, |
477 | u8 target); | 477 | int target, unsigned short *fragoff); |
478 | |||
479 | extern int ip6_masked_addrcmp(const struct in6_addr *addr1, | ||
480 | const struct in6_addr *mask, | ||
481 | const struct in6_addr *addr2); | ||
478 | 482 | ||
479 | #define IP6T_ALIGN(s) (((s) + (__alignof__(struct ip6t_entry)-1)) & ~(__alignof__(struct ip6t_entry)-1)) | 483 | #define IP6T_ALIGN(s) (((s) + (__alignof__(struct ip6t_entry)-1)) & ~(__alignof__(struct ip6t_entry)-1)) |
480 | 484 | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_policy.h b/include/linux/netfilter_ipv6/ip6t_policy.h new file mode 100644 index 000000000000..5a93afcd2ff1 --- /dev/null +++ b/include/linux/netfilter_ipv6/ip6t_policy.h | |||
@@ -0,0 +1,52 @@ | |||
1 | #ifndef _IP6T_POLICY_H | ||
2 | #define _IP6T_POLICY_H | ||
3 | |||
4 | #define IP6T_POLICY_MAX_ELEM 4 | ||
5 | |||
6 | enum ip6t_policy_flags | ||
7 | { | ||
8 | IP6T_POLICY_MATCH_IN = 0x1, | ||
9 | IP6T_POLICY_MATCH_OUT = 0x2, | ||
10 | IP6T_POLICY_MATCH_NONE = 0x4, | ||
11 | IP6T_POLICY_MATCH_STRICT = 0x8, | ||
12 | }; | ||
13 | |||
14 | enum ip6t_policy_modes | ||
15 | { | ||
16 | IP6T_POLICY_MODE_TRANSPORT, | ||
17 | IP6T_POLICY_MODE_TUNNEL | ||
18 | }; | ||
19 | |||
20 | struct ip6t_policy_spec | ||
21 | { | ||
22 | u_int8_t saddr:1, | ||
23 | daddr:1, | ||
24 | proto:1, | ||
25 | mode:1, | ||
26 | spi:1, | ||
27 | reqid:1; | ||
28 | }; | ||
29 | |||
30 | struct ip6t_policy_elem | ||
31 | { | ||
32 | struct in6_addr saddr; | ||
33 | struct in6_addr smask; | ||
34 | struct in6_addr daddr; | ||
35 | struct in6_addr dmask; | ||
36 | u_int32_t spi; | ||
37 | u_int32_t reqid; | ||
38 | u_int8_t proto; | ||
39 | u_int8_t mode; | ||
40 | |||
41 | struct ip6t_policy_spec match; | ||
42 | struct ip6t_policy_spec invert; | ||
43 | }; | ||
44 | |||
45 | struct ip6t_policy_info | ||
46 | { | ||
47 | struct ip6t_policy_elem pol[IP6T_POLICY_MAX_ELEM]; | ||
48 | u_int16_t flags; | ||
49 | u_int16_t len; | ||
50 | }; | ||
51 | |||
52 | #endif /* _IP6T_POLICY_H */ | ||
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index 12787a9b0259..547d649b274e 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
@@ -38,9 +38,6 @@ | |||
38 | # define NFS_DEBUG | 38 | # define NFS_DEBUG |
39 | #endif | 39 | #endif |
40 | 40 | ||
41 | #define NFS_MAX_FILE_IO_BUFFER_SIZE 32768 | ||
42 | #define NFS_DEF_FILE_IO_BUFFER_SIZE 4096 | ||
43 | |||
44 | /* Default timeout values */ | 41 | /* Default timeout values */ |
45 | #define NFS_MAX_UDP_TIMEOUT (60*HZ) | 42 | #define NFS_MAX_UDP_TIMEOUT (60*HZ) |
46 | #define NFS_MAX_TCP_TIMEOUT (600*HZ) | 43 | #define NFS_MAX_TCP_TIMEOUT (600*HZ) |
@@ -65,6 +62,7 @@ | |||
65 | #define FLUSH_STABLE 4 /* commit to stable storage */ | 62 | #define FLUSH_STABLE 4 /* commit to stable storage */ |
66 | #define FLUSH_LOWPRI 8 /* low priority background flush */ | 63 | #define FLUSH_LOWPRI 8 /* low priority background flush */ |
67 | #define FLUSH_HIGHPRI 16 /* high priority memory reclaim flush */ | 64 | #define FLUSH_HIGHPRI 16 /* high priority memory reclaim flush */ |
65 | #define FLUSH_NOCOMMIT 32 /* Don't send the NFSv3/v4 COMMIT */ | ||
68 | 66 | ||
69 | #ifdef __KERNEL__ | 67 | #ifdef __KERNEL__ |
70 | 68 | ||
@@ -291,6 +289,7 @@ static inline int nfs_verify_change_attribute(struct inode *inode, unsigned long | |||
291 | /* | 289 | /* |
292 | * linux/fs/nfs/inode.c | 290 | * linux/fs/nfs/inode.c |
293 | */ | 291 | */ |
292 | extern int nfs_sync_mapping(struct address_space *mapping); | ||
294 | extern void nfs_zap_caches(struct inode *); | 293 | extern void nfs_zap_caches(struct inode *); |
295 | extern struct inode *nfs_fhget(struct super_block *, struct nfs_fh *, | 294 | extern struct inode *nfs_fhget(struct super_block *, struct nfs_fh *, |
296 | struct nfs_fattr *); | 295 | struct nfs_fattr *); |
@@ -393,6 +392,17 @@ extern int nfs_instantiate(struct dentry *dentry, struct nfs_fh *fh, struct nfs_ | |||
393 | extern struct inode_operations nfs_symlink_inode_operations; | 392 | extern struct inode_operations nfs_symlink_inode_operations; |
394 | 393 | ||
395 | /* | 394 | /* |
395 | * linux/fs/nfs/sysctl.c | ||
396 | */ | ||
397 | #ifdef CONFIG_SYSCTL | ||
398 | extern int nfs_register_sysctl(void); | ||
399 | extern void nfs_unregister_sysctl(void); | ||
400 | #else | ||
401 | #define nfs_register_sysctl() do { } while(0) | ||
402 | #define nfs_unregister_sysctl() do { } while(0) | ||
403 | #endif | ||
404 | |||
405 | /* | ||
396 | * linux/fs/nfs/unlink.c | 406 | * linux/fs/nfs/unlink.c |
397 | */ | 407 | */ |
398 | extern int nfs_async_unlink(struct dentry *); | 408 | extern int nfs_async_unlink(struct dentry *); |
@@ -405,10 +415,12 @@ extern int nfs_writepage(struct page *page, struct writeback_control *wbc); | |||
405 | extern int nfs_writepages(struct address_space *, struct writeback_control *); | 415 | extern int nfs_writepages(struct address_space *, struct writeback_control *); |
406 | extern int nfs_flush_incompatible(struct file *file, struct page *page); | 416 | extern int nfs_flush_incompatible(struct file *file, struct page *page); |
407 | extern int nfs_updatepage(struct file *, struct page *, unsigned int, unsigned int); | 417 | extern int nfs_updatepage(struct file *, struct page *, unsigned int, unsigned int); |
408 | extern void nfs_writeback_done(struct rpc_task *task); | 418 | extern void nfs_writeback_done(struct rpc_task *task, void *data); |
419 | extern void nfs_writedata_release(void *data); | ||
409 | 420 | ||
410 | #if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4) | 421 | #if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4) |
411 | extern void nfs_commit_done(struct rpc_task *); | 422 | extern void nfs_commit_done(struct rpc_task *, void *data); |
423 | extern void nfs_commit_release(void *data); | ||
412 | #endif | 424 | #endif |
413 | 425 | ||
414 | /* | 426 | /* |
@@ -459,18 +471,33 @@ static inline int nfs_wb_page(struct inode *inode, struct page* page) | |||
459 | */ | 471 | */ |
460 | extern mempool_t *nfs_wdata_mempool; | 472 | extern mempool_t *nfs_wdata_mempool; |
461 | 473 | ||
462 | static inline struct nfs_write_data *nfs_writedata_alloc(void) | 474 | static inline struct nfs_write_data *nfs_writedata_alloc(unsigned int pagecount) |
463 | { | 475 | { |
464 | struct nfs_write_data *p = mempool_alloc(nfs_wdata_mempool, SLAB_NOFS); | 476 | struct nfs_write_data *p = mempool_alloc(nfs_wdata_mempool, SLAB_NOFS); |
477 | |||
465 | if (p) { | 478 | if (p) { |
466 | memset(p, 0, sizeof(*p)); | 479 | memset(p, 0, sizeof(*p)); |
467 | INIT_LIST_HEAD(&p->pages); | 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 | } | ||
468 | } | 493 | } |
469 | return p; | 494 | return p; |
470 | } | 495 | } |
471 | 496 | ||
472 | static inline void nfs_writedata_free(struct nfs_write_data *p) | 497 | static inline void nfs_writedata_free(struct nfs_write_data *p) |
473 | { | 498 | { |
499 | if (p && (p->pagevec != &p->page_array[0])) | ||
500 | kfree(p->pagevec); | ||
474 | mempool_free(p, nfs_wdata_mempool); | 501 | mempool_free(p, nfs_wdata_mempool); |
475 | } | 502 | } |
476 | 503 | ||
@@ -480,28 +507,45 @@ static inline void nfs_writedata_free(struct nfs_write_data *p) | |||
480 | extern int nfs_readpage(struct file *, struct page *); | 507 | extern int nfs_readpage(struct file *, struct page *); |
481 | extern int nfs_readpages(struct file *, struct address_space *, | 508 | extern int nfs_readpages(struct file *, struct address_space *, |
482 | struct list_head *, unsigned); | 509 | struct list_head *, unsigned); |
483 | extern void nfs_readpage_result(struct rpc_task *); | 510 | extern void nfs_readpage_result(struct rpc_task *, void *); |
511 | extern void nfs_readdata_release(void *data); | ||
512 | |||
484 | 513 | ||
485 | /* | 514 | /* |
486 | * Allocate and free nfs_read_data structures | 515 | * Allocate and free nfs_read_data structures |
487 | */ | 516 | */ |
488 | extern mempool_t *nfs_rdata_mempool; | 517 | extern mempool_t *nfs_rdata_mempool; |
489 | 518 | ||
490 | static inline struct nfs_read_data *nfs_readdata_alloc(void) | 519 | static inline struct nfs_read_data *nfs_readdata_alloc(unsigned int pagecount) |
491 | { | 520 | { |
492 | struct nfs_read_data *p = mempool_alloc(nfs_rdata_mempool, SLAB_NOFS); | 521 | struct nfs_read_data *p = mempool_alloc(nfs_rdata_mempool, SLAB_NOFS); |
493 | if (p) | 522 | |
523 | if (p) { | ||
494 | memset(p, 0, sizeof(*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 | } | ||
495 | return p; | 539 | return p; |
496 | } | 540 | } |
497 | 541 | ||
498 | static inline void nfs_readdata_free(struct nfs_read_data *p) | 542 | static inline void nfs_readdata_free(struct nfs_read_data *p) |
499 | { | 543 | { |
544 | if (p && (p->pagevec != &p->page_array[0])) | ||
545 | kfree(p->pagevec); | ||
500 | mempool_free(p, nfs_rdata_mempool); | 546 | mempool_free(p, nfs_rdata_mempool); |
501 | } | 547 | } |
502 | 548 | ||
503 | extern void nfs_readdata_release(struct rpc_task *task); | ||
504 | |||
505 | /* | 549 | /* |
506 | * linux/fs/nfs3proc.c | 550 | * linux/fs/nfs3proc.c |
507 | */ | 551 | */ |
diff --git a/include/linux/nfs_idmap.h b/include/linux/nfs_idmap.h index a0f1f25e0ead..102e56094296 100644 --- a/include/linux/nfs_idmap.h +++ b/include/linux/nfs_idmap.h | |||
@@ -71,6 +71,8 @@ int nfs_map_name_to_uid(struct nfs4_client *, const char *, size_t, __u32 *); | |||
71 | int nfs_map_group_to_gid(struct nfs4_client *, const char *, size_t, __u32 *); | 71 | int nfs_map_group_to_gid(struct nfs4_client *, const char *, size_t, __u32 *); |
72 | int nfs_map_uid_to_name(struct nfs4_client *, __u32, char *); | 72 | int nfs_map_uid_to_name(struct nfs4_client *, __u32, char *); |
73 | int nfs_map_gid_to_group(struct nfs4_client *, __u32, char *); | 73 | int nfs_map_gid_to_group(struct nfs4_client *, __u32, char *); |
74 | |||
75 | extern unsigned int nfs_idmap_cache_timeout; | ||
74 | #endif /* __KERNEL__ */ | 76 | #endif /* __KERNEL__ */ |
75 | 77 | ||
76 | #endif /* NFS_IDMAP_H */ | 78 | #endif /* NFS_IDMAP_H */ |
diff --git a/include/linux/nfs_page.h b/include/linux/nfs_page.h index da2e077b65e2..66e2ed658527 100644 --- a/include/linux/nfs_page.h +++ b/include/linux/nfs_page.h | |||
@@ -79,9 +79,7 @@ extern void nfs_clear_page_writeback(struct nfs_page *req); | |||
79 | static inline int | 79 | static inline int |
80 | nfs_lock_request_dontget(struct nfs_page *req) | 80 | nfs_lock_request_dontget(struct nfs_page *req) |
81 | { | 81 | { |
82 | if (test_and_set_bit(PG_BUSY, &req->wb_flags)) | 82 | return !test_and_set_bit(PG_BUSY, &req->wb_flags); |
83 | return 0; | ||
84 | return 1; | ||
85 | } | 83 | } |
86 | 84 | ||
87 | /* | 85 | /* |
@@ -125,9 +123,7 @@ nfs_list_remove_request(struct nfs_page *req) | |||
125 | static inline int | 123 | static inline int |
126 | nfs_defer_commit(struct nfs_page *req) | 124 | nfs_defer_commit(struct nfs_page *req) |
127 | { | 125 | { |
128 | if (test_and_set_bit(PG_NEED_COMMIT, &req->wb_flags)) | 126 | return !test_and_set_bit(PG_NEED_COMMIT, &req->wb_flags); |
129 | return 0; | ||
130 | return 1; | ||
131 | } | 127 | } |
132 | 128 | ||
133 | static inline void | 129 | static inline void |
@@ -141,9 +137,7 @@ nfs_clear_commit(struct nfs_page *req) | |||
141 | static inline int | 137 | static inline int |
142 | nfs_defer_reschedule(struct nfs_page *req) | 138 | nfs_defer_reschedule(struct nfs_page *req) |
143 | { | 139 | { |
144 | if (test_and_set_bit(PG_NEED_RESCHED, &req->wb_flags)) | 140 | return !test_and_set_bit(PG_NEED_RESCHED, &req->wb_flags); |
145 | return 0; | ||
146 | return 1; | ||
147 | } | 141 | } |
148 | 142 | ||
149 | static inline void | 143 | static inline void |
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index 40718669b9c8..6d6f69ec5675 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h | |||
@@ -4,6 +4,16 @@ | |||
4 | #include <linux/sunrpc/xprt.h> | 4 | #include <linux/sunrpc/xprt.h> |
5 | #include <linux/nfsacl.h> | 5 | #include <linux/nfsacl.h> |
6 | 6 | ||
7 | /* | ||
8 | * To change the maximum rsize and wsize supported by the NFS client, adjust | ||
9 | * NFS_MAX_FILE_IO_SIZE. 64KB is a typical maximum, but some servers can | ||
10 | * support a megabyte or more. The default is left at 4096 bytes, which is | ||
11 | * reasonable for NFS over UDP. | ||
12 | */ | ||
13 | #define NFS_MAX_FILE_IO_SIZE (1048576U) | ||
14 | #define NFS_DEF_FILE_IO_SIZE (4096U) | ||
15 | #define NFS_MIN_FILE_IO_SIZE (1024U) | ||
16 | |||
7 | struct nfs4_fsid { | 17 | struct nfs4_fsid { |
8 | __u64 major; | 18 | __u64 major; |
9 | __u64 minor; | 19 | __u64 minor; |
@@ -137,7 +147,7 @@ struct nfs_openres { | |||
137 | */ | 147 | */ |
138 | struct nfs_open_confirmargs { | 148 | struct nfs_open_confirmargs { |
139 | const struct nfs_fh * fh; | 149 | const struct nfs_fh * fh; |
140 | nfs4_stateid stateid; | 150 | nfs4_stateid * stateid; |
141 | struct nfs_seqid * seqid; | 151 | struct nfs_seqid * seqid; |
142 | }; | 152 | }; |
143 | 153 | ||
@@ -165,66 +175,62 @@ struct nfs_closeres { | |||
165 | * * Arguments to the lock,lockt, and locku call. | 175 | * * Arguments to the lock,lockt, and locku call. |
166 | * */ | 176 | * */ |
167 | struct nfs_lowner { | 177 | struct nfs_lowner { |
168 | __u64 clientid; | 178 | __u64 clientid; |
169 | u32 id; | 179 | u32 id; |
170 | }; | 180 | }; |
171 | 181 | ||
172 | struct nfs_lock_opargs { | 182 | struct nfs_lock_args { |
183 | struct nfs_fh * fh; | ||
184 | struct file_lock * fl; | ||
173 | struct nfs_seqid * lock_seqid; | 185 | struct nfs_seqid * lock_seqid; |
174 | nfs4_stateid * lock_stateid; | 186 | nfs4_stateid * lock_stateid; |
175 | struct nfs_seqid * open_seqid; | 187 | struct nfs_seqid * open_seqid; |
176 | nfs4_stateid * open_stateid; | 188 | nfs4_stateid * open_stateid; |
177 | struct nfs_lowner lock_owner; | 189 | struct nfs_lowner lock_owner; |
178 | __u32 reclaim; | 190 | unsigned char block : 1; |
179 | __u32 new_lock_owner; | 191 | unsigned char reclaim : 1; |
192 | unsigned char new_lock_owner : 1; | ||
180 | }; | 193 | }; |
181 | 194 | ||
182 | struct nfs_locku_opargs { | 195 | struct nfs_lock_res { |
196 | nfs4_stateid stateid; | ||
197 | }; | ||
198 | |||
199 | struct nfs_locku_args { | ||
200 | struct nfs_fh * fh; | ||
201 | struct file_lock * fl; | ||
183 | struct nfs_seqid * seqid; | 202 | struct nfs_seqid * seqid; |
184 | nfs4_stateid * stateid; | 203 | nfs4_stateid * stateid; |
185 | }; | 204 | }; |
186 | 205 | ||
187 | struct nfs_lockargs { | 206 | struct nfs_locku_res { |
188 | struct nfs_fh * fh; | 207 | nfs4_stateid stateid; |
189 | __u32 type; | ||
190 | __u64 offset; | ||
191 | __u64 length; | ||
192 | union { | ||
193 | struct nfs_lock_opargs *lock; /* LOCK */ | ||
194 | struct nfs_lowner *lockt; /* LOCKT */ | ||
195 | struct nfs_locku_opargs *locku; /* LOCKU */ | ||
196 | } u; | ||
197 | }; | 208 | }; |
198 | 209 | ||
199 | struct nfs_lock_denied { | 210 | struct nfs_lockt_args { |
200 | __u64 offset; | 211 | struct nfs_fh * fh; |
201 | __u64 length; | 212 | struct file_lock * fl; |
202 | __u32 type; | 213 | struct nfs_lowner lock_owner; |
203 | struct nfs_lowner owner; | ||
204 | }; | 214 | }; |
205 | 215 | ||
206 | struct nfs_lockres { | 216 | struct nfs_lockt_res { |
207 | union { | 217 | struct file_lock * denied; /* LOCK, LOCKT failed */ |
208 | nfs4_stateid stateid;/* LOCK success, LOCKU */ | ||
209 | struct nfs_lock_denied denied; /* LOCK failed, LOCKT success */ | ||
210 | } u; | ||
211 | const struct nfs_server * server; | ||
212 | }; | 218 | }; |
213 | 219 | ||
214 | struct nfs4_delegreturnargs { | 220 | struct nfs4_delegreturnargs { |
215 | const struct nfs_fh *fhandle; | 221 | const struct nfs_fh *fhandle; |
216 | const nfs4_stateid *stateid; | 222 | const nfs4_stateid *stateid; |
223 | const u32 * bitmask; | ||
224 | }; | ||
225 | |||
226 | struct nfs4_delegreturnres { | ||
227 | struct nfs_fattr * fattr; | ||
228 | const struct nfs_server *server; | ||
217 | }; | 229 | }; |
218 | 230 | ||
219 | /* | 231 | /* |
220 | * Arguments to the read call. | 232 | * Arguments to the read call. |
221 | */ | 233 | */ |
222 | |||
223 | #define NFS_READ_MAXIOV (9U) | ||
224 | #if (NFS_READ_MAXIOV > (MAX_IOVEC -2)) | ||
225 | #error "NFS_READ_MAXIOV is too large" | ||
226 | #endif | ||
227 | |||
228 | struct nfs_readargs { | 234 | struct nfs_readargs { |
229 | struct nfs_fh * fh; | 235 | struct nfs_fh * fh; |
230 | struct nfs_open_context *context; | 236 | struct nfs_open_context *context; |
@@ -243,11 +249,6 @@ struct nfs_readres { | |||
243 | /* | 249 | /* |
244 | * Arguments to the write call. | 250 | * Arguments to the write call. |
245 | */ | 251 | */ |
246 | #define NFS_WRITE_MAXIOV (9U) | ||
247 | #if (NFS_WRITE_MAXIOV > (MAX_IOVEC -2)) | ||
248 | #error "NFS_WRITE_MAXIOV is too large" | ||
249 | #endif | ||
250 | |||
251 | struct nfs_writeargs { | 252 | struct nfs_writeargs { |
252 | struct nfs_fh * fh; | 253 | struct nfs_fh * fh; |
253 | struct nfs_open_context *context; | 254 | struct nfs_open_context *context; |
@@ -678,6 +679,8 @@ struct nfs4_server_caps_res { | |||
678 | 679 | ||
679 | struct nfs_page; | 680 | struct nfs_page; |
680 | 681 | ||
682 | #define NFS_PAGEVEC_SIZE (8U) | ||
683 | |||
681 | struct nfs_read_data { | 684 | struct nfs_read_data { |
682 | int flags; | 685 | int flags; |
683 | struct rpc_task task; | 686 | struct rpc_task task; |
@@ -686,13 +689,14 @@ struct nfs_read_data { | |||
686 | struct nfs_fattr fattr; /* fattr storage */ | 689 | struct nfs_fattr fattr; /* fattr storage */ |
687 | struct list_head pages; /* Coalesced read requests */ | 690 | struct list_head pages; /* Coalesced read requests */ |
688 | struct nfs_page *req; /* multi ops per nfs_page */ | 691 | struct nfs_page *req; /* multi ops per nfs_page */ |
689 | struct page *pagevec[NFS_READ_MAXIOV]; | 692 | struct page **pagevec; |
690 | struct nfs_readargs args; | 693 | struct nfs_readargs args; |
691 | struct nfs_readres res; | 694 | struct nfs_readres res; |
692 | #ifdef CONFIG_NFS_V4 | 695 | #ifdef CONFIG_NFS_V4 |
693 | unsigned long timestamp; /* For lease renewal */ | 696 | unsigned long timestamp; /* For lease renewal */ |
694 | #endif | 697 | #endif |
695 | void (*complete) (struct nfs_read_data *, int); | 698 | void (*complete) (struct nfs_read_data *, int); |
699 | struct page *page_array[NFS_PAGEVEC_SIZE + 1]; | ||
696 | }; | 700 | }; |
697 | 701 | ||
698 | struct nfs_write_data { | 702 | struct nfs_write_data { |
@@ -704,13 +708,14 @@ struct nfs_write_data { | |||
704 | struct nfs_writeverf verf; | 708 | struct nfs_writeverf verf; |
705 | struct list_head pages; /* Coalesced requests we wish to flush */ | 709 | struct list_head pages; /* Coalesced requests we wish to flush */ |
706 | struct nfs_page *req; /* multi ops per nfs_page */ | 710 | struct nfs_page *req; /* multi ops per nfs_page */ |
707 | struct page *pagevec[NFS_WRITE_MAXIOV]; | 711 | struct page **pagevec; |
708 | struct nfs_writeargs args; /* argument struct */ | 712 | struct nfs_writeargs args; /* argument struct */ |
709 | struct nfs_writeres res; /* result struct */ | 713 | struct nfs_writeres res; /* result struct */ |
710 | #ifdef CONFIG_NFS_V4 | 714 | #ifdef CONFIG_NFS_V4 |
711 | unsigned long timestamp; /* For lease renewal */ | 715 | unsigned long timestamp; /* For lease renewal */ |
712 | #endif | 716 | #endif |
713 | void (*complete) (struct nfs_write_data *, int); | 717 | void (*complete) (struct nfs_write_data *, int); |
718 | struct page *page_array[NFS_PAGEVEC_SIZE + 1]; | ||
714 | }; | 719 | }; |
715 | 720 | ||
716 | struct nfs_access_entry; | 721 | struct nfs_access_entry; |
diff --git a/include/linux/nfsd/xdr.h b/include/linux/nfsd/xdr.h index 130d4f588a37..3f4f7142bbe3 100644 --- a/include/linux/nfsd/xdr.h +++ b/include/linux/nfsd/xdr.h | |||
@@ -88,10 +88,12 @@ struct nfsd_readdirargs { | |||
88 | 88 | ||
89 | struct nfsd_attrstat { | 89 | struct nfsd_attrstat { |
90 | struct svc_fh fh; | 90 | struct svc_fh fh; |
91 | struct kstat stat; | ||
91 | }; | 92 | }; |
92 | 93 | ||
93 | struct nfsd_diropres { | 94 | struct nfsd_diropres { |
94 | struct svc_fh fh; | 95 | struct svc_fh fh; |
96 | struct kstat stat; | ||
95 | }; | 97 | }; |
96 | 98 | ||
97 | struct nfsd_readlinkres { | 99 | struct nfsd_readlinkres { |
@@ -101,6 +103,7 @@ struct nfsd_readlinkres { | |||
101 | struct nfsd_readres { | 103 | struct nfsd_readres { |
102 | struct svc_fh fh; | 104 | struct svc_fh fh; |
103 | unsigned long count; | 105 | unsigned long count; |
106 | struct kstat stat; | ||
104 | }; | 107 | }; |
105 | 108 | ||
106 | struct nfsd_readdirres { | 109 | struct nfsd_readdirres { |
diff --git a/include/linux/nfsd/xdr3.h b/include/linux/nfsd/xdr3.h index 3c2a71b43bac..a4322741f8b9 100644 --- a/include/linux/nfsd/xdr3.h +++ b/include/linux/nfsd/xdr3.h | |||
@@ -126,6 +126,7 @@ struct nfsd3_setaclargs { | |||
126 | struct nfsd3_attrstat { | 126 | struct nfsd3_attrstat { |
127 | __u32 status; | 127 | __u32 status; |
128 | struct svc_fh fh; | 128 | struct svc_fh fh; |
129 | struct kstat stat; | ||
129 | }; | 130 | }; |
130 | 131 | ||
131 | /* LOOKUP, CREATE, MKDIR, SYMLINK, MKNOD */ | 132 | /* LOOKUP, CREATE, MKDIR, SYMLINK, MKNOD */ |
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 343083fec258..d52999c43336 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h | |||
@@ -79,13 +79,23 @@ | |||
79 | /* | 79 | /* |
80 | * Global page accounting. One instance per CPU. Only unsigned longs are | 80 | * Global page accounting. One instance per CPU. Only unsigned longs are |
81 | * allowed. | 81 | * allowed. |
82 | * | ||
83 | * - Fields can be modified with xxx_page_state and xxx_page_state_zone at | ||
84 | * any time safely (which protects the instance from modification by | ||
85 | * interrupt. | ||
86 | * - The __xxx_page_state variants can be used safely when interrupts are | ||
87 | * disabled. | ||
88 | * - The __xxx_page_state variants can be used if the field is only | ||
89 | * modified from process context, or only modified from interrupt context. | ||
90 | * In this case, the field should be commented here. | ||
82 | */ | 91 | */ |
83 | struct page_state { | 92 | struct page_state { |
84 | unsigned long nr_dirty; /* Dirty writeable pages */ | 93 | unsigned long nr_dirty; /* Dirty writeable pages */ |
85 | unsigned long nr_writeback; /* Pages under writeback */ | 94 | unsigned long nr_writeback; /* Pages under writeback */ |
86 | unsigned long nr_unstable; /* NFS unstable pages */ | 95 | unsigned long nr_unstable; /* NFS unstable pages */ |
87 | unsigned long nr_page_table_pages;/* Pages used for pagetables */ | 96 | unsigned long nr_page_table_pages;/* Pages used for pagetables */ |
88 | unsigned long nr_mapped; /* mapped into pagetables */ | 97 | unsigned long nr_mapped; /* mapped into pagetables. |
98 | * only modified from process context */ | ||
89 | unsigned long nr_slab; /* In slab */ | 99 | unsigned long nr_slab; /* In slab */ |
90 | #define GET_PAGE_STATE_LAST nr_slab | 100 | #define GET_PAGE_STATE_LAST nr_slab |
91 | 101 | ||
@@ -97,32 +107,40 @@ struct page_state { | |||
97 | unsigned long pgpgout; /* Disk writes */ | 107 | unsigned long pgpgout; /* Disk writes */ |
98 | unsigned long pswpin; /* swap reads */ | 108 | unsigned long pswpin; /* swap reads */ |
99 | unsigned long pswpout; /* swap writes */ | 109 | unsigned long pswpout; /* swap writes */ |
100 | unsigned long pgalloc_high; /* page allocations */ | ||
101 | 110 | ||
111 | unsigned long pgalloc_high; /* page allocations */ | ||
102 | unsigned long pgalloc_normal; | 112 | unsigned long pgalloc_normal; |
113 | unsigned long pgalloc_dma32; | ||
103 | unsigned long pgalloc_dma; | 114 | unsigned long pgalloc_dma; |
115 | |||
104 | unsigned long pgfree; /* page freeings */ | 116 | unsigned long pgfree; /* page freeings */ |
105 | unsigned long pgactivate; /* pages moved inactive->active */ | 117 | unsigned long pgactivate; /* pages moved inactive->active */ |
106 | unsigned long pgdeactivate; /* pages moved active->inactive */ | 118 | unsigned long pgdeactivate; /* pages moved active->inactive */ |
107 | 119 | ||
108 | unsigned long pgfault; /* faults (major+minor) */ | 120 | unsigned long pgfault; /* faults (major+minor) */ |
109 | unsigned long pgmajfault; /* faults (major only) */ | 121 | unsigned long pgmajfault; /* faults (major only) */ |
122 | |||
110 | unsigned long pgrefill_high; /* inspected in refill_inactive_zone */ | 123 | unsigned long pgrefill_high; /* inspected in refill_inactive_zone */ |
111 | unsigned long pgrefill_normal; | 124 | unsigned long pgrefill_normal; |
125 | unsigned long pgrefill_dma32; | ||
112 | unsigned long pgrefill_dma; | 126 | unsigned long pgrefill_dma; |
113 | 127 | ||
114 | unsigned long pgsteal_high; /* total highmem pages reclaimed */ | 128 | unsigned long pgsteal_high; /* total highmem pages reclaimed */ |
115 | unsigned long pgsteal_normal; | 129 | unsigned long pgsteal_normal; |
130 | unsigned long pgsteal_dma32; | ||
116 | unsigned long pgsteal_dma; | 131 | unsigned long pgsteal_dma; |
132 | |||
117 | unsigned long pgscan_kswapd_high;/* total highmem pages scanned */ | 133 | unsigned long pgscan_kswapd_high;/* total highmem pages scanned */ |
118 | unsigned long pgscan_kswapd_normal; | 134 | unsigned long pgscan_kswapd_normal; |
119 | 135 | unsigned long pgscan_kswapd_dma32; | |
120 | unsigned long pgscan_kswapd_dma; | 136 | unsigned long pgscan_kswapd_dma; |
137 | |||
121 | unsigned long pgscan_direct_high;/* total highmem pages scanned */ | 138 | unsigned long pgscan_direct_high;/* total highmem pages scanned */ |
122 | unsigned long pgscan_direct_normal; | 139 | unsigned long pgscan_direct_normal; |
140 | unsigned long pgscan_direct_dma32; | ||
123 | unsigned long pgscan_direct_dma; | 141 | unsigned long pgscan_direct_dma; |
124 | unsigned long pginodesteal; /* pages reclaimed via inode freeing */ | ||
125 | 142 | ||
143 | unsigned long pginodesteal; /* pages reclaimed via inode freeing */ | ||
126 | unsigned long slabs_scanned; /* slab objects scanned */ | 144 | unsigned long slabs_scanned; /* slab objects scanned */ |
127 | unsigned long kswapd_steal; /* pages reclaimed by kswapd */ | 145 | unsigned long kswapd_steal; /* pages reclaimed by kswapd */ |
128 | unsigned long kswapd_inodesteal;/* reclaimed via kswapd inode freeing */ | 146 | unsigned long kswapd_inodesteal;/* reclaimed via kswapd inode freeing */ |
@@ -136,31 +154,54 @@ struct page_state { | |||
136 | extern void get_page_state(struct page_state *ret); | 154 | extern void get_page_state(struct page_state *ret); |
137 | extern void get_page_state_node(struct page_state *ret, int node); | 155 | extern void get_page_state_node(struct page_state *ret, int node); |
138 | extern void get_full_page_state(struct page_state *ret); | 156 | extern void get_full_page_state(struct page_state *ret); |
139 | extern unsigned long __read_page_state(unsigned long offset); | 157 | extern unsigned long read_page_state_offset(unsigned long offset); |
140 | extern void __mod_page_state(unsigned long offset, unsigned long delta); | 158 | extern void mod_page_state_offset(unsigned long offset, unsigned long delta); |
159 | extern void __mod_page_state_offset(unsigned long offset, unsigned long delta); | ||
141 | 160 | ||
142 | #define read_page_state(member) \ | 161 | #define read_page_state(member) \ |
143 | __read_page_state(offsetof(struct page_state, member)) | 162 | read_page_state_offset(offsetof(struct page_state, member)) |
144 | 163 | ||
145 | #define mod_page_state(member, delta) \ | 164 | #define mod_page_state(member, delta) \ |
146 | __mod_page_state(offsetof(struct page_state, member), (delta)) | 165 | mod_page_state_offset(offsetof(struct page_state, member), (delta)) |
147 | 166 | ||
148 | #define inc_page_state(member) mod_page_state(member, 1UL) | 167 | #define __mod_page_state(member, delta) \ |
149 | #define dec_page_state(member) mod_page_state(member, 0UL - 1) | 168 | __mod_page_state_offset(offsetof(struct page_state, member), (delta)) |
150 | #define add_page_state(member,delta) mod_page_state(member, (delta)) | 169 | |
151 | #define sub_page_state(member,delta) mod_page_state(member, 0UL - (delta)) | 170 | #define inc_page_state(member) mod_page_state(member, 1UL) |
152 | 171 | #define dec_page_state(member) mod_page_state(member, 0UL - 1) | |
153 | #define mod_page_state_zone(zone, member, delta) \ | 172 | #define add_page_state(member,delta) mod_page_state(member, (delta)) |
154 | do { \ | 173 | #define sub_page_state(member,delta) mod_page_state(member, 0UL - (delta)) |
155 | unsigned offset; \ | 174 | |
156 | if (is_highmem(zone)) \ | 175 | #define __inc_page_state(member) __mod_page_state(member, 1UL) |
157 | offset = offsetof(struct page_state, member##_high); \ | 176 | #define __dec_page_state(member) __mod_page_state(member, 0UL - 1) |
158 | else if (is_normal(zone)) \ | 177 | #define __add_page_state(member,delta) __mod_page_state(member, (delta)) |
159 | offset = offsetof(struct page_state, member##_normal); \ | 178 | #define __sub_page_state(member,delta) __mod_page_state(member, 0UL - (delta)) |
160 | else \ | 179 | |
161 | offset = offsetof(struct page_state, member##_dma); \ | 180 | #define page_state(member) (*__page_state(offsetof(struct page_state, member))) |
162 | __mod_page_state(offset, (delta)); \ | 181 | |
163 | } while (0) | 182 | #define state_zone_offset(zone, member) \ |
183 | ({ \ | ||
184 | unsigned offset; \ | ||
185 | if (is_highmem(zone)) \ | ||
186 | offset = offsetof(struct page_state, member##_high); \ | ||
187 | else if (is_normal(zone)) \ | ||
188 | offset = offsetof(struct page_state, member##_normal); \ | ||
189 | else if (is_dma32(zone)) \ | ||
190 | offset = offsetof(struct page_state, member##_dma32); \ | ||
191 | else \ | ||
192 | offset = offsetof(struct page_state, member##_dma); \ | ||
193 | offset; \ | ||
194 | }) | ||
195 | |||
196 | #define __mod_page_state_zone(zone, member, delta) \ | ||
197 | do { \ | ||
198 | __mod_page_state_offset(state_zone_offset(zone, member), (delta)); \ | ||
199 | } while (0) | ||
200 | |||
201 | #define mod_page_state_zone(zone, member, delta) \ | ||
202 | do { \ | ||
203 | mod_page_state_offset(state_zone_offset(zone, member), (delta)); \ | ||
204 | } while (0) | ||
164 | 205 | ||
165 | /* | 206 | /* |
166 | * Manipulation of page state flags | 207 | * Manipulation of page state flags |
diff --git a/include/linux/pagevec.h b/include/linux/pagevec.h index def32c5715be..8eb7fa76c1d0 100644 --- a/include/linux/pagevec.h +++ b/include/linux/pagevec.h | |||
@@ -5,6 +5,9 @@ | |||
5 | * pages. A pagevec is a multipage container which is used for that. | 5 | * pages. A pagevec is a multipage container which is used for that. |
6 | */ | 6 | */ |
7 | 7 | ||
8 | #ifndef _LINUX_PAGEVEC_H | ||
9 | #define _LINUX_PAGEVEC_H | ||
10 | |||
8 | /* 14 pointers + two long's align the pagevec structure to a power of two */ | 11 | /* 14 pointers + two long's align the pagevec structure to a power of two */ |
9 | #define PAGEVEC_SIZE 14 | 12 | #define PAGEVEC_SIZE 14 |
10 | 13 | ||
@@ -83,3 +86,5 @@ static inline void pagevec_lru_add(struct pagevec *pvec) | |||
83 | if (pagevec_count(pvec)) | 86 | if (pagevec_count(pvec)) |
84 | __pagevec_lru_add(pvec); | 87 | __pagevec_lru_add(pvec); |
85 | } | 88 | } |
89 | |||
90 | #endif /* _LINUX_PAGEVEC_H */ | ||
diff --git a/include/linux/parport.h b/include/linux/parport.h index d2a4d9e1e6d1..f67f838a3a1f 100644 --- a/include/linux/parport.h +++ b/include/linux/parport.h | |||
@@ -236,7 +236,8 @@ struct pardevice { | |||
236 | 236 | ||
237 | /* IEEE1284 information */ | 237 | /* IEEE1284 information */ |
238 | 238 | ||
239 | /* IEEE1284 phases */ | 239 | /* IEEE1284 phases. These are exposed to userland through ppdev IOCTL |
240 | * PP[GS]ETPHASE, so do not change existing values. */ | ||
240 | enum ieee1284_phase { | 241 | enum ieee1284_phase { |
241 | IEEE1284_PH_FWD_DATA, | 242 | IEEE1284_PH_FWD_DATA, |
242 | IEEE1284_PH_FWD_IDLE, | 243 | IEEE1284_PH_FWD_IDLE, |
diff --git a/include/linux/parport_pc.h b/include/linux/parport_pc.h index 7825c76cbd00..1cc0f6b1a49a 100644 --- a/include/linux/parport_pc.h +++ b/include/linux/parport_pc.h | |||
@@ -79,14 +79,14 @@ static __inline__ unsigned char parport_pc_read_data(struct parport *p) | |||
79 | } | 79 | } |
80 | 80 | ||
81 | #ifdef DEBUG_PARPORT | 81 | #ifdef DEBUG_PARPORT |
82 | extern __inline__ void dump_parport_state (char *str, struct parport *p) | 82 | static inline void dump_parport_state (char *str, struct parport *p) |
83 | { | 83 | { |
84 | /* here's hoping that reading these ports won't side-effect anything underneath */ | 84 | /* here's hoping that reading these ports won't side-effect anything underneath */ |
85 | unsigned char ecr = inb (ECONTROL (p)); | 85 | unsigned char ecr = inb (ECONTROL (p)); |
86 | unsigned char dcr = inb (CONTROL (p)); | 86 | unsigned char dcr = inb (CONTROL (p)); |
87 | unsigned char dsr = inb (STATUS (p)); | 87 | unsigned char dsr = inb (STATUS (p)); |
88 | static char *ecr_modes[] = {"SPP", "PS2", "PPFIFO", "ECP", "xXx", "yYy", "TST", "CFG"}; | 88 | static const char *const ecr_modes[] = {"SPP", "PS2", "PPFIFO", "ECP", "xXx", "yYy", "TST", "CFG"}; |
89 | const struct parport_pc_private *priv = (parport_pc_private *)p->physport->private_data; | 89 | const struct parport_pc_private *priv = p->physport->private_data; |
90 | int i; | 90 | int i; |
91 | 91 | ||
92 | printk (KERN_DEBUG "*** parport state (%s): ecr=[%s", str, ecr_modes[(ecr & 0xe0) >> 5]); | 92 | printk (KERN_DEBUG "*** parport state (%s): ecr=[%s", str, ecr_modes[(ecr & 0xe0) >> 5]); |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 1e737e269db9..c3caa93efb10 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -15,6 +15,7 @@ | |||
15 | #define PCI_CLASS_STORAGE_FLOPPY 0x0102 | 15 | #define PCI_CLASS_STORAGE_FLOPPY 0x0102 |
16 | #define PCI_CLASS_STORAGE_IPI 0x0103 | 16 | #define PCI_CLASS_STORAGE_IPI 0x0103 |
17 | #define PCI_CLASS_STORAGE_RAID 0x0104 | 17 | #define PCI_CLASS_STORAGE_RAID 0x0104 |
18 | #define PCI_CLASS_STORAGE_SAS 0x0107 | ||
18 | #define PCI_CLASS_STORAGE_OTHER 0x0180 | 19 | #define PCI_CLASS_STORAGE_OTHER 0x0180 |
19 | 20 | ||
20 | #define PCI_BASE_CLASS_NETWORK 0x02 | 21 | #define PCI_BASE_CLASS_NETWORK 0x02 |
@@ -376,6 +377,10 @@ | |||
376 | #define PCI_DEVICE_ID_NS_87560_USB 0x0012 | 377 | #define PCI_DEVICE_ID_NS_87560_USB 0x0012 |
377 | #define PCI_DEVICE_ID_NS_83815 0x0020 | 378 | #define PCI_DEVICE_ID_NS_83815 0x0020 |
378 | #define PCI_DEVICE_ID_NS_83820 0x0022 | 379 | #define PCI_DEVICE_ID_NS_83820 0x0022 |
380 | #define PCI_DEVICE_ID_NS_CS5535_IDE 0x002d | ||
381 | #define PCI_DEVICE_ID_NS_CS5535_AUDIO 0x002e | ||
382 | #define PCI_DEVICE_ID_NS_CS5535_USB 0x002f | ||
383 | #define PCI_DEVICE_ID_NS_CS5535_VIDEO 0x0030 | ||
379 | #define PCI_DEVICE_ID_NS_SATURN 0x0035 | 384 | #define PCI_DEVICE_ID_NS_SATURN 0x0035 |
380 | #define PCI_DEVICE_ID_NS_SCx200_BRIDGE 0x0500 | 385 | #define PCI_DEVICE_ID_NS_SCx200_BRIDGE 0x0500 |
381 | #define PCI_DEVICE_ID_NS_SCx200_SMI 0x0501 | 386 | #define PCI_DEVICE_ID_NS_SCx200_SMI 0x0501 |
@@ -389,6 +394,13 @@ | |||
389 | #define PCI_DEVICE_ID_NS_87410 0xd001 | 394 | #define PCI_DEVICE_ID_NS_87410 0xd001 |
390 | #define PCI_DEVICE_ID_NS_CS5535_IDE 0x002d | 395 | #define PCI_DEVICE_ID_NS_CS5535_IDE 0x002d |
391 | 396 | ||
397 | #define PCI_DEVICE_ID_NS_CS5535_HOST_BRIDGE 0x0028 | ||
398 | #define PCI_DEVICE_ID_NS_CS5535_ISA_BRIDGE 0x002b | ||
399 | #define PCI_DEVICE_ID_NS_CS5535_IDE 0x002d | ||
400 | #define PCI_DEVICE_ID_NS_CS5535_AUDIO 0x002e | ||
401 | #define PCI_DEVICE_ID_NS_CS5535_USB 0x002f | ||
402 | #define PCI_DEVICE_ID_NS_CS5535_VIDEO 0x0030 | ||
403 | |||
392 | #define PCI_VENDOR_ID_TSENG 0x100c | 404 | #define PCI_VENDOR_ID_TSENG 0x100c |
393 | #define PCI_DEVICE_ID_TSENG_W32P_2 0x3202 | 405 | #define PCI_DEVICE_ID_TSENG_W32P_2 0x3202 |
394 | #define PCI_DEVICE_ID_TSENG_W32P_b 0x3205 | 406 | #define PCI_DEVICE_ID_TSENG_W32P_b 0x3205 |
@@ -491,6 +503,9 @@ | |||
491 | 503 | ||
492 | #define PCI_DEVICE_ID_AMD_CS5536_IDE 0x209A | 504 | #define PCI_DEVICE_ID_AMD_CS5536_IDE 0x209A |
493 | 505 | ||
506 | #define PCI_DEVICE_ID_AMD_LX_VIDEO 0x2081 | ||
507 | #define PCI_DEVICE_ID_AMD_LX_AES 0x2082 | ||
508 | |||
494 | #define PCI_VENDOR_ID_TRIDENT 0x1023 | 509 | #define PCI_VENDOR_ID_TRIDENT 0x1023 |
495 | #define PCI_DEVICE_ID_TRIDENT_4DWAVE_DX 0x2000 | 510 | #define PCI_DEVICE_ID_TRIDENT_4DWAVE_DX 0x2000 |
496 | #define PCI_DEVICE_ID_TRIDENT_4DWAVE_NX 0x2001 | 511 | #define PCI_DEVICE_ID_TRIDENT_4DWAVE_NX 0x2001 |
@@ -971,6 +986,7 @@ | |||
971 | #define PCI_DEVICE_ID_NVIDIA_TNT_UNKNOWN 0x002a | 986 | #define PCI_DEVICE_ID_NVIDIA_TNT_UNKNOWN 0x002a |
972 | #define PCI_DEVICE_ID_NVIDIA_VTNT2 0x002C | 987 | #define PCI_DEVICE_ID_NVIDIA_VTNT2 0x002C |
973 | #define PCI_DEVICE_ID_NVIDIA_UVTNT2 0x002D | 988 | #define PCI_DEVICE_ID_NVIDIA_UVTNT2 0x002D |
989 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SMBUS 0x0034 | ||
974 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE 0x0035 | 990 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE 0x0035 |
975 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA 0x0036 | 991 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA 0x0036 |
976 | #define PCI_DEVICE_ID_NVIDIA_NVENET_10 0x0037 | 992 | #define PCI_DEVICE_ID_NVIDIA_NVENET_10 0x0037 |
@@ -1244,6 +1260,7 @@ | |||
1244 | #define PCI_DEVICE_ID_VIA_8378_0 0x3205 | 1260 | #define PCI_DEVICE_ID_VIA_8378_0 0x3205 |
1245 | #define PCI_DEVICE_ID_VIA_8783_0 0x3208 | 1261 | #define PCI_DEVICE_ID_VIA_8783_0 0x3208 |
1246 | #define PCI_DEVICE_ID_VIA_8237 0x3227 | 1262 | #define PCI_DEVICE_ID_VIA_8237 0x3227 |
1263 | #define PCI_DEVICE_ID_VIA_8251 0x3287 | ||
1247 | #define PCI_DEVICE_ID_VIA_3296_0 0x0296 | 1264 | #define PCI_DEVICE_ID_VIA_3296_0 0x0296 |
1248 | #define PCI_DEVICE_ID_VIA_8231 0x8231 | 1265 | #define PCI_DEVICE_ID_VIA_8231 0x8231 |
1249 | #define PCI_DEVICE_ID_VIA_8231_4 0x8235 | 1266 | #define PCI_DEVICE_ID_VIA_8231_4 0x8235 |
@@ -1566,6 +1583,23 @@ | |||
1566 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_2_6 0x0009 | 1583 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_2_6 0x0009 |
1567 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_BH081101V1 0x000A | 1584 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_BH081101V1 0x000A |
1568 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_BH041101V1 0x000B | 1585 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_BH041101V1 0x000B |
1586 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_20MHZ 0x000C | ||
1587 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_PTM 0x000D | ||
1588 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_NT960PCI 0x0100 | ||
1589 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_TITAN_2 0x0201 | ||
1590 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_TITAN_4 0x0202 | ||
1591 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_232 0x0300 | ||
1592 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_232 0x0301 | ||
1593 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8_232 0x0302 | ||
1594 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_1_1 0x0310 | ||
1595 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_2 0x0311 | ||
1596 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_4 0x0312 | ||
1597 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2 0x0320 | ||
1598 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4 0x0321 | ||
1599 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8 0x0322 | ||
1600 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_2_485 0x0330 | ||
1601 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_485 0x0331 | ||
1602 | #define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8_485 0x0332 | ||
1569 | 1603 | ||
1570 | 1604 | ||
1571 | #define PCI_VENDOR_ID_NVIDIA_SGS 0x12d2 | 1605 | #define PCI_VENDOR_ID_NVIDIA_SGS 0x12d2 |
diff --git a/include/linux/percpu.h b/include/linux/percpu.h index fb8d2d24e4bb..cb9039a21f2a 100644 --- a/include/linux/percpu.h +++ b/include/linux/percpu.h | |||
@@ -19,7 +19,6 @@ | |||
19 | 19 | ||
20 | struct percpu_data { | 20 | struct percpu_data { |
21 | void *ptrs[NR_CPUS]; | 21 | void *ptrs[NR_CPUS]; |
22 | void *blkp; | ||
23 | }; | 22 | }; |
24 | 23 | ||
25 | /* | 24 | /* |
@@ -33,14 +32,14 @@ struct percpu_data { | |||
33 | (__typeof__(ptr))__p->ptrs[(cpu)]; \ | 32 | (__typeof__(ptr))__p->ptrs[(cpu)]; \ |
34 | }) | 33 | }) |
35 | 34 | ||
36 | extern void *__alloc_percpu(size_t size, size_t align); | 35 | extern void *__alloc_percpu(size_t size); |
37 | extern void free_percpu(const void *); | 36 | extern void free_percpu(const void *); |
38 | 37 | ||
39 | #else /* CONFIG_SMP */ | 38 | #else /* CONFIG_SMP */ |
40 | 39 | ||
41 | #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); (ptr); }) | 40 | #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); (ptr); }) |
42 | 41 | ||
43 | static inline void *__alloc_percpu(size_t size, size_t align) | 42 | static inline void *__alloc_percpu(size_t size) |
44 | { | 43 | { |
45 | void *ret = kmalloc(size, GFP_KERNEL); | 44 | void *ret = kmalloc(size, GFP_KERNEL); |
46 | if (ret) | 45 | if (ret) |
@@ -55,7 +54,6 @@ static inline void free_percpu(const void *ptr) | |||
55 | #endif /* CONFIG_SMP */ | 54 | #endif /* CONFIG_SMP */ |
56 | 55 | ||
57 | /* Simple wrapper for the common case: zeros memory. */ | 56 | /* Simple wrapper for the common case: zeros memory. */ |
58 | #define alloc_percpu(type) \ | 57 | #define alloc_percpu(type) ((type *)(__alloc_percpu(sizeof(type)))) |
59 | ((type *)(__alloc_percpu(sizeof(type), __alignof__(type)))) | ||
60 | 58 | ||
61 | #endif /* __LINUX_PERCPU_H */ | 59 | #endif /* __LINUX_PERCPU_H */ |
diff --git a/include/linux/pfkeyv2.h b/include/linux/pfkeyv2.h index 724066778aff..6351c4055ace 100644 --- a/include/linux/pfkeyv2.h +++ b/include/linux/pfkeyv2.h | |||
@@ -216,6 +216,16 @@ struct sadb_x_nat_t_port { | |||
216 | } __attribute__((packed)); | 216 | } __attribute__((packed)); |
217 | /* sizeof(struct sadb_x_nat_t_port) == 8 */ | 217 | /* sizeof(struct sadb_x_nat_t_port) == 8 */ |
218 | 218 | ||
219 | /* Generic LSM security context */ | ||
220 | struct sadb_x_sec_ctx { | ||
221 | uint16_t sadb_x_sec_len; | ||
222 | uint16_t sadb_x_sec_exttype; | ||
223 | uint8_t sadb_x_ctx_alg; /* LSMs: e.g., selinux == 1 */ | ||
224 | uint8_t sadb_x_ctx_doi; | ||
225 | uint16_t sadb_x_ctx_len; | ||
226 | } __attribute__((packed)); | ||
227 | /* sizeof(struct sadb_sec_ctx) = 8 */ | ||
228 | |||
219 | /* Message types */ | 229 | /* Message types */ |
220 | #define SADB_RESERVED 0 | 230 | #define SADB_RESERVED 0 |
221 | #define SADB_GETSPI 1 | 231 | #define SADB_GETSPI 1 |
@@ -325,7 +335,8 @@ struct sadb_x_nat_t_port { | |||
325 | #define SADB_X_EXT_NAT_T_SPORT 21 | 335 | #define SADB_X_EXT_NAT_T_SPORT 21 |
326 | #define SADB_X_EXT_NAT_T_DPORT 22 | 336 | #define SADB_X_EXT_NAT_T_DPORT 22 |
327 | #define SADB_X_EXT_NAT_T_OA 23 | 337 | #define SADB_X_EXT_NAT_T_OA 23 |
328 | #define SADB_EXT_MAX 23 | 338 | #define SADB_X_EXT_SEC_CTX 24 |
339 | #define SADB_EXT_MAX 24 | ||
329 | 340 | ||
330 | /* Identity Extension values */ | 341 | /* Identity Extension values */ |
331 | #define SADB_IDENTTYPE_RESERVED 0 | 342 | #define SADB_IDENTTYPE_RESERVED 0 |
diff --git a/include/linux/pkt_sched.h b/include/linux/pkt_sched.h index e87b233615b3..d10f35338507 100644 --- a/include/linux/pkt_sched.h +++ b/include/linux/pkt_sched.h | |||
@@ -429,6 +429,7 @@ enum | |||
429 | TCA_NETEM_CORR, | 429 | TCA_NETEM_CORR, |
430 | TCA_NETEM_DELAY_DIST, | 430 | TCA_NETEM_DELAY_DIST, |
431 | TCA_NETEM_REORDER, | 431 | TCA_NETEM_REORDER, |
432 | TCA_NETEM_CORRUPT, | ||
432 | __TCA_NETEM_MAX, | 433 | __TCA_NETEM_MAX, |
433 | }; | 434 | }; |
434 | 435 | ||
@@ -457,6 +458,12 @@ struct tc_netem_reorder | |||
457 | __u32 correlation; | 458 | __u32 correlation; |
458 | }; | 459 | }; |
459 | 460 | ||
461 | struct tc_netem_corrupt | ||
462 | { | ||
463 | __u32 probability; | ||
464 | __u32 correlation; | ||
465 | }; | ||
466 | |||
460 | #define NETEM_DIST_SCALE 8192 | 467 | #define NETEM_DIST_SCALE 8192 |
461 | 468 | ||
462 | #endif | 469 | #endif |
diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h index 17e336f40b47..782090c68932 100644 --- a/include/linux/platform_device.h +++ b/include/linux/platform_device.h | |||
@@ -41,6 +41,7 @@ extern struct platform_device *platform_device_alloc(const char *name, unsigned | |||
41 | extern int platform_device_add_resources(struct platform_device *pdev, struct resource *res, unsigned int num); | 41 | extern int platform_device_add_resources(struct platform_device *pdev, struct resource *res, unsigned int num); |
42 | extern int platform_device_add_data(struct platform_device *pdev, void *data, size_t size); | 42 | extern int platform_device_add_data(struct platform_device *pdev, void *data, size_t size); |
43 | extern int platform_device_add(struct platform_device *pdev); | 43 | extern int platform_device_add(struct platform_device *pdev); |
44 | extern void platform_device_del(struct platform_device *pdev); | ||
44 | extern void platform_device_put(struct platform_device *pdev); | 45 | extern void platform_device_put(struct platform_device *pdev); |
45 | 46 | ||
46 | struct platform_driver { | 47 | struct platform_driver { |
diff --git a/include/linux/pnp.h b/include/linux/pnp.h index 584d57cb393a..93b0959eb40f 100644 --- a/include/linux/pnp.h +++ b/include/linux/pnp.h | |||
@@ -162,6 +162,7 @@ struct pnp_card_link { | |||
162 | struct pnp_card * card; | 162 | struct pnp_card * card; |
163 | struct pnp_card_driver * driver; | 163 | struct pnp_card_driver * driver; |
164 | void * driver_data; | 164 | void * driver_data; |
165 | pm_message_t pm_state; | ||
165 | }; | 166 | }; |
166 | 167 | ||
167 | static inline void *pnp_get_card_drvdata (struct pnp_card_link *pcard) | 168 | static inline void *pnp_get_card_drvdata (struct pnp_card_link *pcard) |
@@ -294,6 +295,8 @@ struct pnp_driver { | |||
294 | unsigned int flags; | 295 | unsigned int flags; |
295 | int (*probe) (struct pnp_dev *dev, const struct pnp_device_id *dev_id); | 296 | int (*probe) (struct pnp_dev *dev, const struct pnp_device_id *dev_id); |
296 | void (*remove) (struct pnp_dev *dev); | 297 | void (*remove) (struct pnp_dev *dev); |
298 | int (*suspend) (struct pnp_dev *dev, pm_message_t state); | ||
299 | int (*resume) (struct pnp_dev *dev); | ||
297 | struct device_driver driver; | 300 | struct device_driver driver; |
298 | }; | 301 | }; |
299 | 302 | ||
@@ -306,6 +309,8 @@ struct pnp_card_driver { | |||
306 | unsigned int flags; | 309 | unsigned int flags; |
307 | int (*probe) (struct pnp_card_link *card, const struct pnp_card_device_id *card_id); | 310 | int (*probe) (struct pnp_card_link *card, const struct pnp_card_device_id *card_id); |
308 | void (*remove) (struct pnp_card_link *card); | 311 | void (*remove) (struct pnp_card_link *card); |
312 | int (*suspend) (struct pnp_card_link *card, pm_message_t state); | ||
313 | int (*resume) (struct pnp_card_link *card); | ||
309 | struct pnp_driver link; | 314 | struct pnp_driver link; |
310 | }; | 315 | }; |
311 | 316 | ||
@@ -380,6 +385,8 @@ void pnp_init_resource_table(struct pnp_resource_table *table); | |||
380 | int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res, int mode); | 385 | int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res, int mode); |
381 | int pnp_auto_config_dev(struct pnp_dev *dev); | 386 | int pnp_auto_config_dev(struct pnp_dev *dev); |
382 | int pnp_validate_config(struct pnp_dev *dev); | 387 | int pnp_validate_config(struct pnp_dev *dev); |
388 | int pnp_start_dev(struct pnp_dev *dev); | ||
389 | int pnp_stop_dev(struct pnp_dev *dev); | ||
383 | int pnp_activate_dev(struct pnp_dev *dev); | 390 | int pnp_activate_dev(struct pnp_dev *dev); |
384 | int pnp_disable_dev(struct pnp_dev *dev); | 391 | int pnp_disable_dev(struct pnp_dev *dev); |
385 | void pnp_resource_change(struct resource *resource, unsigned long start, unsigned long size); | 392 | void pnp_resource_change(struct resource *resource, unsigned long start, unsigned long size); |
@@ -423,6 +430,8 @@ static inline void pnp_init_resource_table(struct pnp_resource_table *table) { } | |||
423 | static inline int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res, int mode) { return -ENODEV; } | 430 | static inline int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res, int mode) { return -ENODEV; } |
424 | static inline int pnp_auto_config_dev(struct pnp_dev *dev) { return -ENODEV; } | 431 | static inline int pnp_auto_config_dev(struct pnp_dev *dev) { return -ENODEV; } |
425 | static inline int pnp_validate_config(struct pnp_dev *dev) { return -ENODEV; } | 432 | static inline int pnp_validate_config(struct pnp_dev *dev) { return -ENODEV; } |
433 | static inline int pnp_start_dev(struct pnp_dev *dev) { return -ENODEV; } | ||
434 | static inline int pnp_stop_dev(struct pnp_dev *dev) { return -ENODEV; } | ||
426 | static inline int pnp_activate_dev(struct pnp_dev *dev) { return -ENODEV; } | 435 | static inline int pnp_activate_dev(struct pnp_dev *dev) { return -ENODEV; } |
427 | static inline int pnp_disable_dev(struct pnp_dev *dev) { return -ENODEV; } | 436 | static inline int pnp_disable_dev(struct pnp_dev *dev) { return -ENODEV; } |
428 | static inline void pnp_resource_change(struct resource *resource, unsigned long start, unsigned long size) { } | 437 | static inline void pnp_resource_change(struct resource *resource, unsigned long start, unsigned long size) { } |
diff --git a/include/linux/preempt.h b/include/linux/preempt.h index d9a2f5254a51..5769d14d1e6a 100644 --- a/include/linux/preempt.h +++ b/include/linux/preempt.h | |||
@@ -48,6 +48,7 @@ do { \ | |||
48 | #define preempt_enable() \ | 48 | #define preempt_enable() \ |
49 | do { \ | 49 | do { \ |
50 | preempt_enable_no_resched(); \ | 50 | preempt_enable_no_resched(); \ |
51 | barrier(); \ | ||
51 | preempt_check_resched(); \ | 52 | preempt_check_resched(); \ |
52 | } while (0) | 53 | } while (0) |
53 | 54 | ||
diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h index b2b3dba1298d..9d5cd106b344 100644 --- a/include/linux/ptrace.h +++ b/include/linux/ptrace.h | |||
@@ -20,8 +20,6 @@ | |||
20 | #define PTRACE_DETACH 0x11 | 20 | #define PTRACE_DETACH 0x11 |
21 | 21 | ||
22 | #define PTRACE_SYSCALL 24 | 22 | #define PTRACE_SYSCALL 24 |
23 | #define PTRACE_SYSEMU 31 | ||
24 | #define PTRACE_SYSEMU_SINGLESTEP 32 | ||
25 | 23 | ||
26 | /* 0x4200-0x4300 are reserved for architecture-independent additions. */ | 24 | /* 0x4200-0x4300 are reserved for architecture-independent additions. */ |
27 | #define PTRACE_SETOPTIONS 0x4200 | 25 | #define PTRACE_SETOPTIONS 0x4200 |
@@ -80,6 +78,8 @@ | |||
80 | 78 | ||
81 | 79 | ||
82 | extern long arch_ptrace(struct task_struct *child, long request, long addr, long data); | 80 | extern long arch_ptrace(struct task_struct *child, long request, long addr, long data); |
81 | extern struct task_struct *ptrace_get_task_struct(pid_t pid); | ||
82 | extern int ptrace_traceme(void); | ||
83 | extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len); | 83 | extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len); |
84 | extern int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len); | 84 | extern int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len); |
85 | extern int ptrace_attach(struct task_struct *tsk); | 85 | extern int ptrace_attach(struct task_struct *tsk); |
diff --git a/include/linux/radix-tree.h b/include/linux/radix-tree.h index 36e5d269612f..c57ff2fcb30a 100644 --- a/include/linux/radix-tree.h +++ b/include/linux/radix-tree.h | |||
@@ -19,6 +19,7 @@ | |||
19 | #ifndef _LINUX_RADIX_TREE_H | 19 | #ifndef _LINUX_RADIX_TREE_H |
20 | #define _LINUX_RADIX_TREE_H | 20 | #define _LINUX_RADIX_TREE_H |
21 | 21 | ||
22 | #include <linux/sched.h> | ||
22 | #include <linux/preempt.h> | 23 | #include <linux/preempt.h> |
23 | #include <linux/types.h> | 24 | #include <linux/types.h> |
24 | 25 | ||
diff --git a/include/linux/raid/md.h b/include/linux/raid/md.h index 13e7c4b62367..b6e0bcad84e1 100644 --- a/include/linux/raid/md.h +++ b/include/linux/raid/md.h | |||
@@ -71,8 +71,8 @@ | |||
71 | */ | 71 | */ |
72 | #define MD_PATCHLEVEL_VERSION 3 | 72 | #define MD_PATCHLEVEL_VERSION 3 |
73 | 73 | ||
74 | extern int register_md_personality (int p_num, mdk_personality_t *p); | 74 | extern int register_md_personality (struct mdk_personality *p); |
75 | extern int unregister_md_personality (int p_num); | 75 | extern int unregister_md_personality (struct mdk_personality *p); |
76 | extern mdk_thread_t * md_register_thread (void (*run) (mddev_t *mddev), | 76 | extern mdk_thread_t * md_register_thread (void (*run) (mddev_t *mddev), |
77 | mddev_t *mddev, const char *name); | 77 | mddev_t *mddev, const char *name); |
78 | extern void md_unregister_thread (mdk_thread_t *thread); | 78 | extern void md_unregister_thread (mdk_thread_t *thread); |
diff --git a/include/linux/raid/md_k.h b/include/linux/raid/md_k.h index 46629a275ba9..617b9506c760 100644 --- a/include/linux/raid/md_k.h +++ b/include/linux/raid/md_k.h | |||
@@ -18,62 +18,19 @@ | |||
18 | /* and dm-bio-list.h is not under include/linux because.... ??? */ | 18 | /* and dm-bio-list.h is not under include/linux because.... ??? */ |
19 | #include "../../../drivers/md/dm-bio-list.h" | 19 | #include "../../../drivers/md/dm-bio-list.h" |
20 | 20 | ||
21 | #define MD_RESERVED 0UL | ||
22 | #define LINEAR 1UL | ||
23 | #define RAID0 2UL | ||
24 | #define RAID1 3UL | ||
25 | #define RAID5 4UL | ||
26 | #define TRANSLUCENT 5UL | ||
27 | #define HSM 6UL | ||
28 | #define MULTIPATH 7UL | ||
29 | #define RAID6 8UL | ||
30 | #define RAID10 9UL | ||
31 | #define FAULTY 10UL | ||
32 | #define MAX_PERSONALITY 11UL | ||
33 | |||
34 | #define LEVEL_MULTIPATH (-4) | 21 | #define LEVEL_MULTIPATH (-4) |
35 | #define LEVEL_LINEAR (-1) | 22 | #define LEVEL_LINEAR (-1) |
36 | #define LEVEL_FAULTY (-5) | 23 | #define LEVEL_FAULTY (-5) |
37 | 24 | ||
25 | /* we need a value for 'no level specified' and 0 | ||
26 | * means 'raid0', so we need something else. This is | ||
27 | * for internal use only | ||
28 | */ | ||
29 | #define LEVEL_NONE (-1000000) | ||
30 | |||
38 | #define MaxSector (~(sector_t)0) | 31 | #define MaxSector (~(sector_t)0) |
39 | #define MD_THREAD_NAME_MAX 14 | 32 | #define MD_THREAD_NAME_MAX 14 |
40 | 33 | ||
41 | static inline int pers_to_level (int pers) | ||
42 | { | ||
43 | switch (pers) { | ||
44 | case FAULTY: return LEVEL_FAULTY; | ||
45 | case MULTIPATH: return LEVEL_MULTIPATH; | ||
46 | case HSM: return -3; | ||
47 | case TRANSLUCENT: return -2; | ||
48 | case LINEAR: return LEVEL_LINEAR; | ||
49 | case RAID0: return 0; | ||
50 | case RAID1: return 1; | ||
51 | case RAID5: return 5; | ||
52 | case RAID6: return 6; | ||
53 | case RAID10: return 10; | ||
54 | } | ||
55 | BUG(); | ||
56 | return MD_RESERVED; | ||
57 | } | ||
58 | |||
59 | static inline int level_to_pers (int level) | ||
60 | { | ||
61 | switch (level) { | ||
62 | case LEVEL_FAULTY: return FAULTY; | ||
63 | case LEVEL_MULTIPATH: return MULTIPATH; | ||
64 | case -3: return HSM; | ||
65 | case -2: return TRANSLUCENT; | ||
66 | case LEVEL_LINEAR: return LINEAR; | ||
67 | case 0: return RAID0; | ||
68 | case 1: return RAID1; | ||
69 | case 4: | ||
70 | case 5: return RAID5; | ||
71 | case 6: return RAID6; | ||
72 | case 10: return RAID10; | ||
73 | } | ||
74 | return MD_RESERVED; | ||
75 | } | ||
76 | |||
77 | typedef struct mddev_s mddev_t; | 34 | typedef struct mddev_s mddev_t; |
78 | typedef struct mdk_rdev_s mdk_rdev_t; | 35 | typedef struct mdk_rdev_s mdk_rdev_t; |
79 | 36 | ||
@@ -138,14 +95,16 @@ struct mdk_rdev_s | |||
138 | atomic_t read_errors; /* number of consecutive read errors that | 95 | atomic_t read_errors; /* number of consecutive read errors that |
139 | * we have tried to ignore. | 96 | * we have tried to ignore. |
140 | */ | 97 | */ |
98 | atomic_t corrected_errors; /* number of corrected read errors, | ||
99 | * for reporting to userspace and storing | ||
100 | * in superblock. | ||
101 | */ | ||
141 | }; | 102 | }; |
142 | 103 | ||
143 | typedef struct mdk_personality_s mdk_personality_t; | ||
144 | |||
145 | struct mddev_s | 104 | struct mddev_s |
146 | { | 105 | { |
147 | void *private; | 106 | void *private; |
148 | mdk_personality_t *pers; | 107 | struct mdk_personality *pers; |
149 | dev_t unit; | 108 | dev_t unit; |
150 | int md_minor; | 109 | int md_minor; |
151 | struct list_head disks; | 110 | struct list_head disks; |
@@ -164,6 +123,7 @@ struct mddev_s | |||
164 | int chunk_size; | 123 | int chunk_size; |
165 | time_t ctime, utime; | 124 | time_t ctime, utime; |
166 | int level, layout; | 125 | int level, layout; |
126 | char clevel[16]; | ||
167 | int raid_disks; | 127 | int raid_disks; |
168 | int max_disks; | 128 | int max_disks; |
169 | sector_t size; /* used size of component devices */ | 129 | sector_t size; /* used size of component devices */ |
@@ -183,6 +143,11 @@ struct mddev_s | |||
183 | sector_t resync_mismatches; /* count of sectors where | 143 | sector_t resync_mismatches; /* count of sectors where |
184 | * parity/replica mismatch found | 144 | * parity/replica mismatch found |
185 | */ | 145 | */ |
146 | /* if zero, use the system-wide default */ | ||
147 | int sync_speed_min; | ||
148 | int sync_speed_max; | ||
149 | |||
150 | int ok_start_degraded; | ||
186 | /* recovery/resync flags | 151 | /* recovery/resync flags |
187 | * NEEDED: we might need to start a resync/recover | 152 | * NEEDED: we might need to start a resync/recover |
188 | * RUNNING: a thread is running, or about to be started | 153 | * RUNNING: a thread is running, or about to be started |
@@ -265,9 +230,11 @@ static inline void md_sync_acct(struct block_device *bdev, unsigned long nr_sect | |||
265 | atomic_add(nr_sectors, &bdev->bd_contains->bd_disk->sync_io); | 230 | atomic_add(nr_sectors, &bdev->bd_contains->bd_disk->sync_io); |
266 | } | 231 | } |
267 | 232 | ||
268 | struct mdk_personality_s | 233 | struct mdk_personality |
269 | { | 234 | { |
270 | char *name; | 235 | char *name; |
236 | int level; | ||
237 | struct list_head list; | ||
271 | struct module *owner; | 238 | struct module *owner; |
272 | int (*make_request)(request_queue_t *q, struct bio *bio); | 239 | int (*make_request)(request_queue_t *q, struct bio *bio); |
273 | int (*run)(mddev_t *mddev); | 240 | int (*run)(mddev_t *mddev); |
@@ -305,8 +272,6 @@ static inline char * mdname (mddev_t * mddev) | |||
305 | return mddev->gendisk ? mddev->gendisk->disk_name : "mdX"; | 272 | return mddev->gendisk ? mddev->gendisk->disk_name : "mdX"; |
306 | } | 273 | } |
307 | 274 | ||
308 | extern mdk_rdev_t * find_rdev_nr(mddev_t *mddev, int nr); | ||
309 | |||
310 | /* | 275 | /* |
311 | * iterates through some rdev ringlist. It's safe to remove the | 276 | * iterates through some rdev ringlist. It's safe to remove the |
312 | * current 'rdev'. Dont touch 'tmp' though. | 277 | * current 'rdev'. Dont touch 'tmp' though. |
@@ -366,5 +331,10 @@ do { \ | |||
366 | __wait_event_lock_irq(wq, condition, lock, cmd); \ | 331 | __wait_event_lock_irq(wq, condition, lock, cmd); \ |
367 | } while (0) | 332 | } while (0) |
368 | 333 | ||
334 | static inline void safe_put_page(struct page *p) | ||
335 | { | ||
336 | if (p) put_page(p); | ||
337 | } | ||
338 | |||
369 | #endif | 339 | #endif |
370 | 340 | ||
diff --git a/include/linux/raid/raid1.h b/include/linux/raid/raid1.h index 292b98f2b408..9d5494aaac0f 100644 --- a/include/linux/raid/raid1.h +++ b/include/linux/raid/raid1.h | |||
@@ -45,6 +45,8 @@ struct r1_private_data_s { | |||
45 | 45 | ||
46 | spinlock_t resync_lock; | 46 | spinlock_t resync_lock; |
47 | int nr_pending; | 47 | int nr_pending; |
48 | int nr_waiting; | ||
49 | int nr_queued; | ||
48 | int barrier; | 50 | int barrier; |
49 | sector_t next_resync; | 51 | sector_t next_resync; |
50 | int fullsync; /* set to 1 if a full sync is needed, | 52 | int fullsync; /* set to 1 if a full sync is needed, |
@@ -52,11 +54,12 @@ struct r1_private_data_s { | |||
52 | * Cleared when a sync completes. | 54 | * Cleared when a sync completes. |
53 | */ | 55 | */ |
54 | 56 | ||
55 | wait_queue_head_t wait_idle; | 57 | wait_queue_head_t wait_barrier; |
56 | wait_queue_head_t wait_resume; | ||
57 | 58 | ||
58 | struct pool_info *poolinfo; | 59 | struct pool_info *poolinfo; |
59 | 60 | ||
61 | struct page *tmppage; | ||
62 | |||
60 | mempool_t *r1bio_pool; | 63 | mempool_t *r1bio_pool; |
61 | mempool_t *r1buf_pool; | 64 | mempool_t *r1buf_pool; |
62 | }; | 65 | }; |
@@ -106,6 +109,13 @@ struct r1bio_s { | |||
106 | /* DO NOT PUT ANY NEW FIELDS HERE - bios array is contiguously alloced*/ | 109 | /* DO NOT PUT ANY NEW FIELDS HERE - bios array is contiguously alloced*/ |
107 | }; | 110 | }; |
108 | 111 | ||
112 | /* when we get a read error on a read-only array, we redirect to another | ||
113 | * device without failing the first device, or trying to over-write to | ||
114 | * correct the read error. To keep track of bad blocks on a per-bio | ||
115 | * level, we store IO_BLOCKED in the appropriate 'bios' pointer | ||
116 | */ | ||
117 | #define IO_BLOCKED ((struct bio*)1) | ||
118 | |||
109 | /* bits for r1bio.state */ | 119 | /* bits for r1bio.state */ |
110 | #define R1BIO_Uptodate 0 | 120 | #define R1BIO_Uptodate 0 |
111 | #define R1BIO_IsSync 1 | 121 | #define R1BIO_IsSync 1 |
diff --git a/include/linux/raid/raid10.h b/include/linux/raid/raid10.h index 60708789c8f9..b1103298a8c2 100644 --- a/include/linux/raid/raid10.h +++ b/include/linux/raid/raid10.h | |||
@@ -35,18 +35,26 @@ struct r10_private_data_s { | |||
35 | sector_t chunk_mask; | 35 | sector_t chunk_mask; |
36 | 36 | ||
37 | struct list_head retry_list; | 37 | struct list_head retry_list; |
38 | /* for use when syncing mirrors: */ | 38 | /* queue pending writes and submit them on unplug */ |
39 | struct bio_list pending_bio_list; | ||
40 | |||
39 | 41 | ||
40 | spinlock_t resync_lock; | 42 | spinlock_t resync_lock; |
41 | int nr_pending; | 43 | int nr_pending; |
44 | int nr_waiting; | ||
45 | int nr_queued; | ||
42 | int barrier; | 46 | int barrier; |
43 | sector_t next_resync; | 47 | sector_t next_resync; |
48 | int fullsync; /* set to 1 if a full sync is needed, | ||
49 | * (fresh device added). | ||
50 | * Cleared when a sync completes. | ||
51 | */ | ||
44 | 52 | ||
45 | wait_queue_head_t wait_idle; | 53 | wait_queue_head_t wait_barrier; |
46 | wait_queue_head_t wait_resume; | ||
47 | 54 | ||
48 | mempool_t *r10bio_pool; | 55 | mempool_t *r10bio_pool; |
49 | mempool_t *r10buf_pool; | 56 | mempool_t *r10buf_pool; |
57 | struct page *tmppage; | ||
50 | }; | 58 | }; |
51 | 59 | ||
52 | typedef struct r10_private_data_s conf_t; | 60 | typedef struct r10_private_data_s conf_t; |
@@ -96,8 +104,16 @@ struct r10bio_s { | |||
96 | } devs[0]; | 104 | } devs[0]; |
97 | }; | 105 | }; |
98 | 106 | ||
107 | /* when we get a read error on a read-only array, we redirect to another | ||
108 | * device without failing the first device, or trying to over-write to | ||
109 | * correct the read error. To keep track of bad blocks on a per-bio | ||
110 | * level, we store IO_BLOCKED in the appropriate 'bios' pointer | ||
111 | */ | ||
112 | #define IO_BLOCKED ((struct bio*)1) | ||
113 | |||
99 | /* bits for r10bio.state */ | 114 | /* bits for r10bio.state */ |
100 | #define R10BIO_Uptodate 0 | 115 | #define R10BIO_Uptodate 0 |
101 | #define R10BIO_IsSync 1 | 116 | #define R10BIO_IsSync 1 |
102 | #define R10BIO_IsRecover 2 | 117 | #define R10BIO_IsRecover 2 |
118 | #define R10BIO_Degraded 3 | ||
103 | #endif | 119 | #endif |
diff --git a/include/linux/raid/raid5.h b/include/linux/raid/raid5.h index f025ba6fb14c..394da8207b34 100644 --- a/include/linux/raid/raid5.h +++ b/include/linux/raid/raid5.h | |||
@@ -126,7 +126,7 @@ | |||
126 | */ | 126 | */ |
127 | 127 | ||
128 | struct stripe_head { | 128 | struct stripe_head { |
129 | struct stripe_head *hash_next, **hash_pprev; /* hash pointers */ | 129 | struct hlist_node hash; |
130 | struct list_head lru; /* inactive_list or handle_list */ | 130 | struct list_head lru; /* inactive_list or handle_list */ |
131 | struct raid5_private_data *raid_conf; | 131 | struct raid5_private_data *raid_conf; |
132 | sector_t sector; /* sector of this row */ | 132 | sector_t sector; /* sector of this row */ |
@@ -152,7 +152,6 @@ struct stripe_head { | |||
152 | #define R5_Insync 3 /* rdev && rdev->in_sync at start */ | 152 | #define R5_Insync 3 /* rdev && rdev->in_sync at start */ |
153 | #define R5_Wantread 4 /* want to schedule a read */ | 153 | #define R5_Wantread 4 /* want to schedule a read */ |
154 | #define R5_Wantwrite 5 | 154 | #define R5_Wantwrite 5 |
155 | #define R5_Syncio 6 /* this io need to be accounted as resync io */ | ||
156 | #define R5_Overlap 7 /* There is a pending overlapping request on this block */ | 155 | #define R5_Overlap 7 /* There is a pending overlapping request on this block */ |
157 | #define R5_ReadError 8 /* seen a read error here recently */ | 156 | #define R5_ReadError 8 /* seen a read error here recently */ |
158 | #define R5_ReWrite 9 /* have tried to over-write the readerror */ | 157 | #define R5_ReWrite 9 /* have tried to over-write the readerror */ |
@@ -205,7 +204,7 @@ struct disk_info { | |||
205 | }; | 204 | }; |
206 | 205 | ||
207 | struct raid5_private_data { | 206 | struct raid5_private_data { |
208 | struct stripe_head **stripe_hashtbl; | 207 | struct hlist_head *stripe_hashtbl; |
209 | mddev_t *mddev; | 208 | mddev_t *mddev; |
210 | struct disk_info *spare; | 209 | struct disk_info *spare; |
211 | int chunk_size, level, algorithm; | 210 | int chunk_size, level, algorithm; |
@@ -228,6 +227,8 @@ struct raid5_private_data { | |||
228 | * Cleared when a sync completes. | 227 | * Cleared when a sync completes. |
229 | */ | 228 | */ |
230 | 229 | ||
230 | struct page *spare_page; /* Used when checking P/Q in raid6 */ | ||
231 | |||
231 | /* | 232 | /* |
232 | * Free stripes pool | 233 | * Free stripes pool |
233 | */ | 234 | */ |
diff --git a/include/linux/ramfs.h b/include/linux/ramfs.h index e0a4faa9610c..953b6df5d037 100644 --- a/include/linux/ramfs.h +++ b/include/linux/ramfs.h | |||
@@ -5,6 +5,16 @@ struct inode *ramfs_get_inode(struct super_block *sb, int mode, dev_t dev); | |||
5 | struct super_block *ramfs_get_sb(struct file_system_type *fs_type, | 5 | struct super_block *ramfs_get_sb(struct file_system_type *fs_type, |
6 | int flags, const char *dev_name, void *data); | 6 | int flags, const char *dev_name, void *data); |
7 | 7 | ||
8 | #ifndef CONFIG_MMU | ||
9 | extern unsigned long ramfs_nommu_get_unmapped_area(struct file *file, | ||
10 | unsigned long addr, | ||
11 | unsigned long len, | ||
12 | unsigned long pgoff, | ||
13 | unsigned long flags); | ||
14 | |||
15 | extern int ramfs_nommu_mmap(struct file *file, struct vm_area_struct *vma); | ||
16 | #endif | ||
17 | |||
8 | extern struct file_operations ramfs_file_operations; | 18 | extern struct file_operations ramfs_file_operations; |
9 | extern struct vm_operations_struct generic_file_vm_ops; | 19 | extern struct vm_operations_struct generic_file_vm_ops; |
10 | 20 | ||
diff --git a/include/linux/random.h b/include/linux/random.h index 7b2adb3322d5..5d6456bcdeba 100644 --- a/include/linux/random.h +++ b/include/linux/random.h | |||
@@ -52,9 +52,9 @@ extern void get_random_bytes(void *buf, int nbytes); | |||
52 | void generate_random_uuid(unsigned char uuid_out[16]); | 52 | void generate_random_uuid(unsigned char uuid_out[16]); |
53 | 53 | ||
54 | extern __u32 secure_ip_id(__u32 daddr); | 54 | extern __u32 secure_ip_id(__u32 daddr); |
55 | extern u32 secure_tcp_port_ephemeral(__u32 saddr, __u32 daddr, __u16 dport); | 55 | extern u32 secure_ipv4_port_ephemeral(__u32 saddr, __u32 daddr, __u16 dport); |
56 | extern u32 secure_tcpv6_port_ephemeral(const __u32 *saddr, const __u32 *daddr, | 56 | extern u32 secure_ipv6_port_ephemeral(const __u32 *saddr, const __u32 *daddr, |
57 | __u16 dport); | 57 | __u16 dport); |
58 | extern __u32 secure_tcp_sequence_number(__u32 saddr, __u32 daddr, | 58 | extern __u32 secure_tcp_sequence_number(__u32 saddr, __u32 daddr, |
59 | __u16 sport, __u16 dport); | 59 | __u16 sport, __u16 dport); |
60 | extern __u32 secure_tcpv6_sequence_number(__u32 *saddr, __u32 *daddr, | 60 | extern __u32 secure_tcpv6_sequence_number(__u32 *saddr, __u32 *daddr, |
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index cce25591eec2..51747cd88d1a 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
@@ -65,7 +65,7 @@ struct rcu_ctrlblk { | |||
65 | long cur; /* Current batch number. */ | 65 | long cur; /* Current batch number. */ |
66 | long completed; /* Number of the last completed batch */ | 66 | long completed; /* Number of the last completed batch */ |
67 | int next_pending; /* Is the next batch already waiting? */ | 67 | int next_pending; /* Is the next batch already waiting? */ |
68 | } ____cacheline_maxaligned_in_smp; | 68 | } ____cacheline_internodealigned_in_smp; |
69 | 69 | ||
70 | /* Is batch a before batch b ? */ | 70 | /* Is batch a before batch b ? */ |
71 | static inline int rcu_batch_before(long a, long b) | 71 | static inline int rcu_batch_before(long a, long b) |
@@ -100,6 +100,7 @@ struct rcu_data { | |||
100 | struct rcu_head *donelist; | 100 | struct rcu_head *donelist; |
101 | struct rcu_head **donetail; | 101 | struct rcu_head **donetail; |
102 | int cpu; | 102 | int cpu; |
103 | struct rcu_head barrier; | ||
103 | }; | 104 | }; |
104 | 105 | ||
105 | DECLARE_PER_CPU(struct rcu_data, rcu_data); | 106 | DECLARE_PER_CPU(struct rcu_data, rcu_data); |
@@ -285,6 +286,7 @@ extern void FASTCALL(call_rcu_bh(struct rcu_head *head, | |||
285 | extern __deprecated_for_modules void synchronize_kernel(void); | 286 | extern __deprecated_for_modules void synchronize_kernel(void); |
286 | extern void synchronize_rcu(void); | 287 | extern void synchronize_rcu(void); |
287 | void synchronize_idle(void); | 288 | void synchronize_idle(void); |
289 | extern void rcu_barrier(void); | ||
288 | 290 | ||
289 | #endif /* __KERNEL__ */ | 291 | #endif /* __KERNEL__ */ |
290 | #endif /* __LINUX_RCUPDATE_H */ | 292 | #endif /* __LINUX_RCUPDATE_H */ |
diff --git a/include/linux/rcuref.h b/include/linux/rcuref.h deleted file mode 100644 index e1adbba14b67..000000000000 --- a/include/linux/rcuref.h +++ /dev/null | |||
@@ -1,220 +0,0 @@ | |||
1 | /* | ||
2 | * rcuref.h | ||
3 | * | ||
4 | * Reference counting for elements of lists/arrays protected by | ||
5 | * RCU. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
20 | * | ||
21 | * Copyright (C) IBM Corporation, 2005 | ||
22 | * | ||
23 | * Author: Dipankar Sarma <dipankar@in.ibm.com> | ||
24 | * Ravikiran Thirumalai <kiran_th@gmail.com> | ||
25 | * | ||
26 | * See Documentation/RCU/rcuref.txt for detailed user guide. | ||
27 | * | ||
28 | */ | ||
29 | |||
30 | #ifndef _RCUREF_H_ | ||
31 | #define _RCUREF_H_ | ||
32 | |||
33 | #ifdef __KERNEL__ | ||
34 | |||
35 | #include <linux/types.h> | ||
36 | #include <linux/interrupt.h> | ||
37 | #include <linux/spinlock.h> | ||
38 | #include <asm/atomic.h> | ||
39 | |||
40 | /* | ||
41 | * These APIs work on traditional atomic_t counters used in the | ||
42 | * kernel for reference counting. Under special circumstances | ||
43 | * where a lock-free get() operation races with a put() operation | ||
44 | * these APIs can be used. See Documentation/RCU/rcuref.txt. | ||
45 | */ | ||
46 | |||
47 | #ifdef __HAVE_ARCH_CMPXCHG | ||
48 | |||
49 | /** | ||
50 | * rcuref_inc - increment refcount for object. | ||
51 | * @rcuref: reference counter in the object in question. | ||
52 | * | ||
53 | * This should be used only for objects where we use RCU and | ||
54 | * use the rcuref_inc_lf() api to acquire a reference | ||
55 | * in a lock-free reader-side critical section. | ||
56 | */ | ||
57 | static inline void rcuref_inc(atomic_t *rcuref) | ||
58 | { | ||
59 | atomic_inc(rcuref); | ||
60 | } | ||
61 | |||
62 | /** | ||
63 | * rcuref_dec - decrement refcount for object. | ||
64 | * @rcuref: reference counter in the object in question. | ||
65 | * | ||
66 | * This should be used only for objects where we use RCU and | ||
67 | * use the rcuref_inc_lf() api to acquire a reference | ||
68 | * in a lock-free reader-side critical section. | ||
69 | */ | ||
70 | static inline void rcuref_dec(atomic_t *rcuref) | ||
71 | { | ||
72 | atomic_dec(rcuref); | ||
73 | } | ||
74 | |||
75 | /** | ||
76 | * rcuref_dec_and_test - decrement refcount for object and test | ||
77 | * @rcuref: reference counter in the object. | ||
78 | * @release: pointer to the function that will clean up the object | ||
79 | * when the last reference to the object is released. | ||
80 | * This pointer is required. | ||
81 | * | ||
82 | * Decrement the refcount, and if 0, return 1. Else return 0. | ||
83 | * | ||
84 | * This should be used only for objects where we use RCU and | ||
85 | * use the rcuref_inc_lf() api to acquire a reference | ||
86 | * in a lock-free reader-side critical section. | ||
87 | */ | ||
88 | static inline int rcuref_dec_and_test(atomic_t *rcuref) | ||
89 | { | ||
90 | return atomic_dec_and_test(rcuref); | ||
91 | } | ||
92 | |||
93 | /* | ||
94 | * cmpxchg is needed on UP too, if deletions to the list/array can happen | ||
95 | * in interrupt context. | ||
96 | */ | ||
97 | |||
98 | /** | ||
99 | * rcuref_inc_lf - Take reference to an object in a read-side | ||
100 | * critical section protected by RCU. | ||
101 | * @rcuref: reference counter in the object in question. | ||
102 | * | ||
103 | * Try and increment the refcount by 1. The increment might fail if | ||
104 | * the reference counter has been through a 1 to 0 transition and | ||
105 | * is no longer part of the lock-free list. | ||
106 | * Returns non-zero on successful increment and zero otherwise. | ||
107 | */ | ||
108 | static inline int rcuref_inc_lf(atomic_t *rcuref) | ||
109 | { | ||
110 | int c, old; | ||
111 | c = atomic_read(rcuref); | ||
112 | while (c && (old = cmpxchg(&rcuref->counter, c, c + 1)) != c) | ||
113 | c = old; | ||
114 | return c; | ||
115 | } | ||
116 | |||
117 | #else /* !__HAVE_ARCH_CMPXCHG */ | ||
118 | |||
119 | extern spinlock_t __rcuref_hash[]; | ||
120 | |||
121 | /* | ||
122 | * Use a hash table of locks to protect the reference count | ||
123 | * since cmpxchg is not available in this arch. | ||
124 | */ | ||
125 | #ifdef CONFIG_SMP | ||
126 | #define RCUREF_HASH_SIZE 4 | ||
127 | #define RCUREF_HASH(k) \ | ||
128 | (&__rcuref_hash[(((unsigned long)k)>>8) & (RCUREF_HASH_SIZE-1)]) | ||
129 | #else | ||
130 | #define RCUREF_HASH_SIZE 1 | ||
131 | #define RCUREF_HASH(k) &__rcuref_hash[0] | ||
132 | #endif /* CONFIG_SMP */ | ||
133 | |||
134 | /** | ||
135 | * rcuref_inc - increment refcount for object. | ||
136 | * @rcuref: reference counter in the object in question. | ||
137 | * | ||
138 | * This should be used only for objects where we use RCU and | ||
139 | * use the rcuref_inc_lf() api to acquire a reference in a lock-free | ||
140 | * reader-side critical section. | ||
141 | */ | ||
142 | static inline void rcuref_inc(atomic_t *rcuref) | ||
143 | { | ||
144 | unsigned long flags; | ||
145 | spin_lock_irqsave(RCUREF_HASH(rcuref), flags); | ||
146 | rcuref->counter += 1; | ||
147 | spin_unlock_irqrestore(RCUREF_HASH(rcuref), flags); | ||
148 | } | ||
149 | |||
150 | /** | ||
151 | * rcuref_dec - decrement refcount for object. | ||
152 | * @rcuref: reference counter in the object in question. | ||
153 | * | ||
154 | * This should be used only for objects where we use RCU and | ||
155 | * use the rcuref_inc_lf() api to acquire a reference in a lock-free | ||
156 | * reader-side critical section. | ||
157 | */ | ||
158 | static inline void rcuref_dec(atomic_t *rcuref) | ||
159 | { | ||
160 | unsigned long flags; | ||
161 | spin_lock_irqsave(RCUREF_HASH(rcuref), flags); | ||
162 | rcuref->counter -= 1; | ||
163 | spin_unlock_irqrestore(RCUREF_HASH(rcuref), flags); | ||
164 | } | ||
165 | |||
166 | /** | ||
167 | * rcuref_dec_and_test - decrement refcount for object and test | ||
168 | * @rcuref: reference counter in the object. | ||
169 | * @release: pointer to the function that will clean up the object | ||
170 | * when the last reference to the object is released. | ||
171 | * This pointer is required. | ||
172 | * | ||
173 | * Decrement the refcount, and if 0, return 1. Else return 0. | ||
174 | * | ||
175 | * This should be used only for objects where we use RCU and | ||
176 | * use the rcuref_inc_lf() api to acquire a reference in a lock-free | ||
177 | * reader-side critical section. | ||
178 | */ | ||
179 | static inline int rcuref_dec_and_test(atomic_t *rcuref) | ||
180 | { | ||
181 | unsigned long flags; | ||
182 | spin_lock_irqsave(RCUREF_HASH(rcuref), flags); | ||
183 | rcuref->counter--; | ||
184 | if (!rcuref->counter) { | ||
185 | spin_unlock_irqrestore(RCUREF_HASH(rcuref), flags); | ||
186 | return 1; | ||
187 | } else { | ||
188 | spin_unlock_irqrestore(RCUREF_HASH(rcuref), flags); | ||
189 | return 0; | ||
190 | } | ||
191 | } | ||
192 | |||
193 | /** | ||
194 | * rcuref_inc_lf - Take reference to an object of a lock-free collection | ||
195 | * by traversing a lock-free list/array. | ||
196 | * @rcuref: reference counter in the object in question. | ||
197 | * | ||
198 | * Try and increment the refcount by 1. The increment might fail if | ||
199 | * the reference counter has been through a 1 to 0 transition and | ||
200 | * object is no longer part of the lock-free list. | ||
201 | * Returns non-zero on successful increment and zero otherwise. | ||
202 | */ | ||
203 | static inline int rcuref_inc_lf(atomic_t *rcuref) | ||
204 | { | ||
205 | int ret; | ||
206 | unsigned long flags; | ||
207 | spin_lock_irqsave(RCUREF_HASH(rcuref), flags); | ||
208 | if (rcuref->counter) | ||
209 | ret = rcuref->counter++; | ||
210 | else | ||
211 | ret = 0; | ||
212 | spin_unlock_irqrestore(RCUREF_HASH(rcuref), flags); | ||
213 | return ret; | ||
214 | } | ||
215 | |||
216 | |||
217 | #endif /* !__HAVE_ARCH_CMPXCHG */ | ||
218 | |||
219 | #endif /* __KERNEL__ */ | ||
220 | #endif /* _RCUREF_H_ */ | ||
diff --git a/include/linux/relayfs_fs.h b/include/linux/relayfs_fs.h index cfafc3e76bc2..7342e66247fb 100644 --- a/include/linux/relayfs_fs.h +++ b/include/linux/relayfs_fs.h | |||
@@ -20,9 +20,9 @@ | |||
20 | #include <linux/kref.h> | 20 | #include <linux/kref.h> |
21 | 21 | ||
22 | /* | 22 | /* |
23 | * Tracks changes to rchan_buf struct | 23 | * Tracks changes to rchan/rchan_buf structs |
24 | */ | 24 | */ |
25 | #define RELAYFS_CHANNEL_VERSION 5 | 25 | #define RELAYFS_CHANNEL_VERSION 6 |
26 | 26 | ||
27 | /* | 27 | /* |
28 | * Per-cpu relay channel buffer | 28 | * Per-cpu relay channel buffer |
@@ -60,24 +60,11 @@ struct rchan | |||
60 | struct rchan_callbacks *cb; /* client callbacks */ | 60 | struct rchan_callbacks *cb; /* client callbacks */ |
61 | struct kref kref; /* channel refcount */ | 61 | struct kref kref; /* channel refcount */ |
62 | void *private_data; /* for user-defined data */ | 62 | void *private_data; /* for user-defined data */ |
63 | size_t last_toobig; /* tried to log event > subbuf size */ | ||
63 | struct rchan_buf *buf[NR_CPUS]; /* per-cpu channel buffers */ | 64 | struct rchan_buf *buf[NR_CPUS]; /* per-cpu channel buffers */ |
64 | }; | 65 | }; |
65 | 66 | ||
66 | /* | 67 | /* |
67 | * Relayfs inode | ||
68 | */ | ||
69 | struct relayfs_inode_info | ||
70 | { | ||
71 | struct inode vfs_inode; | ||
72 | struct rchan_buf *buf; | ||
73 | }; | ||
74 | |||
75 | static inline struct relayfs_inode_info *RELAYFS_I(struct inode *inode) | ||
76 | { | ||
77 | return container_of(inode, struct relayfs_inode_info, vfs_inode); | ||
78 | } | ||
79 | |||
80 | /* | ||
81 | * Relay channel client callbacks | 68 | * Relay channel client callbacks |
82 | */ | 69 | */ |
83 | struct rchan_callbacks | 70 | struct rchan_callbacks |
@@ -123,6 +110,46 @@ struct rchan_callbacks | |||
123 | */ | 110 | */ |
124 | void (*buf_unmapped)(struct rchan_buf *buf, | 111 | void (*buf_unmapped)(struct rchan_buf *buf, |
125 | struct file *filp); | 112 | struct file *filp); |
113 | /* | ||
114 | * create_buf_file - create file to represent a relayfs channel buffer | ||
115 | * @filename: the name of the file to create | ||
116 | * @parent: the parent of the file to create | ||
117 | * @mode: the mode of the file to create | ||
118 | * @buf: the channel buffer | ||
119 | * @is_global: outparam - set non-zero if the buffer should be global | ||
120 | * | ||
121 | * Called during relay_open(), once for each per-cpu buffer, | ||
122 | * to allow the client to create a file to be used to | ||
123 | * represent the corresponding channel buffer. If the file is | ||
124 | * created outside of relayfs, the parent must also exist in | ||
125 | * that filesystem. | ||
126 | * | ||
127 | * The callback should return the dentry of the file created | ||
128 | * to represent the relay buffer. | ||
129 | * | ||
130 | * Setting the is_global outparam to a non-zero value will | ||
131 | * cause relay_open() to create a single global buffer rather | ||
132 | * than the default set of per-cpu buffers. | ||
133 | * | ||
134 | * See Documentation/filesystems/relayfs.txt for more info. | ||
135 | */ | ||
136 | struct dentry *(*create_buf_file)(const char *filename, | ||
137 | struct dentry *parent, | ||
138 | int mode, | ||
139 | struct rchan_buf *buf, | ||
140 | int *is_global); | ||
141 | |||
142 | /* | ||
143 | * remove_buf_file - remove file representing a relayfs channel buffer | ||
144 | * @dentry: the dentry of the file to remove | ||
145 | * | ||
146 | * Called during relay_close(), once for each per-cpu buffer, | ||
147 | * to allow the client to remove a file used to represent a | ||
148 | * channel buffer. | ||
149 | * | ||
150 | * The callback should return 0 if successful, negative if not. | ||
151 | */ | ||
152 | int (*remove_buf_file)(struct dentry *dentry); | ||
126 | }; | 153 | }; |
127 | 154 | ||
128 | /* | 155 | /* |
@@ -147,6 +174,12 @@ extern size_t relay_switch_subbuf(struct rchan_buf *buf, | |||
147 | extern struct dentry *relayfs_create_dir(const char *name, | 174 | extern struct dentry *relayfs_create_dir(const char *name, |
148 | struct dentry *parent); | 175 | struct dentry *parent); |
149 | extern int relayfs_remove_dir(struct dentry *dentry); | 176 | extern int relayfs_remove_dir(struct dentry *dentry); |
177 | extern struct dentry *relayfs_create_file(const char *name, | ||
178 | struct dentry *parent, | ||
179 | int mode, | ||
180 | struct file_operations *fops, | ||
181 | void *data); | ||
182 | extern int relayfs_remove_file(struct dentry *dentry); | ||
150 | 183 | ||
151 | /** | 184 | /** |
152 | * relay_write - write data into the channel | 185 | * relay_write - write data into the channel |
@@ -246,10 +279,9 @@ static inline void subbuf_start_reserve(struct rchan_buf *buf, | |||
246 | } | 279 | } |
247 | 280 | ||
248 | /* | 281 | /* |
249 | * exported relayfs file operations, fs/relayfs/inode.c | 282 | * exported relay file operations, fs/relayfs/inode.c |
250 | */ | 283 | */ |
251 | 284 | extern struct file_operations relay_file_operations; | |
252 | extern struct file_operations relayfs_file_operations; | ||
253 | 285 | ||
254 | #endif /* _LINUX_RELAYFS_FS_H */ | 286 | #endif /* _LINUX_RELAYFS_FS_H */ |
255 | 287 | ||
diff --git a/include/linux/rio_drv.h b/include/linux/rio_drv.h index 3bd7cce19e26..157d7e3236b5 100644 --- a/include/linux/rio_drv.h +++ b/include/linux/rio_drv.h | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/list.h> | 21 | #include <linux/list.h> |
22 | #include <linux/errno.h> | 22 | #include <linux/errno.h> |
23 | #include <linux/device.h> | 23 | #include <linux/device.h> |
24 | #include <linux/string.h> | ||
24 | #include <linux/rio.h> | 25 | #include <linux/rio.h> |
25 | 26 | ||
26 | extern int __rio_local_read_config_32(struct rio_mport *port, u32 offset, | 27 | extern int __rio_local_read_config_32(struct rio_mport *port, u32 offset, |
diff --git a/include/linux/rmap.h b/include/linux/rmap.h index 35b30e6c8cf8..9d6fbeef2104 100644 --- a/include/linux/rmap.h +++ b/include/linux/rmap.h | |||
@@ -71,6 +71,7 @@ void __anon_vma_link(struct vm_area_struct *); | |||
71 | * rmap interfaces called when adding or removing pte of page | 71 | * rmap interfaces called when adding or removing pte of page |
72 | */ | 72 | */ |
73 | void page_add_anon_rmap(struct page *, struct vm_area_struct *, unsigned long); | 73 | void page_add_anon_rmap(struct page *, struct vm_area_struct *, unsigned long); |
74 | void page_add_new_anon_rmap(struct page *, struct vm_area_struct *, unsigned long); | ||
74 | void page_add_file_rmap(struct page *); | 75 | void page_add_file_rmap(struct page *); |
75 | void page_remove_rmap(struct page *); | 76 | void page_remove_rmap(struct page *); |
76 | 77 | ||
@@ -89,7 +90,7 @@ static inline void page_dup_rmap(struct page *page) | |||
89 | /* | 90 | /* |
90 | * Called from mm/vmscan.c to handle paging out | 91 | * Called from mm/vmscan.c to handle paging out |
91 | */ | 92 | */ |
92 | int page_referenced(struct page *, int is_locked, int ignore_token); | 93 | int page_referenced(struct page *, int is_locked); |
93 | int try_to_unmap(struct page *); | 94 | int try_to_unmap(struct page *); |
94 | 95 | ||
95 | /* | 96 | /* |
@@ -109,7 +110,7 @@ unsigned long page_address_in_vma(struct page *, struct vm_area_struct *); | |||
109 | #define anon_vma_prepare(vma) (0) | 110 | #define anon_vma_prepare(vma) (0) |
110 | #define anon_vma_link(vma) do {} while (0) | 111 | #define anon_vma_link(vma) do {} while (0) |
111 | 112 | ||
112 | #define page_referenced(page,l,i) TestClearPageReferenced(page) | 113 | #define page_referenced(page,l) TestClearPageReferenced(page) |
113 | #define try_to_unmap(page) SWAP_FAIL | 114 | #define try_to_unmap(page) SWAP_FAIL |
114 | 115 | ||
115 | #endif /* CONFIG_MMU */ | 116 | #endif /* CONFIG_MMU */ |
diff --git a/include/linux/rtc.h b/include/linux/rtc.h index e1aaf1fac8e0..0b2ba67ff13c 100644 --- a/include/linux/rtc.h +++ b/include/linux/rtc.h | |||
@@ -11,6 +11,8 @@ | |||
11 | #ifndef _LINUX_RTC_H_ | 11 | #ifndef _LINUX_RTC_H_ |
12 | #define _LINUX_RTC_H_ | 12 | #define _LINUX_RTC_H_ |
13 | 13 | ||
14 | #include <linux/interrupt.h> | ||
15 | |||
14 | /* | 16 | /* |
15 | * The struct used to pass data via the following ioctl. Similar to the | 17 | * The struct used to pass data via the following ioctl. Similar to the |
16 | * struct tm in <time.h>, but it needs to be here so that the kernel | 18 | * struct tm in <time.h>, but it needs to be here so that the kernel |
@@ -102,6 +104,7 @@ int rtc_register(rtc_task_t *task); | |||
102 | int rtc_unregister(rtc_task_t *task); | 104 | int rtc_unregister(rtc_task_t *task); |
103 | int rtc_control(rtc_task_t *t, unsigned int cmd, unsigned long arg); | 105 | int rtc_control(rtc_task_t *t, unsigned int cmd, unsigned long arg); |
104 | void rtc_get_rtc_time(struct rtc_time *rtc_tm); | 106 | void rtc_get_rtc_time(struct rtc_time *rtc_tm); |
107 | irqreturn_t rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs); | ||
105 | 108 | ||
106 | #endif /* __KERNEL__ */ | 109 | #endif /* __KERNEL__ */ |
107 | 110 | ||
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h index c231e9a08f0b..d50482ba27fe 100644 --- a/include/linux/rtnetlink.h +++ b/include/linux/rtnetlink.h | |||
@@ -866,6 +866,7 @@ enum rtnetlink_groups { | |||
866 | #define RTNLGRP_IPV4_MROUTE RTNLGRP_IPV4_MROUTE | 866 | #define RTNLGRP_IPV4_MROUTE RTNLGRP_IPV4_MROUTE |
867 | RTNLGRP_IPV4_ROUTE, | 867 | RTNLGRP_IPV4_ROUTE, |
868 | #define RTNLGRP_IPV4_ROUTE RTNLGRP_IPV4_ROUTE | 868 | #define RTNLGRP_IPV4_ROUTE RTNLGRP_IPV4_ROUTE |
869 | RTNLGRP_NOP1, | ||
869 | RTNLGRP_IPV6_IFADDR, | 870 | RTNLGRP_IPV6_IFADDR, |
870 | #define RTNLGRP_IPV6_IFADDR RTNLGRP_IPV6_IFADDR | 871 | #define RTNLGRP_IPV6_IFADDR RTNLGRP_IPV6_IFADDR |
871 | RTNLGRP_IPV6_MROUTE, | 872 | RTNLGRP_IPV6_MROUTE, |
@@ -876,8 +877,11 @@ enum rtnetlink_groups { | |||
876 | #define RTNLGRP_IPV6_IFINFO RTNLGRP_IPV6_IFINFO | 877 | #define RTNLGRP_IPV6_IFINFO RTNLGRP_IPV6_IFINFO |
877 | RTNLGRP_DECnet_IFADDR, | 878 | RTNLGRP_DECnet_IFADDR, |
878 | #define RTNLGRP_DECnet_IFADDR RTNLGRP_DECnet_IFADDR | 879 | #define RTNLGRP_DECnet_IFADDR RTNLGRP_DECnet_IFADDR |
880 | RTNLGRP_NOP2, | ||
879 | RTNLGRP_DECnet_ROUTE, | 881 | RTNLGRP_DECnet_ROUTE, |
880 | #define RTNLGRP_DECnet_ROUTE RTNLGRP_DECnet_ROUTE | 882 | #define RTNLGRP_DECnet_ROUTE RTNLGRP_DECnet_ROUTE |
883 | RTNLGRP_NOP3, | ||
884 | RTNLGRP_NOP4, | ||
881 | RTNLGRP_IPV6_PREFIX, | 885 | RTNLGRP_IPV6_PREFIX, |
882 | #define RTNLGRP_IPV6_PREFIX RTNLGRP_IPV6_PREFIX | 886 | #define RTNLGRP_IPV6_PREFIX RTNLGRP_IPV6_PREFIX |
883 | __RTNLGRP_MAX | 887 | __RTNLGRP_MAX |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 2038bd27b041..78eb92ae4d94 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -34,6 +34,7 @@ | |||
34 | #include <linux/percpu.h> | 34 | #include <linux/percpu.h> |
35 | #include <linux/topology.h> | 35 | #include <linux/topology.h> |
36 | #include <linux/seccomp.h> | 36 | #include <linux/seccomp.h> |
37 | #include <linux/rcupdate.h> | ||
37 | 38 | ||
38 | #include <linux/auxvec.h> /* For AT_VECTOR_SIZE */ | 39 | #include <linux/auxvec.h> /* For AT_VECTOR_SIZE */ |
39 | 40 | ||
@@ -254,25 +255,12 @@ extern void arch_unmap_area_topdown(struct mm_struct *, unsigned long); | |||
254 | * The mm counters are not protected by its page_table_lock, | 255 | * The mm counters are not protected by its page_table_lock, |
255 | * so must be incremented atomically. | 256 | * so must be incremented atomically. |
256 | */ | 257 | */ |
257 | #ifdef ATOMIC64_INIT | 258 | #define set_mm_counter(mm, member, value) atomic_long_set(&(mm)->_##member, value) |
258 | #define set_mm_counter(mm, member, value) atomic64_set(&(mm)->_##member, value) | 259 | #define get_mm_counter(mm, member) ((unsigned long)atomic_long_read(&(mm)->_##member)) |
259 | #define get_mm_counter(mm, member) ((unsigned long)atomic64_read(&(mm)->_##member)) | 260 | #define add_mm_counter(mm, member, value) atomic_long_add(value, &(mm)->_##member) |
260 | #define add_mm_counter(mm, member, value) atomic64_add(value, &(mm)->_##member) | 261 | #define inc_mm_counter(mm, member) atomic_long_inc(&(mm)->_##member) |
261 | #define inc_mm_counter(mm, member) atomic64_inc(&(mm)->_##member) | 262 | #define dec_mm_counter(mm, member) atomic_long_dec(&(mm)->_##member) |
262 | #define dec_mm_counter(mm, member) atomic64_dec(&(mm)->_##member) | 263 | typedef atomic_long_t mm_counter_t; |
263 | typedef atomic64_t mm_counter_t; | ||
264 | #else /* !ATOMIC64_INIT */ | ||
265 | /* | ||
266 | * The counters wrap back to 0 at 2^32 * PAGE_SIZE, | ||
267 | * that is, at 16TB if using 4kB page size. | ||
268 | */ | ||
269 | #define set_mm_counter(mm, member, value) atomic_set(&(mm)->_##member, value) | ||
270 | #define get_mm_counter(mm, member) ((unsigned long)atomic_read(&(mm)->_##member)) | ||
271 | #define add_mm_counter(mm, member, value) atomic_add(value, &(mm)->_##member) | ||
272 | #define inc_mm_counter(mm, member) atomic_inc(&(mm)->_##member) | ||
273 | #define dec_mm_counter(mm, member) atomic_dec(&(mm)->_##member) | ||
274 | typedef atomic_t mm_counter_t; | ||
275 | #endif /* !ATOMIC64_INIT */ | ||
276 | 264 | ||
277 | #else /* NR_CPUS < CONFIG_SPLIT_PTLOCK_CPUS */ | 265 | #else /* NR_CPUS < CONFIG_SPLIT_PTLOCK_CPUS */ |
278 | /* | 266 | /* |
@@ -363,8 +351,16 @@ struct sighand_struct { | |||
363 | atomic_t count; | 351 | atomic_t count; |
364 | struct k_sigaction action[_NSIG]; | 352 | struct k_sigaction action[_NSIG]; |
365 | spinlock_t siglock; | 353 | spinlock_t siglock; |
354 | struct rcu_head rcu; | ||
366 | }; | 355 | }; |
367 | 356 | ||
357 | extern void sighand_free_cb(struct rcu_head *rhp); | ||
358 | |||
359 | static inline void sighand_free(struct sighand_struct *sp) | ||
360 | { | ||
361 | call_rcu(&sp->rcu, sighand_free_cb); | ||
362 | } | ||
363 | |||
368 | /* | 364 | /* |
369 | * NOTE! "signal_struct" does not have it's own | 365 | * NOTE! "signal_struct" does not have it's own |
370 | * locking, because a shared signal_struct always | 366 | * locking, because a shared signal_struct always |
@@ -775,6 +771,7 @@ struct task_struct { | |||
775 | unsigned keep_capabilities:1; | 771 | unsigned keep_capabilities:1; |
776 | struct user_struct *user; | 772 | struct user_struct *user; |
777 | #ifdef CONFIG_KEYS | 773 | #ifdef CONFIG_KEYS |
774 | struct key *request_key_auth; /* assumed request_key authority */ | ||
778 | struct key *thread_keyring; /* keyring private to this thread */ | 775 | struct key *thread_keyring; /* keyring private to this thread */ |
779 | unsigned char jit_keyring; /* default keyring to attach requested keys to */ | 776 | unsigned char jit_keyring; /* default keyring to attach requested keys to */ |
780 | #endif | 777 | #endif |
@@ -857,6 +854,7 @@ struct task_struct { | |||
857 | int cpuset_mems_generation; | 854 | int cpuset_mems_generation; |
858 | #endif | 855 | #endif |
859 | atomic_t fs_excl; /* holding fs exclusive resources */ | 856 | atomic_t fs_excl; /* holding fs exclusive resources */ |
857 | struct rcu_head rcu; | ||
860 | }; | 858 | }; |
861 | 859 | ||
862 | static inline pid_t process_group(struct task_struct *tsk) | 860 | static inline pid_t process_group(struct task_struct *tsk) |
@@ -880,8 +878,14 @@ static inline int pid_alive(struct task_struct *p) | |||
880 | extern void free_task(struct task_struct *tsk); | 878 | extern void free_task(struct task_struct *tsk); |
881 | extern void __put_task_struct(struct task_struct *tsk); | 879 | extern void __put_task_struct(struct task_struct *tsk); |
882 | #define get_task_struct(tsk) do { atomic_inc(&(tsk)->usage); } while(0) | 880 | #define get_task_struct(tsk) do { atomic_inc(&(tsk)->usage); } while(0) |
883 | #define put_task_struct(tsk) \ | 881 | |
884 | do { if (atomic_dec_and_test(&(tsk)->usage)) __put_task_struct(tsk); } while(0) | 882 | extern void __put_task_struct_cb(struct rcu_head *rhp); |
883 | |||
884 | static inline void put_task_struct(struct task_struct *t) | ||
885 | { | ||
886 | if (atomic_dec_and_test(&t->usage)) | ||
887 | call_rcu(&t->rcu, __put_task_struct_cb); | ||
888 | } | ||
885 | 889 | ||
886 | /* | 890 | /* |
887 | * Per process flags | 891 | * Per process flags |
@@ -908,7 +912,7 @@ do { if (atomic_dec_and_test(&(tsk)->usage)) __put_task_struct(tsk); } while(0) | |||
908 | #define PF_SYNCWRITE 0x00200000 /* I am doing a sync write */ | 912 | #define PF_SYNCWRITE 0x00200000 /* I am doing a sync write */ |
909 | #define PF_BORROWED_MM 0x00400000 /* I am a kthread doing use_mm */ | 913 | #define PF_BORROWED_MM 0x00400000 /* I am a kthread doing use_mm */ |
910 | #define PF_RANDOMIZE 0x00800000 /* randomize virtual address space */ | 914 | #define PF_RANDOMIZE 0x00800000 /* randomize virtual address space */ |
911 | #define PF_HOTPLUG_CPU 0x01000000 /* Currently performing CPU hotplug */ | 915 | #define PF_SWAPWRITE 0x01000000 /* Allowed to write to swap */ |
912 | 916 | ||
913 | /* | 917 | /* |
914 | * Only the _current_ task can read/write to tsk->flags, but other | 918 | * Only the _current_ task can read/write to tsk->flags, but other |
diff --git a/include/linux/screen_info.h b/include/linux/screen_info.h new file mode 100644 index 000000000000..76850b75b3f6 --- /dev/null +++ b/include/linux/screen_info.h | |||
@@ -0,0 +1,77 @@ | |||
1 | #ifndef _SCREEN_INFO_H | ||
2 | #define _SCREEN_INFO_H | ||
3 | |||
4 | #include <linux/types.h> | ||
5 | |||
6 | /* | ||
7 | * These are set up by the setup-routine at boot-time: | ||
8 | */ | ||
9 | |||
10 | struct screen_info { | ||
11 | u8 orig_x; /* 0x00 */ | ||
12 | u8 orig_y; /* 0x01 */ | ||
13 | u16 dontuse1; /* 0x02 -- EXT_MEM_K sits here */ | ||
14 | u16 orig_video_page; /* 0x04 */ | ||
15 | u8 orig_video_mode; /* 0x06 */ | ||
16 | u8 orig_video_cols; /* 0x07 */ | ||
17 | u16 unused2; /* 0x08 */ | ||
18 | u16 orig_video_ega_bx; /* 0x0a */ | ||
19 | u16 unused3; /* 0x0c */ | ||
20 | u8 orig_video_lines; /* 0x0e */ | ||
21 | u8 orig_video_isVGA; /* 0x0f */ | ||
22 | u16 orig_video_points; /* 0x10 */ | ||
23 | |||
24 | /* VESA graphic mode -- linear frame buffer */ | ||
25 | u16 lfb_width; /* 0x12 */ | ||
26 | u16 lfb_height; /* 0x14 */ | ||
27 | u16 lfb_depth; /* 0x16 */ | ||
28 | u32 lfb_base; /* 0x18 */ | ||
29 | u32 lfb_size; /* 0x1c */ | ||
30 | u16 dontuse2, dontuse3; /* 0x20 -- CL_MAGIC and CL_OFFSET here */ | ||
31 | u16 lfb_linelength; /* 0x24 */ | ||
32 | u8 red_size; /* 0x26 */ | ||
33 | u8 red_pos; /* 0x27 */ | ||
34 | u8 green_size; /* 0x28 */ | ||
35 | u8 green_pos; /* 0x29 */ | ||
36 | u8 blue_size; /* 0x2a */ | ||
37 | u8 blue_pos; /* 0x2b */ | ||
38 | u8 rsvd_size; /* 0x2c */ | ||
39 | u8 rsvd_pos; /* 0x2d */ | ||
40 | u16 vesapm_seg; /* 0x2e */ | ||
41 | u16 vesapm_off; /* 0x30 */ | ||
42 | u16 pages; /* 0x32 */ | ||
43 | u16 vesa_attributes; /* 0x34 */ | ||
44 | u32 capabilities; /* 0x36 */ | ||
45 | /* 0x3a -- 0x3f reserved for future expansion */ | ||
46 | }; | ||
47 | |||
48 | extern struct screen_info screen_info; | ||
49 | |||
50 | #define ORIG_X (screen_info.orig_x) | ||
51 | #define ORIG_Y (screen_info.orig_y) | ||
52 | #define ORIG_VIDEO_MODE (screen_info.orig_video_mode) | ||
53 | #define ORIG_VIDEO_COLS (screen_info.orig_video_cols) | ||
54 | #define ORIG_VIDEO_EGA_BX (screen_info.orig_video_ega_bx) | ||
55 | #define ORIG_VIDEO_LINES (screen_info.orig_video_lines) | ||
56 | #define ORIG_VIDEO_ISVGA (screen_info.orig_video_isVGA) | ||
57 | #define ORIG_VIDEO_POINTS (screen_info.orig_video_points) | ||
58 | |||
59 | #define VIDEO_TYPE_MDA 0x10 /* Monochrome Text Display */ | ||
60 | #define VIDEO_TYPE_CGA 0x11 /* CGA Display */ | ||
61 | #define VIDEO_TYPE_EGAM 0x20 /* EGA/VGA in Monochrome Mode */ | ||
62 | #define VIDEO_TYPE_EGAC 0x21 /* EGA in Color Mode */ | ||
63 | #define VIDEO_TYPE_VGAC 0x22 /* VGA+ in Color Mode */ | ||
64 | #define VIDEO_TYPE_VLFB 0x23 /* VESA VGA in graphic mode */ | ||
65 | |||
66 | #define VIDEO_TYPE_PICA_S3 0x30 /* ACER PICA-61 local S3 video */ | ||
67 | #define VIDEO_TYPE_MIPS_G364 0x31 /* MIPS Magnum 4000 G364 video */ | ||
68 | #define VIDEO_TYPE_SGI 0x33 /* Various SGI graphics hardware */ | ||
69 | |||
70 | #define VIDEO_TYPE_TGAC 0x40 /* DEC TGA */ | ||
71 | |||
72 | #define VIDEO_TYPE_SUN 0x50 /* Sun frame buffer. */ | ||
73 | #define VIDEO_TYPE_SUNPCI 0x51 /* Sun PCI based frame buffer. */ | ||
74 | |||
75 | #define VIDEO_TYPE_PMAC 0x60 /* PowerMacintosh frame buffer. */ | ||
76 | |||
77 | #endif /* _SCREEN_INFO_H */ | ||
diff --git a/include/linux/sdla.h b/include/linux/sdla.h index 3b6afb8caa42..564acd3a71c1 100644 --- a/include/linux/sdla.h +++ b/include/linux/sdla.h | |||
@@ -293,46 +293,46 @@ void sdla(void *cfg_info, char *dev, struct frad_conf *conf, int quiet); | |||
293 | #define SDLA_S508_INTEN 0x10 | 293 | #define SDLA_S508_INTEN 0x10 |
294 | 294 | ||
295 | struct sdla_cmd { | 295 | struct sdla_cmd { |
296 | char opp_flag __attribute__((packed)); | 296 | char opp_flag; |
297 | char cmd __attribute__((packed)); | 297 | char cmd; |
298 | short length __attribute__((packed)); | 298 | short length; |
299 | char retval __attribute__((packed)); | 299 | char retval; |
300 | short dlci __attribute__((packed)); | 300 | short dlci; |
301 | char flags __attribute__((packed)); | 301 | char flags; |
302 | short rxlost_int __attribute__((packed)); | 302 | short rxlost_int; |
303 | long rxlost_app __attribute__((packed)); | 303 | long rxlost_app; |
304 | char reserve[2] __attribute__((packed)); | 304 | char reserve[2]; |
305 | char data[SDLA_MAX_DATA] __attribute__((packed)); /* transfer data buffer */ | 305 | char data[SDLA_MAX_DATA]; /* transfer data buffer */ |
306 | }; | 306 | } __attribute__((packed)); |
307 | 307 | ||
308 | struct intr_info { | 308 | struct intr_info { |
309 | char flags __attribute__((packed)); | 309 | char flags; |
310 | short txlen __attribute__((packed)); | 310 | short txlen; |
311 | char irq __attribute__((packed)); | 311 | char irq; |
312 | char flags2 __attribute__((packed)); | 312 | char flags2; |
313 | short timeout __attribute__((packed)); | 313 | short timeout; |
314 | }; | 314 | } __attribute__((packed)); |
315 | 315 | ||
316 | /* found in the 508's control window at RXBUF_INFO */ | 316 | /* found in the 508's control window at RXBUF_INFO */ |
317 | struct buf_info { | 317 | struct buf_info { |
318 | unsigned short rse_num __attribute__((packed)); | 318 | unsigned short rse_num; |
319 | unsigned long rse_base __attribute__((packed)); | 319 | unsigned long rse_base; |
320 | unsigned long rse_next __attribute__((packed)); | 320 | unsigned long rse_next; |
321 | unsigned long buf_base __attribute__((packed)); | 321 | unsigned long buf_base; |
322 | unsigned short reserved __attribute__((packed)); | 322 | unsigned short reserved; |
323 | unsigned long buf_top __attribute__((packed)); | 323 | unsigned long buf_top; |
324 | }; | 324 | } __attribute__((packed)); |
325 | 325 | ||
326 | /* structure pointed to by rse_base in RXBUF_INFO struct */ | 326 | /* structure pointed to by rse_base in RXBUF_INFO struct */ |
327 | struct buf_entry { | 327 | struct buf_entry { |
328 | char opp_flag __attribute__((packed)); | 328 | char opp_flag; |
329 | short length __attribute__((packed)); | 329 | short length; |
330 | short dlci __attribute__((packed)); | 330 | short dlci; |
331 | char flags __attribute__((packed)); | 331 | char flags; |
332 | short timestamp __attribute__((packed)); | 332 | short timestamp; |
333 | short reserved[2] __attribute__((packed)); | 333 | short reserved[2]; |
334 | long buf_addr __attribute__((packed)); | 334 | long buf_addr; |
335 | }; | 335 | } __attribute__((packed)); |
336 | 336 | ||
337 | #endif | 337 | #endif |
338 | 338 | ||
diff --git a/include/linux/seccomp.h b/include/linux/seccomp.h index dc89116bb1ca..cd2773b29a64 100644 --- a/include/linux/seccomp.h +++ b/include/linux/seccomp.h | |||
@@ -26,11 +26,7 @@ static inline int has_secure_computing(struct thread_info *ti) | |||
26 | 26 | ||
27 | #else /* CONFIG_SECCOMP */ | 27 | #else /* CONFIG_SECCOMP */ |
28 | 28 | ||
29 | #if (__GNUC__ > 2) | 29 | typedef struct { } seccomp_t; |
30 | typedef struct { } seccomp_t; | ||
31 | #else | ||
32 | typedef struct { int gcc_is_buggy; } seccomp_t; | ||
33 | #endif | ||
34 | 30 | ||
35 | #define secure_computing(x) do { } while (0) | 31 | #define secure_computing(x) do { } while (0) |
36 | /* static inline to preserve typechecking */ | 32 | /* static inline to preserve typechecking */ |
diff --git a/include/linux/security.h b/include/linux/security.h index f7e0ae018712..ef753654daa5 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
@@ -59,6 +59,12 @@ struct sk_buff; | |||
59 | struct sock; | 59 | struct sock; |
60 | struct sockaddr; | 60 | struct sockaddr; |
61 | struct socket; | 61 | struct socket; |
62 | struct flowi; | ||
63 | struct dst_entry; | ||
64 | struct xfrm_selector; | ||
65 | struct xfrm_policy; | ||
66 | struct xfrm_state; | ||
67 | struct xfrm_user_sec_ctx; | ||
62 | 68 | ||
63 | extern int cap_netlink_send(struct sock *sk, struct sk_buff *skb); | 69 | extern int cap_netlink_send(struct sock *sk, struct sk_buff *skb); |
64 | extern int cap_netlink_recv(struct sk_buff *skb); | 70 | extern int cap_netlink_recv(struct sk_buff *skb); |
@@ -788,6 +794,52 @@ struct swap_info_struct; | |||
788 | * which is used to copy security attributes between local stream sockets. | 794 | * which is used to copy security attributes between local stream sockets. |
789 | * @sk_free_security: | 795 | * @sk_free_security: |
790 | * Deallocate security structure. | 796 | * Deallocate security structure. |
797 | * @sk_getsid: | ||
798 | * Retrieve the LSM-specific sid for the sock to enable caching of network | ||
799 | * authorizations. | ||
800 | * | ||
801 | * Security hooks for XFRM operations. | ||
802 | * | ||
803 | * @xfrm_policy_alloc_security: | ||
804 | * @xp contains the xfrm_policy being added to Security Policy Database | ||
805 | * used by the XFRM system. | ||
806 | * @sec_ctx contains the security context information being provided by | ||
807 | * the user-level policy update program (e.g., setkey). | ||
808 | * Allocate a security structure to the xp->selector.security field. | ||
809 | * The security field is initialized to NULL when the xfrm_policy is | ||
810 | * allocated. | ||
811 | * Return 0 if operation was successful (memory to allocate, legal context) | ||
812 | * @xfrm_policy_clone_security: | ||
813 | * @old contains an existing xfrm_policy in the SPD. | ||
814 | * @new contains a new xfrm_policy being cloned from old. | ||
815 | * Allocate a security structure to the new->selector.security field | ||
816 | * that contains the information from the old->selector.security field. | ||
817 | * Return 0 if operation was successful (memory to allocate). | ||
818 | * @xfrm_policy_free_security: | ||
819 | * @xp contains the xfrm_policy | ||
820 | * Deallocate xp->selector.security. | ||
821 | * @xfrm_state_alloc_security: | ||
822 | * @x contains the xfrm_state being added to the Security Association | ||
823 | * Database by the XFRM system. | ||
824 | * @sec_ctx contains the security context information being provided by | ||
825 | * the user-level SA generation program (e.g., setkey or racoon). | ||
826 | * Allocate a security structure to the x->sel.security field. The | ||
827 | * security field is initialized to NULL when the xfrm_state is | ||
828 | * allocated. | ||
829 | * Return 0 if operation was successful (memory to allocate, legal context). | ||
830 | * @xfrm_state_free_security: | ||
831 | * @x contains the xfrm_state. | ||
832 | * Deallocate x>sel.security. | ||
833 | * @xfrm_policy_lookup: | ||
834 | * @xp contains the xfrm_policy for which the access control is being | ||
835 | * checked. | ||
836 | * @sk_sid contains the sock security label that is used to authorize | ||
837 | * access to the policy xp. | ||
838 | * @dir contains the direction of the flow (input or output). | ||
839 | * Check permission when a sock selects a xfrm_policy for processing | ||
840 | * XFRMs on a packet. The hook is called when selecting either a | ||
841 | * per-socket policy or a generic xfrm policy. | ||
842 | * Return 0 if permission is granted. | ||
791 | * | 843 | * |
792 | * Security hooks affecting all Key Management operations | 844 | * Security hooks affecting all Key Management operations |
793 | * | 845 | * |
@@ -1237,8 +1289,18 @@ struct security_operations { | |||
1237 | int (*socket_getpeersec) (struct socket *sock, char __user *optval, int __user *optlen, unsigned len); | 1289 | int (*socket_getpeersec) (struct socket *sock, char __user *optval, int __user *optlen, unsigned len); |
1238 | int (*sk_alloc_security) (struct sock *sk, int family, gfp_t priority); | 1290 | int (*sk_alloc_security) (struct sock *sk, int family, gfp_t priority); |
1239 | void (*sk_free_security) (struct sock *sk); | 1291 | void (*sk_free_security) (struct sock *sk); |
1292 | unsigned int (*sk_getsid) (struct sock *sk, struct flowi *fl, u8 dir); | ||
1240 | #endif /* CONFIG_SECURITY_NETWORK */ | 1293 | #endif /* CONFIG_SECURITY_NETWORK */ |
1241 | 1294 | ||
1295 | #ifdef CONFIG_SECURITY_NETWORK_XFRM | ||
1296 | int (*xfrm_policy_alloc_security) (struct xfrm_policy *xp, struct xfrm_user_sec_ctx *sec_ctx); | ||
1297 | int (*xfrm_policy_clone_security) (struct xfrm_policy *old, struct xfrm_policy *new); | ||
1298 | void (*xfrm_policy_free_security) (struct xfrm_policy *xp); | ||
1299 | int (*xfrm_state_alloc_security) (struct xfrm_state *x, struct xfrm_user_sec_ctx *sec_ctx); | ||
1300 | void (*xfrm_state_free_security) (struct xfrm_state *x); | ||
1301 | int (*xfrm_policy_lookup)(struct xfrm_policy *xp, u32 sk_sid, u8 dir); | ||
1302 | #endif /* CONFIG_SECURITY_NETWORK_XFRM */ | ||
1303 | |||
1242 | /* key management security hooks */ | 1304 | /* key management security hooks */ |
1243 | #ifdef CONFIG_KEYS | 1305 | #ifdef CONFIG_KEYS |
1244 | int (*key_alloc)(struct key *key); | 1306 | int (*key_alloc)(struct key *key); |
@@ -2679,6 +2741,11 @@ static inline void security_sk_free(struct sock *sk) | |||
2679 | { | 2741 | { |
2680 | return security_ops->sk_free_security(sk); | 2742 | return security_ops->sk_free_security(sk); |
2681 | } | 2743 | } |
2744 | |||
2745 | static inline unsigned int security_sk_sid(struct sock *sk, struct flowi *fl, u8 dir) | ||
2746 | { | ||
2747 | return security_ops->sk_getsid(sk, fl, dir); | ||
2748 | } | ||
2682 | #else /* CONFIG_SECURITY_NETWORK */ | 2749 | #else /* CONFIG_SECURITY_NETWORK */ |
2683 | static inline int security_unix_stream_connect(struct socket * sock, | 2750 | static inline int security_unix_stream_connect(struct socket * sock, |
2684 | struct socket * other, | 2751 | struct socket * other, |
@@ -2795,8 +2862,73 @@ static inline int security_sk_alloc(struct sock *sk, int family, gfp_t priority) | |||
2795 | static inline void security_sk_free(struct sock *sk) | 2862 | static inline void security_sk_free(struct sock *sk) |
2796 | { | 2863 | { |
2797 | } | 2864 | } |
2865 | |||
2866 | static inline unsigned int security_sk_sid(struct sock *sk, struct flowi *fl, u8 dir) | ||
2867 | { | ||
2868 | return 0; | ||
2869 | } | ||
2798 | #endif /* CONFIG_SECURITY_NETWORK */ | 2870 | #endif /* CONFIG_SECURITY_NETWORK */ |
2799 | 2871 | ||
2872 | #ifdef CONFIG_SECURITY_NETWORK_XFRM | ||
2873 | static inline int security_xfrm_policy_alloc(struct xfrm_policy *xp, struct xfrm_user_sec_ctx *sec_ctx) | ||
2874 | { | ||
2875 | return security_ops->xfrm_policy_alloc_security(xp, sec_ctx); | ||
2876 | } | ||
2877 | |||
2878 | static inline int security_xfrm_policy_clone(struct xfrm_policy *old, struct xfrm_policy *new) | ||
2879 | { | ||
2880 | return security_ops->xfrm_policy_clone_security(old, new); | ||
2881 | } | ||
2882 | |||
2883 | static inline void security_xfrm_policy_free(struct xfrm_policy *xp) | ||
2884 | { | ||
2885 | security_ops->xfrm_policy_free_security(xp); | ||
2886 | } | ||
2887 | |||
2888 | static inline int security_xfrm_state_alloc(struct xfrm_state *x, struct xfrm_user_sec_ctx *sec_ctx) | ||
2889 | { | ||
2890 | return security_ops->xfrm_state_alloc_security(x, sec_ctx); | ||
2891 | } | ||
2892 | |||
2893 | static inline void security_xfrm_state_free(struct xfrm_state *x) | ||
2894 | { | ||
2895 | security_ops->xfrm_state_free_security(x); | ||
2896 | } | ||
2897 | |||
2898 | static inline int security_xfrm_policy_lookup(struct xfrm_policy *xp, u32 sk_sid, u8 dir) | ||
2899 | { | ||
2900 | return security_ops->xfrm_policy_lookup(xp, sk_sid, dir); | ||
2901 | } | ||
2902 | #else /* CONFIG_SECURITY_NETWORK_XFRM */ | ||
2903 | static inline int security_xfrm_policy_alloc(struct xfrm_policy *xp, struct xfrm_user_sec_ctx *sec_ctx) | ||
2904 | { | ||
2905 | return 0; | ||
2906 | } | ||
2907 | |||
2908 | static inline int security_xfrm_policy_clone(struct xfrm_policy *old, struct xfrm_policy *new) | ||
2909 | { | ||
2910 | return 0; | ||
2911 | } | ||
2912 | |||
2913 | static inline void security_xfrm_policy_free(struct xfrm_policy *xp) | ||
2914 | { | ||
2915 | } | ||
2916 | |||
2917 | static inline int security_xfrm_state_alloc(struct xfrm_state *x, struct xfrm_user_sec_ctx *sec_ctx) | ||
2918 | { | ||
2919 | return 0; | ||
2920 | } | ||
2921 | |||
2922 | static inline void security_xfrm_state_free(struct xfrm_state *x) | ||
2923 | { | ||
2924 | } | ||
2925 | |||
2926 | static inline int security_xfrm_policy_lookup(struct xfrm_policy *xp, u32 sk_sid, u8 dir) | ||
2927 | { | ||
2928 | return 0; | ||
2929 | } | ||
2930 | #endif /* CONFIG_SECURITY_NETWORK_XFRM */ | ||
2931 | |||
2800 | #ifdef CONFIG_KEYS | 2932 | #ifdef CONFIG_KEYS |
2801 | #ifdef CONFIG_SECURITY | 2933 | #ifdef CONFIG_SECURITY |
2802 | static inline int security_key_alloc(struct key *key) | 2934 | static inline int security_key_alloc(struct key *key) |
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index a3ac92b19aca..e3710d7e260a 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
@@ -121,6 +121,9 @@ | |||
121 | 121 | ||
122 | #define PORT_IP3106 70 | 122 | #define PORT_IP3106 70 |
123 | 123 | ||
124 | /* Hilscher netx */ | ||
125 | #define PORT_NETX 71 | ||
126 | |||
124 | #ifdef __KERNEL__ | 127 | #ifdef __KERNEL__ |
125 | 128 | ||
126 | #include <linux/config.h> | 129 | #include <linux/config.h> |
diff --git a/include/linux/signal.h b/include/linux/signal.h index 5dd5f02c5c5f..b7d093520bb6 100644 --- a/include/linux/signal.h +++ b/include/linux/signal.h | |||
@@ -18,6 +18,19 @@ | |||
18 | #define SA_PROBE SA_ONESHOT | 18 | #define SA_PROBE SA_ONESHOT |
19 | #define SA_SAMPLE_RANDOM SA_RESTART | 19 | #define SA_SAMPLE_RANDOM SA_RESTART |
20 | #define SA_SHIRQ 0x04000000 | 20 | #define SA_SHIRQ 0x04000000 |
21 | /* | ||
22 | * As above, these correspond to the IORESOURCE_IRQ_* defines in | ||
23 | * linux/ioport.h to select the interrupt line behaviour. When | ||
24 | * requesting an interrupt without specifying a SA_TRIGGER, the | ||
25 | * setting should be assumed to be "as already configured", which | ||
26 | * may be as per machine or firmware initialisation. | ||
27 | */ | ||
28 | #define SA_TRIGGER_LOW 0x00000008 | ||
29 | #define SA_TRIGGER_HIGH 0x00000004 | ||
30 | #define SA_TRIGGER_FALLING 0x00000002 | ||
31 | #define SA_TRIGGER_RISING 0x00000001 | ||
32 | #define SA_TRIGGER_MASK (SA_TRIGGER_HIGH|SA_TRIGGER_LOW|\ | ||
33 | SA_TRIGGER_RISING|SA_TRIGGER_FALLING) | ||
21 | 34 | ||
22 | /* | 35 | /* |
23 | * Real Time signals may be queued. | 36 | * Real Time signals may be queued. |
@@ -81,6 +94,23 @@ static inline int sigfindinword(unsigned long word) | |||
81 | 94 | ||
82 | #endif /* __HAVE_ARCH_SIG_BITOPS */ | 95 | #endif /* __HAVE_ARCH_SIG_BITOPS */ |
83 | 96 | ||
97 | static inline int sigisemptyset(sigset_t *set) | ||
98 | { | ||
99 | extern void _NSIG_WORDS_is_unsupported_size(void); | ||
100 | switch (_NSIG_WORDS) { | ||
101 | case 4: | ||
102 | return (set->sig[3] | set->sig[2] | | ||
103 | set->sig[1] | set->sig[0]) == 0; | ||
104 | case 2: | ||
105 | return (set->sig[1] | set->sig[0]) == 0; | ||
106 | case 1: | ||
107 | return set->sig[0] == 0; | ||
108 | default: | ||
109 | _NSIG_WORDS_is_unsupported_size(); | ||
110 | return 0; | ||
111 | } | ||
112 | } | ||
113 | |||
84 | #define sigmask(sig) (1UL << ((sig) - 1)) | 114 | #define sigmask(sig) (1UL << ((sig) - 1)) |
85 | 115 | ||
86 | #ifndef __HAVE_ARCH_SIG_SETOPS | 116 | #ifndef __HAVE_ARCH_SIG_SETOPS |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 8c5d6001a923..e5fd66c5650b 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -32,7 +32,6 @@ | |||
32 | 32 | ||
33 | #define HAVE_ALLOC_SKB /* For the drivers to know */ | 33 | #define HAVE_ALLOC_SKB /* For the drivers to know */ |
34 | #define HAVE_ALIGNABLE_SKB /* Ditto 8) */ | 34 | #define HAVE_ALIGNABLE_SKB /* Ditto 8) */ |
35 | #define SLAB_SKB /* Slabified skbuffs */ | ||
36 | 35 | ||
37 | #define CHECKSUM_NONE 0 | 36 | #define CHECKSUM_NONE 0 |
38 | #define CHECKSUM_HW 1 | 37 | #define CHECKSUM_HW 1 |
@@ -134,7 +133,7 @@ struct skb_frag_struct { | |||
134 | */ | 133 | */ |
135 | struct skb_shared_info { | 134 | struct skb_shared_info { |
136 | atomic_t dataref; | 135 | atomic_t dataref; |
137 | unsigned int nr_frags; | 136 | unsigned short nr_frags; |
138 | unsigned short tso_size; | 137 | unsigned short tso_size; |
139 | unsigned short tso_segs; | 138 | unsigned short tso_segs; |
140 | unsigned short ufo_size; | 139 | unsigned short ufo_size; |
@@ -252,7 +251,7 @@ struct sk_buff { | |||
252 | * want to keep them across layers you have to do a skb_clone() | 251 | * want to keep them across layers you have to do a skb_clone() |
253 | * first. This is owned by whoever has the skb queued ATM. | 252 | * first. This is owned by whoever has the skb queued ATM. |
254 | */ | 253 | */ |
255 | char cb[40]; | 254 | char cb[48]; |
256 | 255 | ||
257 | unsigned int len, | 256 | unsigned int len, |
258 | data_len, | 257 | data_len, |
@@ -1239,6 +1238,8 @@ extern int skb_copy_and_csum_datagram_iovec(struct sk_buff *skb, | |||
1239 | int hlen, | 1238 | int hlen, |
1240 | struct iovec *iov); | 1239 | struct iovec *iov); |
1241 | extern void skb_free_datagram(struct sock *sk, struct sk_buff *skb); | 1240 | extern void skb_free_datagram(struct sock *sk, struct sk_buff *skb); |
1241 | extern void skb_kill_datagram(struct sock *sk, struct sk_buff *skb, | ||
1242 | unsigned int flags); | ||
1242 | extern unsigned int skb_checksum(const struct sk_buff *skb, int offset, | 1243 | extern unsigned int skb_checksum(const struct sk_buff *skb, int offset, |
1243 | int len, unsigned int csum); | 1244 | int len, unsigned int csum); |
1244 | extern int skb_copy_bits(const struct sk_buff *skb, int offset, | 1245 | extern int skb_copy_bits(const struct sk_buff *skb, int offset, |
diff --git a/include/linux/slab.h b/include/linux/slab.h index d1ea4051b996..1fb77a9cc148 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
@@ -53,6 +53,8 @@ typedef struct kmem_cache kmem_cache_t; | |||
53 | #define SLAB_CTOR_ATOMIC 0x002UL /* tell constructor it can't sleep */ | 53 | #define SLAB_CTOR_ATOMIC 0x002UL /* tell constructor it can't sleep */ |
54 | #define SLAB_CTOR_VERIFY 0x004UL /* tell constructor it's a verify call */ | 54 | #define SLAB_CTOR_VERIFY 0x004UL /* tell constructor it's a verify call */ |
55 | 55 | ||
56 | #ifndef CONFIG_SLOB | ||
57 | |||
56 | /* prototypes */ | 58 | /* prototypes */ |
57 | extern void __init kmem_cache_init(void); | 59 | extern void __init kmem_cache_init(void); |
58 | 60 | ||
@@ -134,6 +136,39 @@ static inline void *kmalloc_node(size_t size, gfp_t flags, int node) | |||
134 | extern int FASTCALL(kmem_cache_reap(int)); | 136 | extern int FASTCALL(kmem_cache_reap(int)); |
135 | extern int FASTCALL(kmem_ptr_validate(kmem_cache_t *cachep, void *ptr)); | 137 | extern int FASTCALL(kmem_ptr_validate(kmem_cache_t *cachep, void *ptr)); |
136 | 138 | ||
139 | #else /* CONFIG_SLOB */ | ||
140 | |||
141 | /* SLOB allocator routines */ | ||
142 | |||
143 | void kmem_cache_init(void); | ||
144 | struct kmem_cache *kmem_find_general_cachep(size_t, gfp_t gfpflags); | ||
145 | struct kmem_cache *kmem_cache_create(const char *c, size_t, size_t, | ||
146 | unsigned long, | ||
147 | void (*)(void *, struct kmem_cache *, unsigned long), | ||
148 | void (*)(void *, struct kmem_cache *, unsigned long)); | ||
149 | int kmem_cache_destroy(struct kmem_cache *c); | ||
150 | void *kmem_cache_alloc(struct kmem_cache *c, gfp_t flags); | ||
151 | void kmem_cache_free(struct kmem_cache *c, void *b); | ||
152 | const char *kmem_cache_name(struct kmem_cache *); | ||
153 | void *kmalloc(size_t size, gfp_t flags); | ||
154 | void *kzalloc(size_t size, gfp_t flags); | ||
155 | void kfree(const void *m); | ||
156 | unsigned int ksize(const void *m); | ||
157 | unsigned int kmem_cache_size(struct kmem_cache *c); | ||
158 | |||
159 | static inline void *kcalloc(size_t n, size_t size, gfp_t flags) | ||
160 | { | ||
161 | return kzalloc(n * size, flags); | ||
162 | } | ||
163 | |||
164 | #define kmem_cache_shrink(d) (0) | ||
165 | #define kmem_cache_reap(a) | ||
166 | #define kmem_ptr_validate(a, b) (0) | ||
167 | #define kmem_cache_alloc_node(c, f, n) kmem_cache_alloc(c, f) | ||
168 | #define kmalloc_node(s, f, n) kmalloc(s, f) | ||
169 | |||
170 | #endif /* CONFIG_SLOB */ | ||
171 | |||
137 | /* System wide caches */ | 172 | /* System wide caches */ |
138 | extern kmem_cache_t *vm_area_cachep; | 173 | extern kmem_cache_t *vm_area_cachep; |
139 | extern kmem_cache_t *names_cachep; | 174 | extern kmem_cache_t *names_cachep; |
diff --git a/include/linux/socket.h b/include/linux/socket.h index 1739c2d5b95b..9f4019156fd8 100644 --- a/include/linux/socket.h +++ b/include/linux/socket.h | |||
@@ -27,7 +27,6 @@ struct __kernel_sockaddr_storage { | |||
27 | #include <linux/compiler.h> /* __user */ | 27 | #include <linux/compiler.h> /* __user */ |
28 | 28 | ||
29 | extern int sysctl_somaxconn; | 29 | extern int sysctl_somaxconn; |
30 | extern void sock_init(void); | ||
31 | #ifdef CONFIG_PROC_FS | 30 | #ifdef CONFIG_PROC_FS |
32 | struct seq_file; | 31 | struct seq_file; |
33 | extern void socket_seq_show(struct seq_file *seq); | 32 | extern void socket_seq_show(struct seq_file *seq); |
diff --git a/include/linux/spinlock.h b/include/linux/spinlock.h index 0e9682c9def5..799be6747944 100644 --- a/include/linux/spinlock.h +++ b/include/linux/spinlock.h | |||
@@ -59,8 +59,7 @@ | |||
59 | /* | 59 | /* |
60 | * Must define these before including other files, inline functions need them | 60 | * Must define these before including other files, inline functions need them |
61 | */ | 61 | */ |
62 | #define LOCK_SECTION_NAME \ | 62 | #define LOCK_SECTION_NAME ".text.lock."KBUILD_BASENAME |
63 | ".text.lock." __stringify(KBUILD_BASENAME) | ||
64 | 63 | ||
65 | #define LOCK_SECTION_START(extra) \ | 64 | #define LOCK_SECTION_START(extra) \ |
66 | ".subsection 1\n\t" \ | 65 | ".subsection 1\n\t" \ |
diff --git a/include/linux/spinlock_types_up.h b/include/linux/spinlock_types_up.h index def2d173a8db..04135b0e198e 100644 --- a/include/linux/spinlock_types_up.h +++ b/include/linux/spinlock_types_up.h | |||
@@ -22,30 +22,16 @@ typedef struct { | |||
22 | 22 | ||
23 | #else | 23 | #else |
24 | 24 | ||
25 | /* | ||
26 | * All gcc 2.95 versions and early versions of 2.96 have a nasty bug | ||
27 | * with empty initializers. | ||
28 | */ | ||
29 | #if (__GNUC__ > 2) | ||
30 | typedef struct { } raw_spinlock_t; | 25 | typedef struct { } raw_spinlock_t; |
31 | 26 | ||
32 | #define __RAW_SPIN_LOCK_UNLOCKED { } | 27 | #define __RAW_SPIN_LOCK_UNLOCKED { } |
33 | #else | ||
34 | typedef struct { int gcc_is_buggy; } raw_spinlock_t; | ||
35 | #define __RAW_SPIN_LOCK_UNLOCKED (raw_spinlock_t) { 0 } | ||
36 | #endif | ||
37 | 28 | ||
38 | #endif | 29 | #endif |
39 | 30 | ||
40 | #if (__GNUC__ > 2) | ||
41 | typedef struct { | 31 | typedef struct { |
42 | /* no debug version on UP */ | 32 | /* no debug version on UP */ |
43 | } raw_rwlock_t; | 33 | } raw_rwlock_t; |
44 | 34 | ||
45 | #define __RAW_RW_LOCK_UNLOCKED { } | 35 | #define __RAW_RW_LOCK_UNLOCKED { } |
46 | #else | ||
47 | typedef struct { int gcc_is_buggy; } raw_rwlock_t; | ||
48 | #define __RAW_RW_LOCK_UNLOCKED (raw_rwlock_t) { 0 } | ||
49 | #endif | ||
50 | 36 | ||
51 | #endif /* __LINUX_SPINLOCK_TYPES_UP_H */ | 37 | #endif /* __LINUX_SPINLOCK_TYPES_UP_H */ |
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h index ab151bbb66df..f147e6b84332 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h | |||
@@ -49,7 +49,6 @@ struct rpc_clnt { | |||
49 | 49 | ||
50 | unsigned int cl_softrtry : 1,/* soft timeouts */ | 50 | unsigned int cl_softrtry : 1,/* soft timeouts */ |
51 | cl_intr : 1,/* interruptible */ | 51 | cl_intr : 1,/* interruptible */ |
52 | cl_chatty : 1,/* be verbose */ | ||
53 | cl_autobind : 1,/* use getport() */ | 52 | cl_autobind : 1,/* use getport() */ |
54 | cl_oneshot : 1,/* dispose after use */ | 53 | cl_oneshot : 1,/* dispose after use */ |
55 | cl_dead : 1;/* abandoned */ | 54 | cl_dead : 1;/* abandoned */ |
@@ -126,7 +125,8 @@ int rpc_register(u32, u32, int, unsigned short, int *); | |||
126 | void rpc_call_setup(struct rpc_task *, struct rpc_message *, int); | 125 | void rpc_call_setup(struct rpc_task *, struct rpc_message *, int); |
127 | 126 | ||
128 | int rpc_call_async(struct rpc_clnt *clnt, struct rpc_message *msg, | 127 | int rpc_call_async(struct rpc_clnt *clnt, struct rpc_message *msg, |
129 | int flags, rpc_action callback, void *clntdata); | 128 | int flags, const struct rpc_call_ops *tk_ops, |
129 | void *calldata); | ||
130 | int rpc_call_sync(struct rpc_clnt *clnt, struct rpc_message *msg, | 130 | int rpc_call_sync(struct rpc_clnt *clnt, struct rpc_message *msg, |
131 | int flags); | 131 | int flags); |
132 | void rpc_restart_call(struct rpc_task *); | 132 | void rpc_restart_call(struct rpc_task *); |
@@ -134,6 +134,7 @@ void rpc_clnt_sigmask(struct rpc_clnt *clnt, sigset_t *oldset); | |||
134 | void rpc_clnt_sigunmask(struct rpc_clnt *clnt, sigset_t *oldset); | 134 | void rpc_clnt_sigunmask(struct rpc_clnt *clnt, sigset_t *oldset); |
135 | void rpc_setbufsize(struct rpc_clnt *, unsigned int, unsigned int); | 135 | void rpc_setbufsize(struct rpc_clnt *, unsigned int, unsigned int); |
136 | size_t rpc_max_payload(struct rpc_clnt *); | 136 | size_t rpc_max_payload(struct rpc_clnt *); |
137 | void rpc_force_rebind(struct rpc_clnt *); | ||
137 | int rpc_ping(struct rpc_clnt *clnt, int flags); | 138 | int rpc_ping(struct rpc_clnt *clnt, int flags); |
138 | 139 | ||
139 | static __inline__ | 140 | static __inline__ |
diff --git a/include/linux/sunrpc/gss_spkm3.h b/include/linux/sunrpc/gss_spkm3.h index 0beb2cf00a84..336e218c2782 100644 --- a/include/linux/sunrpc/gss_spkm3.h +++ b/include/linux/sunrpc/gss_spkm3.h | |||
@@ -48,7 +48,7 @@ u32 spkm3_read_token(struct spkm3_ctx *ctx, struct xdr_netobj *read_token, struc | |||
48 | #define CKSUMTYPE_RSA_MD5 0x0007 | 48 | #define CKSUMTYPE_RSA_MD5 0x0007 |
49 | 49 | ||
50 | s32 make_checksum(s32 cksumtype, char *header, int hdrlen, struct xdr_buf *body, | 50 | s32 make_checksum(s32 cksumtype, char *header, int hdrlen, struct xdr_buf *body, |
51 | struct xdr_netobj *cksum); | 51 | int body_offset, struct xdr_netobj *cksum); |
52 | void asn1_bitstring_len(struct xdr_netobj *in, int *enclen, int *zerobits); | 52 | void asn1_bitstring_len(struct xdr_netobj *in, int *enclen, int *zerobits); |
53 | int decode_asn1_bitstring(struct xdr_netobj *out, char *in, int enclen, | 53 | int decode_asn1_bitstring(struct xdr_netobj *out, char *in, int enclen, |
54 | int explen); | 54 | int explen); |
diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h index 4d77e90d0b30..8b25629accd8 100644 --- a/include/linux/sunrpc/sched.h +++ b/include/linux/sunrpc/sched.h | |||
@@ -27,6 +27,7 @@ struct rpc_message { | |||
27 | struct rpc_cred * rpc_cred; /* Credentials */ | 27 | struct rpc_cred * rpc_cred; /* Credentials */ |
28 | }; | 28 | }; |
29 | 29 | ||
30 | struct rpc_call_ops; | ||
30 | struct rpc_wait_queue; | 31 | struct rpc_wait_queue; |
31 | struct rpc_wait { | 32 | struct rpc_wait { |
32 | struct list_head list; /* wait queue links */ | 33 | struct list_head list; /* wait queue links */ |
@@ -41,6 +42,7 @@ struct rpc_task { | |||
41 | #ifdef RPC_DEBUG | 42 | #ifdef RPC_DEBUG |
42 | unsigned long tk_magic; /* 0xf00baa */ | 43 | unsigned long tk_magic; /* 0xf00baa */ |
43 | #endif | 44 | #endif |
45 | atomic_t tk_count; /* Reference count */ | ||
44 | struct list_head tk_task; /* global list of tasks */ | 46 | struct list_head tk_task; /* global list of tasks */ |
45 | struct rpc_clnt * tk_client; /* RPC client */ | 47 | struct rpc_clnt * tk_client; /* RPC client */ |
46 | struct rpc_rqst * tk_rqstp; /* RPC request */ | 48 | struct rpc_rqst * tk_rqstp; /* RPC request */ |
@@ -50,8 +52,6 @@ struct rpc_task { | |||
50 | * RPC call state | 52 | * RPC call state |
51 | */ | 53 | */ |
52 | struct rpc_message tk_msg; /* RPC call info */ | 54 | struct rpc_message tk_msg; /* RPC call info */ |
53 | __u32 * tk_buffer; /* XDR buffer */ | ||
54 | size_t tk_bufsize; | ||
55 | __u8 tk_garb_retry; | 55 | __u8 tk_garb_retry; |
56 | __u8 tk_cred_retry; | 56 | __u8 tk_cred_retry; |
57 | 57 | ||
@@ -61,13 +61,12 @@ struct rpc_task { | |||
61 | * timeout_fn to be executed by timer bottom half | 61 | * timeout_fn to be executed by timer bottom half |
62 | * callback to be executed after waking up | 62 | * callback to be executed after waking up |
63 | * action next procedure for async tasks | 63 | * action next procedure for async tasks |
64 | * exit exit async task and report to caller | 64 | * tk_ops caller callbacks |
65 | */ | 65 | */ |
66 | void (*tk_timeout_fn)(struct rpc_task *); | 66 | void (*tk_timeout_fn)(struct rpc_task *); |
67 | void (*tk_callback)(struct rpc_task *); | 67 | void (*tk_callback)(struct rpc_task *); |
68 | void (*tk_action)(struct rpc_task *); | 68 | void (*tk_action)(struct rpc_task *); |
69 | void (*tk_exit)(struct rpc_task *); | 69 | const struct rpc_call_ops *tk_ops; |
70 | void (*tk_release)(struct rpc_task *); | ||
71 | void * tk_calldata; | 70 | void * tk_calldata; |
72 | 71 | ||
73 | /* | 72 | /* |
@@ -78,7 +77,6 @@ struct rpc_task { | |||
78 | struct timer_list tk_timer; /* kernel timer */ | 77 | struct timer_list tk_timer; /* kernel timer */ |
79 | unsigned long tk_timeout; /* timeout for rpc_sleep() */ | 78 | unsigned long tk_timeout; /* timeout for rpc_sleep() */ |
80 | unsigned short tk_flags; /* misc flags */ | 79 | unsigned short tk_flags; /* misc flags */ |
81 | unsigned char tk_active : 1;/* Task has been activated */ | ||
82 | unsigned char tk_priority : 2;/* Task priority */ | 80 | unsigned char tk_priority : 2;/* Task priority */ |
83 | unsigned long tk_runstate; /* Task run status */ | 81 | unsigned long tk_runstate; /* Task run status */ |
84 | struct workqueue_struct *tk_workqueue; /* Normally rpciod, but could | 82 | struct workqueue_struct *tk_workqueue; /* Normally rpciod, but could |
@@ -111,6 +109,13 @@ struct rpc_task { | |||
111 | 109 | ||
112 | typedef void (*rpc_action)(struct rpc_task *); | 110 | typedef void (*rpc_action)(struct rpc_task *); |
113 | 111 | ||
112 | struct rpc_call_ops { | ||
113 | void (*rpc_call_prepare)(struct rpc_task *, void *); | ||
114 | void (*rpc_call_done)(struct rpc_task *, void *); | ||
115 | void (*rpc_release)(void *); | ||
116 | }; | ||
117 | |||
118 | |||
114 | /* | 119 | /* |
115 | * RPC task flags | 120 | * RPC task flags |
116 | */ | 121 | */ |
@@ -129,7 +134,6 @@ typedef void (*rpc_action)(struct rpc_task *); | |||
129 | #define RPC_IS_SWAPPER(t) ((t)->tk_flags & RPC_TASK_SWAPPER) | 134 | #define RPC_IS_SWAPPER(t) ((t)->tk_flags & RPC_TASK_SWAPPER) |
130 | #define RPC_DO_ROOTOVERRIDE(t) ((t)->tk_flags & RPC_TASK_ROOTCREDS) | 135 | #define RPC_DO_ROOTOVERRIDE(t) ((t)->tk_flags & RPC_TASK_ROOTCREDS) |
131 | #define RPC_ASSASSINATED(t) ((t)->tk_flags & RPC_TASK_KILLED) | 136 | #define RPC_ASSASSINATED(t) ((t)->tk_flags & RPC_TASK_KILLED) |
132 | #define RPC_IS_ACTIVATED(t) ((t)->tk_active) | ||
133 | #define RPC_DO_CALLBACK(t) ((t)->tk_callback != NULL) | 137 | #define RPC_DO_CALLBACK(t) ((t)->tk_callback != NULL) |
134 | #define RPC_IS_SOFT(t) ((t)->tk_flags & RPC_TASK_SOFT) | 138 | #define RPC_IS_SOFT(t) ((t)->tk_flags & RPC_TASK_SOFT) |
135 | #define RPC_TASK_UNINTERRUPTIBLE(t) ((t)->tk_flags & RPC_TASK_NOINTR) | 139 | #define RPC_TASK_UNINTERRUPTIBLE(t) ((t)->tk_flags & RPC_TASK_NOINTR) |
@@ -138,6 +142,7 @@ typedef void (*rpc_action)(struct rpc_task *); | |||
138 | #define RPC_TASK_QUEUED 1 | 142 | #define RPC_TASK_QUEUED 1 |
139 | #define RPC_TASK_WAKEUP 2 | 143 | #define RPC_TASK_WAKEUP 2 |
140 | #define RPC_TASK_HAS_TIMER 3 | 144 | #define RPC_TASK_HAS_TIMER 3 |
145 | #define RPC_TASK_ACTIVE 4 | ||
141 | 146 | ||
142 | #define RPC_IS_RUNNING(t) (test_bit(RPC_TASK_RUNNING, &(t)->tk_runstate)) | 147 | #define RPC_IS_RUNNING(t) (test_bit(RPC_TASK_RUNNING, &(t)->tk_runstate)) |
143 | #define rpc_set_running(t) (set_bit(RPC_TASK_RUNNING, &(t)->tk_runstate)) | 148 | #define rpc_set_running(t) (set_bit(RPC_TASK_RUNNING, &(t)->tk_runstate)) |
@@ -168,6 +173,15 @@ typedef void (*rpc_action)(struct rpc_task *); | |||
168 | smp_mb__after_clear_bit(); \ | 173 | smp_mb__after_clear_bit(); \ |
169 | } while (0) | 174 | } while (0) |
170 | 175 | ||
176 | #define RPC_IS_ACTIVATED(t) (test_bit(RPC_TASK_ACTIVE, &(t)->tk_runstate)) | ||
177 | #define rpc_set_active(t) (set_bit(RPC_TASK_ACTIVE, &(t)->tk_runstate)) | ||
178 | #define rpc_clear_active(t) \ | ||
179 | do { \ | ||
180 | smp_mb__before_clear_bit(); \ | ||
181 | clear_bit(RPC_TASK_ACTIVE, &(t)->tk_runstate); \ | ||
182 | smp_mb__after_clear_bit(); \ | ||
183 | } while(0) | ||
184 | |||
171 | /* | 185 | /* |
172 | * Task priorities. | 186 | * Task priorities. |
173 | * Note: if you change these, you must also change | 187 | * Note: if you change these, you must also change |
@@ -228,11 +242,16 @@ struct rpc_wait_queue { | |||
228 | /* | 242 | /* |
229 | * Function prototypes | 243 | * Function prototypes |
230 | */ | 244 | */ |
231 | struct rpc_task *rpc_new_task(struct rpc_clnt *, rpc_action, int flags); | 245 | struct rpc_task *rpc_new_task(struct rpc_clnt *, int flags, |
246 | const struct rpc_call_ops *ops, void *data); | ||
247 | struct rpc_task *rpc_run_task(struct rpc_clnt *clnt, int flags, | ||
248 | const struct rpc_call_ops *ops, void *data); | ||
232 | struct rpc_task *rpc_new_child(struct rpc_clnt *, struct rpc_task *parent); | 249 | struct rpc_task *rpc_new_child(struct rpc_clnt *, struct rpc_task *parent); |
233 | void rpc_init_task(struct rpc_task *, struct rpc_clnt *, | 250 | void rpc_init_task(struct rpc_task *task, struct rpc_clnt *clnt, |
234 | rpc_action exitfunc, int flags); | 251 | int flags, const struct rpc_call_ops *ops, |
252 | void *data); | ||
235 | void rpc_release_task(struct rpc_task *); | 253 | void rpc_release_task(struct rpc_task *); |
254 | void rpc_exit_task(struct rpc_task *); | ||
236 | void rpc_killall_tasks(struct rpc_clnt *); | 255 | void rpc_killall_tasks(struct rpc_clnt *); |
237 | int rpc_execute(struct rpc_task *); | 256 | int rpc_execute(struct rpc_task *); |
238 | void rpc_run_child(struct rpc_task *parent, struct rpc_task *child, | 257 | void rpc_run_child(struct rpc_task *parent, struct rpc_task *child, |
@@ -247,9 +266,11 @@ struct rpc_task *rpc_wake_up_next(struct rpc_wait_queue *); | |||
247 | void rpc_wake_up_status(struct rpc_wait_queue *, int); | 266 | void rpc_wake_up_status(struct rpc_wait_queue *, int); |
248 | void rpc_delay(struct rpc_task *, unsigned long); | 267 | void rpc_delay(struct rpc_task *, unsigned long); |
249 | void * rpc_malloc(struct rpc_task *, size_t); | 268 | void * rpc_malloc(struct rpc_task *, size_t); |
269 | void rpc_free(struct rpc_task *); | ||
250 | int rpciod_up(void); | 270 | int rpciod_up(void); |
251 | void rpciod_down(void); | 271 | void rpciod_down(void); |
252 | void rpciod_wake_up(void); | 272 | void rpciod_wake_up(void); |
273 | int __rpc_wait_for_completion_task(struct rpc_task *task, int (*)(void *)); | ||
253 | #ifdef RPC_DEBUG | 274 | #ifdef RPC_DEBUG |
254 | void rpc_show_tasks(void); | 275 | void rpc_show_tasks(void); |
255 | #endif | 276 | #endif |
@@ -259,7 +280,12 @@ void rpc_destroy_mempool(void); | |||
259 | static inline void rpc_exit(struct rpc_task *task, int status) | 280 | static inline void rpc_exit(struct rpc_task *task, int status) |
260 | { | 281 | { |
261 | task->tk_status = status; | 282 | task->tk_status = status; |
262 | task->tk_action = NULL; | 283 | task->tk_action = rpc_exit_task; |
284 | } | ||
285 | |||
286 | static inline int rpc_wait_for_completion_task(struct rpc_task *task) | ||
287 | { | ||
288 | return __rpc_wait_for_completion_task(task, NULL); | ||
263 | } | 289 | } |
264 | 290 | ||
265 | #ifdef RPC_DEBUG | 291 | #ifdef RPC_DEBUG |
diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h index 5da968729cf8..84c35d42d250 100644 --- a/include/linux/sunrpc/xdr.h +++ b/include/linux/sunrpc/xdr.h | |||
@@ -91,7 +91,6 @@ struct xdr_buf { | |||
91 | u32 * xdr_encode_opaque_fixed(u32 *p, const void *ptr, unsigned int len); | 91 | u32 * xdr_encode_opaque_fixed(u32 *p, const void *ptr, unsigned int len); |
92 | u32 * xdr_encode_opaque(u32 *p, const void *ptr, unsigned int len); | 92 | u32 * xdr_encode_opaque(u32 *p, const void *ptr, unsigned int len); |
93 | u32 * xdr_encode_string(u32 *p, const char *s); | 93 | u32 * xdr_encode_string(u32 *p, const char *s); |
94 | u32 * xdr_decode_string(u32 *p, char **sp, int *lenp, int maxlen); | ||
95 | u32 * xdr_decode_string_inplace(u32 *p, char **sp, int *lenp, int maxlen); | 94 | u32 * xdr_decode_string_inplace(u32 *p, char **sp, int *lenp, int maxlen); |
96 | u32 * xdr_encode_netobj(u32 *p, const struct xdr_netobj *); | 95 | u32 * xdr_encode_netobj(u32 *p, const struct xdr_netobj *); |
97 | u32 * xdr_decode_netobj(u32 *p, struct xdr_netobj *); | 96 | u32 * xdr_decode_netobj(u32 *p, struct xdr_netobj *); |
@@ -135,11 +134,6 @@ xdr_adjust_iovec(struct kvec *iov, u32 *p) | |||
135 | } | 134 | } |
136 | 135 | ||
137 | /* | 136 | /* |
138 | * Maximum number of iov's we use. | ||
139 | */ | ||
140 | #define MAX_IOVEC (12) | ||
141 | |||
142 | /* | ||
143 | * XDR buffer helper functions | 137 | * XDR buffer helper functions |
144 | */ | 138 | */ |
145 | extern void xdr_shift_buf(struct xdr_buf *, size_t); | 139 | extern void xdr_shift_buf(struct xdr_buf *, size_t); |
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index 3b8b6e823c70..6ef99b14ff09 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h | |||
@@ -79,21 +79,19 @@ struct rpc_rqst { | |||
79 | void (*rq_release_snd_buf)(struct rpc_rqst *); /* release rq_enc_pages */ | 79 | void (*rq_release_snd_buf)(struct rpc_rqst *); /* release rq_enc_pages */ |
80 | struct list_head rq_list; | 80 | struct list_head rq_list; |
81 | 81 | ||
82 | __u32 * rq_buffer; /* XDR encode buffer */ | ||
83 | size_t rq_bufsize; | ||
84 | |||
82 | struct xdr_buf rq_private_buf; /* The receive buffer | 85 | struct xdr_buf rq_private_buf; /* The receive buffer |
83 | * used in the softirq. | 86 | * used in the softirq. |
84 | */ | 87 | */ |
85 | unsigned long rq_majortimeo; /* major timeout alarm */ | 88 | unsigned long rq_majortimeo; /* major timeout alarm */ |
86 | unsigned long rq_timeout; /* Current timeout value */ | 89 | unsigned long rq_timeout; /* Current timeout value */ |
87 | unsigned int rq_retries; /* # of retries */ | 90 | unsigned int rq_retries; /* # of retries */ |
88 | /* | ||
89 | * For authentication (e.g. auth_des) | ||
90 | */ | ||
91 | u32 rq_creddata[2]; | ||
92 | 91 | ||
93 | /* | 92 | /* |
94 | * Partial send handling | 93 | * Partial send handling |
95 | */ | 94 | */ |
96 | |||
97 | u32 rq_bytes_sent; /* Bytes we have sent */ | 95 | u32 rq_bytes_sent; /* Bytes we have sent */ |
98 | 96 | ||
99 | unsigned long rq_xtime; /* when transmitted */ | 97 | unsigned long rq_xtime; /* when transmitted */ |
@@ -106,7 +104,10 @@ struct rpc_xprt_ops { | |||
106 | void (*set_buffer_size)(struct rpc_xprt *xprt, size_t sndsize, size_t rcvsize); | 104 | void (*set_buffer_size)(struct rpc_xprt *xprt, size_t sndsize, size_t rcvsize); |
107 | int (*reserve_xprt)(struct rpc_task *task); | 105 | int (*reserve_xprt)(struct rpc_task *task); |
108 | void (*release_xprt)(struct rpc_xprt *xprt, struct rpc_task *task); | 106 | void (*release_xprt)(struct rpc_xprt *xprt, struct rpc_task *task); |
107 | void (*set_port)(struct rpc_xprt *xprt, unsigned short port); | ||
109 | void (*connect)(struct rpc_task *task); | 108 | void (*connect)(struct rpc_task *task); |
109 | void * (*buf_alloc)(struct rpc_task *task, size_t size); | ||
110 | void (*buf_free)(struct rpc_task *task); | ||
110 | int (*send_request)(struct rpc_task *task); | 111 | int (*send_request)(struct rpc_task *task); |
111 | void (*set_retrans_timeout)(struct rpc_task *task); | 112 | void (*set_retrans_timeout)(struct rpc_task *task); |
112 | void (*timer)(struct rpc_task *task); | 113 | void (*timer)(struct rpc_task *task); |
@@ -253,6 +254,7 @@ int xs_setup_tcp(struct rpc_xprt *xprt, struct rpc_timeout *to); | |||
253 | #define XPRT_LOCKED (0) | 254 | #define XPRT_LOCKED (0) |
254 | #define XPRT_CONNECTED (1) | 255 | #define XPRT_CONNECTED (1) |
255 | #define XPRT_CONNECTING (2) | 256 | #define XPRT_CONNECTING (2) |
257 | #define XPRT_CLOSE_WAIT (3) | ||
256 | 258 | ||
257 | static inline void xprt_set_connected(struct rpc_xprt *xprt) | 259 | static inline void xprt_set_connected(struct rpc_xprt *xprt) |
258 | { | 260 | { |
diff --git a/include/linux/suspend.h b/include/linux/suspend.h index a61c04f804b2..5dc94e777fab 100644 --- a/include/linux/suspend.h +++ b/include/linux/suspend.h | |||
@@ -14,11 +14,7 @@ | |||
14 | typedef struct pbe { | 14 | typedef struct pbe { |
15 | unsigned long address; /* address of the copy */ | 15 | unsigned long address; /* address of the copy */ |
16 | unsigned long orig_address; /* original address of page */ | 16 | unsigned long orig_address; /* original address of page */ |
17 | swp_entry_t swap_address; | 17 | struct pbe *next; |
18 | |||
19 | struct pbe *next; /* also used as scratch space at | ||
20 | * end of page (see link, diskpage) | ||
21 | */ | ||
22 | } suspend_pagedir_t; | 18 | } suspend_pagedir_t; |
23 | 19 | ||
24 | #define for_each_pbe(pbe, pblist) \ | 20 | #define for_each_pbe(pbe, pblist) \ |
@@ -77,6 +73,6 @@ unsigned long get_safe_page(gfp_t gfp_mask); | |||
77 | * XXX: We try to keep some more pages free so that I/O operations succeed | 73 | * XXX: We try to keep some more pages free so that I/O operations succeed |
78 | * without paging. Might this be more? | 74 | * without paging. Might this be more? |
79 | */ | 75 | */ |
80 | #define PAGES_FOR_IO 512 | 76 | #define PAGES_FOR_IO 1024 |
81 | 77 | ||
82 | #endif /* _LINUX_SWSUSP_H */ | 78 | #endif /* _LINUX_SWSUSP_H */ |
diff --git a/include/linux/swap.h b/include/linux/swap.h index 20c975642cab..389d1c382e20 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h | |||
@@ -172,10 +172,16 @@ extern void swap_setup(void); | |||
172 | 172 | ||
173 | /* linux/mm/vmscan.c */ | 173 | /* linux/mm/vmscan.c */ |
174 | extern int try_to_free_pages(struct zone **, gfp_t); | 174 | extern int try_to_free_pages(struct zone **, gfp_t); |
175 | extern int zone_reclaim(struct zone *, gfp_t, unsigned int); | ||
176 | extern int shrink_all_memory(int); | 175 | extern int shrink_all_memory(int); |
177 | extern int vm_swappiness; | 176 | extern int vm_swappiness; |
178 | 177 | ||
178 | #ifdef CONFIG_MIGRATION | ||
179 | extern int isolate_lru_page(struct page *p); | ||
180 | extern int putback_lru_pages(struct list_head *l); | ||
181 | extern int migrate_pages(struct list_head *l, struct list_head *t, | ||
182 | struct list_head *moved, struct list_head *failed); | ||
183 | #endif | ||
184 | |||
179 | #ifdef CONFIG_MMU | 185 | #ifdef CONFIG_MMU |
180 | /* linux/mm/shmem.c */ | 186 | /* linux/mm/shmem.c */ |
181 | extern int shmem_unuse(swp_entry_t entry, struct page *page); | 187 | extern int shmem_unuse(swp_entry_t entry, struct page *page); |
@@ -193,7 +199,7 @@ extern int rw_swap_page_sync(int, swp_entry_t, struct page *); | |||
193 | extern struct address_space swapper_space; | 199 | extern struct address_space swapper_space; |
194 | #define total_swapcache_pages swapper_space.nrpages | 200 | #define total_swapcache_pages swapper_space.nrpages |
195 | extern void show_swap_cache_info(void); | 201 | extern void show_swap_cache_info(void); |
196 | extern int add_to_swap(struct page *); | 202 | extern int add_to_swap(struct page *, gfp_t); |
197 | extern void __delete_from_swap_cache(struct page *); | 203 | extern void __delete_from_swap_cache(struct page *); |
198 | extern void delete_from_swap_cache(struct page *); | 204 | extern void delete_from_swap_cache(struct page *); |
199 | extern int move_to_swap_cache(struct page *, swp_entry_t); | 205 | extern int move_to_swap_cache(struct page *, swp_entry_t); |
@@ -210,6 +216,7 @@ extern unsigned int nr_swapfiles; | |||
210 | extern struct swap_info_struct swap_info[]; | 216 | extern struct swap_info_struct swap_info[]; |
211 | extern void si_swapinfo(struct sysinfo *); | 217 | extern void si_swapinfo(struct sysinfo *); |
212 | extern swp_entry_t get_swap_page(void); | 218 | extern swp_entry_t get_swap_page(void); |
219 | extern swp_entry_t get_swap_page_of_type(int type); | ||
213 | extern int swap_duplicate(swp_entry_t); | 220 | extern int swap_duplicate(swp_entry_t); |
214 | extern int valid_swaphandles(swp_entry_t, unsigned long *); | 221 | extern int valid_swaphandles(swp_entry_t, unsigned long *); |
215 | extern void swap_free(swp_entry_t); | 222 | extern void swap_free(swp_entry_t); |
@@ -239,6 +246,11 @@ static inline void put_swap_token(struct mm_struct *mm) | |||
239 | __put_swap_token(mm); | 246 | __put_swap_token(mm); |
240 | } | 247 | } |
241 | 248 | ||
249 | static inline void disable_swap_token(void) | ||
250 | { | ||
251 | put_swap_token(swap_token_mm); | ||
252 | } | ||
253 | |||
242 | #else /* CONFIG_SWAP */ | 254 | #else /* CONFIG_SWAP */ |
243 | 255 | ||
244 | #define total_swap_pages 0 | 256 | #define total_swap_pages 0 |
@@ -283,6 +295,7 @@ static inline swp_entry_t get_swap_page(void) | |||
283 | #define put_swap_token(x) do { } while(0) | 295 | #define put_swap_token(x) do { } while(0) |
284 | #define grab_swap_token() do { } while(0) | 296 | #define grab_swap_token() do { } while(0) |
285 | #define has_swap_token(x) 0 | 297 | #define has_swap_token(x) 0 |
298 | #define disable_swap_token() do { } while(0) | ||
286 | 299 | ||
287 | #endif /* CONFIG_SWAP */ | 300 | #endif /* CONFIG_SWAP */ |
288 | #endif /* __KERNEL__*/ | 301 | #endif /* __KERNEL__*/ |
diff --git a/include/linux/synclink.h b/include/linux/synclink.h index 763bd290f28d..1b7cd8d1a71b 100644 --- a/include/linux/synclink.h +++ b/include/linux/synclink.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * SyncLink Multiprotocol Serial Adapter Driver | 2 | * SyncLink Multiprotocol Serial Adapter Driver |
3 | * | 3 | * |
4 | * $Id: synclink.h,v 3.6 2002/02/20 21:58:20 paulkf Exp $ | 4 | * $Id: synclink.h,v 3.10 2005/11/08 19:50:54 paulkf Exp $ |
5 | * | 5 | * |
6 | * Copyright (C) 1998-2000 by Microgate Corporation | 6 | * Copyright (C) 1998-2000 by Microgate Corporation |
7 | * | 7 | * |
@@ -128,10 +128,14 @@ | |||
128 | #define MGSL_BUS_TYPE_EISA 2 | 128 | #define MGSL_BUS_TYPE_EISA 2 |
129 | #define MGSL_BUS_TYPE_PCI 5 | 129 | #define MGSL_BUS_TYPE_PCI 5 |
130 | 130 | ||
131 | #define MGSL_INTERFACE_MASK 0xf | ||
131 | #define MGSL_INTERFACE_DISABLE 0 | 132 | #define MGSL_INTERFACE_DISABLE 0 |
132 | #define MGSL_INTERFACE_RS232 1 | 133 | #define MGSL_INTERFACE_RS232 1 |
133 | #define MGSL_INTERFACE_V35 2 | 134 | #define MGSL_INTERFACE_V35 2 |
134 | #define MGSL_INTERFACE_RS422 3 | 135 | #define MGSL_INTERFACE_RS422 3 |
136 | #define MGSL_INTERFACE_RTS_EN 0x10 | ||
137 | #define MGSL_INTERFACE_LL 0x20 | ||
138 | #define MGSL_INTERFACE_RL 0x40 | ||
135 | 139 | ||
136 | typedef struct _MGSL_PARAMS | 140 | typedef struct _MGSL_PARAMS |
137 | { | 141 | { |
@@ -163,6 +167,9 @@ typedef struct _MGSL_PARAMS | |||
163 | #define SYNCLINK_DEVICE_ID 0x0010 | 167 | #define SYNCLINK_DEVICE_ID 0x0010 |
164 | #define MGSCC_DEVICE_ID 0x0020 | 168 | #define MGSCC_DEVICE_ID 0x0020 |
165 | #define SYNCLINK_SCA_DEVICE_ID 0x0030 | 169 | #define SYNCLINK_SCA_DEVICE_ID 0x0030 |
170 | #define SYNCLINK_GT_DEVICE_ID 0x0070 | ||
171 | #define SYNCLINK_GT4_DEVICE_ID 0x0080 | ||
172 | #define SYNCLINK_AC_DEVICE_ID 0x0090 | ||
166 | #define MGSL_MAX_SERIAL_NUMBER 30 | 173 | #define MGSL_MAX_SERIAL_NUMBER 30 |
167 | 174 | ||
168 | /* | 175 | /* |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index c7007b1db91d..e910d1a481df 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
@@ -511,5 +511,7 @@ asmlinkage long sys_ioprio_set(int which, int who, int ioprio); | |||
511 | asmlinkage long sys_ioprio_get(int which, int who); | 511 | asmlinkage long sys_ioprio_get(int which, int who); |
512 | asmlinkage long sys_set_mempolicy(int mode, unsigned long __user *nmask, | 512 | asmlinkage long sys_set_mempolicy(int mode, unsigned long __user *nmask, |
513 | unsigned long maxnode); | 513 | unsigned long maxnode); |
514 | asmlinkage long sys_migrate_pages(pid_t pid, unsigned long maxnode, | ||
515 | const unsigned long __user *from, const unsigned long __user *to); | ||
514 | 516 | ||
515 | #endif | 517 | #endif |
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index 6bc03c911a83..7f472127b7b5 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h | |||
@@ -124,7 +124,7 @@ enum | |||
124 | KERN_OVERFLOWUID=46, /* int: overflow UID */ | 124 | KERN_OVERFLOWUID=46, /* int: overflow UID */ |
125 | KERN_OVERFLOWGID=47, /* int: overflow GID */ | 125 | KERN_OVERFLOWGID=47, /* int: overflow GID */ |
126 | KERN_SHMPATH=48, /* string: path to shm fs */ | 126 | KERN_SHMPATH=48, /* string: path to shm fs */ |
127 | KERN_HOTPLUG=49, /* string: path to hotplug policy agent */ | 127 | KERN_HOTPLUG=49, /* string: path to uevent helper (deprecated) */ |
128 | KERN_IEEE_EMULATION_WARNINGS=50, /* int: unimplemented ieee instructions */ | 128 | KERN_IEEE_EMULATION_WARNINGS=50, /* int: unimplemented ieee instructions */ |
129 | KERN_S390_USER_DEBUG_LOGGING=51, /* int: dumps of user faults */ | 129 | KERN_S390_USER_DEBUG_LOGGING=51, /* int: dumps of user faults */ |
130 | KERN_CORE_USES_PID=52, /* int: use core or core.%pid */ | 130 | KERN_CORE_USES_PID=52, /* int: use core or core.%pid */ |
@@ -180,6 +180,8 @@ enum | |||
180 | VM_VFS_CACHE_PRESSURE=26, /* dcache/icache reclaim pressure */ | 180 | VM_VFS_CACHE_PRESSURE=26, /* dcache/icache reclaim pressure */ |
181 | VM_LEGACY_VA_LAYOUT=27, /* legacy/compatibility virtual address space layout */ | 181 | VM_LEGACY_VA_LAYOUT=27, /* legacy/compatibility virtual address space layout */ |
182 | VM_SWAP_TOKEN_TIMEOUT=28, /* default time for token time out */ | 182 | VM_SWAP_TOKEN_TIMEOUT=28, /* default time for token time out */ |
183 | VM_DROP_PAGECACHE=29, /* int: nuke lots of pagecache */ | ||
184 | VM_PERCPU_PAGELIST_FRACTION=30,/* int: fraction of pages in each percpu_pagelist */ | ||
183 | }; | 185 | }; |
184 | 186 | ||
185 | 187 | ||
@@ -390,6 +392,7 @@ enum | |||
390 | NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR=109, | 392 | NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR=109, |
391 | NET_TCP_CONG_CONTROL=110, | 393 | NET_TCP_CONG_CONTROL=110, |
392 | NET_TCP_ABC=111, | 394 | NET_TCP_ABC=111, |
395 | NET_IPV4_IPFRAG_MAX_DIST=112, | ||
393 | }; | 396 | }; |
394 | 397 | ||
395 | enum { | 398 | enum { |
@@ -670,6 +673,9 @@ enum { | |||
670 | NET_DECNET_DST_GC_INTERVAL = 9, | 673 | NET_DECNET_DST_GC_INTERVAL = 9, |
671 | NET_DECNET_CONF = 10, | 674 | NET_DECNET_CONF = 10, |
672 | NET_DECNET_NO_FC_MAX_CWND = 11, | 675 | NET_DECNET_NO_FC_MAX_CWND = 11, |
676 | NET_DECNET_MEM = 12, | ||
677 | NET_DECNET_RMEM = 13, | ||
678 | NET_DECNET_WMEM = 14, | ||
673 | NET_DECNET_DEBUG_LEVEL = 255 | 679 | NET_DECNET_DEBUG_LEVEL = 255 |
674 | }; | 680 | }; |
675 | 681 | ||
diff --git a/include/linux/tcp.h b/include/linux/tcp.h index 0e1da6602e05..f2bb2396853f 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h | |||
@@ -55,22 +55,6 @@ struct tcphdr { | |||
55 | __u16 urg_ptr; | 55 | __u16 urg_ptr; |
56 | }; | 56 | }; |
57 | 57 | ||
58 | #define TCP_ACTION_FIN (1 << 7) | ||
59 | |||
60 | enum { | ||
61 | TCPF_ESTABLISHED = (1 << 1), | ||
62 | TCPF_SYN_SENT = (1 << 2), | ||
63 | TCPF_SYN_RECV = (1 << 3), | ||
64 | TCPF_FIN_WAIT1 = (1 << 4), | ||
65 | TCPF_FIN_WAIT2 = (1 << 5), | ||
66 | TCPF_TIME_WAIT = (1 << 6), | ||
67 | TCPF_CLOSE = (1 << 7), | ||
68 | TCPF_CLOSE_WAIT = (1 << 8), | ||
69 | TCPF_LAST_ACK = (1 << 9), | ||
70 | TCPF_LISTEN = (1 << 10), | ||
71 | TCPF_CLOSING = (1 << 11) | ||
72 | }; | ||
73 | |||
74 | /* | 58 | /* |
75 | * The union cast uses a gcc extension to avoid aliasing problems | 59 | * The union cast uses a gcc extension to avoid aliasing problems |
76 | * (union is compatible to any of its members) | 60 | * (union is compatible to any of its members) |
@@ -254,10 +238,9 @@ struct tcp_sock { | |||
254 | __u32 snd_wl1; /* Sequence for window update */ | 238 | __u32 snd_wl1; /* Sequence for window update */ |
255 | __u32 snd_wnd; /* The window we expect to receive */ | 239 | __u32 snd_wnd; /* The window we expect to receive */ |
256 | __u32 max_window; /* Maximal window ever seen from peer */ | 240 | __u32 max_window; /* Maximal window ever seen from peer */ |
257 | __u32 pmtu_cookie; /* Last pmtu seen by socket */ | ||
258 | __u32 mss_cache; /* Cached effective mss, not including SACKS */ | 241 | __u32 mss_cache; /* Cached effective mss, not including SACKS */ |
259 | __u16 xmit_size_goal; /* Goal for segmenting output packets */ | 242 | __u16 xmit_size_goal; /* Goal for segmenting output packets */ |
260 | __u16 ext_header_len; /* Network protocol overhead (IP/IPv6 options) */ | 243 | /* XXX Two bytes hole, try to pack */ |
261 | 244 | ||
262 | __u32 window_clamp; /* Maximal window to advertise */ | 245 | __u32 window_clamp; /* Maximal window to advertise */ |
263 | __u32 rcv_ssthresh; /* Current window clamp */ | 246 | __u32 rcv_ssthresh; /* Current window clamp */ |
@@ -295,8 +278,6 @@ struct tcp_sock { | |||
295 | 278 | ||
296 | struct sk_buff_head out_of_order_queue; /* Out of order segments go here */ | 279 | struct sk_buff_head out_of_order_queue; /* Out of order segments go here */ |
297 | 280 | ||
298 | struct tcp_func *af_specific; /* Operations which are AF_INET{4,6} specific */ | ||
299 | |||
300 | __u32 rcv_wnd; /* Current receiver window */ | 281 | __u32 rcv_wnd; /* Current receiver window */ |
301 | __u32 rcv_wup; /* rcv_nxt on last window update sent */ | 282 | __u32 rcv_wup; /* rcv_nxt on last window update sent */ |
302 | __u32 write_seq; /* Tail(+1) of data held in tcp send buffer */ | 283 | __u32 write_seq; /* Tail(+1) of data held in tcp send buffer */ |
diff --git a/include/linux/time.h b/include/linux/time.h index bfbe92d0767c..797ccd813bb0 100644 --- a/include/linux/time.h +++ b/include/linux/time.h | |||
@@ -95,6 +95,7 @@ struct itimerval; | |||
95 | extern int do_setitimer(int which, struct itimerval *value, struct itimerval *ovalue); | 95 | extern int do_setitimer(int which, struct itimerval *value, struct itimerval *ovalue); |
96 | extern int do_getitimer(int which, struct itimerval *value); | 96 | extern int do_getitimer(int which, struct itimerval *value); |
97 | extern void getnstimeofday (struct timespec *tv); | 97 | extern void getnstimeofday (struct timespec *tv); |
98 | extern void getnstimestamp(struct timespec *ts); | ||
98 | 99 | ||
99 | extern struct timespec timespec_trunc(struct timespec t, unsigned gran); | 100 | extern struct timespec timespec_trunc(struct timespec t, unsigned gran); |
100 | 101 | ||
diff --git a/include/linux/tty.h b/include/linux/tty.h index 1267f88ece6e..57449704a47b 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/workqueue.h> | 23 | #include <linux/workqueue.h> |
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 | 27 | ||
27 | #include <asm/system.h> | 28 | #include <asm/system.h> |
28 | 29 | ||
@@ -37,77 +38,6 @@ | |||
37 | #define NR_LDISCS 16 | 38 | #define NR_LDISCS 16 |
38 | 39 | ||
39 | /* | 40 | /* |
40 | * These are set up by the setup-routine at boot-time: | ||
41 | */ | ||
42 | |||
43 | struct screen_info { | ||
44 | u8 orig_x; /* 0x00 */ | ||
45 | u8 orig_y; /* 0x01 */ | ||
46 | u16 dontuse1; /* 0x02 -- EXT_MEM_K sits here */ | ||
47 | u16 orig_video_page; /* 0x04 */ | ||
48 | u8 orig_video_mode; /* 0x06 */ | ||
49 | u8 orig_video_cols; /* 0x07 */ | ||
50 | u16 unused2; /* 0x08 */ | ||
51 | u16 orig_video_ega_bx; /* 0x0a */ | ||
52 | u16 unused3; /* 0x0c */ | ||
53 | u8 orig_video_lines; /* 0x0e */ | ||
54 | u8 orig_video_isVGA; /* 0x0f */ | ||
55 | u16 orig_video_points; /* 0x10 */ | ||
56 | |||
57 | /* VESA graphic mode -- linear frame buffer */ | ||
58 | u16 lfb_width; /* 0x12 */ | ||
59 | u16 lfb_height; /* 0x14 */ | ||
60 | u16 lfb_depth; /* 0x16 */ | ||
61 | u32 lfb_base; /* 0x18 */ | ||
62 | u32 lfb_size; /* 0x1c */ | ||
63 | u16 dontuse2, dontuse3; /* 0x20 -- CL_MAGIC and CL_OFFSET here */ | ||
64 | u16 lfb_linelength; /* 0x24 */ | ||
65 | u8 red_size; /* 0x26 */ | ||
66 | u8 red_pos; /* 0x27 */ | ||
67 | u8 green_size; /* 0x28 */ | ||
68 | u8 green_pos; /* 0x29 */ | ||
69 | u8 blue_size; /* 0x2a */ | ||
70 | u8 blue_pos; /* 0x2b */ | ||
71 | u8 rsvd_size; /* 0x2c */ | ||
72 | u8 rsvd_pos; /* 0x2d */ | ||
73 | u16 vesapm_seg; /* 0x2e */ | ||
74 | u16 vesapm_off; /* 0x30 */ | ||
75 | u16 pages; /* 0x32 */ | ||
76 | u16 vesa_attributes; /* 0x34 */ | ||
77 | u32 capabilities; /* 0x36 */ | ||
78 | /* 0x3a -- 0x3f reserved for future expansion */ | ||
79 | }; | ||
80 | |||
81 | extern struct screen_info screen_info; | ||
82 | |||
83 | #define ORIG_X (screen_info.orig_x) | ||
84 | #define ORIG_Y (screen_info.orig_y) | ||
85 | #define ORIG_VIDEO_MODE (screen_info.orig_video_mode) | ||
86 | #define ORIG_VIDEO_COLS (screen_info.orig_video_cols) | ||
87 | #define ORIG_VIDEO_EGA_BX (screen_info.orig_video_ega_bx) | ||
88 | #define ORIG_VIDEO_LINES (screen_info.orig_video_lines) | ||
89 | #define ORIG_VIDEO_ISVGA (screen_info.orig_video_isVGA) | ||
90 | #define ORIG_VIDEO_POINTS (screen_info.orig_video_points) | ||
91 | |||
92 | #define VIDEO_TYPE_MDA 0x10 /* Monochrome Text Display */ | ||
93 | #define VIDEO_TYPE_CGA 0x11 /* CGA Display */ | ||
94 | #define VIDEO_TYPE_EGAM 0x20 /* EGA/VGA in Monochrome Mode */ | ||
95 | #define VIDEO_TYPE_EGAC 0x21 /* EGA in Color Mode */ | ||
96 | #define VIDEO_TYPE_VGAC 0x22 /* VGA+ in Color Mode */ | ||
97 | #define VIDEO_TYPE_VLFB 0x23 /* VESA VGA in graphic mode */ | ||
98 | |||
99 | #define VIDEO_TYPE_PICA_S3 0x30 /* ACER PICA-61 local S3 video */ | ||
100 | #define VIDEO_TYPE_MIPS_G364 0x31 /* MIPS Magnum 4000 G364 video */ | ||
101 | #define VIDEO_TYPE_SGI 0x33 /* Various SGI graphics hardware */ | ||
102 | |||
103 | #define VIDEO_TYPE_TGAC 0x40 /* DEC TGA */ | ||
104 | |||
105 | #define VIDEO_TYPE_SUN 0x50 /* Sun frame buffer. */ | ||
106 | #define VIDEO_TYPE_SUNPCI 0x51 /* Sun PCI based frame buffer. */ | ||
107 | |||
108 | #define VIDEO_TYPE_PMAC 0x60 /* PowerMacintosh frame buffer. */ | ||
109 | |||
110 | /* | ||
111 | * This character is the same as _POSIX_VDISABLE: it cannot be used as | 41 | * This character is the same as _POSIX_VDISABLE: it cannot be used as |
112 | * a c_cc[] character, but indicates that a particular special character | 42 | * a c_cc[] character, but indicates that a particular special character |
113 | * isn't in use (eg VINTR has no character etc) | 43 | * isn't in use (eg VINTR has no character etc) |
diff --git a/include/linux/udf_fs.h b/include/linux/udf_fs.h index 46e2bb945353..36c684e1b110 100644 --- a/include/linux/udf_fs.h +++ b/include/linux/udf_fs.h | |||
@@ -13,11 +13,6 @@ | |||
13 | * http://www.osta.org/ * http://www.ecma.ch/ | 13 | * http://www.osta.org/ * http://www.ecma.ch/ |
14 | * http://www.iso.org/ | 14 | * http://www.iso.org/ |
15 | * | 15 | * |
16 | * CONTACTS | ||
17 | * E-mail regarding any portion of the Linux UDF file system should be | ||
18 | * directed to the development team mailing list (run by majordomo): | ||
19 | * linux_udf@hpesjro.fc.hp.com | ||
20 | * | ||
21 | * COPYRIGHT | 16 | * COPYRIGHT |
22 | * This file is distributed under the terms of the GNU General Public | 17 | * This file is distributed under the terms of the GNU General Public |
23 | * License (GPL). Copies of the GPL can be obtained from: | 18 | * License (GPL). Copies of the GPL can be obtained from: |
diff --git a/include/linux/udf_fs_i.h b/include/linux/udf_fs_i.h index 62b15a4214e6..1e7508420fcf 100644 --- a/include/linux/udf_fs_i.h +++ b/include/linux/udf_fs_i.h | |||
@@ -3,11 +3,6 @@ | |||
3 | * | 3 | * |
4 | * This file is intended for the Linux kernel/module. | 4 | * This file is intended for the Linux kernel/module. |
5 | * | 5 | * |
6 | * CONTACTS | ||
7 | * E-mail regarding any portion of the Linux UDF file system should be | ||
8 | * directed to the development team mailing list (run by majordomo): | ||
9 | * linux_udf@hpesjro.fc.hp.com | ||
10 | * | ||
11 | * COPYRIGHT | 6 | * COPYRIGHT |
12 | * This file is distributed under the terms of the GNU General Public | 7 | * This file is distributed under the terms of the GNU General Public |
13 | * License (GPL). Copies of the GPL can be obtained from: | 8 | * License (GPL). Copies of the GPL can be obtained from: |
diff --git a/include/linux/udf_fs_sb.h b/include/linux/udf_fs_sb.h index 1966a6dbb4b6..b15ff2e99c91 100644 --- a/include/linux/udf_fs_sb.h +++ b/include/linux/udf_fs_sb.h | |||
@@ -3,11 +3,6 @@ | |||
3 | * | 3 | * |
4 | * This include file is for the Linux kernel/module. | 4 | * This include file is for the Linux kernel/module. |
5 | * | 5 | * |
6 | * CONTACTS | ||
7 | * E-mail regarding any portion of the Linux UDF file system should be | ||
8 | * directed to the development team mailing list (run by majordomo): | ||
9 | * linux_udf@hpesjro.fc.hp.com | ||
10 | * | ||
11 | * COPYRIGHT | 6 | * COPYRIGHT |
12 | * This file is distributed under the terms of the GNU General Public | 7 | * This file is distributed under the terms of the GNU General Public |
13 | * License (GPL). Copies of the GPL can be obtained from: | 8 | * License (GPL). Copies of the GPL can be obtained from: |
diff --git a/include/linux/udp.h b/include/linux/udp.h index b60e0b4a25c4..85a55658831c 100644 --- a/include/linux/udp.h +++ b/include/linux/udp.h | |||
@@ -35,10 +35,10 @@ struct udphdr { | |||
35 | #define UDP_ENCAP_ESPINUDP 2 /* draft-ietf-ipsec-udp-encaps-06 */ | 35 | #define UDP_ENCAP_ESPINUDP 2 /* draft-ietf-ipsec-udp-encaps-06 */ |
36 | 36 | ||
37 | #ifdef __KERNEL__ | 37 | #ifdef __KERNEL__ |
38 | |||
39 | #include <linux/config.h> | 38 | #include <linux/config.h> |
40 | #include <net/sock.h> | 39 | #include <linux/types.h> |
41 | #include <linux/ip.h> | 40 | |
41 | #include <net/inet_sock.h> | ||
42 | 42 | ||
43 | struct udp_sock { | 43 | struct udp_sock { |
44 | /* inet_sock has to be the first member */ | 44 | /* inet_sock has to be the first member */ |
diff --git a/include/linux/usb.h b/include/linux/usb.h index d81b050e5955..827cc6de5f5c 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
@@ -225,7 +225,7 @@ struct usb_interface_cache { | |||
225 | * Device drivers should not attempt to activate configurations. The choice | 225 | * Device drivers should not attempt to activate configurations. The choice |
226 | * of which configuration to install is a policy decision based on such | 226 | * of which configuration to install is a policy decision based on such |
227 | * considerations as available power, functionality provided, and the user's | 227 | * considerations as available power, functionality provided, and the user's |
228 | * desires (expressed through hotplug scripts). However, drivers can call | 228 | * desires (expressed through userspace tools). However, drivers can call |
229 | * usb_reset_configuration() to reinitialize the current configuration and | 229 | * usb_reset_configuration() to reinitialize the current configuration and |
230 | * all its interfaces. | 230 | * all its interfaces. |
231 | */ | 231 | */ |
@@ -329,8 +329,6 @@ struct usb_device { | |||
329 | struct usb_tt *tt; /* low/full speed dev, highspeed hub */ | 329 | struct usb_tt *tt; /* low/full speed dev, highspeed hub */ |
330 | int ttport; /* device port on that tt hub */ | 330 | int ttport; /* device port on that tt hub */ |
331 | 331 | ||
332 | struct semaphore serialize; | ||
333 | |||
334 | unsigned int toggle[2]; /* one bit for each endpoint | 332 | unsigned int toggle[2]; /* one bit for each endpoint |
335 | * ([0] = IN, [1] = OUT) */ | 333 | * ([0] = IN, [1] = OUT) */ |
336 | 334 | ||
@@ -349,6 +347,9 @@ struct usb_device { | |||
349 | 347 | ||
350 | char **rawdescriptors; /* Raw descriptors for each config */ | 348 | char **rawdescriptors; /* Raw descriptors for each config */ |
351 | 349 | ||
350 | unsigned short bus_mA; /* Current available from the bus */ | ||
351 | u8 portnum; /* Parent port number (origin 1) */ | ||
352 | |||
352 | int have_langid; /* whether string_langid is valid */ | 353 | int have_langid; /* whether string_langid is valid */ |
353 | int string_langid; /* language ID for strings */ | 354 | int string_langid; /* language ID for strings */ |
354 | 355 | ||
@@ -377,11 +378,12 @@ struct usb_device { | |||
377 | extern struct usb_device *usb_get_dev(struct usb_device *dev); | 378 | extern struct usb_device *usb_get_dev(struct usb_device *dev); |
378 | extern void usb_put_dev(struct usb_device *dev); | 379 | extern void usb_put_dev(struct usb_device *dev); |
379 | 380 | ||
380 | extern void usb_lock_device(struct usb_device *udev); | 381 | /* USB device locking */ |
381 | extern int usb_trylock_device(struct usb_device *udev); | 382 | #define usb_lock_device(udev) down(&(udev)->dev.sem) |
383 | #define usb_unlock_device(udev) up(&(udev)->dev.sem) | ||
384 | #define usb_trylock_device(udev) down_trylock(&(udev)->dev.sem) | ||
382 | extern int usb_lock_device_for_reset(struct usb_device *udev, | 385 | extern int usb_lock_device_for_reset(struct usb_device *udev, |
383 | struct usb_interface *iface); | 386 | struct usb_interface *iface); |
384 | extern void usb_unlock_device(struct usb_device *udev); | ||
385 | 387 | ||
386 | /* USB port reset for device reinitialization */ | 388 | /* USB port reset for device reinitialization */ |
387 | extern int usb_reset_device(struct usb_device *dev); | 389 | extern int usb_reset_device(struct usb_device *dev); |
@@ -529,10 +531,13 @@ static inline int usb_make_path (struct usb_device *dev, char *buf, | |||
529 | 531 | ||
530 | /* ----------------------------------------------------------------------- */ | 532 | /* ----------------------------------------------------------------------- */ |
531 | 533 | ||
534 | struct usb_dynids { | ||
535 | spinlock_t lock; | ||
536 | struct list_head list; | ||
537 | }; | ||
538 | |||
532 | /** | 539 | /** |
533 | * struct usb_driver - identifies USB driver to usbcore | 540 | * struct usb_driver - identifies USB driver to usbcore |
534 | * @owner: Pointer to the module owner of this driver; initialize | ||
535 | * it using THIS_MODULE. | ||
536 | * @name: The driver name should be unique among USB drivers, | 541 | * @name: The driver name should be unique among USB drivers, |
537 | * and should normally be the same as the module name. | 542 | * and should normally be the same as the module name. |
538 | * @probe: Called to see if the driver is willing to manage a particular | 543 | * @probe: Called to see if the driver is willing to manage a particular |
@@ -553,7 +558,11 @@ static inline int usb_make_path (struct usb_device *dev, char *buf, | |||
553 | * @id_table: USB drivers use ID table to support hotplugging. | 558 | * @id_table: USB drivers use ID table to support hotplugging. |
554 | * Export this with MODULE_DEVICE_TABLE(usb,...). This must be set | 559 | * Export this with MODULE_DEVICE_TABLE(usb,...). This must be set |
555 | * or your driver's probe function will never get called. | 560 | * or your driver's probe function will never get called. |
561 | * @dynids: used internally to hold the list of dynamically added device | ||
562 | * ids for this driver. | ||
556 | * @driver: the driver model core driver structure. | 563 | * @driver: the driver model core driver structure. |
564 | * @no_dynamic_id: if set to 1, the USB core will not allow dynamic ids to be | ||
565 | * added to this driver by preventing the sysfs file from being created. | ||
557 | * | 566 | * |
558 | * USB drivers must provide a name, probe() and disconnect() methods, | 567 | * USB drivers must provide a name, probe() and disconnect() methods, |
559 | * and an id_table. Other driver fields are optional. | 568 | * and an id_table. Other driver fields are optional. |
@@ -571,8 +580,6 @@ static inline int usb_make_path (struct usb_device *dev, char *buf, | |||
571 | * them as necessary, and blocking until the unlinks complete). | 580 | * them as necessary, and blocking until the unlinks complete). |
572 | */ | 581 | */ |
573 | struct usb_driver { | 582 | struct usb_driver { |
574 | struct module *owner; | ||
575 | |||
576 | const char *name; | 583 | const char *name; |
577 | 584 | ||
578 | int (*probe) (struct usb_interface *intf, | 585 | int (*probe) (struct usb_interface *intf, |
@@ -588,7 +595,9 @@ struct usb_driver { | |||
588 | 595 | ||
589 | const struct usb_device_id *id_table; | 596 | const struct usb_device_id *id_table; |
590 | 597 | ||
598 | struct usb_dynids dynids; | ||
591 | struct device_driver driver; | 599 | struct device_driver driver; |
600 | unsigned int no_dynamic_id:1; | ||
592 | }; | 601 | }; |
593 | #define to_usb_driver(d) container_of(d, struct usb_driver, driver) | 602 | #define to_usb_driver(d) container_of(d, struct usb_driver, driver) |
594 | 603 | ||
@@ -614,7 +623,11 @@ struct usb_class_driver { | |||
614 | * use these in module_init()/module_exit() | 623 | * use these in module_init()/module_exit() |
615 | * and don't forget MODULE_DEVICE_TABLE(usb, ...) | 624 | * and don't forget MODULE_DEVICE_TABLE(usb, ...) |
616 | */ | 625 | */ |
617 | extern int usb_register(struct usb_driver *); | 626 | int usb_register_driver(struct usb_driver *, struct module *); |
627 | static inline int usb_register(struct usb_driver *driver) | ||
628 | { | ||
629 | return usb_register_driver(driver, THIS_MODULE); | ||
630 | } | ||
618 | extern void usb_deregister(struct usb_driver *); | 631 | extern void usb_deregister(struct usb_driver *); |
619 | 632 | ||
620 | extern int usb_register_dev(struct usb_interface *intf, | 633 | extern int usb_register_dev(struct usb_interface *intf, |
diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h new file mode 100644 index 000000000000..b2d08984a9f7 --- /dev/null +++ b/include/linux/usb_usual.h | |||
@@ -0,0 +1,126 @@ | |||
1 | /* | ||
2 | * Interface to the libusual. | ||
3 | * | ||
4 | * Copyright (c) 2005 Pete Zaitcev <zaitcev@redhat.com> | ||
5 | * Copyright (c) 1999-2002 Matthew Dharm (mdharm-usb@one-eyed-alien.net) | ||
6 | * Copyright (c) 1999 Michael Gee (michael@linuxspecific.com) | ||
7 | */ | ||
8 | |||
9 | #ifndef __LINUX_USB_USUAL_H | ||
10 | #define __LINUX_USB_USUAL_H | ||
11 | |||
12 | #include <linux/config.h> | ||
13 | |||
14 | /* We should do this for cleanliness... But other usb_foo.h do not do this. */ | ||
15 | /* #include <linux/usb.h> */ | ||
16 | |||
17 | /* | ||
18 | * The flags field, which we store in usb_device_id.driver_info. | ||
19 | * It is compatible with the old usb-storage flags in lower 24 bits. | ||
20 | */ | ||
21 | |||
22 | /* | ||
23 | * Static flag definitions. We use this roundabout technique so that the | ||
24 | * proc_info() routine can automatically display a message for each flag. | ||
25 | */ | ||
26 | #define US_DO_ALL_FLAGS \ | ||
27 | US_FLAG(SINGLE_LUN, 0x00000001) \ | ||
28 | /* allow access to only LUN 0 */ \ | ||
29 | US_FLAG(NEED_OVERRIDE, 0x00000002) \ | ||
30 | /* unusual_devs entry is necessary */ \ | ||
31 | US_FLAG(SCM_MULT_TARG, 0x00000004) \ | ||
32 | /* supports multiple targets */ \ | ||
33 | US_FLAG(FIX_INQUIRY, 0x00000008) \ | ||
34 | /* INQUIRY response needs faking */ \ | ||
35 | US_FLAG(FIX_CAPACITY, 0x00000010) \ | ||
36 | /* READ CAPACITY response too big */ \ | ||
37 | US_FLAG(IGNORE_RESIDUE, 0x00000020) \ | ||
38 | /* reported residue is wrong */ \ | ||
39 | US_FLAG(BULK32, 0x00000040) \ | ||
40 | /* Uses 32-byte CBW length */ \ | ||
41 | US_FLAG(NOT_LOCKABLE, 0x00000080) \ | ||
42 | /* PREVENT/ALLOW not supported */ \ | ||
43 | US_FLAG(GO_SLOW, 0x00000100) \ | ||
44 | /* Need delay after Command phase */ \ | ||
45 | US_FLAG(NO_WP_DETECT, 0x00000200) \ | ||
46 | /* Don't check for write-protect */ \ | ||
47 | |||
48 | #define US_FLAG(name, value) US_FL_##name = value , | ||
49 | enum { US_DO_ALL_FLAGS }; | ||
50 | #undef US_FLAG | ||
51 | |||
52 | /* | ||
53 | * The bias field for libusual and friends. | ||
54 | */ | ||
55 | #define USB_US_TYPE_NONE 0 | ||
56 | #define USB_US_TYPE_STOR 1 /* usb-storage */ | ||
57 | #define USB_US_TYPE_UB 2 /* ub */ | ||
58 | |||
59 | #define USB_US_TYPE(flags) (((flags) >> 24) & 0xFF) | ||
60 | #define USB_US_ORIG_FLAGS(flags) ((flags) & 0x00FFFFFF) | ||
61 | |||
62 | /* | ||
63 | * This is probably not the best place to keep these constants, conceptually. | ||
64 | * But it's the only header included into all places which need them. | ||
65 | */ | ||
66 | |||
67 | /* Sub Classes */ | ||
68 | |||
69 | #define US_SC_RBC 0x01 /* Typically, flash devices */ | ||
70 | #define US_SC_8020 0x02 /* CD-ROM */ | ||
71 | #define US_SC_QIC 0x03 /* QIC-157 Tapes */ | ||
72 | #define US_SC_UFI 0x04 /* Floppy */ | ||
73 | #define US_SC_8070 0x05 /* Removable media */ | ||
74 | #define US_SC_SCSI 0x06 /* Transparent */ | ||
75 | #define US_SC_ISD200 0x07 /* ISD200 ATA */ | ||
76 | #define US_SC_MIN US_SC_RBC | ||
77 | #define US_SC_MAX US_SC_ISD200 | ||
78 | |||
79 | #define US_SC_DEVICE 0xff /* Use device's value */ | ||
80 | |||
81 | /* Protocols */ | ||
82 | |||
83 | #define US_PR_CBI 0x00 /* Control/Bulk/Interrupt */ | ||
84 | #define US_PR_CB 0x01 /* Control/Bulk w/o interrupt */ | ||
85 | #define US_PR_BULK 0x50 /* bulk only */ | ||
86 | #ifdef CONFIG_USB_STORAGE_USBAT | ||
87 | #define US_PR_USBAT 0x80 /* SCM-ATAPI bridge */ | ||
88 | #endif | ||
89 | #ifdef CONFIG_USB_STORAGE_SDDR09 | ||
90 | #define US_PR_EUSB_SDDR09 0x81 /* SCM-SCSI bridge for SDDR-09 */ | ||
91 | #endif | ||
92 | #ifdef CONFIG_USB_STORAGE_SDDR55 | ||
93 | #define US_PR_SDDR55 0x82 /* SDDR-55 (made up) */ | ||
94 | #endif | ||
95 | #define US_PR_DPCM_USB 0xf0 /* Combination CB/SDDR09 */ | ||
96 | #ifdef CONFIG_USB_STORAGE_FREECOM | ||
97 | #define US_PR_FREECOM 0xf1 /* Freecom */ | ||
98 | #endif | ||
99 | #ifdef CONFIG_USB_STORAGE_DATAFAB | ||
100 | #define US_PR_DATAFAB 0xf2 /* Datafab chipsets */ | ||
101 | #endif | ||
102 | #ifdef CONFIG_USB_STORAGE_JUMPSHOT | ||
103 | #define US_PR_JUMPSHOT 0xf3 /* Lexar Jumpshot */ | ||
104 | #endif | ||
105 | #ifdef CONFIG_USB_STORAGE_ALAUDA | ||
106 | #define US_PR_ALAUDA 0xf4 /* Alauda chipsets */ | ||
107 | #endif | ||
108 | |||
109 | #define US_PR_DEVICE 0xff /* Use device's value */ | ||
110 | |||
111 | /* | ||
112 | */ | ||
113 | #ifdef CONFIG_USB_LIBUSUAL | ||
114 | |||
115 | extern struct usb_device_id storage_usb_ids[]; | ||
116 | extern void usb_usual_set_present(int type); | ||
117 | extern void usb_usual_clear_present(int type); | ||
118 | extern int usb_usual_check_type(const struct usb_device_id *, int type); | ||
119 | #else | ||
120 | |||
121 | #define usb_usual_set_present(t) do { } while(0) | ||
122 | #define usb_usual_clear_present(t) do { } while(0) | ||
123 | #define usb_usual_check_type(id, t) (0) | ||
124 | #endif /* CONFIG_USB_LIBUSUAL */ | ||
125 | |||
126 | #endif /* __LINUX_USB_USUAL_H */ | ||
diff --git a/include/linux/wavefront.h b/include/linux/wavefront.h index 61bd0fd35240..51ab3c933acd 100644 --- a/include/linux/wavefront.h +++ b/include/linux/wavefront.h | |||
@@ -434,22 +434,22 @@ typedef struct wf_multisample { | |||
434 | } wavefront_multisample; | 434 | } wavefront_multisample; |
435 | 435 | ||
436 | typedef struct wf_alias { | 436 | typedef struct wf_alias { |
437 | INT16 OriginalSample __attribute__ ((packed)); | 437 | INT16 OriginalSample; |
438 | 438 | ||
439 | struct wf_sample_offset sampleStartOffset __attribute__ ((packed)); | 439 | struct wf_sample_offset sampleStartOffset; |
440 | struct wf_sample_offset loopStartOffset __attribute__ ((packed)); | 440 | struct wf_sample_offset loopStartOffset; |
441 | struct wf_sample_offset sampleEndOffset __attribute__ ((packed)); | 441 | struct wf_sample_offset sampleEndOffset; |
442 | struct wf_sample_offset loopEndOffset __attribute__ ((packed)); | 442 | struct wf_sample_offset loopEndOffset; |
443 | 443 | ||
444 | INT16 FrequencyBias __attribute__ ((packed)); | 444 | INT16 FrequencyBias; |
445 | 445 | ||
446 | UCHAR8 SampleResolution:2 __attribute__ ((packed)); | 446 | UCHAR8 SampleResolution:2; |
447 | UCHAR8 Unused1:1 __attribute__ ((packed)); | 447 | UCHAR8 Unused1:1; |
448 | UCHAR8 Loop:1 __attribute__ ((packed)); | 448 | UCHAR8 Loop:1; |
449 | UCHAR8 Bidirectional:1 __attribute__ ((packed)); | 449 | UCHAR8 Bidirectional:1; |
450 | UCHAR8 Unused2:1 __attribute__ ((packed)); | 450 | UCHAR8 Unused2:1; |
451 | UCHAR8 Reverse:1 __attribute__ ((packed)); | 451 | UCHAR8 Reverse:1; |
452 | UCHAR8 Unused3:1 __attribute__ ((packed)); | 452 | UCHAR8 Unused3:1; |
453 | 453 | ||
454 | /* This structure is meant to be padded only to 16 bits on their | 454 | /* This structure is meant to be padded only to 16 bits on their |
455 | original. Of course, whoever wrote their documentation didn't | 455 | original. Of course, whoever wrote their documentation didn't |
@@ -460,8 +460,8 @@ typedef struct wf_alias { | |||
460 | standard 16->32 bit issues. | 460 | standard 16->32 bit issues. |
461 | */ | 461 | */ |
462 | 462 | ||
463 | UCHAR8 sixteen_bit_padding __attribute__ ((packed)); | 463 | UCHAR8 sixteen_bit_padding; |
464 | } wavefront_alias; | 464 | } __attribute__((packed)) wavefront_alias; |
465 | 465 | ||
466 | typedef struct wf_drum { | 466 | typedef struct wf_drum { |
467 | UCHAR8 PatchNumber; | 467 | UCHAR8 PatchNumber; |
diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h index ac39d04d027c..86b111300231 100644 --- a/include/linux/workqueue.h +++ b/include/linux/workqueue.h | |||
@@ -65,6 +65,7 @@ extern int FASTCALL(schedule_work(struct work_struct *work)); | |||
65 | extern int FASTCALL(schedule_delayed_work(struct work_struct *work, unsigned long delay)); | 65 | extern int FASTCALL(schedule_delayed_work(struct work_struct *work, unsigned long delay)); |
66 | 66 | ||
67 | extern int schedule_delayed_work_on(int cpu, struct work_struct *work, unsigned long delay); | 67 | extern int schedule_delayed_work_on(int cpu, struct work_struct *work, unsigned long delay); |
68 | extern int schedule_on_each_cpu(void (*func)(void *info), void *info); | ||
68 | extern void flush_scheduled_work(void); | 69 | extern void flush_scheduled_work(void); |
69 | extern int current_is_keventd(void); | 70 | extern int current_is_keventd(void); |
70 | extern int keventd_up(void); | 71 | extern int keventd_up(void); |
diff --git a/include/linux/writeback.h b/include/linux/writeback.h index 343d883d69c5..beaef5c7a0ea 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h | |||
@@ -53,19 +53,14 @@ struct writeback_control { | |||
53 | loff_t start; | 53 | loff_t start; |
54 | loff_t end; | 54 | loff_t end; |
55 | 55 | ||
56 | unsigned nonblocking:1; /* Don't get stuck on request queues */ | 56 | unsigned nonblocking:1; /* Don't get stuck on request queues */ |
57 | unsigned encountered_congestion:1; /* An output: a queue is full */ | 57 | unsigned encountered_congestion:1; /* An output: a queue is full */ |
58 | unsigned for_kupdate:1; /* A kupdate writeback */ | 58 | unsigned for_kupdate:1; /* A kupdate writeback */ |
59 | unsigned for_reclaim:1; /* Invoked from the page allocator */ | 59 | unsigned for_reclaim:1; /* Invoked from the page allocator */ |
60 | unsigned for_writepages:1; /* This is a writepages() call */ | ||
60 | }; | 61 | }; |
61 | 62 | ||
62 | /* | 63 | /* |
63 | * ->writepage() return values (make these much larger than a pagesize, in | ||
64 | * case some fs is returning number-of-bytes-written from writepage) | ||
65 | */ | ||
66 | #define WRITEPAGE_ACTIVATE 0x80000 /* IO was not started: activate page */ | ||
67 | |||
68 | /* | ||
69 | * fs/fs-writeback.c | 64 | * fs/fs-writeback.c |
70 | */ | 65 | */ |
71 | void writeback_inodes(struct writeback_control *wbc); | 66 | void writeback_inodes(struct writeback_control *wbc); |
@@ -108,7 +103,9 @@ void balance_dirty_pages_ratelimited(struct address_space *mapping); | |||
108 | int pdflush_operation(void (*fn)(unsigned long), unsigned long arg0); | 103 | int pdflush_operation(void (*fn)(unsigned long), unsigned long arg0); |
109 | int do_writepages(struct address_space *mapping, struct writeback_control *wbc); | 104 | int do_writepages(struct address_space *mapping, struct writeback_control *wbc); |
110 | int sync_page_range(struct inode *inode, struct address_space *mapping, | 105 | int sync_page_range(struct inode *inode, struct address_space *mapping, |
111 | loff_t pos, size_t count); | 106 | loff_t pos, loff_t count); |
107 | int sync_page_range_nolock(struct inode *inode, struct address_space *mapping, | ||
108 | loff_t pos, loff_t count); | ||
112 | 109 | ||
113 | /* pdflush.c */ | 110 | /* pdflush.c */ |
114 | extern int nr_pdflush_threads; /* Global so it can be exported to sysctl | 111 | extern int nr_pdflush_threads; /* Global so it can be exported to sysctl |
diff --git a/include/linux/xfrm.h b/include/linux/xfrm.h index 0fb077d68441..82fbb758e28f 100644 --- a/include/linux/xfrm.h +++ b/include/linux/xfrm.h | |||
@@ -27,6 +27,22 @@ struct xfrm_id | |||
27 | __u8 proto; | 27 | __u8 proto; |
28 | }; | 28 | }; |
29 | 29 | ||
30 | struct xfrm_sec_ctx { | ||
31 | __u8 ctx_doi; | ||
32 | __u8 ctx_alg; | ||
33 | __u16 ctx_len; | ||
34 | __u32 ctx_sid; | ||
35 | char ctx_str[0]; | ||
36 | }; | ||
37 | |||
38 | /* Security Context Domains of Interpretation */ | ||
39 | #define XFRM_SC_DOI_RESERVED 0 | ||
40 | #define XFRM_SC_DOI_LSM 1 | ||
41 | |||
42 | /* Security Context Algorithms */ | ||
43 | #define XFRM_SC_ALG_RESERVED 0 | ||
44 | #define XFRM_SC_ALG_SELINUX 1 | ||
45 | |||
30 | /* Selector, used as selector both on policy rules (SPD) and SAs. */ | 46 | /* Selector, used as selector both on policy rules (SPD) and SAs. */ |
31 | 47 | ||
32 | struct xfrm_selector | 48 | struct xfrm_selector |
@@ -146,6 +162,18 @@ enum { | |||
146 | 162 | ||
147 | #define XFRM_NR_MSGTYPES (XFRM_MSG_MAX + 1 - XFRM_MSG_BASE) | 163 | #define XFRM_NR_MSGTYPES (XFRM_MSG_MAX + 1 - XFRM_MSG_BASE) |
148 | 164 | ||
165 | /* | ||
166 | * Generic LSM security context for comunicating to user space | ||
167 | * NOTE: Same format as sadb_x_sec_ctx | ||
168 | */ | ||
169 | struct xfrm_user_sec_ctx { | ||
170 | __u16 len; | ||
171 | __u16 exttype; | ||
172 | __u8 ctx_alg; /* LSMs: e.g., selinux == 1 */ | ||
173 | __u8 ctx_doi; | ||
174 | __u16 ctx_len; | ||
175 | }; | ||
176 | |||
149 | struct xfrm_user_tmpl { | 177 | struct xfrm_user_tmpl { |
150 | struct xfrm_id id; | 178 | struct xfrm_id id; |
151 | __u16 family; | 179 | __u16 family; |
@@ -176,6 +204,7 @@ enum xfrm_attr_type_t { | |||
176 | XFRMA_TMPL, /* 1 or more struct xfrm_user_tmpl */ | 204 | XFRMA_TMPL, /* 1 or more struct xfrm_user_tmpl */ |
177 | XFRMA_SA, | 205 | XFRMA_SA, |
178 | XFRMA_POLICY, | 206 | XFRMA_POLICY, |
207 | XFRMA_SEC_CTX, /* struct xfrm_sec_ctx */ | ||
179 | __XFRMA_MAX | 208 | __XFRMA_MAX |
180 | 209 | ||
181 | #define XFRMA_MAX (__XFRMA_MAX - 1) | 210 | #define XFRMA_MAX (__XFRMA_MAX - 1) |