diff options
66 files changed, 737 insertions, 504 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 7086f0a90d14..971589a9752d 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -17,7 +17,7 @@ are specified on the kernel command line with the module name plus | |||
17 | 17 | ||
18 | usbcore.blinkenlights=1 | 18 | usbcore.blinkenlights=1 |
19 | 19 | ||
20 | The text in square brackets at the beginning of the description state the | 20 | The text in square brackets at the beginning of the description states the |
21 | restrictions on the kernel for the said kernel parameter to be valid. The | 21 | restrictions on the kernel for the said kernel parameter to be valid. The |
22 | restrictions referred to are that the relevant option is valid if: | 22 | restrictions referred to are that the relevant option is valid if: |
23 | 23 | ||
@@ -27,8 +27,8 @@ restrictions referred to are that the relevant option is valid if: | |||
27 | APM Advanced Power Management support is enabled. | 27 | APM Advanced Power Management support is enabled. |
28 | AX25 Appropriate AX.25 support is enabled. | 28 | AX25 Appropriate AX.25 support is enabled. |
29 | CD Appropriate CD support is enabled. | 29 | CD Appropriate CD support is enabled. |
30 | DEVFS devfs support is enabled. | 30 | DEVFS devfs support is enabled. |
31 | DRM Direct Rendering Management support is enabled. | 31 | DRM Direct Rendering Management support is enabled. |
32 | EDD BIOS Enhanced Disk Drive Services (EDD) is enabled | 32 | EDD BIOS Enhanced Disk Drive Services (EDD) is enabled |
33 | EFI EFI Partitioning (GPT) is enabled | 33 | EFI EFI Partitioning (GPT) is enabled |
34 | EIDE EIDE/ATAPI support is enabled. | 34 | EIDE EIDE/ATAPI support is enabled. |
@@ -71,7 +71,7 @@ restrictions referred to are that the relevant option is valid if: | |||
71 | SERIAL Serial support is enabled. | 71 | SERIAL Serial support is enabled. |
72 | SMP The kernel is an SMP kernel. | 72 | SMP The kernel is an SMP kernel. |
73 | SPARC Sparc architecture is enabled. | 73 | SPARC Sparc architecture is enabled. |
74 | SWSUSP Software suspension is enabled. | 74 | SWSUSP Software suspend is enabled. |
75 | TS Appropriate touchscreen support is enabled. | 75 | TS Appropriate touchscreen support is enabled. |
76 | USB USB support is enabled. | 76 | USB USB support is enabled. |
77 | USBHID USB Human Interface Device support is enabled. | 77 | USBHID USB Human Interface Device support is enabled. |
@@ -105,13 +105,13 @@ running once the system is up. | |||
105 | See header of drivers/scsi/53c7xx.c. | 105 | See header of drivers/scsi/53c7xx.c. |
106 | See also Documentation/scsi/ncr53c7xx.txt. | 106 | See also Documentation/scsi/ncr53c7xx.txt. |
107 | 107 | ||
108 | acpi= [HW,ACPI] Advanced Configuration and Power Interface | 108 | acpi= [HW,ACPI] Advanced Configuration and Power Interface |
109 | Format: { force | off | ht | strict } | 109 | Format: { force | off | ht | strict | noirq } |
110 | force -- enable ACPI if default was off | 110 | force -- enable ACPI if default was off |
111 | off -- disable ACPI if default was on | 111 | off -- disable ACPI if default was on |
112 | noirq -- do not use ACPI for IRQ routing | 112 | noirq -- do not use ACPI for IRQ routing |
113 | ht -- run only enough ACPI to enable Hyper Threading | 113 | ht -- run only enough ACPI to enable Hyper Threading |
114 | strict -- Be less tolerant of platforms that are not | 114 | strict -- Be less tolerant of platforms that are not |
115 | strictly ACPI specification compliant. | 115 | strictly ACPI specification compliant. |
116 | 116 | ||
117 | See also Documentation/pm.txt, pci=noacpi | 117 | See also Documentation/pm.txt, pci=noacpi |
@@ -119,20 +119,23 @@ running once the system is up. | |||
119 | acpi_sleep= [HW,ACPI] Sleep options | 119 | acpi_sleep= [HW,ACPI] Sleep options |
120 | Format: { s3_bios, s3_mode } | 120 | Format: { s3_bios, s3_mode } |
121 | See Documentation/power/video.txt | 121 | See Documentation/power/video.txt |
122 | 122 | ||
123 | acpi_sci= [HW,ACPI] ACPI System Control Interrupt trigger mode | 123 | acpi_sci= [HW,ACPI] ACPI System Control Interrupt trigger mode |
124 | Format: { level | edge | high | low } | 124 | Format: { level | edge | high | low } |
125 | 125 | ||
126 | acpi_irq_balance [HW,ACPI] ACPI will balance active IRQs | 126 | acpi_irq_balance [HW,ACPI] |
127 | default in APIC mode | 127 | ACPI will balance active IRQs |
128 | default in APIC mode | ||
128 | 129 | ||
129 | acpi_irq_nobalance [HW,ACPI] ACPI will not move active IRQs (default) | 130 | acpi_irq_nobalance [HW,ACPI] |
130 | default in PIC mode | 131 | ACPI will not move active IRQs (default) |
132 | default in PIC mode | ||
131 | 133 | ||
132 | acpi_irq_pci= [HW,ACPI] If irq_balance, Clear listed IRQs for use by PCI | 134 | acpi_irq_pci= [HW,ACPI] If irq_balance, clear listed IRQs for |
135 | use by PCI | ||
133 | Format: <irq>,<irq>... | 136 | Format: <irq>,<irq>... |
134 | 137 | ||
135 | acpi_irq_isa= [HW,ACPI] If irq_balance, Mark listed IRQs used by ISA | 138 | acpi_irq_isa= [HW,ACPI] If irq_balance, mark listed IRQs used by ISA |
136 | Format: <irq>,<irq>... | 139 | Format: <irq>,<irq>... |
137 | 140 | ||
138 | acpi_osi= [HW,ACPI] empty param disables _OSI | 141 | acpi_osi= [HW,ACPI] empty param disables _OSI |
@@ -145,14 +148,14 @@ running once the system is up. | |||
145 | 148 | ||
146 | acpi_dbg_layer= [HW,ACPI] | 149 | acpi_dbg_layer= [HW,ACPI] |
147 | Format: <int> | 150 | Format: <int> |
148 | Each bit of the <int> indicates an acpi debug layer, | 151 | Each bit of the <int> indicates an ACPI debug layer, |
149 | 1: enable, 0: disable. It is useful for boot time | 152 | 1: enable, 0: disable. It is useful for boot time |
150 | debugging. After system has booted up, it can be set | 153 | debugging. After system has booted up, it can be set |
151 | via /proc/acpi/debug_layer. | 154 | via /proc/acpi/debug_layer. |
152 | 155 | ||
153 | acpi_dbg_level= [HW,ACPI] | 156 | acpi_dbg_level= [HW,ACPI] |
154 | Format: <int> | 157 | Format: <int> |
155 | Each bit of the <int> indicates an acpi debug level, | 158 | Each bit of the <int> indicates an ACPI debug level, |
156 | 1: enable, 0: disable. It is useful for boot time | 159 | 1: enable, 0: disable. It is useful for boot time |
157 | debugging. After system has booted up, it can be set | 160 | debugging. After system has booted up, it can be set |
158 | via /proc/acpi/debug_level. | 161 | via /proc/acpi/debug_level. |
@@ -161,12 +164,13 @@ running once the system is up. | |||
161 | 164 | ||
162 | acpi_generic_hotkey [HW,ACPI] | 165 | acpi_generic_hotkey [HW,ACPI] |
163 | Allow consolidated generic hotkey driver to | 166 | Allow consolidated generic hotkey driver to |
164 | over-ride platform specific driver. | 167 | override platform specific driver. |
165 | See also Documentation/acpi-hotkey.txt. | 168 | See also Documentation/acpi-hotkey.txt. |
166 | 169 | ||
167 | enable_timer_pin_1 [i386,x86-64] | 170 | enable_timer_pin_1 [i386,x86-64] |
168 | Enable PIN 1 of APIC timer | 171 | Enable PIN 1 of APIC timer |
169 | Can be useful to work around chipset bugs (in particular on some ATI chipsets) | 172 | Can be useful to work around chipset bugs |
173 | (in particular on some ATI chipsets). | ||
170 | The kernel tries to set a reasonable default. | 174 | The kernel tries to set a reasonable default. |
171 | 175 | ||
172 | disable_timer_pin_1 [i386,x86-64] | 176 | disable_timer_pin_1 [i386,x86-64] |
@@ -182,7 +186,7 @@ running once the system is up. | |||
182 | 186 | ||
183 | adlib= [HW,OSS] | 187 | adlib= [HW,OSS] |
184 | Format: <io> | 188 | Format: <io> |
185 | 189 | ||
186 | advansys= [HW,SCSI] | 190 | advansys= [HW,SCSI] |
187 | See header of drivers/scsi/advansys.c. | 191 | See header of drivers/scsi/advansys.c. |
188 | 192 | ||
@@ -192,7 +196,7 @@ running once the system is up. | |||
192 | aedsp16= [HW,OSS] Audio Excel DSP 16 | 196 | aedsp16= [HW,OSS] Audio Excel DSP 16 |
193 | Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq> | 197 | Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq> |
194 | See also header of sound/oss/aedsp16.c. | 198 | See also header of sound/oss/aedsp16.c. |
195 | 199 | ||
196 | aha152x= [HW,SCSI] | 200 | aha152x= [HW,SCSI] |
197 | See Documentation/scsi/aha152x.txt. | 201 | See Documentation/scsi/aha152x.txt. |
198 | 202 | ||
@@ -205,10 +209,6 @@ running once the system is up. | |||
205 | aic79xx= [HW,SCSI] | 209 | aic79xx= [HW,SCSI] |
206 | See Documentation/scsi/aic79xx.txt. | 210 | See Documentation/scsi/aic79xx.txt. |
207 | 211 | ||
208 | AM53C974= [HW,SCSI] | ||
209 | Format: <host-scsi-id>,<target-scsi-id>,<max-rate>,<max-offset> | ||
210 | See also header of drivers/scsi/AM53C974.c. | ||
211 | |||
212 | amijoy.map= [HW,JOY] Amiga joystick support | 212 | amijoy.map= [HW,JOY] Amiga joystick support |
213 | Map of devices attached to JOY0DAT and JOY1DAT | 213 | Map of devices attached to JOY0DAT and JOY1DAT |
214 | Format: <a>,<b> | 214 | Format: <a>,<b> |
@@ -219,23 +219,24 @@ running once the system is up. | |||
219 | connected to one of 16 gameports | 219 | connected to one of 16 gameports |
220 | Format: <type1>,<type2>,..<type16> | 220 | Format: <type1>,<type2>,..<type16> |
221 | 221 | ||
222 | apc= [HW,SPARC] Power management functions (SPARCstation-4/5 + deriv.) | 222 | apc= [HW,SPARC] |
223 | Power management functions (SPARCstation-4/5 + deriv.) | ||
223 | Format: noidle | 224 | Format: noidle |
224 | Disable APC CPU standby support. SPARCstation-Fox does | 225 | Disable APC CPU standby support. SPARCstation-Fox does |
225 | not play well with APC CPU idle - disable it if you have | 226 | not play well with APC CPU idle - disable it if you have |
226 | APC and your system crashes randomly. | 227 | APC and your system crashes randomly. |
227 | 228 | ||
228 | apic= [APIC,i386] Change the output verbosity whilst booting | 229 | apic= [APIC,i386] Change the output verbosity whilst booting |
229 | Format: { quiet (default) | verbose | debug } | 230 | Format: { quiet (default) | verbose | debug } |
230 | Change the amount of debugging information output | 231 | Change the amount of debugging information output |
231 | when initialising the APIC and IO-APIC components. | 232 | when initialising the APIC and IO-APIC components. |
232 | 233 | ||
233 | apm= [APM] Advanced Power Management | 234 | apm= [APM] Advanced Power Management |
234 | See header of arch/i386/kernel/apm.c. | 235 | See header of arch/i386/kernel/apm.c. |
235 | 236 | ||
236 | applicom= [HW] | 237 | applicom= [HW] |
237 | Format: <mem>,<irq> | 238 | Format: <mem>,<irq> |
238 | 239 | ||
239 | arcrimi= [HW,NET] ARCnet - "RIM I" (entirely mem-mapped) cards | 240 | arcrimi= [HW,NET] ARCnet - "RIM I" (entirely mem-mapped) cards |
240 | Format: <io>,<irq>,<nodeID> | 241 | Format: <io>,<irq>,<nodeID> |
241 | 242 | ||
@@ -250,38 +251,40 @@ running once the system is up. | |||
250 | 251 | ||
251 | atkbd.reset= [HW] Reset keyboard during initialization | 252 | atkbd.reset= [HW] Reset keyboard during initialization |
252 | 253 | ||
253 | atkbd.set= [HW] Select keyboard code set | 254 | atkbd.set= [HW] Select keyboard code set |
254 | Format: <int> (2 = AT (default) 3 = PS/2) | 255 | Format: <int> (2 = AT (default), 3 = PS/2) |
255 | 256 | ||
256 | atkbd.scroll= [HW] Enable scroll wheel on MS Office and similar | 257 | atkbd.scroll= [HW] Enable scroll wheel on MS Office and similar |
257 | keyboards | 258 | keyboards |
258 | 259 | ||
259 | atkbd.softraw= [HW] Choose between synthetic and real raw mode | 260 | atkbd.softraw= [HW] Choose between synthetic and real raw mode |
260 | Format: <bool> (0 = real, 1 = synthetic (default)) | 261 | Format: <bool> (0 = real, 1 = synthetic (default)) |
261 | 262 | ||
262 | atkbd.softrepeat= | 263 | atkbd.softrepeat= [HW] |
263 | [HW] Use software keyboard repeat | 264 | Use software keyboard repeat |
264 | 265 | ||
265 | autotest [IA64] | 266 | autotest [IA64] |
266 | 267 | ||
267 | awe= [HW,OSS] AWE32/SB32/AWE64 wave table synth | 268 | awe= [HW,OSS] AWE32/SB32/AWE64 wave table synth |
268 | Format: <io>,<memsize>,<isapnp> | 269 | Format: <io>,<memsize>,<isapnp> |
269 | 270 | ||
270 | aztcd= [HW,CD] Aztech CD268 CDROM driver | 271 | aztcd= [HW,CD] Aztech CD268 CDROM driver |
271 | Format: <io>,0x79 (?) | 272 | Format: <io>,0x79 (?) |
272 | 273 | ||
273 | baycom_epp= [HW,AX25] | 274 | baycom_epp= [HW,AX25] |
274 | Format: <io>,<mode> | 275 | Format: <io>,<mode> |
275 | 276 | ||
276 | baycom_par= [HW,AX25] BayCom Parallel Port AX.25 Modem | 277 | baycom_par= [HW,AX25] BayCom Parallel Port AX.25 Modem |
277 | Format: <io>,<mode> | 278 | Format: <io>,<mode> |
278 | See header of drivers/net/hamradio/baycom_par.c. | 279 | See header of drivers/net/hamradio/baycom_par.c. |
279 | 280 | ||
280 | baycom_ser_fdx= [HW,AX25] BayCom Serial Port AX.25 Modem (Full Duplex Mode) | 281 | baycom_ser_fdx= [HW,AX25] |
282 | BayCom Serial Port AX.25 Modem (Full Duplex Mode) | ||
281 | Format: <io>,<irq>,<mode>[,<baud>] | 283 | Format: <io>,<irq>,<mode>[,<baud>] |
282 | See header of drivers/net/hamradio/baycom_ser_fdx.c. | 284 | See header of drivers/net/hamradio/baycom_ser_fdx.c. |
283 | 285 | ||
284 | baycom_ser_hdx= [HW,AX25] BayCom Serial Port AX.25 Modem (Half Duplex Mode) | 286 | baycom_ser_hdx= [HW,AX25] |
287 | BayCom Serial Port AX.25 Modem (Half Duplex Mode) | ||
285 | Format: <io>,<irq>,<mode> | 288 | Format: <io>,<irq>,<mode> |
286 | See header of drivers/net/hamradio/baycom_ser_hdx.c. | 289 | See header of drivers/net/hamradio/baycom_ser_hdx.c. |
287 | 290 | ||
@@ -292,7 +295,8 @@ running once the system is up. | |||
292 | blkmtd_count= | 295 | blkmtd_count= |
293 | 296 | ||
294 | bttv.card= [HW,V4L] bttv (bt848 + bt878 based grabber cards) | 297 | bttv.card= [HW,V4L] bttv (bt848 + bt878 based grabber cards) |
295 | bttv.radio= Most important insmod options are available as kernel args too. | 298 | bttv.radio= Most important insmod options are available as |
299 | kernel args too. | ||
296 | bttv.pll= See Documentation/video4linux/bttv/Insmod-options | 300 | bttv.pll= See Documentation/video4linux/bttv/Insmod-options |
297 | bttv.tuner= and Documentation/video4linux/bttv/CARDLIST | 301 | bttv.tuner= and Documentation/video4linux/bttv/CARDLIST |
298 | 302 | ||
@@ -318,15 +322,17 @@ running once the system is up. | |||
318 | checkreqprot [SELINUX] Set initial checkreqprot flag value. | 322 | checkreqprot [SELINUX] Set initial checkreqprot flag value. |
319 | Format: { "0" | "1" } | 323 | Format: { "0" | "1" } |
320 | See security/selinux/Kconfig help text. | 324 | See security/selinux/Kconfig help text. |
321 | 0 -- check protection applied by kernel (includes any implied execute protection). | 325 | 0 -- check protection applied by kernel (includes |
326 | any implied execute protection). | ||
322 | 1 -- check protection requested by application. | 327 | 1 -- check protection requested by application. |
323 | Default value is set via a kernel config option. | 328 | Default value is set via a kernel config option. |
324 | Value can be changed at runtime via /selinux/checkreqprot. | 329 | Value can be changed at runtime via |
325 | 330 | /selinux/checkreqprot. | |
326 | clock= [BUGS=IA-32, HW] gettimeofday timesource override. | 331 | |
332 | clock= [BUGS=IA-32,HW] gettimeofday timesource override. | ||
327 | Forces specified timesource (if avaliable) to be used | 333 | Forces specified timesource (if avaliable) to be used |
328 | when calculating gettimeofday(). If specicified timesource | 334 | when calculating gettimeofday(). If specicified |
329 | is not avalible, it defaults to PIT. | 335 | timesource is not avalible, it defaults to PIT. |
330 | Format: { pit | tsc | cyclone | pmtmr } | 336 | Format: { pit | tsc | cyclone | pmtmr } |
331 | 337 | ||
332 | hpet= [IA-32,HPET] option to disable HPET and use PIT. | 338 | hpet= [IA-32,HPET] option to disable HPET and use PIT. |
@@ -336,17 +342,19 @@ running once the system is up. | |||
336 | Format: { auto | [<io>,][<irq>] } | 342 | Format: { auto | [<io>,][<irq>] } |
337 | 343 | ||
338 | com20020= [HW,NET] ARCnet - COM20020 chipset | 344 | com20020= [HW,NET] ARCnet - COM20020 chipset |
339 | Format: <io>[,<irq>[,<nodeID>[,<backplane>[,<ckp>[,<timeout>]]]]] | 345 | Format: |
346 | <io>[,<irq>[,<nodeID>[,<backplane>[,<ckp>[,<timeout>]]]]] | ||
340 | 347 | ||
341 | com90io= [HW,NET] ARCnet - COM90xx chipset (IO-mapped buffers) | 348 | com90io= [HW,NET] ARCnet - COM90xx chipset (IO-mapped buffers) |
342 | Format: <io>[,<irq>] | 349 | Format: <io>[,<irq>] |
343 | 350 | ||
344 | com90xx= [HW,NET] ARCnet - COM90xx chipset (memory-mapped buffers) | 351 | com90xx= [HW,NET] |
352 | ARCnet - COM90xx chipset (memory-mapped buffers) | ||
345 | Format: <io>[,<irq>[,<memstart>]] | 353 | Format: <io>[,<irq>[,<memstart>]] |
346 | 354 | ||
347 | condev= [HW,S390] console device | 355 | condev= [HW,S390] console device |
348 | conmode= | 356 | conmode= |
349 | 357 | ||
350 | console= [KNL] Output console device and options. | 358 | console= [KNL] Output console device and options. |
351 | 359 | ||
352 | tty<n> Use the virtual console device <n>. | 360 | tty<n> Use the virtual console device <n>. |
@@ -367,7 +375,8 @@ running once the system is up. | |||
367 | options are the same as for ttyS, above. | 375 | options are the same as for ttyS, above. |
368 | 376 | ||
369 | cpcihp_generic= [HW,PCI] Generic port I/O CompactPCI driver | 377 | cpcihp_generic= [HW,PCI] Generic port I/O CompactPCI driver |
370 | Format: <first_slot>,<last_slot>,<port>,<enum_bit>[,<debug>] | 378 | Format: |
379 | <first_slot>,<last_slot>,<port>,<enum_bit>[,<debug>] | ||
371 | 380 | ||
372 | cpia_pp= [HW,PPT] | 381 | cpia_pp= [HW,PPT] |
373 | Format: { parport<nr> | auto | none } | 382 | Format: { parport<nr> | auto | none } |
@@ -384,10 +393,10 @@ running once the system is up. | |||
384 | 393 | ||
385 | cs89x0_media= [HW,NET] | 394 | cs89x0_media= [HW,NET] |
386 | Format: { rj45 | aui | bnc } | 395 | Format: { rj45 | aui | bnc } |
387 | 396 | ||
388 | cyclades= [HW,SERIAL] Cyclades multi-serial port adapter. | 397 | cyclades= [HW,SERIAL] Cyclades multi-serial port adapter. |
389 | 398 | ||
390 | dasd= [HW,NET] | 399 | dasd= [HW,NET] |
391 | See header of drivers/s390/block/dasd_devmap.c. | 400 | See header of drivers/s390/block/dasd_devmap.c. |
392 | 401 | ||
393 | db9.dev[2|3]= [HW,JOY] Multisystem joystick support via parallel port | 402 | db9.dev[2|3]= [HW,JOY] Multisystem joystick support via parallel port |
@@ -406,7 +415,7 @@ running once the system is up. | |||
406 | 415 | ||
407 | dhash_entries= [KNL] | 416 | dhash_entries= [KNL] |
408 | Set number of hash buckets for dentry cache. | 417 | Set number of hash buckets for dentry cache. |
409 | 418 | ||
410 | digi= [HW,SERIAL] | 419 | digi= [HW,SERIAL] |
411 | IO parameters + enable/disable command. | 420 | IO parameters + enable/disable command. |
412 | 421 | ||
@@ -424,11 +433,11 @@ running once the system is up. | |||
424 | 433 | ||
425 | dtc3181e= [HW,SCSI] | 434 | dtc3181e= [HW,SCSI] |
426 | 435 | ||
427 | earlyprintk= [IA-32, X86-64] | 436 | earlyprintk= [IA-32,X86-64] |
428 | earlyprintk=vga | 437 | earlyprintk=vga |
429 | earlyprintk=serial[,ttySn[,baudrate]] | 438 | earlyprintk=serial[,ttySn[,baudrate]] |
430 | 439 | ||
431 | Append ,keep to not disable it when the real console | 440 | Append ",keep" to not disable it when the real console |
432 | takes over. | 441 | takes over. |
433 | 442 | ||
434 | Only vga or serial at a time, not both. | 443 | Only vga or serial at a time, not both. |
@@ -451,7 +460,7 @@ running once the system is up. | |||
451 | Format: {"of[f]" | "sk[ipmbr]"} | 460 | Format: {"of[f]" | "sk[ipmbr]"} |
452 | See comment in arch/i386/boot/edd.S | 461 | See comment in arch/i386/boot/edd.S |
453 | 462 | ||
454 | eicon= [HW,ISDN] | 463 | eicon= [HW,ISDN] |
455 | Format: <id>,<membase>,<irq> | 464 | Format: <id>,<membase>,<irq> |
456 | 465 | ||
457 | eisa_irq_edge= [PARISC,HW] | 466 | eisa_irq_edge= [PARISC,HW] |
@@ -462,12 +471,13 @@ running once the system is up. | |||
462 | arch/i386/kernel/cpu/cpufreq/elanfreq.c. | 471 | arch/i386/kernel/cpu/cpufreq/elanfreq.c. |
463 | 472 | ||
464 | elevator= [IOSCHED] | 473 | elevator= [IOSCHED] |
465 | Format: {"as"|"cfq"|"deadline"|"noop"} | 474 | Format: {"as" | "cfq" | "deadline" | "noop"} |
466 | See Documentation/block/as-iosched.txt | 475 | See Documentation/block/as-iosched.txt and |
467 | and Documentation/block/deadline-iosched.txt for details. | 476 | Documentation/block/deadline-iosched.txt for details. |
477 | |||
468 | elfcorehdr= [IA-32] | 478 | elfcorehdr= [IA-32] |
469 | Specifies physical address of start of kernel core image | 479 | Specifies physical address of start of kernel core |
470 | elf header. | 480 | image elf header. |
471 | See Documentation/kdump.txt for details. | 481 | See Documentation/kdump.txt for details. |
472 | 482 | ||
473 | enforcing [SELINUX] Set initial enforcing status. | 483 | enforcing [SELINUX] Set initial enforcing status. |
@@ -485,7 +495,7 @@ running once the system is up. | |||
485 | es1371= [HW,OSS] | 495 | es1371= [HW,OSS] |
486 | Format: <spdif>,[<nomix>,[<amplifier>]] | 496 | Format: <spdif>,[<nomix>,[<amplifier>]] |
487 | See also header of sound/oss/es1371.c. | 497 | See also header of sound/oss/es1371.c. |
488 | 498 | ||
489 | ether= [HW,NET] Ethernet cards parameters | 499 | ether= [HW,NET] Ethernet cards parameters |
490 | This option is obsoleted by the "netdev=" option, which | 500 | This option is obsoleted by the "netdev=" option, which |
491 | has equivalent usage. See its documentation for details. | 501 | has equivalent usage. See its documentation for details. |
@@ -526,12 +536,13 @@ running once the system is up. | |||
526 | 536 | ||
527 | gus= [HW,OSS] | 537 | gus= [HW,OSS] |
528 | Format: <io>,<irq>,<dma>,<dma16> | 538 | Format: <io>,<irq>,<dma>,<dma16> |
529 | 539 | ||
530 | gvp11= [HW,SCSI] | 540 | gvp11= [HW,SCSI] |
531 | 541 | ||
532 | hashdist= [KNL,NUMA] Large hashes allocated during boot | 542 | hashdist= [KNL,NUMA] Large hashes allocated during boot |
533 | are distributed across NUMA nodes. Defaults on | 543 | are distributed across NUMA nodes. Defaults on |
534 | for IA-64, off otherwise. | 544 | for IA-64, off otherwise. |
545 | Format: 0 | 1 (for off | on) | ||
535 | 546 | ||
536 | hcl= [IA-64] SGI's Hardware Graph compatibility layer | 547 | hcl= [IA-64] SGI's Hardware Graph compatibility layer |
537 | 548 | ||
@@ -595,13 +606,13 @@ running once the system is up. | |||
595 | ide?= [HW] (E)IDE subsystem | 606 | ide?= [HW] (E)IDE subsystem |
596 | Format: ide?=noprobe or chipset specific parameters. | 607 | Format: ide?=noprobe or chipset specific parameters. |
597 | See Documentation/ide.txt. | 608 | See Documentation/ide.txt. |
598 | 609 | ||
599 | idebus= [HW] (E)IDE subsystem - VLB/PCI bus speed | 610 | idebus= [HW] (E)IDE subsystem - VLB/PCI bus speed |
600 | See Documentation/ide.txt. | 611 | See Documentation/ide.txt. |
601 | 612 | ||
602 | idle= [HW] | 613 | idle= [HW] |
603 | Format: idle=poll or idle=halt | 614 | Format: idle=poll or idle=halt |
604 | 615 | ||
605 | ihash_entries= [KNL] | 616 | ihash_entries= [KNL] |
606 | Set number of hash buckets for inode cache. | 617 | Set number of hash buckets for inode cache. |
607 | 618 | ||
@@ -649,7 +660,7 @@ running once the system is up. | |||
649 | firmware running. | 660 | firmware running. |
650 | 661 | ||
651 | isapnp= [ISAPNP] | 662 | isapnp= [ISAPNP] |
652 | Format: <RDP>, <reset>, <pci_scan>, <verbosity> | 663 | Format: <RDP>,<reset>,<pci_scan>,<verbosity> |
653 | 664 | ||
654 | isolcpus= [KNL,SMP] Isolate CPUs from the general scheduler. | 665 | isolcpus= [KNL,SMP] Isolate CPUs from the general scheduler. |
655 | Format: <cpu number>,...,<cpu number> | 666 | Format: <cpu number>,...,<cpu number> |
@@ -661,32 +672,33 @@ running once the system is up. | |||
661 | "number of CPUs in system - 1". | 672 | "number of CPUs in system - 1". |
662 | 673 | ||
663 | This option is the preferred way to isolate CPUs. The | 674 | This option is the preferred way to isolate CPUs. The |
664 | alternative - manually setting the CPU mask of all tasks | 675 | alternative -- manually setting the CPU mask of all |
665 | in the system can cause problems and suboptimal load | 676 | tasks in the system -- can cause problems and |
666 | balancer performance. | 677 | suboptimal load balancer performance. |
667 | 678 | ||
668 | isp16= [HW,CD] | 679 | isp16= [HW,CD] |
669 | Format: <io>,<irq>,<dma>,<setup> | 680 | Format: <io>,<irq>,<dma>,<setup> |
670 | 681 | ||
671 | iucv= [HW,NET] | 682 | iucv= [HW,NET] |
672 | 683 | ||
673 | js= [HW,JOY] Analog joystick | 684 | js= [HW,JOY] Analog joystick |
674 | See Documentation/input/joystick.txt. | 685 | See Documentation/input/joystick.txt. |
675 | 686 | ||
676 | keepinitrd [HW,ARM] | 687 | keepinitrd [HW,ARM] |
677 | 688 | ||
678 | kstack=N [IA-32, X86-64] Print N words from the kernel stack | 689 | kstack=N [IA-32,X86-64] Print N words from the kernel stack |
679 | in oops dumps. | 690 | in oops dumps. |
680 | 691 | ||
681 | l2cr= [PPC] | 692 | l2cr= [PPC] |
682 | 693 | ||
683 | lapic [IA-32,APIC] Enable the local APIC even if BIOS disabled it. | 694 | lapic [IA-32,APIC] Enable the local APIC even if BIOS |
695 | disabled it. | ||
684 | 696 | ||
685 | lasi= [HW,SCSI] PARISC LASI driver for the 53c700 chip | 697 | lasi= [HW,SCSI] PARISC LASI driver for the 53c700 chip |
686 | Format: addr:<io>,irq:<irq> | 698 | Format: addr:<io>,irq:<irq> |
687 | 699 | ||
688 | llsc*= [IA64] | 700 | llsc*= [IA64] See function print_params() in |
689 | See function print_params() in arch/ia64/sn/kernel/llsc4.c. | 701 | arch/ia64/sn/kernel/llsc4.c. |
690 | 702 | ||
691 | load_ramdisk= [RAM] List of ramdisks to load from floppy | 703 | load_ramdisk= [RAM] List of ramdisks to load from floppy |
692 | See Documentation/ramdisk.txt. | 704 | See Documentation/ramdisk.txt. |
@@ -713,8 +725,9 @@ running once the system is up. | |||
713 | 7 (KERN_DEBUG) debug-level messages | 725 | 7 (KERN_DEBUG) debug-level messages |
714 | 726 | ||
715 | log_buf_len=n Sets the size of the printk ring buffer, in bytes. | 727 | log_buf_len=n Sets the size of the printk ring buffer, in bytes. |
716 | Format is n, nk, nM. n must be a power of two. The | 728 | Format: { n | nk | nM } |
717 | default is set in kernel config. | 729 | n must be a power of two. The default size |
730 | is set in the kernel config file. | ||
718 | 731 | ||
719 | lp=0 [LP] Specify parallel ports to use, e.g, | 732 | lp=0 [LP] Specify parallel ports to use, e.g, |
720 | lp=port[,port...] lp=none,parport0 (lp0 not configured, lp1 uses | 733 | lp=port[,port...] lp=none,parport0 (lp0 not configured, lp1 uses |
@@ -750,23 +763,23 @@ running once the system is up. | |||
750 | ltpc= [NET] | 763 | ltpc= [NET] |
751 | Format: <io>,<irq>,<dma> | 764 | Format: <io>,<irq>,<dma> |
752 | 765 | ||
753 | mac5380= [HW,SCSI] | 766 | mac5380= [HW,SCSI] Format: |
754 | Format: <can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags> | 767 | <can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags> |
755 | 768 | ||
756 | mac53c9x= [HW,SCSI] | 769 | mac53c9x= [HW,SCSI] Format: |
757 | Format: <num_esps>,<disconnect>,<nosync>,<can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags> | 770 | <num_esps>,<disconnect>,<nosync>,<can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags> |
758 | 771 | ||
759 | machvec= [IA64] | 772 | machvec= [IA64] Force the use of a particular machine-vector |
760 | Force the use of a particular machine-vector (machvec) in a generic | 773 | (machvec) in a generic kernel. |
761 | kernel. Example: machvec=hpzx1_swiotlb | 774 | Example: machvec=hpzx1_swiotlb |
762 | 775 | ||
763 | mad16= [HW,OSS] | 776 | mad16= [HW,OSS] Format: |
764 | Format: <io>,<irq>,<dma>,<dma16>,<mpu_io>,<mpu_irq>,<joystick> | 777 | <io>,<irq>,<dma>,<dma16>,<mpu_io>,<mpu_irq>,<joystick> |
765 | 778 | ||
766 | maui= [HW,OSS] | 779 | maui= [HW,OSS] |
767 | Format: <io>,<irq> | 780 | Format: <io>,<irq> |
768 | 781 | ||
769 | max_loop= [LOOP] Maximum number of loopback devices that can | 782 | max_loop= [LOOP] Maximum number of loopback devices that can |
770 | be mounted | 783 | be mounted |
771 | Format: <1-256> | 784 | Format: <1-256> |
772 | 785 | ||
@@ -776,11 +789,11 @@ running once the system is up. | |||
776 | max_addr=[KMG] [KNL,BOOT,ia64] All physical memory greater than or | 789 | max_addr=[KMG] [KNL,BOOT,ia64] All physical memory greater than or |
777 | equal to this physical address is ignored. | 790 | equal to this physical address is ignored. |
778 | 791 | ||
779 | max_luns= [SCSI] Maximum number of LUNs to probe | 792 | max_luns= [SCSI] Maximum number of LUNs to probe. |
780 | Should be between 1 and 2^32-1. | 793 | Should be between 1 and 2^32-1. |
781 | 794 | ||
782 | max_report_luns= | 795 | max_report_luns= |
783 | [SCSI] Maximum number of LUNs received | 796 | [SCSI] Maximum number of LUNs received. |
784 | Should be between 1 and 16384. | 797 | Should be between 1 and 16384. |
785 | 798 | ||
786 | mca-pentium [BUGS=IA-32] | 799 | mca-pentium [BUGS=IA-32] |
@@ -796,11 +809,11 @@ running once the system is up. | |||
796 | 809 | ||
797 | md= [HW] RAID subsystems devices and level | 810 | md= [HW] RAID subsystems devices and level |
798 | See Documentation/md.txt. | 811 | See Documentation/md.txt. |
799 | 812 | ||
800 | mdacon= [MDA] | 813 | mdacon= [MDA] |
801 | Format: <first>,<last> | 814 | Format: <first>,<last> |
802 | Specifies range of consoles to be captured by the MDA. | 815 | Specifies range of consoles to be captured by the MDA. |
803 | 816 | ||
804 | mem=nn[KMG] [KNL,BOOT] Force usage of a specific amount of memory | 817 | mem=nn[KMG] [KNL,BOOT] Force usage of a specific amount of memory |
805 | Amount of memory to be used when the kernel is not able | 818 | Amount of memory to be used when the kernel is not able |
806 | to see the whole system memory or for test. | 819 | to see the whole system memory or for test. |
@@ -851,15 +864,15 @@ running once the system is up. | |||
851 | MTD_Partition= [MTD] | 864 | MTD_Partition= [MTD] |
852 | Format: <name>,<region-number>,<size>,<offset> | 865 | Format: <name>,<region-number>,<size>,<offset> |
853 | 866 | ||
854 | MTD_Region= [MTD] | 867 | MTD_Region= [MTD] Format: |
855 | Format: <name>,<region-number>[,<base>,<size>,<buswidth>,<altbuswidth>] | 868 | <name>,<region-number>[,<base>,<size>,<buswidth>,<altbuswidth>] |
856 | 869 | ||
857 | mtdparts= [MTD] | 870 | mtdparts= [MTD] |
858 | See drivers/mtd/cmdline.c. | 871 | See drivers/mtd/cmdline.c. |
859 | 872 | ||
860 | mtouchusb.raw_coordinates= | 873 | mtouchusb.raw_coordinates= |
861 | [HW] Make the MicroTouch USB driver use raw coordinates ('y', default) | 874 | [HW] Make the MicroTouch USB driver use raw coordinates |
862 | or cooked coordinates ('n') | 875 | ('y', default) or cooked coordinates ('n') |
863 | 876 | ||
864 | n2= [NET] SDL Inc. RISCom/N2 synchronous serial card | 877 | n2= [NET] SDL Inc. RISCom/N2 synchronous serial card |
865 | 878 | ||
@@ -880,7 +893,9 @@ running once the system is up. | |||
880 | Format: <irq>,<io>,<mem_start>,<mem_end>,<name> | 893 | Format: <irq>,<io>,<mem_start>,<mem_end>,<name> |
881 | Note that mem_start is often overloaded to mean | 894 | Note that mem_start is often overloaded to mean |
882 | something different and driver-specific. | 895 | something different and driver-specific. |
883 | 896 | This usage is only documented in each driver source | |
897 | file if at all. | ||
898 | |||
884 | nfsaddrs= [NFS] | 899 | nfsaddrs= [NFS] |
885 | See Documentation/nfsroot.txt. | 900 | See Documentation/nfsroot.txt. |
886 | 901 | ||
@@ -893,8 +908,8 @@ running once the system is up. | |||
893 | emulation library even if a 387 maths coprocessor | 908 | emulation library even if a 387 maths coprocessor |
894 | is present. | 909 | is present. |
895 | 910 | ||
896 | noalign [KNL,ARM] | 911 | noalign [KNL,ARM] |
897 | 912 | ||
898 | noapic [SMP,APIC] Tells the kernel to not make use of any | 913 | noapic [SMP,APIC] Tells the kernel to not make use of any |
899 | IOAPICs that may be present in the system. | 914 | IOAPICs that may be present in the system. |
900 | 915 | ||
@@ -905,19 +920,19 @@ running once the system is up. | |||
905 | on "Classic" PPC cores. | 920 | on "Classic" PPC cores. |
906 | 921 | ||
907 | nocache [ARM] | 922 | nocache [ARM] |
908 | 923 | ||
909 | nodisconnect [HW,SCSI,M68K] Disables SCSI disconnects. | 924 | nodisconnect [HW,SCSI,M68K] Disables SCSI disconnects. |
910 | 925 | ||
911 | noexec [IA-64] | 926 | noexec [IA-64] |
912 | 927 | ||
913 | noexec [IA-32, X86-64] | 928 | noexec [IA-32,X86-64] |
914 | noexec=on: enable non-executable mappings (default) | 929 | noexec=on: enable non-executable mappings (default) |
915 | noexec=off: disable nn-executable mappings | 930 | noexec=off: disable nn-executable mappings |
916 | 931 | ||
917 | nofxsr [BUGS=IA-32] | 932 | nofxsr [BUGS=IA-32] |
918 | 933 | ||
919 | nohlt [BUGS=ARM] | 934 | nohlt [BUGS=ARM] |
920 | 935 | ||
921 | no-hlt [BUGS=IA-32] Tells the kernel that the hlt | 936 | no-hlt [BUGS=IA-32] Tells the kernel that the hlt |
922 | instruction doesn't work correctly and not to | 937 | instruction doesn't work correctly and not to |
923 | use it. | 938 | use it. |
@@ -948,8 +963,9 @@ running once the system is up. | |||
948 | 963 | ||
949 | noresidual [PPC] Don't use residual data on PReP machines. | 964 | noresidual [PPC] Don't use residual data on PReP machines. |
950 | 965 | ||
951 | noresume [SWSUSP] Disables resume and restore original swap space. | 966 | noresume [SWSUSP] Disables resume and restores original swap |
952 | 967 | space. | |
968 | |||
953 | no-scroll [VGA] Disables scrollback. | 969 | no-scroll [VGA] Disables scrollback. |
954 | This is required for the Braillex ib80-piezo Braille | 970 | This is required for the Braillex ib80-piezo Braille |
955 | reader made by F.H. Papenmeier (Germany). | 971 | reader made by F.H. Papenmeier (Germany). |
@@ -965,16 +981,16 @@ running once the system is up. | |||
965 | nousb [USB] Disable the USB subsystem | 981 | nousb [USB] Disable the USB subsystem |
966 | 982 | ||
967 | nowb [ARM] | 983 | nowb [ARM] |
968 | 984 | ||
969 | opl3= [HW,OSS] | 985 | opl3= [HW,OSS] |
970 | Format: <io> | 986 | Format: <io> |
971 | 987 | ||
972 | opl3sa= [HW,OSS] | 988 | opl3sa= [HW,OSS] |
973 | Format: <io>,<irq>,<dma>,<dma2>,<mpu_io>,<mpu_irq> | 989 | Format: <io>,<irq>,<dma>,<dma2>,<mpu_io>,<mpu_irq> |
974 | 990 | ||
975 | opl3sa2= [HW,OSS] | 991 | opl3sa2= [HW,OSS] Format: |
976 | Format: <io>,<irq>,<dma>,<dma2>,<mss_io>,<mpu_io>,<ymode>,<loopback>[,<isapnp>,<multiple] | 992 | <io>,<irq>,<dma>,<dma2>,<mss_io>,<mpu_io>,<ymode>,<loopback>[,<isapnp>,<multiple] |
977 | 993 | ||
978 | oprofile.timer= [HW] | 994 | oprofile.timer= [HW] |
979 | Use timer interrupt instead of performance counters | 995 | Use timer interrupt instead of performance counters |
980 | 996 | ||
@@ -993,36 +1009,33 @@ running once the system is up. | |||
993 | Format: <parport#> | 1009 | Format: <parport#> |
994 | parkbd.mode= [HW] Parallel port keyboard adapter mode of operation, | 1010 | parkbd.mode= [HW] Parallel port keyboard adapter mode of operation, |
995 | 0 for XT, 1 for AT (default is AT). | 1011 | 0 for XT, 1 for AT (default is AT). |
996 | Format: <mode> | 1012 | Format: <mode> |
997 | 1013 | ||
998 | parport=0 [HW,PPT] Specify parallel ports. 0 disables. | 1014 | parport= [HW,PPT] Specify parallel ports. 0 disables. |
999 | parport=auto Use 'auto' to force the driver to use | 1015 | Format: { 0 | auto | 0xBBB[,IRQ[,DMA]] } |
1000 | parport=0xBBB[,IRQ[,DMA]] any IRQ/DMA settings detected (the | 1016 | Use 'auto' to force the driver to use any |
1001 | default is to ignore detected IRQ/DMA | 1017 | IRQ/DMA settings detected (the default is to |
1002 | settings because of possible | 1018 | ignore detected IRQ/DMA settings because of |
1003 | conflicts). You can specify the base | 1019 | possible conflicts). You can specify the base |
1004 | address, IRQ, and DMA settings; IRQ and | 1020 | address, IRQ, and DMA settings; IRQ and DMA |
1005 | DMA should be numbers, or 'auto' (for | 1021 | should be numbers, or 'auto' (for using detected |
1006 | using detected settings on that | 1022 | settings on that particular port), or 'nofifo' |
1007 | particular port), or 'nofifo' (to avoid | 1023 | (to avoid using a FIFO even if it is detected). |
1008 | using a FIFO even if it is detected). | 1024 | Parallel ports are assigned in the order they |
1009 | Parallel ports are assigned in the | 1025 | are specified on the command line, starting |
1010 | order they are specified on the command | 1026 | with parport0. |
1011 | line, starting with parport0. | 1027 | |
1012 | 1028 | parport_init_mode= [HW,PPT] | |
1013 | parport_init_mode= | 1029 | Configure VIA parallel port to operate in |
1014 | [HW,PPT] Configure VIA parallel port to | 1030 | a specific mode. This is necessary on Pegasos |
1015 | operate in specific mode. This is | 1031 | computer where firmware has no options for setting |
1016 | necessary on Pegasos computer where | 1032 | up parallel port mode and sets it to spp. |
1017 | firmware has no options for setting up | 1033 | Currently this function knows 686a and 8231 chips. |
1018 | parallel port mode and sets it to | ||
1019 | spp. Currently this function knows | ||
1020 | 686a and 8231 chips. | ||
1021 | Format: [spp|ps2|epp|ecp|ecpepp] | 1034 | Format: [spp|ps2|epp|ecp|ecpepp] |
1022 | 1035 | ||
1023 | pas2= [HW,OSS] | 1036 | pas2= [HW,OSS] Format: |
1024 | Format: <io>,<irq>,<dma>,<dma16>,<sb_io>,<sb_irq>,<sb_dma>,<sb_dma16> | 1037 | <io>,<irq>,<dma>,<dma16>,<sb_io>,<sb_irq>,<sb_dma>,<sb_dma16> |
1025 | 1038 | ||
1026 | pas16= [HW,SCSI] | 1039 | pas16= [HW,SCSI] |
1027 | See header of drivers/scsi/pas16.c. | 1040 | See header of drivers/scsi/pas16.c. |
1028 | 1041 | ||
@@ -1032,64 +1045,67 @@ running once the system is up. | |||
1032 | See header of drivers/block/paride/pcd.c. | 1045 | See header of drivers/block/paride/pcd.c. |
1033 | See also Documentation/paride.txt. | 1046 | See also Documentation/paride.txt. |
1034 | 1047 | ||
1035 | pci=option[,option...] [PCI] various PCI subsystem options: | 1048 | pci=option[,option...] [PCI] various PCI subsystem options: |
1036 | off [IA-32] don't probe for the PCI bus | 1049 | off [IA-32] don't probe for the PCI bus |
1037 | bios [IA-32] force use of PCI BIOS, don't access | 1050 | bios [IA-32] force use of PCI BIOS, don't access |
1038 | the hardware directly. Use this if your machine | 1051 | the hardware directly. Use this if your machine |
1039 | has a non-standard PCI host bridge. | 1052 | has a non-standard PCI host bridge. |
1040 | nobios [IA-32] disallow use of PCI BIOS, only direct | 1053 | nobios [IA-32] disallow use of PCI BIOS, only direct |
1041 | hardware access methods are allowed. Use this | 1054 | hardware access methods are allowed. Use this |
1042 | if you experience crashes upon bootup and you | 1055 | if you experience crashes upon bootup and you |
1043 | suspect they are caused by the BIOS. | 1056 | suspect they are caused by the BIOS. |
1044 | conf1 [IA-32] Force use of PCI Configuration Mechanism 1. | 1057 | conf1 [IA-32] Force use of PCI Configuration |
1045 | conf2 [IA-32] Force use of PCI Configuration Mechanism 2. | 1058 | Mechanism 1. |
1046 | nosort [IA-32] Don't sort PCI devices according to | 1059 | conf2 [IA-32] Force use of PCI Configuration |
1047 | order given by the PCI BIOS. This sorting is done | 1060 | Mechanism 2. |
1048 | to get a device order compatible with older kernels. | 1061 | nosort [IA-32] Don't sort PCI devices according to |
1049 | biosirq [IA-32] Use PCI BIOS calls to get the interrupt | 1062 | order given by the PCI BIOS. This sorting is |
1050 | routing table. These calls are known to be buggy | 1063 | done to get a device order compatible with |
1051 | on several machines and they hang the machine when used, | 1064 | older kernels. |
1052 | but on other computers it's the only way to get the | 1065 | biosirq [IA-32] Use PCI BIOS calls to get the interrupt |
1053 | interrupt routing table. Try this option if the kernel | 1066 | routing table. These calls are known to be buggy |
1054 | is unable to allocate IRQs or discover secondary PCI | 1067 | on several machines and they hang the machine |
1055 | buses on your motherboard. | 1068 | when used, but on other computers it's the only |
1056 | rom [IA-32] Assign address space to expansion ROMs. | 1069 | way to get the interrupt routing table. Try |
1057 | Use with caution as certain devices share address | 1070 | this option if the kernel is unable to allocate |
1058 | decoders between ROMs and other resources. | 1071 | IRQs or discover secondary PCI buses on your |
1059 | irqmask=0xMMMM [IA-32] Set a bit mask of IRQs allowed to be assigned | 1072 | motherboard. |
1060 | automatically to PCI devices. You can make the kernel | 1073 | rom [IA-32] Assign address space to expansion ROMs. |
1061 | exclude IRQs of your ISA cards this way. | 1074 | Use with caution as certain devices share |
1075 | address decoders between ROMs and other | ||
1076 | resources. | ||
1077 | irqmask=0xMMMM [IA-32] Set a bit mask of IRQs allowed to be | ||
1078 | assigned automatically to PCI devices. You can | ||
1079 | make the kernel exclude IRQs of your ISA cards | ||
1080 | this way. | ||
1062 | pirqaddr=0xAAAAA [IA-32] Specify the physical address | 1081 | pirqaddr=0xAAAAA [IA-32] Specify the physical address |
1063 | of the PIRQ table (normally generated | 1082 | of the PIRQ table (normally generated |
1064 | by the BIOS) if it is outside the | 1083 | by the BIOS) if it is outside the |
1065 | F0000h-100000h range. | 1084 | F0000h-100000h range. |
1066 | lastbus=N [IA-32] Scan all buses till bus #N. Can be useful | 1085 | lastbus=N [IA-32] Scan all buses thru bus #N. Can be |
1067 | if the kernel is unable to find your secondary buses | 1086 | useful if the kernel is unable to find your |
1068 | and you want to tell it explicitly which ones they are. | 1087 | secondary buses and you want to tell it |
1069 | assign-busses [IA-32] Always assign all PCI bus | 1088 | explicitly which ones they are. |
1070 | numbers ourselves, overriding | 1089 | assign-busses [IA-32] Always assign all PCI bus |
1071 | whatever the firmware may have | 1090 | numbers ourselves, overriding |
1072 | done. | 1091 | whatever the firmware may have done. |
1073 | usepirqmask [IA-32] Honor the possible IRQ mask | 1092 | usepirqmask [IA-32] Honor the possible IRQ mask stored |
1074 | stored in the BIOS $PIR table. This is | 1093 | in the BIOS $PIR table. This is needed on |
1075 | needed on some systems with broken | 1094 | some systems with broken BIOSes, notably |
1076 | BIOSes, notably some HP Pavilion N5400 | 1095 | some HP Pavilion N5400 and Omnibook XE3 |
1077 | and Omnibook XE3 notebooks. This will | 1096 | notebooks. This will have no effect if ACPI |
1078 | have no effect if ACPI IRQ routing is | 1097 | IRQ routing is enabled. |
1079 | enabled. | 1098 | noacpi [IA-32] Do not use ACPI for IRQ routing |
1080 | noacpi [IA-32] Do not use ACPI for IRQ routing | 1099 | or for PCI scanning. |
1081 | or for PCI scanning. | 1100 | routeirq Do IRQ routing for all PCI devices. |
1082 | routeirq Do IRQ routing for all PCI devices. | 1101 | This is normally done in pci_enable_device(), |
1083 | This is normally done in pci_enable_device(), | 1102 | so this option is a temporary workaround |
1084 | so this option is a temporary workaround | 1103 | for broken drivers that don't call it. |
1085 | for broken drivers that don't call it. | 1104 | firmware [ARM] Do not re-enumerate the bus but instead |
1086 | 1105 | just use the configuration from the | |
1087 | firmware [ARM] Do not re-enumerate the bus but | 1106 | bootloader. This is currently used on |
1088 | instead just use the configuration | 1107 | IXP2000 systems where the bus has to be |
1089 | from the bootloader. This is currently | 1108 | configured a certain way for adjunct CPUs. |
1090 | used on IXP2000 systems where the | ||
1091 | bus has to be configured a certain way | ||
1092 | for adjunct CPUs. | ||
1093 | 1109 | ||
1094 | pcmv= [HW,PCMCIA] BadgePAD 4 | 1110 | pcmv= [HW,PCMCIA] BadgePAD 4 |
1095 | 1111 | ||
@@ -1127,19 +1143,20 @@ running once the system is up. | |||
1127 | [ISAPNP] Exclude DMAs for the autoconfiguration | 1143 | [ISAPNP] Exclude DMAs for the autoconfiguration |
1128 | 1144 | ||
1129 | pnp_reserve_io= [ISAPNP] Exclude I/O ports for the autoconfiguration | 1145 | pnp_reserve_io= [ISAPNP] Exclude I/O ports for the autoconfiguration |
1130 | Ranges are in pairs (I/O port base and size). | 1146 | Ranges are in pairs (I/O port base and size). |
1131 | 1147 | ||
1132 | pnp_reserve_mem= | 1148 | pnp_reserve_mem= |
1133 | [ISAPNP] Exclude memory regions for the autoconfiguration | 1149 | [ISAPNP] Exclude memory regions for the |
1150 | autoconfiguration. | ||
1134 | Ranges are in pairs (memory base and size). | 1151 | Ranges are in pairs (memory base and size). |
1135 | 1152 | ||
1136 | profile= [KNL] Enable kernel profiling via /proc/profile | 1153 | profile= [KNL] Enable kernel profiling via /proc/profile |
1137 | { schedule | <number> } | 1154 | Format: [schedule,]<number> |
1138 | (param: schedule - profile schedule points} | 1155 | Param: "schedule" - profile schedule points. |
1139 | (param: profile step/bucket size as a power of 2 for | 1156 | Param: <number> - step/bucket size as a power of 2 for |
1140 | statistical time based profiling) | 1157 | statistical time based profiling. |
1141 | 1158 | ||
1142 | processor.max_cstate= [HW, ACPI] | 1159 | processor.max_cstate= [HW,ACPI] |
1143 | Limit processor to maximum C-state | 1160 | Limit processor to maximum C-state |
1144 | max_cstate=9 overrides any DMI blacklist limit. | 1161 | max_cstate=9 overrides any DMI blacklist limit. |
1145 | 1162 | ||
@@ -1147,27 +1164,28 @@ running once the system is up. | |||
1147 | before loading. | 1164 | before loading. |
1148 | See Documentation/ramdisk.txt. | 1165 | See Documentation/ramdisk.txt. |
1149 | 1166 | ||
1150 | psmouse.proto= [HW,MOUSE] Highest PS2 mouse protocol extension to | 1167 | psmouse.proto= [HW,MOUSE] Highest PS2 mouse protocol extension to |
1151 | probe for (bare|imps|exps|lifebook|any). | 1168 | probe for; one of (bare|imps|exps|lifebook|any). |
1152 | psmouse.rate= [HW,MOUSE] Set desired mouse report rate, in reports | 1169 | psmouse.rate= [HW,MOUSE] Set desired mouse report rate, in reports |
1153 | per second. | 1170 | per second. |
1154 | psmouse.resetafter= | 1171 | psmouse.resetafter= [HW,MOUSE] |
1155 | [HW,MOUSE] Try to reset the device after so many bad packets | 1172 | Try to reset the device after so many bad packets |
1156 | (0 = never). | 1173 | (0 = never). |
1157 | psmouse.resolution= | 1174 | psmouse.resolution= |
1158 | [HW,MOUSE] Set desired mouse resolution, in dpi. | 1175 | [HW,MOUSE] Set desired mouse resolution, in dpi. |
1159 | psmouse.smartscroll= | 1176 | psmouse.smartscroll= |
1160 | [HW,MOUSE] Controls Logitech smartscroll autorepeat, | 1177 | [HW,MOUSE] Controls Logitech smartscroll autorepeat. |
1161 | 0 = disabled, 1 = enabled (default). | 1178 | 0 = disabled, 1 = enabled (default). |
1162 | 1179 | ||
1163 | pss= [HW,OSS] Personal Sound System (ECHO ESC614) | 1180 | pss= [HW,OSS] Personal Sound System (ECHO ESC614) |
1164 | Format: <io>,<mss_io>,<mss_irq>,<mss_dma>,<mpu_io>,<mpu_irq> | 1181 | Format: |
1182 | <io>,<mss_io>,<mss_irq>,<mss_dma>,<mpu_io>,<mpu_irq> | ||
1165 | 1183 | ||
1166 | pt. [PARIDE] | 1184 | pt. [PARIDE] |
1167 | See Documentation/paride.txt. | 1185 | See Documentation/paride.txt. |
1168 | 1186 | ||
1169 | quiet= [KNL] Disable log messages | 1187 | quiet= [KNL] Disable log messages |
1170 | 1188 | ||
1171 | r128= [HW,DRM] | 1189 | r128= [HW,DRM] |
1172 | 1190 | ||
1173 | raid= [HW,RAID] | 1191 | raid= [HW,RAID] |
@@ -1176,10 +1194,9 @@ running once the system is up. | |||
1176 | ramdisk= [RAM] Sizes of RAM disks in kilobytes [deprecated] | 1194 | ramdisk= [RAM] Sizes of RAM disks in kilobytes [deprecated] |
1177 | See Documentation/ramdisk.txt. | 1195 | See Documentation/ramdisk.txt. |
1178 | 1196 | ||
1179 | ramdisk_blocksize= | 1197 | ramdisk_blocksize= [RAM] |
1180 | [RAM] | ||
1181 | See Documentation/ramdisk.txt. | 1198 | See Documentation/ramdisk.txt. |
1182 | 1199 | ||
1183 | ramdisk_size= [RAM] Sizes of RAM disks in kilobytes | 1200 | ramdisk_size= [RAM] Sizes of RAM disks in kilobytes |
1184 | New name for the ramdisk parameter. | 1201 | New name for the ramdisk parameter. |
1185 | See Documentation/ramdisk.txt. | 1202 | See Documentation/ramdisk.txt. |
@@ -1195,7 +1212,8 @@ running once the system is up. | |||
1195 | 1212 | ||
1196 | reserve= [KNL,BUGS] Force the kernel to ignore some iomem area | 1213 | reserve= [KNL,BUGS] Force the kernel to ignore some iomem area |
1197 | 1214 | ||
1198 | resume= [SWSUSP] Specify the partition device for software suspension | 1215 | resume= [SWSUSP] |
1216 | Specify the partition device for software suspend | ||
1199 | 1217 | ||
1200 | rhash_entries= [KNL,NET] | 1218 | rhash_entries= [KNL,NET] |
1201 | Set number of hash buckets for route cache | 1219 | Set number of hash buckets for route cache |
@@ -1225,7 +1243,7 @@ running once the system is up. | |||
1225 | Format: <io>,<irq>,<dma>,<dma2> | 1243 | Format: <io>,<irq>,<dma>,<dma2> |
1226 | 1244 | ||
1227 | sbni= [NET] Granch SBNI12 leased line adapter | 1245 | sbni= [NET] Granch SBNI12 leased line adapter |
1228 | 1246 | ||
1229 | sbpcd= [HW,CD] Soundblaster CD adapter | 1247 | sbpcd= [HW,CD] Soundblaster CD adapter |
1230 | Format: <io>,<type> | 1248 | Format: <io>,<type> |
1231 | See a comment before function sbpcd_setup() in | 1249 | See a comment before function sbpcd_setup() in |
@@ -1258,21 +1276,20 @@ running once the system is up. | |||
1258 | 1276 | ||
1259 | serialnumber [BUGS=IA-32] | 1277 | serialnumber [BUGS=IA-32] |
1260 | 1278 | ||
1261 | sg_def_reserved_size= | 1279 | sg_def_reserved_size= [SCSI] |
1262 | [SCSI] | 1280 | |
1263 | |||
1264 | sgalaxy= [HW,OSS] | 1281 | sgalaxy= [HW,OSS] |
1265 | Format: <io>,<irq>,<dma>,<dma2>,<sgbase> | 1282 | Format: <io>,<irq>,<dma>,<dma2>,<sgbase> |
1266 | 1283 | ||
1267 | shapers= [NET] | 1284 | shapers= [NET] |
1268 | Maximal number of shapers. | 1285 | Maximal number of shapers. |
1269 | 1286 | ||
1270 | sim710= [SCSI,HW] | 1287 | sim710= [SCSI,HW] |
1271 | See header of drivers/scsi/sim710.c. | 1288 | See header of drivers/scsi/sim710.c. |
1272 | 1289 | ||
1273 | simeth= [IA-64] | 1290 | simeth= [IA-64] |
1274 | simscsi= | 1291 | simscsi= |
1275 | 1292 | ||
1276 | sjcd= [HW,CD] | 1293 | sjcd= [HW,CD] |
1277 | Format: <io>,<irq>,<dma> | 1294 | Format: <io>,<irq>,<dma> |
1278 | See header of drivers/cdrom/sjcd.c. | 1295 | See header of drivers/cdrom/sjcd.c. |
@@ -1403,10 +1420,10 @@ running once the system is up. | |||
1403 | snd-wavefront= [HW,ALSA] | 1420 | snd-wavefront= [HW,ALSA] |
1404 | 1421 | ||
1405 | snd-ymfpci= [HW,ALSA] | 1422 | snd-ymfpci= [HW,ALSA] |
1406 | 1423 | ||
1407 | sonicvibes= [HW,OSS] | 1424 | sonicvibes= [HW,OSS] |
1408 | Format: <reverb> | 1425 | Format: <reverb> |
1409 | 1426 | ||
1410 | sonycd535= [HW,CD] | 1427 | sonycd535= [HW,CD] |
1411 | Format: <io>[,<irq>] | 1428 | Format: <io>[,<irq>] |
1412 | 1429 | ||
@@ -1423,7 +1440,7 @@ running once the system is up. | |||
1423 | 1440 | ||
1424 | sscape= [HW,OSS] | 1441 | sscape= [HW,OSS] |
1425 | Format: <io>,<irq>,<dma>,<mpu_io>,<mpu_irq> | 1442 | Format: <io>,<irq>,<dma>,<mpu_io>,<mpu_irq> |
1426 | 1443 | ||
1427 | st= [HW,SCSI] SCSI tape parameters (buffers, etc.) | 1444 | st= [HW,SCSI] SCSI tape parameters (buffers, etc.) |
1428 | See Documentation/scsi/st.txt. | 1445 | See Documentation/scsi/st.txt. |
1429 | 1446 | ||
@@ -1446,7 +1463,7 @@ running once the system is up. | |||
1446 | stram_swap= [HW,M68k] | 1463 | stram_swap= [HW,M68k] |
1447 | 1464 | ||
1448 | swiotlb= [IA-64] Number of I/O TLB slabs | 1465 | swiotlb= [IA-64] Number of I/O TLB slabs |
1449 | 1466 | ||
1450 | switches= [HW,M68k] | 1467 | switches= [HW,M68k] |
1451 | 1468 | ||
1452 | sym53c416= [HW,SCSI] | 1469 | sym53c416= [HW,SCSI] |
@@ -1479,14 +1496,16 @@ running once the system is up. | |||
1479 | tp720= [HW,PS2] | 1496 | tp720= [HW,PS2] |
1480 | 1497 | ||
1481 | trix= [HW,OSS] MediaTrix AudioTrix Pro | 1498 | trix= [HW,OSS] MediaTrix AudioTrix Pro |
1482 | Format: <io>,<irq>,<dma>,<dma2>,<sb_io>,<sb_irq>,<sb_dma>,<mpu_io>,<mpu_irq> | 1499 | Format: |
1483 | 1500 | <io>,<irq>,<dma>,<dma2>,<sb_io>,<sb_irq>,<sb_dma>,<mpu_io>,<mpu_irq> | |
1501 | |||
1484 | tsdev.xres= [TS] Horizontal screen resolution. | 1502 | tsdev.xres= [TS] Horizontal screen resolution. |
1485 | tsdev.yres= [TS] Vertical screen resolution. | 1503 | tsdev.yres= [TS] Vertical screen resolution. |
1486 | 1504 | ||
1487 | turbografx.map[2|3]= | 1505 | turbografx.map[2|3]= [HW,JOY] |
1488 | [HW,JOY] TurboGraFX parallel port interface | 1506 | TurboGraFX parallel port interface |
1489 | Format: <port#>,<js1>,<js2>,<js3>,<js4>,<js5>,<js6>,<js7> | 1507 | Format: |
1508 | <port#>,<js1>,<js2>,<js3>,<js4>,<js5>,<js6>,<js7> | ||
1490 | See also Documentation/input/joystick-parport.txt | 1509 | See also Documentation/input/joystick-parport.txt |
1491 | 1510 | ||
1492 | u14-34f= [HW,SCSI] UltraStor 14F/34F SCSI host adapter | 1511 | u14-34f= [HW,SCSI] UltraStor 14F/34F SCSI host adapter |
@@ -1502,17 +1521,18 @@ running once the system is up. | |||
1502 | 1521 | ||
1503 | usbhid.mousepoll= | 1522 | usbhid.mousepoll= |
1504 | [USBHID] The interval which mice are to be polled at. | 1523 | [USBHID] The interval which mice are to be polled at. |
1505 | 1524 | ||
1506 | video= [FB] Frame buffer configuration | 1525 | video= [FB] Frame buffer configuration |
1507 | See Documentation/fb/modedb.txt. | 1526 | See Documentation/fb/modedb.txt. |
1508 | 1527 | ||
1509 | vga= [BOOT,IA-32] Select a particular video mode | 1528 | vga= [BOOT,IA-32] Select a particular video mode |
1510 | See Documentation/i386/boot.txt and Documentation/svga.txt. | 1529 | See Documentation/i386/boot.txt and |
1530 | Documentation/svga.txt. | ||
1511 | Use vga=ask for menu. | 1531 | Use vga=ask for menu. |
1512 | This is actually a boot loader parameter; the value is | 1532 | This is actually a boot loader parameter; the value is |
1513 | passed to the kernel using a special protocol. | 1533 | passed to the kernel using a special protocol. |
1514 | 1534 | ||
1515 | vmalloc=nn[KMG] [KNL,BOOT] forces the vmalloc area to have an exact | 1535 | vmalloc=nn[KMG] [KNL,BOOT] Forces the vmalloc area to have an exact |
1516 | size of <nn>. This can be used to increase the | 1536 | size of <nn>. This can be used to increase the |
1517 | minimum size (128MB on x86). It can also be used to | 1537 | minimum size (128MB on x86). It can also be used to |
1518 | decrease the size and leave more room for directly | 1538 | decrease the size and leave more room for directly |
@@ -1520,11 +1540,11 @@ running once the system is up. | |||
1520 | 1540 | ||
1521 | vmhalt= [KNL,S390] | 1541 | vmhalt= [KNL,S390] |
1522 | 1542 | ||
1523 | vmpoff= [KNL,S390] | 1543 | vmpoff= [KNL,S390] |
1524 | 1544 | ||
1525 | waveartist= [HW,OSS] | 1545 | waveartist= [HW,OSS] |
1526 | Format: <io>,<irq>,<dma>,<dma2> | 1546 | Format: <io>,<irq>,<dma>,<dma2> |
1527 | 1547 | ||
1528 | wd33c93= [HW,SCSI] | 1548 | wd33c93= [HW,SCSI] |
1529 | See header of drivers/scsi/wd33c93.c. | 1549 | See header of drivers/scsi/wd33c93.c. |
1530 | 1550 | ||
@@ -1538,21 +1558,25 @@ running once the system is up. | |||
1538 | xd_geo= See header of drivers/block/xd.c. | 1558 | xd_geo= See header of drivers/block/xd.c. |
1539 | 1559 | ||
1540 | xirc2ps_cs= [NET,PCMCIA] | 1560 | xirc2ps_cs= [NET,PCMCIA] |
1541 | Format: <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]] | 1561 | Format: |
1542 | 1562 | <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]] | |
1543 | 1563 | ||
1544 | 1564 | ||
1565 | ______________________________________________________________________ | ||
1545 | Changelog: | 1566 | Changelog: |
1546 | 1567 | ||
1568 | 2000-06-?? Mr. Unknown | ||
1547 | The last known update (for 2.4.0) - the changelog was not kept before. | 1569 | The last known update (for 2.4.0) - the changelog was not kept before. |
1548 | 2000-06-?? Mr. Unknown | ||
1549 | 1570 | ||
1571 | 2002-11-24 Petr Baudis <pasky@ucw.cz> | ||
1572 | Randy Dunlap <randy.dunlap@verizon.net> | ||
1550 | Update for 2.5.49, description for most of the options introduced, | 1573 | Update for 2.5.49, description for most of the options introduced, |
1551 | references to other documentation (C files, READMEs, ..), added S390, | 1574 | references to other documentation (C files, READMEs, ..), added S390, |
1552 | PPC, SPARC, MTD, ALSA and OSS category. Minor corrections and | 1575 | PPC, SPARC, MTD, ALSA and OSS category. Minor corrections and |
1553 | reformatting. | 1576 | reformatting. |
1554 | 2002-11-24 Petr Baudis <pasky@ucw.cz> | 1577 | |
1555 | Randy Dunlap <randy.dunlap@verizon.net> | 1578 | 2005-10-19 Randy Dunlap <rdunlap@xenotime.net> |
1579 | Lots of typos, whitespace, some reformatting. | ||
1556 | 1580 | ||
1557 | TODO: | 1581 | TODO: |
1558 | 1582 | ||
diff --git a/arch/arm/mach-integrator/impd1.c b/arch/arm/mach-integrator/impd1.c index c3c2f17d030e..a1b153d1626c 100644 --- a/arch/arm/mach-integrator/impd1.c +++ b/arch/arm/mach-integrator/impd1.c | |||
@@ -67,7 +67,7 @@ static void impd1_setvco(struct clk *clk, struct icst525_vco vco) | |||
67 | } | 67 | } |
68 | writel(0, impd1->base + IMPD1_LOCK); | 68 | writel(0, impd1->base + IMPD1_LOCK); |
69 | 69 | ||
70 | #if DEBUG | 70 | #ifdef DEBUG |
71 | vco.v = val & 0x1ff; | 71 | vco.v = val & 0x1ff; |
72 | vco.r = (val >> 9) & 0x7f; | 72 | vco.r = (val >> 9) & 0x7f; |
73 | vco.s = (val >> 16) & 7; | 73 | vco.s = (val >> 16) & 7; |
@@ -427,17 +427,18 @@ static int impd1_probe(struct lm_device *dev) | |||
427 | return ret; | 427 | return ret; |
428 | } | 428 | } |
429 | 429 | ||
430 | static int impd1_remove_one(struct device *dev, void *data) | ||
431 | { | ||
432 | device_unregister(dev); | ||
433 | return 0; | ||
434 | } | ||
435 | |||
430 | static void impd1_remove(struct lm_device *dev) | 436 | static void impd1_remove(struct lm_device *dev) |
431 | { | 437 | { |
432 | struct impd1_module *impd1 = lm_get_drvdata(dev); | 438 | struct impd1_module *impd1 = lm_get_drvdata(dev); |
433 | struct list_head *l, *n; | ||
434 | int i; | 439 | int i; |
435 | 440 | ||
436 | list_for_each_safe(l, n, &dev->dev.children) { | 441 | device_for_each_child(&dev->dev, NULL, impd1_remove_one); |
437 | struct device *d = list_to_dev(l); | ||
438 | |||
439 | device_unregister(d); | ||
440 | } | ||
441 | 442 | ||
442 | for (i = 0; i < ARRAY_SIZE(impd1->vcos); i++) | 443 | for (i = 0; i < ARRAY_SIZE(impd1->vcos); i++) |
443 | clk_unregister(&impd1->vcos[i]); | 444 | clk_unregister(&impd1->vcos[i]); |
diff --git a/arch/arm/mach-pxa/corgi_lcd.c b/arch/arm/mach-pxa/corgi_lcd.c index 850538fadece..370df113dc06 100644 --- a/arch/arm/mach-pxa/corgi_lcd.c +++ b/arch/arm/mach-pxa/corgi_lcd.c | |||
@@ -488,6 +488,7 @@ static int is_pxafb_device(struct device * dev, void * data) | |||
488 | 488 | ||
489 | unsigned long spitz_get_hsync_len(void) | 489 | unsigned long spitz_get_hsync_len(void) |
490 | { | 490 | { |
491 | #ifdef CONFIG_FB_PXA | ||
491 | if (!spitz_pxafb_dev) { | 492 | if (!spitz_pxafb_dev) { |
492 | spitz_pxafb_dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device); | 493 | spitz_pxafb_dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device); |
493 | if (!spitz_pxafb_dev) | 494 | if (!spitz_pxafb_dev) |
@@ -496,6 +497,7 @@ unsigned long spitz_get_hsync_len(void) | |||
496 | if (!get_hsync_time) | 497 | if (!get_hsync_time) |
497 | get_hsync_time = symbol_get(pxafb_get_hsync_time); | 498 | get_hsync_time = symbol_get(pxafb_get_hsync_time); |
498 | if (!get_hsync_time) | 499 | if (!get_hsync_time) |
500 | #endif | ||
499 | return 0; | 501 | return 0; |
500 | 502 | ||
501 | return pxafb_get_hsync_time(spitz_pxafb_dev); | 503 | return pxafb_get_hsync_time(spitz_pxafb_dev); |
diff --git a/arch/arm/mach-pxa/generic.c b/arch/arm/mach-pxa/generic.c index d327c127eddb..1d7677669a76 100644 --- a/arch/arm/mach-pxa/generic.c +++ b/arch/arm/mach-pxa/generic.c | |||
@@ -250,6 +250,25 @@ void __init pxa_set_i2c_info(struct i2c_pxa_platform_data *info) | |||
250 | i2c_device.dev.platform_data = info; | 250 | i2c_device.dev.platform_data = info; |
251 | } | 251 | } |
252 | 252 | ||
253 | static struct resource i2s_resources[] = { | ||
254 | { | ||
255 | .start = 0x40400000, | ||
256 | .end = 0x40400083, | ||
257 | .flags = IORESOURCE_MEM, | ||
258 | }, { | ||
259 | .start = IRQ_I2S, | ||
260 | .end = IRQ_I2S, | ||
261 | .flags = IORESOURCE_IRQ, | ||
262 | }, | ||
263 | }; | ||
264 | |||
265 | static struct platform_device i2s_device = { | ||
266 | .name = "pxa2xx-i2s", | ||
267 | .id = -1, | ||
268 | .resource = i2c_resources, | ||
269 | .num_resources = ARRAY_SIZE(i2s_resources), | ||
270 | }; | ||
271 | |||
253 | static struct platform_device *devices[] __initdata = { | 272 | static struct platform_device *devices[] __initdata = { |
254 | &pxamci_device, | 273 | &pxamci_device, |
255 | &udc_device, | 274 | &udc_device, |
@@ -258,6 +277,7 @@ static struct platform_device *devices[] __initdata = { | |||
258 | &btuart_device, | 277 | &btuart_device, |
259 | &stuart_device, | 278 | &stuart_device, |
260 | &i2c_device, | 279 | &i2c_device, |
280 | &i2s_device, | ||
261 | }; | 281 | }; |
262 | 282 | ||
263 | static int __init pxa_init(void) | 283 | static int __init pxa_init(void) |
diff --git a/arch/arm/mach-s3c2410/mach-bast.c b/arch/arm/mach-s3c2410/mach-bast.c index 8ca955984645..7b51bfd0ba6d 100644 --- a/arch/arm/mach-s3c2410/mach-bast.c +++ b/arch/arm/mach-s3c2410/mach-bast.c | |||
@@ -307,9 +307,9 @@ static void bast_nand_select(struct s3c2410_nand_set *set, int slot) | |||
307 | } | 307 | } |
308 | 308 | ||
309 | static struct s3c2410_platform_nand bast_nand_info = { | 309 | static struct s3c2410_platform_nand bast_nand_info = { |
310 | .tacls = 40, | 310 | .tacls = 30, |
311 | .twrph0 = 80, | 311 | .twrph0 = 60, |
312 | .twrph1 = 80, | 312 | .twrph1 = 60, |
313 | .nr_sets = ARRAY_SIZE(bast_nand_sets), | 313 | .nr_sets = ARRAY_SIZE(bast_nand_sets), |
314 | .sets = bast_nand_sets, | 314 | .sets = bast_nand_sets, |
315 | .select_chip = bast_nand_select, | 315 | .select_chip = bast_nand_select, |
diff --git a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c index ab6e0611303d..58ca98fdc2ca 100644 --- a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c +++ b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c | |||
@@ -44,7 +44,7 @@ | |||
44 | 44 | ||
45 | #define PFX "powernow-k8: " | 45 | #define PFX "powernow-k8: " |
46 | #define BFX PFX "BIOS error: " | 46 | #define BFX PFX "BIOS error: " |
47 | #define VERSION "version 1.50.3" | 47 | #define VERSION "version 1.50.4" |
48 | #include "powernow-k8.h" | 48 | #include "powernow-k8.h" |
49 | 49 | ||
50 | /* serialize freq changes */ | 50 | /* serialize freq changes */ |
@@ -111,8 +111,8 @@ static int query_current_values_with_pending_wait(struct powernow_k8_data *data) | |||
111 | u32 i = 0; | 111 | u32 i = 0; |
112 | 112 | ||
113 | do { | 113 | do { |
114 | if (i++ > 0x1000000) { | 114 | if (i++ > 10000) { |
115 | printk(KERN_ERR PFX "detected change pending stuck\n"); | 115 | dprintk("detected change pending stuck\n"); |
116 | return 1; | 116 | return 1; |
117 | } | 117 | } |
118 | rdmsr(MSR_FIDVID_STATUS, lo, hi); | 118 | rdmsr(MSR_FIDVID_STATUS, lo, hi); |
@@ -159,6 +159,7 @@ static int write_new_fid(struct powernow_k8_data *data, u32 fid) | |||
159 | { | 159 | { |
160 | u32 lo; | 160 | u32 lo; |
161 | u32 savevid = data->currvid; | 161 | u32 savevid = data->currvid; |
162 | u32 i = 0; | ||
162 | 163 | ||
163 | if ((fid & INVALID_FID_MASK) || (data->currvid & INVALID_VID_MASK)) { | 164 | if ((fid & INVALID_FID_MASK) || (data->currvid & INVALID_VID_MASK)) { |
164 | printk(KERN_ERR PFX "internal error - overflow on fid write\n"); | 165 | printk(KERN_ERR PFX "internal error - overflow on fid write\n"); |
@@ -170,10 +171,13 @@ static int write_new_fid(struct powernow_k8_data *data, u32 fid) | |||
170 | dprintk("writing fid 0x%x, lo 0x%x, hi 0x%x\n", | 171 | dprintk("writing fid 0x%x, lo 0x%x, hi 0x%x\n", |
171 | fid, lo, data->plllock * PLL_LOCK_CONVERSION); | 172 | fid, lo, data->plllock * PLL_LOCK_CONVERSION); |
172 | 173 | ||
173 | wrmsr(MSR_FIDVID_CTL, lo, data->plllock * PLL_LOCK_CONVERSION); | 174 | do { |
174 | 175 | wrmsr(MSR_FIDVID_CTL, lo, data->plllock * PLL_LOCK_CONVERSION); | |
175 | if (query_current_values_with_pending_wait(data)) | 176 | if (i++ > 100) { |
176 | return 1; | 177 | printk(KERN_ERR PFX "internal error - pending bit very stuck - no further pstate changes possible\n"); |
178 | return 1; | ||
179 | } | ||
180 | } while (query_current_values_with_pending_wait(data)); | ||
177 | 181 | ||
178 | count_off_irt(data); | 182 | count_off_irt(data); |
179 | 183 | ||
@@ -197,6 +201,7 @@ static int write_new_vid(struct powernow_k8_data *data, u32 vid) | |||
197 | { | 201 | { |
198 | u32 lo; | 202 | u32 lo; |
199 | u32 savefid = data->currfid; | 203 | u32 savefid = data->currfid; |
204 | int i = 0; | ||
200 | 205 | ||
201 | if ((data->currfid & INVALID_FID_MASK) || (vid & INVALID_VID_MASK)) { | 206 | if ((data->currfid & INVALID_FID_MASK) || (vid & INVALID_VID_MASK)) { |
202 | printk(KERN_ERR PFX "internal error - overflow on vid write\n"); | 207 | printk(KERN_ERR PFX "internal error - overflow on vid write\n"); |
@@ -208,10 +213,13 @@ static int write_new_vid(struct powernow_k8_data *data, u32 vid) | |||
208 | dprintk("writing vid 0x%x, lo 0x%x, hi 0x%x\n", | 213 | dprintk("writing vid 0x%x, lo 0x%x, hi 0x%x\n", |
209 | vid, lo, STOP_GRANT_5NS); | 214 | vid, lo, STOP_GRANT_5NS); |
210 | 215 | ||
211 | wrmsr(MSR_FIDVID_CTL, lo, STOP_GRANT_5NS); | 216 | do { |
212 | 217 | wrmsr(MSR_FIDVID_CTL, lo, STOP_GRANT_5NS); | |
213 | if (query_current_values_with_pending_wait(data)) | 218 | if (i++ > 100) { |
214 | return 1; | 219 | printk(KERN_ERR PFX "internal error - pending bit very stuck - no further pstate changes possible\n"); |
220 | return 1; | ||
221 | } | ||
222 | } while (query_current_values_with_pending_wait(data)); | ||
215 | 223 | ||
216 | if (savefid != data->currfid) { | 224 | if (savefid != data->currfid) { |
217 | printk(KERN_ERR PFX "fid changed on vid trans, old 0x%x new 0x%x\n", | 225 | printk(KERN_ERR PFX "fid changed on vid trans, old 0x%x new 0x%x\n", |
diff --git a/arch/ppc64/kernel/iSeries_htab.c b/arch/ppc64/kernel/iSeries_htab.c index 2192055a90a0..073b76661747 100644 --- a/arch/ppc64/kernel/iSeries_htab.c +++ b/arch/ppc64/kernel/iSeries_htab.c | |||
@@ -66,7 +66,7 @@ static long iSeries_hpte_insert(unsigned long hpte_group, unsigned long va, | |||
66 | } | 66 | } |
67 | 67 | ||
68 | if (slot < 0) { /* MSB set means secondary group */ | 68 | if (slot < 0) { /* MSB set means secondary group */ |
69 | vflags |= HPTE_V_VALID; | 69 | vflags |= HPTE_V_SECONDARY; |
70 | secondary = 1; | 70 | secondary = 1; |
71 | slot &= 0x7fffffffffffffff; | 71 | slot &= 0x7fffffffffffffff; |
72 | } | 72 | } |
diff --git a/arch/ppc64/kernel/mpic.c b/arch/ppc64/kernel/mpic.c index cc262a05ddb4..5f5bc73754d9 100644 --- a/arch/ppc64/kernel/mpic.c +++ b/arch/ppc64/kernel/mpic.c | |||
@@ -506,8 +506,8 @@ struct mpic * __init mpic_alloc(unsigned long phys_addr, | |||
506 | mpic->senses_count = senses_count; | 506 | mpic->senses_count = senses_count; |
507 | 507 | ||
508 | /* Map the global registers */ | 508 | /* Map the global registers */ |
509 | mpic->gregs = ioremap(phys_addr + MPIC_GREG_BASE, 0x1000); | 509 | mpic->gregs = ioremap(phys_addr + MPIC_GREG_BASE, 0x2000); |
510 | mpic->tmregs = mpic->gregs + (MPIC_TIMER_BASE >> 2); | 510 | mpic->tmregs = mpic->gregs + ((MPIC_TIMER_BASE - MPIC_GREG_BASE) >> 2); |
511 | BUG_ON(mpic->gregs == NULL); | 511 | BUG_ON(mpic->gregs == NULL); |
512 | 512 | ||
513 | /* Reset */ | 513 | /* Reset */ |
diff --git a/arch/ppc64/kernel/time.c b/arch/ppc64/kernel/time.c index 9939c206afa4..b56c6a324e17 100644 --- a/arch/ppc64/kernel/time.c +++ b/arch/ppc64/kernel/time.c | |||
@@ -870,7 +870,7 @@ void div128_by_32( unsigned long dividend_high, unsigned long dividend_low, | |||
870 | rb = ((ra + b) - (x * divisor)) << 32; | 870 | rb = ((ra + b) - (x * divisor)) << 32; |
871 | 871 | ||
872 | y = (rb + c)/divisor; | 872 | y = (rb + c)/divisor; |
873 | rc = ((rb + b) - (y * divisor)) << 32; | 873 | rc = ((rb + c) - (y * divisor)) << 32; |
874 | 874 | ||
875 | z = (rc + d)/divisor; | 875 | z = (rc + d)/divisor; |
876 | 876 | ||
diff --git a/arch/ppc64/mm/init.c b/arch/ppc64/mm/init.c index c2157c9c3acb..be64b157afce 100644 --- a/arch/ppc64/mm/init.c +++ b/arch/ppc64/mm/init.c | |||
@@ -799,8 +799,7 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long ea, | |||
799 | if (cpus_equal(vma->vm_mm->cpu_vm_mask, tmp)) | 799 | if (cpus_equal(vma->vm_mm->cpu_vm_mask, tmp)) |
800 | local = 1; | 800 | local = 1; |
801 | 801 | ||
802 | __hash_page(ea, pte_val(pte) & (_PAGE_USER|_PAGE_RW), vsid, ptep, | 802 | __hash_page(ea, 0, vsid, ptep, 0x300, local); |
803 | 0x300, local); | ||
804 | local_irq_restore(flags); | 803 | local_irq_restore(flags); |
805 | } | 804 | } |
806 | 805 | ||
diff --git a/arch/um/include/sysdep-i386/thread.h b/arch/um/include/sysdep-i386/thread.h index e2bd6bae8b8a..243fed44d780 100644 --- a/arch/um/include/sysdep-i386/thread.h +++ b/arch/um/include/sysdep-i386/thread.h | |||
@@ -4,7 +4,7 @@ | |||
4 | #include <kern_constants.h> | 4 | #include <kern_constants.h> |
5 | 5 | ||
6 | #define TASK_DEBUGREGS(task) ((unsigned long *) &(((char *) (task))[HOST_TASK_DEBUGREGS])) | 6 | #define TASK_DEBUGREGS(task) ((unsigned long *) &(((char *) (task))[HOST_TASK_DEBUGREGS])) |
7 | #ifdef CONFIG_MODE_TT | 7 | #ifdef UML_CONFIG_MODE_TT |
8 | #define TASK_EXTERN_PID(task) *((int *) &(((char *) (task))[HOST_TASK_EXTERN_PID])) | 8 | #define TASK_EXTERN_PID(task) *((int *) &(((char *) (task))[HOST_TASK_EXTERN_PID])) |
9 | #endif | 9 | #endif |
10 | 10 | ||
diff --git a/arch/um/include/sysdep-x86_64/thread.h b/arch/um/include/sysdep-x86_64/thread.h index 6a76a7f3683f..cbef3e1697f4 100644 --- a/arch/um/include/sysdep-x86_64/thread.h +++ b/arch/um/include/sysdep-x86_64/thread.h | |||
@@ -3,7 +3,7 @@ | |||
3 | 3 | ||
4 | #include <kern_constants.h> | 4 | #include <kern_constants.h> |
5 | 5 | ||
6 | #ifdef CONFIG_MODE_TT | 6 | #ifdef UML_CONFIG_MODE_TT |
7 | #define TASK_EXTERN_PID(task) *((int *) &(((char *) (task))[HOST_TASK_EXTERN_PID])) | 7 | #define TASK_EXTERN_PID(task) *((int *) &(((char *) (task))[HOST_TASK_EXTERN_PID])) |
8 | #endif | 8 | #endif |
9 | 9 | ||
diff --git a/drivers/char/drm/drm_vm.c b/drivers/char/drm/drm_vm.c index ced4215e2275..39ea96e42c5b 100644 --- a/drivers/char/drm/drm_vm.c +++ b/drivers/char/drm/drm_vm.c | |||
@@ -148,7 +148,8 @@ static __inline__ struct page *drm_do_vm_shm_nopage(struct vm_area_struct *vma, | |||
148 | 148 | ||
149 | offset = address - vma->vm_start; | 149 | offset = address - vma->vm_start; |
150 | i = (unsigned long)map->handle + offset; | 150 | i = (unsigned long)map->handle + offset; |
151 | page = vmalloc_to_page((void *)i); | 151 | page = (map->type == _DRM_CONSISTENT) ? |
152 | virt_to_page((void *)i) : vmalloc_to_page((void *)i); | ||
152 | if (!page) | 153 | if (!page) |
153 | return NOPAGE_OOM; | 154 | return NOPAGE_OOM; |
154 | get_page(page); | 155 | get_page(page); |
diff --git a/drivers/char/drm/mga_drv.h b/drivers/char/drm/mga_drv.h index b22fdbd4f830..6059c5a5b105 100644 --- a/drivers/char/drm/mga_drv.h +++ b/drivers/char/drm/mga_drv.h | |||
@@ -227,7 +227,7 @@ static inline u32 _MGA_READ(u32 *addr) | |||
227 | #define MGA_EMIT_STATE( dev_priv, dirty ) \ | 227 | #define MGA_EMIT_STATE( dev_priv, dirty ) \ |
228 | do { \ | 228 | do { \ |
229 | if ( (dirty) & ~MGA_UPLOAD_CLIPRECTS ) { \ | 229 | if ( (dirty) & ~MGA_UPLOAD_CLIPRECTS ) { \ |
230 | if ( dev_priv->chipset == MGA_CARD_TYPE_G400 ) { \ | 230 | if ( dev_priv->chipset >= MGA_CARD_TYPE_G400 ) { \ |
231 | mga_g400_emit_state( dev_priv ); \ | 231 | mga_g400_emit_state( dev_priv ); \ |
232 | } else { \ | 232 | } else { \ |
233 | mga_g200_emit_state( dev_priv ); \ | 233 | mga_g200_emit_state( dev_priv ); \ |
diff --git a/drivers/char/drm/mga_state.c b/drivers/char/drm/mga_state.c index 05bbb4719376..6ac5e006226f 100644 --- a/drivers/char/drm/mga_state.c +++ b/drivers/char/drm/mga_state.c | |||
@@ -53,7 +53,7 @@ static void mga_emit_clip_rect( drm_mga_private_t *dev_priv, | |||
53 | 53 | ||
54 | /* Force reset of DWGCTL on G400 (eliminates clip disable bit). | 54 | /* Force reset of DWGCTL on G400 (eliminates clip disable bit). |
55 | */ | 55 | */ |
56 | if (dev_priv->chipset == MGA_CARD_TYPE_G400) { | 56 | if (dev_priv->chipset >= MGA_CARD_TYPE_G400) { |
57 | DMA_BLOCK(MGA_DWGCTL, ctx->dwgctl, | 57 | DMA_BLOCK(MGA_DWGCTL, ctx->dwgctl, |
58 | MGA_LEN + MGA_EXEC, 0x80000000, | 58 | MGA_LEN + MGA_EXEC, 0x80000000, |
59 | MGA_DWGCTL, ctx->dwgctl, | 59 | MGA_DWGCTL, ctx->dwgctl, |
diff --git a/drivers/char/drm/radeon_cp.c b/drivers/char/drm/radeon_cp.c index 6d9080a3ca7e..12ef13ff04ca 100644 --- a/drivers/char/drm/radeon_cp.c +++ b/drivers/char/drm/radeon_cp.c | |||
@@ -1133,10 +1133,10 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev, | |||
1133 | ring_start = (dev_priv->cp_ring->offset | 1133 | ring_start = (dev_priv->cp_ring->offset |
1134 | - dev->agp->base | 1134 | - dev->agp->base |
1135 | + dev_priv->gart_vm_start); | 1135 | + dev_priv->gart_vm_start); |
1136 | } else | 1136 | } else |
1137 | #endif | 1137 | #endif |
1138 | ring_start = (dev_priv->cp_ring->offset | 1138 | ring_start = (dev_priv->cp_ring->offset |
1139 | - dev->sg->handle | 1139 | - (unsigned long)dev->sg->virtual |
1140 | + dev_priv->gart_vm_start); | 1140 | + dev_priv->gart_vm_start); |
1141 | 1141 | ||
1142 | RADEON_WRITE( RADEON_CP_RB_BASE, ring_start ); | 1142 | RADEON_WRITE( RADEON_CP_RB_BASE, ring_start ); |
@@ -1164,7 +1164,8 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev, | |||
1164 | drm_sg_mem_t *entry = dev->sg; | 1164 | drm_sg_mem_t *entry = dev->sg; |
1165 | unsigned long tmp_ofs, page_ofs; | 1165 | unsigned long tmp_ofs, page_ofs; |
1166 | 1166 | ||
1167 | tmp_ofs = dev_priv->ring_rptr->offset - dev->sg->handle; | 1167 | tmp_ofs = dev_priv->ring_rptr->offset - |
1168 | (unsigned long)dev->sg->virtual; | ||
1168 | page_ofs = tmp_ofs >> PAGE_SHIFT; | 1169 | page_ofs = tmp_ofs >> PAGE_SHIFT; |
1169 | 1170 | ||
1170 | RADEON_WRITE( RADEON_CP_RB_RPTR_ADDR, | 1171 | RADEON_WRITE( RADEON_CP_RB_RPTR_ADDR, |
@@ -1491,8 +1492,8 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) | |||
1491 | else | 1492 | else |
1492 | #endif | 1493 | #endif |
1493 | dev_priv->gart_buffers_offset = (dev->agp_buffer_map->offset | 1494 | dev_priv->gart_buffers_offset = (dev->agp_buffer_map->offset |
1494 | - dev->sg->handle | 1495 | - (unsigned long)dev->sg->virtual |
1495 | + dev_priv->gart_vm_start); | 1496 | + dev_priv->gart_vm_start); |
1496 | 1497 | ||
1497 | DRM_DEBUG( "dev_priv->gart_size %d\n", | 1498 | DRM_DEBUG( "dev_priv->gart_size %d\n", |
1498 | dev_priv->gart_size ); | 1499 | dev_priv->gart_size ); |
diff --git a/drivers/infiniband/hw/mthca/mthca_eq.c b/drivers/infiniband/hw/mthca/mthca_eq.c index c81fa8e975ef..8dfafda5ed24 100644 --- a/drivers/infiniband/hw/mthca/mthca_eq.c +++ b/drivers/infiniband/hw/mthca/mthca_eq.c | |||
@@ -396,20 +396,21 @@ static irqreturn_t mthca_tavor_interrupt(int irq, void *dev_ptr, struct pt_regs | |||
396 | writel(dev->eq_table.clr_mask, dev->eq_table.clr_int); | 396 | writel(dev->eq_table.clr_mask, dev->eq_table.clr_int); |
397 | 397 | ||
398 | ecr = readl(dev->eq_regs.tavor.ecr_base + 4); | 398 | ecr = readl(dev->eq_regs.tavor.ecr_base + 4); |
399 | if (ecr) { | 399 | if (!ecr) |
400 | writel(ecr, dev->eq_regs.tavor.ecr_base + | 400 | return IRQ_NONE; |
401 | MTHCA_ECR_CLR_BASE - MTHCA_ECR_BASE + 4); | ||
402 | 401 | ||
403 | for (i = 0; i < MTHCA_NUM_EQ; ++i) | 402 | writel(ecr, dev->eq_regs.tavor.ecr_base + |
404 | if (ecr & dev->eq_table.eq[i].eqn_mask && | 403 | MTHCA_ECR_CLR_BASE - MTHCA_ECR_BASE + 4); |
405 | mthca_eq_int(dev, &dev->eq_table.eq[i])) { | 404 | |
405 | for (i = 0; i < MTHCA_NUM_EQ; ++i) | ||
406 | if (ecr & dev->eq_table.eq[i].eqn_mask) { | ||
407 | if (mthca_eq_int(dev, &dev->eq_table.eq[i])) | ||
406 | tavor_set_eq_ci(dev, &dev->eq_table.eq[i], | 408 | tavor_set_eq_ci(dev, &dev->eq_table.eq[i], |
407 | dev->eq_table.eq[i].cons_index); | 409 | dev->eq_table.eq[i].cons_index); |
408 | tavor_eq_req_not(dev, dev->eq_table.eq[i].eqn); | 410 | tavor_eq_req_not(dev, dev->eq_table.eq[i].eqn); |
409 | } | 411 | } |
410 | } | ||
411 | 412 | ||
412 | return IRQ_RETVAL(ecr); | 413 | return IRQ_HANDLED; |
413 | } | 414 | } |
414 | 415 | ||
415 | static irqreturn_t mthca_tavor_msi_x_interrupt(int irq, void *eq_ptr, | 416 | static irqreturn_t mthca_tavor_msi_x_interrupt(int irq, void *eq_ptr, |
diff --git a/drivers/md/md.c b/drivers/md/md.c index e9476075aa13..2a8a5696bf8a 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -3568,7 +3568,8 @@ static void md_do_sync(mddev_t *mddev) | |||
3568 | mddev->curr_resync = 2; | 3568 | mddev->curr_resync = 2; |
3569 | 3569 | ||
3570 | try_again: | 3570 | try_again: |
3571 | if (signal_pending(current)) { | 3571 | if (signal_pending(current) || |
3572 | kthread_should_stop()) { | ||
3572 | flush_signals(current); | 3573 | flush_signals(current); |
3573 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); | 3574 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); |
3574 | goto skip; | 3575 | goto skip; |
@@ -3590,8 +3591,9 @@ static void md_do_sync(mddev_t *mddev) | |||
3590 | */ | 3591 | */ |
3591 | continue; | 3592 | continue; |
3592 | prepare_to_wait(&resync_wait, &wq, TASK_INTERRUPTIBLE); | 3593 | prepare_to_wait(&resync_wait, &wq, TASK_INTERRUPTIBLE); |
3593 | if (!signal_pending(current) | 3594 | if (!signal_pending(current) && |
3594 | && mddev2->curr_resync >= mddev->curr_resync) { | 3595 | !kthread_should_stop() && |
3596 | mddev2->curr_resync >= mddev->curr_resync) { | ||
3595 | printk(KERN_INFO "md: delaying resync of %s" | 3597 | printk(KERN_INFO "md: delaying resync of %s" |
3596 | " until %s has finished resync (they" | 3598 | " until %s has finished resync (they" |
3597 | " share one or more physical units)\n", | 3599 | " share one or more physical units)\n", |
@@ -3697,7 +3699,7 @@ static void md_do_sync(mddev_t *mddev) | |||
3697 | } | 3699 | } |
3698 | 3700 | ||
3699 | 3701 | ||
3700 | if (signal_pending(current)) { | 3702 | if (signal_pending(current) || kthread_should_stop()) { |
3701 | /* | 3703 | /* |
3702 | * got a signal, exit. | 3704 | * got a signal, exit. |
3703 | */ | 3705 | */ |
diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig index 93570355819a..bbb989df4cf0 100644 --- a/drivers/media/video/Kconfig +++ b/drivers/media/video/Kconfig | |||
@@ -262,7 +262,6 @@ config VIDEO_SAA7134_DVB | |||
262 | depends on VIDEO_SAA7134 && DVB_CORE | 262 | depends on VIDEO_SAA7134 && DVB_CORE |
263 | select VIDEO_BUF_DVB | 263 | select VIDEO_BUF_DVB |
264 | select DVB_MT352 | 264 | select DVB_MT352 |
265 | select DVB_CX22702 | ||
266 | select DVB_TDA1004X | 265 | select DVB_TDA1004X |
267 | ---help--- | 266 | ---help--- |
268 | This adds support for DVB cards based on the | 267 | This adds support for DVB cards based on the |
diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c index 429820e48c69..7de19a84dc74 100644 --- a/drivers/message/fusion/mptsas.c +++ b/drivers/message/fusion/mptsas.c | |||
@@ -257,8 +257,8 @@ static void mptsas_print_device_pg0(SasDevicePage0_t *pg0) | |||
257 | printk("SAS Address=0x%llX\n", le64_to_cpu(sas_address)); | 257 | printk("SAS Address=0x%llX\n", le64_to_cpu(sas_address)); |
258 | printk("Target ID=0x%X\n", pg0->TargetID); | 258 | printk("Target ID=0x%X\n", pg0->TargetID); |
259 | printk("Bus=0x%X\n", pg0->Bus); | 259 | printk("Bus=0x%X\n", pg0->Bus); |
260 | printk("PhyNum=0x%X\n", pg0->PhyNum); | 260 | printk("Parent Phy Num=0x%X\n", pg0->PhyNum); |
261 | printk("AccessStatus=0x%X\n", le16_to_cpu(pg0->AccessStatus)); | 261 | printk("Access Status=0x%X\n", le16_to_cpu(pg0->AccessStatus)); |
262 | printk("Device Info=0x%X\n", le32_to_cpu(pg0->DeviceInfo)); | 262 | printk("Device Info=0x%X\n", le32_to_cpu(pg0->DeviceInfo)); |
263 | printk("Flags=0x%X\n", le16_to_cpu(pg0->Flags)); | 263 | printk("Flags=0x%X\n", le16_to_cpu(pg0->Flags)); |
264 | printk("Physical Port=0x%X\n", pg0->PhysicalPort); | 264 | printk("Physical Port=0x%X\n", pg0->PhysicalPort); |
@@ -270,7 +270,7 @@ static void mptsas_print_expander_pg1(SasExpanderPage1_t *pg1) | |||
270 | printk("---- SAS EXPANDER PAGE 1 ------------\n"); | 270 | printk("---- SAS EXPANDER PAGE 1 ------------\n"); |
271 | 271 | ||
272 | printk("Physical Port=0x%X\n", pg1->PhysicalPort); | 272 | printk("Physical Port=0x%X\n", pg1->PhysicalPort); |
273 | printk("PHY Identifier=0x%X\n", pg1->Phy); | 273 | printk("PHY Identifier=0x%X\n", pg1->PhyIdentifier); |
274 | printk("Negotiated Link Rate=0x%X\n", pg1->NegotiatedLinkRate); | 274 | printk("Negotiated Link Rate=0x%X\n", pg1->NegotiatedLinkRate); |
275 | printk("Programmed Link Rate=0x%X\n", pg1->ProgrammedLinkRate); | 275 | printk("Programmed Link Rate=0x%X\n", pg1->ProgrammedLinkRate); |
276 | printk("Hardware Link Rate=0x%X\n", pg1->HwLinkRate); | 276 | printk("Hardware Link Rate=0x%X\n", pg1->HwLinkRate); |
@@ -604,7 +604,7 @@ mptsas_sas_expander_pg1(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info, | |||
604 | mptsas_print_expander_pg1(buffer); | 604 | mptsas_print_expander_pg1(buffer); |
605 | 605 | ||
606 | /* save config data */ | 606 | /* save config data */ |
607 | phy_info->phy_id = buffer->Phy; | 607 | phy_info->phy_id = buffer->PhyIdentifier; |
608 | phy_info->port_id = buffer->PhysicalPort; | 608 | phy_info->port_id = buffer->PhysicalPort; |
609 | phy_info->negotiated_link_rate = buffer->NegotiatedLinkRate; | 609 | phy_info->negotiated_link_rate = buffer->NegotiatedLinkRate; |
610 | phy_info->programmed_link_rate = buffer->ProgrammedLinkRate; | 610 | phy_info->programmed_link_rate = buffer->ProgrammedLinkRate; |
@@ -825,6 +825,8 @@ mptsas_probe_hba_phys(MPT_ADAPTER *ioc, int *index) | |||
825 | mptsas_sas_device_pg0(ioc, &port_info->phy_info[i].identify, | 825 | mptsas_sas_device_pg0(ioc, &port_info->phy_info[i].identify, |
826 | (MPI_SAS_DEVICE_PGAD_FORM_GET_NEXT_HANDLE << | 826 | (MPI_SAS_DEVICE_PGAD_FORM_GET_NEXT_HANDLE << |
827 | MPI_SAS_DEVICE_PGAD_FORM_SHIFT), handle); | 827 | MPI_SAS_DEVICE_PGAD_FORM_SHIFT), handle); |
828 | port_info->phy_info[i].identify.phy_id = | ||
829 | port_info->phy_info[i].phy_id; | ||
828 | handle = port_info->phy_info[i].identify.handle; | 830 | handle = port_info->phy_info[i].identify.handle; |
829 | 831 | ||
830 | if (port_info->phy_info[i].attached.handle) { | 832 | if (port_info->phy_info[i].attached.handle) { |
@@ -881,6 +883,8 @@ mptsas_probe_expander_phys(MPT_ADAPTER *ioc, u32 *handle, int *index) | |||
881 | (MPI_SAS_DEVICE_PGAD_FORM_HANDLE << | 883 | (MPI_SAS_DEVICE_PGAD_FORM_HANDLE << |
882 | MPI_SAS_DEVICE_PGAD_FORM_SHIFT), | 884 | MPI_SAS_DEVICE_PGAD_FORM_SHIFT), |
883 | port_info->phy_info[i].identify.handle); | 885 | port_info->phy_info[i].identify.handle); |
886 | port_info->phy_info[i].identify.phy_id = | ||
887 | port_info->phy_info[i].phy_id; | ||
884 | } | 888 | } |
885 | 889 | ||
886 | if (port_info->phy_info[i].attached.handle) { | 890 | if (port_info->phy_info[i].attached.handle) { |
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index a6a630a950d0..7992bc8cc6a4 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
@@ -241,7 +241,8 @@ static void __devinit quirk_s3_64M(struct pci_dev *dev) | |||
241 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_868, quirk_s3_64M ); | 241 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_868, quirk_s3_64M ); |
242 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_968, quirk_s3_64M ); | 242 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_968, quirk_s3_64M ); |
243 | 243 | ||
244 | static void __devinit quirk_io_region(struct pci_dev *dev, unsigned region, unsigned size, int nr) | 244 | static void __devinit quirk_io_region(struct pci_dev *dev, unsigned region, |
245 | unsigned size, int nr, const char *name) | ||
245 | { | 246 | { |
246 | region &= ~(size-1); | 247 | region &= ~(size-1); |
247 | if (region) { | 248 | if (region) { |
@@ -259,6 +260,7 @@ static void __devinit quirk_io_region(struct pci_dev *dev, unsigned region, unsi | |||
259 | pcibios_bus_to_resource(dev, res, &bus_region); | 260 | pcibios_bus_to_resource(dev, res, &bus_region); |
260 | 261 | ||
261 | pci_claim_resource(dev, nr); | 262 | pci_claim_resource(dev, nr); |
263 | printk("PCI quirk: region %04x-%04x claimed by %s\n", region, region + size - 1, name); | ||
262 | } | 264 | } |
263 | } | 265 | } |
264 | 266 | ||
@@ -291,25 +293,98 @@ static void __devinit quirk_ali7101_acpi(struct pci_dev *dev) | |||
291 | u16 region; | 293 | u16 region; |
292 | 294 | ||
293 | pci_read_config_word(dev, 0xE0, ®ion); | 295 | pci_read_config_word(dev, 0xE0, ®ion); |
294 | quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES); | 296 | quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES, "ali7101 ACPI"); |
295 | pci_read_config_word(dev, 0xE2, ®ion); | 297 | pci_read_config_word(dev, 0xE2, ®ion); |
296 | quirk_io_region(dev, region, 32, PCI_BRIDGE_RESOURCES+1); | 298 | quirk_io_region(dev, region, 32, PCI_BRIDGE_RESOURCES+1, "ali7101 SMB"); |
297 | } | 299 | } |
298 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M7101, quirk_ali7101_acpi ); | 300 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M7101, quirk_ali7101_acpi ); |
299 | 301 | ||
302 | static void piix4_io_quirk(struct pci_dev *dev, const char *name, unsigned int port, unsigned int enable) | ||
303 | { | ||
304 | u32 devres; | ||
305 | u32 mask, size, base; | ||
306 | |||
307 | pci_read_config_dword(dev, port, &devres); | ||
308 | if ((devres & enable) != enable) | ||
309 | return; | ||
310 | mask = (devres >> 16) & 15; | ||
311 | base = devres & 0xffff; | ||
312 | size = 16; | ||
313 | for (;;) { | ||
314 | unsigned bit = size >> 1; | ||
315 | if ((bit & mask) == bit) | ||
316 | break; | ||
317 | size = bit; | ||
318 | } | ||
319 | /* | ||
320 | * For now we only print it out. Eventually we'll want to | ||
321 | * reserve it (at least if it's in the 0x1000+ range), but | ||
322 | * let's get enough confirmation reports first. | ||
323 | */ | ||
324 | base &= -size; | ||
325 | printk("%s PIO at %04x-%04x\n", name, base, base + size - 1); | ||
326 | } | ||
327 | |||
328 | static void piix4_mem_quirk(struct pci_dev *dev, const char *name, unsigned int port, unsigned int enable) | ||
329 | { | ||
330 | u32 devres; | ||
331 | u32 mask, size, base; | ||
332 | |||
333 | pci_read_config_dword(dev, port, &devres); | ||
334 | if ((devres & enable) != enable) | ||
335 | return; | ||
336 | base = devres & 0xffff0000; | ||
337 | mask = (devres & 0x3f) << 16; | ||
338 | size = 128 << 16; | ||
339 | for (;;) { | ||
340 | unsigned bit = size >> 1; | ||
341 | if ((bit & mask) == bit) | ||
342 | break; | ||
343 | size = bit; | ||
344 | } | ||
345 | /* | ||
346 | * For now we only print it out. Eventually we'll want to | ||
347 | * reserve it, but let's get enough confirmation reports first. | ||
348 | */ | ||
349 | base &= -size; | ||
350 | printk("%s MMIO at %04x-%04x\n", name, base, base + size - 1); | ||
351 | } | ||
352 | |||
300 | /* | 353 | /* |
301 | * PIIX4 ACPI: Two IO regions pointed to by longwords at | 354 | * PIIX4 ACPI: Two IO regions pointed to by longwords at |
302 | * 0x40 (64 bytes of ACPI registers) | 355 | * 0x40 (64 bytes of ACPI registers) |
303 | * 0x90 (32 bytes of SMB registers) | 356 | * 0x90 (32 bytes of SMB registers) |
357 | * and a few strange programmable PIIX4 device resources. | ||
304 | */ | 358 | */ |
305 | static void __devinit quirk_piix4_acpi(struct pci_dev *dev) | 359 | static void __devinit quirk_piix4_acpi(struct pci_dev *dev) |
306 | { | 360 | { |
307 | u32 region; | 361 | u32 region, res_a; |
308 | 362 | ||
309 | pci_read_config_dword(dev, 0x40, ®ion); | 363 | pci_read_config_dword(dev, 0x40, ®ion); |
310 | quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES); | 364 | quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES, "PIIX4 ACPI"); |
311 | pci_read_config_dword(dev, 0x90, ®ion); | 365 | pci_read_config_dword(dev, 0x90, ®ion); |
312 | quirk_io_region(dev, region, 32, PCI_BRIDGE_RESOURCES+1); | 366 | quirk_io_region(dev, region, 32, PCI_BRIDGE_RESOURCES+1, "PIIX4 SMB"); |
367 | |||
368 | /* Device resource A has enables for some of the other ones */ | ||
369 | pci_read_config_dword(dev, 0x5c, &res_a); | ||
370 | |||
371 | piix4_io_quirk(dev, "PIIX4 devres B", 0x60, 3 << 21); | ||
372 | piix4_io_quirk(dev, "PIIX4 devres C", 0x64, 3 << 21); | ||
373 | |||
374 | /* Device resource D is just bitfields for static resources */ | ||
375 | |||
376 | /* Device 12 enabled? */ | ||
377 | if (res_a & (1 << 29)) { | ||
378 | piix4_io_quirk(dev, "PIIX4 devres E", 0x68, 1 << 20); | ||
379 | piix4_mem_quirk(dev, "PIIX4 devres F", 0x6c, 1 << 7); | ||
380 | } | ||
381 | /* Device 13 enabled? */ | ||
382 | if (res_a & (1 << 30)) { | ||
383 | piix4_io_quirk(dev, "PIIX4 devres G", 0x70, 1 << 20); | ||
384 | piix4_mem_quirk(dev, "PIIX4 devres H", 0x74, 1 << 7); | ||
385 | } | ||
386 | piix4_io_quirk(dev, "PIIX4 devres I", 0x78, 1 << 20); | ||
387 | piix4_io_quirk(dev, "PIIX4 devres J", 0x7c, 1 << 20); | ||
313 | } | 388 | } |
314 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, quirk_piix4_acpi ); | 389 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, quirk_piix4_acpi ); |
315 | 390 | ||
@@ -323,10 +398,10 @@ static void __devinit quirk_ich4_lpc_acpi(struct pci_dev *dev) | |||
323 | u32 region; | 398 | u32 region; |
324 | 399 | ||
325 | pci_read_config_dword(dev, 0x40, ®ion); | 400 | pci_read_config_dword(dev, 0x40, ®ion); |
326 | quirk_io_region(dev, region, 128, PCI_BRIDGE_RESOURCES); | 401 | quirk_io_region(dev, region, 128, PCI_BRIDGE_RESOURCES, "ICH4 ACPI/GPIO/TCO"); |
327 | 402 | ||
328 | pci_read_config_dword(dev, 0x58, ®ion); | 403 | pci_read_config_dword(dev, 0x58, ®ion); |
329 | quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES+1); | 404 | quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES+1, "ICH4 GPIO"); |
330 | } | 405 | } |
331 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_0, quirk_ich4_lpc_acpi ); | 406 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_0, quirk_ich4_lpc_acpi ); |
332 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_0, quirk_ich4_lpc_acpi ); | 407 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_0, quirk_ich4_lpc_acpi ); |
@@ -352,7 +427,7 @@ static void __devinit quirk_vt82c586_acpi(struct pci_dev *dev) | |||
352 | if (rev & 0x10) { | 427 | if (rev & 0x10) { |
353 | pci_read_config_dword(dev, 0x48, ®ion); | 428 | pci_read_config_dword(dev, 0x48, ®ion); |
354 | region &= PCI_BASE_ADDRESS_IO_MASK; | 429 | region &= PCI_BASE_ADDRESS_IO_MASK; |
355 | quirk_io_region(dev, region, 256, PCI_BRIDGE_RESOURCES); | 430 | quirk_io_region(dev, region, 256, PCI_BRIDGE_RESOURCES, "vt82c586 ACPI"); |
356 | } | 431 | } |
357 | } | 432 | } |
358 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_3, quirk_vt82c586_acpi ); | 433 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_3, quirk_vt82c586_acpi ); |
@@ -372,11 +447,11 @@ static void __devinit quirk_vt82c686_acpi(struct pci_dev *dev) | |||
372 | 447 | ||
373 | pci_read_config_word(dev, 0x70, &hm); | 448 | pci_read_config_word(dev, 0x70, &hm); |
374 | hm &= PCI_BASE_ADDRESS_IO_MASK; | 449 | hm &= PCI_BASE_ADDRESS_IO_MASK; |
375 | quirk_io_region(dev, hm, 128, PCI_BRIDGE_RESOURCES + 1); | 450 | quirk_io_region(dev, hm, 128, PCI_BRIDGE_RESOURCES + 1, "vt82c868 HW-mon"); |
376 | 451 | ||
377 | pci_read_config_dword(dev, 0x90, &smb); | 452 | pci_read_config_dword(dev, 0x90, &smb); |
378 | smb &= PCI_BASE_ADDRESS_IO_MASK; | 453 | smb &= PCI_BASE_ADDRESS_IO_MASK; |
379 | quirk_io_region(dev, smb, 16, PCI_BRIDGE_RESOURCES + 2); | 454 | quirk_io_region(dev, smb, 16, PCI_BRIDGE_RESOURCES + 2, "vt82c868 SMB"); |
380 | } | 455 | } |
381 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4, quirk_vt82c686_acpi ); | 456 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4, quirk_vt82c686_acpi ); |
382 | 457 | ||
@@ -391,11 +466,11 @@ static void __devinit quirk_vt8235_acpi(struct pci_dev *dev) | |||
391 | 466 | ||
392 | pci_read_config_word(dev, 0x88, &pm); | 467 | pci_read_config_word(dev, 0x88, &pm); |
393 | pm &= PCI_BASE_ADDRESS_IO_MASK; | 468 | pm &= PCI_BASE_ADDRESS_IO_MASK; |
394 | quirk_io_region(dev, pm, 128, PCI_BRIDGE_RESOURCES); | 469 | quirk_io_region(dev, pm, 128, PCI_BRIDGE_RESOURCES, "vt8235 PM"); |
395 | 470 | ||
396 | pci_read_config_word(dev, 0xd0, &smb); | 471 | pci_read_config_word(dev, 0xd0, &smb); |
397 | smb &= PCI_BASE_ADDRESS_IO_MASK; | 472 | smb &= PCI_BASE_ADDRESS_IO_MASK; |
398 | quirk_io_region(dev, smb, 16, PCI_BRIDGE_RESOURCES + 1); | 473 | quirk_io_region(dev, smb, 16, PCI_BRIDGE_RESOURCES + 1, "vt8235 SMB"); |
399 | } | 474 | } |
400 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8235, quirk_vt8235_acpi); | 475 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8235, quirk_vt8235_acpi); |
401 | 476 | ||
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c index 657be948baf7..28ce3a7ee434 100644 --- a/drivers/pci/setup-bus.c +++ b/drivers/pci/setup-bus.c | |||
@@ -40,7 +40,7 @@ | |||
40 | * FIXME: IO should be max 256 bytes. However, since we may | 40 | * FIXME: IO should be max 256 bytes. However, since we may |
41 | * have a P2P bridge below a cardbus bridge, we need 4K. | 41 | * have a P2P bridge below a cardbus bridge, we need 4K. |
42 | */ | 42 | */ |
43 | #define CARDBUS_IO_SIZE (4*1024) | 43 | #define CARDBUS_IO_SIZE (256) |
44 | #define CARDBUS_MEM_SIZE (32*1024*1024) | 44 | #define CARDBUS_MEM_SIZE (32*1024*1024) |
45 | 45 | ||
46 | static void __devinit | 46 | static void __devinit |
diff --git a/drivers/scsi/NCR5380.c b/drivers/scsi/NCR5380.c index d40ba0bd68a3..23392ae7df8b 100644 --- a/drivers/scsi/NCR5380.c +++ b/drivers/scsi/NCR5380.c | |||
@@ -91,7 +91,7 @@ | |||
91 | #ifndef NDEBUG | 91 | #ifndef NDEBUG |
92 | #define NDEBUG 0 | 92 | #define NDEBUG 0 |
93 | #endif | 93 | #endif |
94 | #ifndef NDEBUG | 94 | #ifndef NDEBUG_ABORT |
95 | #define NDEBUG_ABORT 0 | 95 | #define NDEBUG_ABORT 0 |
96 | #endif | 96 | #endif |
97 | 97 | ||
diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h index 4a99d2f000f4..d54b1cc88d0d 100644 --- a/drivers/scsi/aacraid/aacraid.h +++ b/drivers/scsi/aacraid/aacraid.h | |||
@@ -19,7 +19,7 @@ | |||
19 | #define AAC_MAX_LUN (8) | 19 | #define AAC_MAX_LUN (8) |
20 | 20 | ||
21 | #define AAC_MAX_HOSTPHYSMEMPAGES (0xfffff) | 21 | #define AAC_MAX_HOSTPHYSMEMPAGES (0xfffff) |
22 | #define AAC_MAX_32BIT_SGBCOUNT ((unsigned short)512) | 22 | #define AAC_MAX_32BIT_SGBCOUNT ((unsigned short)256) |
23 | 23 | ||
24 | /* | 24 | /* |
25 | * These macros convert from physical channels to virtual channels | 25 | * These macros convert from physical channels to virtual channels |
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 8982978c42fd..7aec93f9d423 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c | |||
@@ -1325,6 +1325,8 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info) | |||
1325 | ha->brd_info = brd_info; | 1325 | ha->brd_info = brd_info; |
1326 | sprintf(ha->host_str, "%s_%ld", ha->brd_info->drv_name, ha->host_no); | 1326 | sprintf(ha->host_str, "%s_%ld", ha->brd_info->drv_name, ha->host_no); |
1327 | 1327 | ||
1328 | ha->dpc_pid = -1; | ||
1329 | |||
1328 | /* Configure PCI I/O space */ | 1330 | /* Configure PCI I/O space */ |
1329 | ret = qla2x00_iospace_config(ha); | 1331 | ret = qla2x00_iospace_config(ha); |
1330 | if (ret) | 1332 | if (ret) |
@@ -1448,7 +1450,6 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info) | |||
1448 | */ | 1450 | */ |
1449 | spin_lock_init(&ha->mbx_reg_lock); | 1451 | spin_lock_init(&ha->mbx_reg_lock); |
1450 | 1452 | ||
1451 | ha->dpc_pid = -1; | ||
1452 | init_completion(&ha->dpc_inited); | 1453 | init_completion(&ha->dpc_inited); |
1453 | init_completion(&ha->dpc_exited); | 1454 | init_completion(&ha->dpc_exited); |
1454 | 1455 | ||
diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c index 64fc9e21f35b..e69477d1889b 100644 --- a/drivers/scsi/scsi_devinfo.c +++ b/drivers/scsi/scsi_devinfo.c | |||
@@ -185,6 +185,7 @@ static struct { | |||
185 | {"PIONEER", "CD-ROM DRM-600", NULL, BLIST_FORCELUN | BLIST_SINGLELUN}, | 185 | {"PIONEER", "CD-ROM DRM-600", NULL, BLIST_FORCELUN | BLIST_SINGLELUN}, |
186 | {"PIONEER", "CD-ROM DRM-602X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN}, | 186 | {"PIONEER", "CD-ROM DRM-602X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN}, |
187 | {"PIONEER", "CD-ROM DRM-604X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN}, | 187 | {"PIONEER", "CD-ROM DRM-604X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN}, |
188 | {"PIONEER", "CD-ROM DRM-624X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN}, | ||
188 | {"REGAL", "CDC-4X", NULL, BLIST_MAX5LUN | BLIST_SINGLELUN}, | 189 | {"REGAL", "CDC-4X", NULL, BLIST_MAX5LUN | BLIST_SINGLELUN}, |
189 | {"SanDisk", "ImageMate CF-SD1", NULL, BLIST_FORCELUN}, | 190 | {"SanDisk", "ImageMate CF-SD1", NULL, BLIST_FORCELUN}, |
190 | {"SEAGATE", "ST34555N", "0930", BLIST_NOTQ}, /* Chokes on tagged INQUIRY */ | 191 | {"SEAGATE", "ST34555N", "0930", BLIST_NOTQ}, /* Chokes on tagged INQUIRY */ |
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index dc9c772bc874..0074f28c37b2 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
@@ -97,7 +97,6 @@ int scsi_insert_special_req(struct scsi_request *sreq, int at_head) | |||
97 | } | 97 | } |
98 | 98 | ||
99 | static void scsi_run_queue(struct request_queue *q); | 99 | static void scsi_run_queue(struct request_queue *q); |
100 | static void scsi_release_buffers(struct scsi_cmnd *cmd); | ||
101 | 100 | ||
102 | /* | 101 | /* |
103 | * Function: scsi_unprep_request() | 102 | * Function: scsi_unprep_request() |
@@ -1040,8 +1039,10 @@ static int scsi_init_io(struct scsi_cmnd *cmd) | |||
1040 | * if sg table allocation fails, requeue request later. | 1039 | * if sg table allocation fails, requeue request later. |
1041 | */ | 1040 | */ |
1042 | sgpnt = scsi_alloc_sgtable(cmd, GFP_ATOMIC); | 1041 | sgpnt = scsi_alloc_sgtable(cmd, GFP_ATOMIC); |
1043 | if (unlikely(!sgpnt)) | 1042 | if (unlikely(!sgpnt)) { |
1043 | scsi_unprep_request(req); | ||
1044 | return BLKPREP_DEFER; | 1044 | return BLKPREP_DEFER; |
1045 | } | ||
1045 | 1046 | ||
1046 | cmd->request_buffer = (char *) sgpnt; | 1047 | cmd->request_buffer = (char *) sgpnt; |
1047 | cmd->request_bufflen = req->nr_sectors << 9; | 1048 | cmd->request_bufflen = req->nr_sectors << 9; |
@@ -1245,8 +1246,8 @@ static int scsi_prep_fn(struct request_queue *q, struct request *req) | |||
1245 | */ | 1246 | */ |
1246 | ret = scsi_init_io(cmd); | 1247 | ret = scsi_init_io(cmd); |
1247 | switch(ret) { | 1248 | switch(ret) { |
1249 | /* For BLKPREP_KILL/DEFER the cmd was released */ | ||
1248 | case BLKPREP_KILL: | 1250 | case BLKPREP_KILL: |
1249 | /* BLKPREP_KILL return also releases the command */ | ||
1250 | goto kill; | 1251 | goto kill; |
1251 | case BLKPREP_DEFER: | 1252 | case BLKPREP_DEFER: |
1252 | goto defer; | 1253 | goto defer; |
diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c index 2cab556b6e82..771e97ef136e 100644 --- a/drivers/scsi/scsi_transport_fc.c +++ b/drivers/scsi/scsi_transport_fc.c | |||
@@ -819,12 +819,15 @@ show_fc_private_host_tgtid_bind_type(struct class_device *cdev, char *buf) | |||
819 | return snprintf(buf, FC_BINDTYPE_MAX_NAMELEN, "%s\n", name); | 819 | return snprintf(buf, FC_BINDTYPE_MAX_NAMELEN, "%s\n", name); |
820 | } | 820 | } |
821 | 821 | ||
822 | #define get_list_head_entry(pos, head, member) \ | ||
823 | pos = list_entry((head)->next, typeof(*pos), member) | ||
824 | |||
822 | static ssize_t | 825 | static ssize_t |
823 | store_fc_private_host_tgtid_bind_type(struct class_device *cdev, | 826 | store_fc_private_host_tgtid_bind_type(struct class_device *cdev, |
824 | const char *buf, size_t count) | 827 | const char *buf, size_t count) |
825 | { | 828 | { |
826 | struct Scsi_Host *shost = transport_class_to_shost(cdev); | 829 | struct Scsi_Host *shost = transport_class_to_shost(cdev); |
827 | struct fc_rport *rport, *next_rport; | 830 | struct fc_rport *rport; |
828 | enum fc_tgtid_binding_type val; | 831 | enum fc_tgtid_binding_type val; |
829 | unsigned long flags; | 832 | unsigned long flags; |
830 | 833 | ||
@@ -834,9 +837,13 @@ store_fc_private_host_tgtid_bind_type(struct class_device *cdev, | |||
834 | /* if changing bind type, purge all unused consistent bindings */ | 837 | /* if changing bind type, purge all unused consistent bindings */ |
835 | if (val != fc_host_tgtid_bind_type(shost)) { | 838 | if (val != fc_host_tgtid_bind_type(shost)) { |
836 | spin_lock_irqsave(shost->host_lock, flags); | 839 | spin_lock_irqsave(shost->host_lock, flags); |
837 | list_for_each_entry_safe(rport, next_rport, | 840 | while (!list_empty(&fc_host_rport_bindings(shost))) { |
838 | &fc_host_rport_bindings(shost), peers) | 841 | get_list_head_entry(rport, |
842 | &fc_host_rport_bindings(shost), peers); | ||
843 | spin_unlock_irqrestore(shost->host_lock, flags); | ||
839 | fc_rport_terminate(rport); | 844 | fc_rport_terminate(rport); |
845 | spin_lock_irqsave(shost->host_lock, flags); | ||
846 | } | ||
840 | spin_unlock_irqrestore(shost->host_lock, flags); | 847 | spin_unlock_irqrestore(shost->host_lock, flags); |
841 | } | 848 | } |
842 | 849 | ||
diff --git a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c index 0e21f583690e..5c3c03932d6d 100644 --- a/drivers/serial/8250_pci.c +++ b/drivers/serial/8250_pci.c | |||
@@ -152,6 +152,7 @@ static int __devinit pci_hp_diva_init(struct pci_dev *dev) | |||
152 | rc = 4; | 152 | rc = 4; |
153 | break; | 153 | break; |
154 | case PCI_DEVICE_ID_HP_DIVA_POWERBAR: | 154 | case PCI_DEVICE_ID_HP_DIVA_POWERBAR: |
155 | case PCI_DEVICE_ID_HP_DIVA_HURRICANE: | ||
155 | rc = 1; | 156 | rc = 1; |
156 | break; | 157 | break; |
157 | } | 158 | } |
@@ -226,8 +227,10 @@ static int __devinit pci_plx9050_init(struct pci_dev *dev) | |||
226 | } | 227 | } |
227 | 228 | ||
228 | irq_config = 0x41; | 229 | irq_config = 0x41; |
229 | if (dev->vendor == PCI_VENDOR_ID_PANACOM) | 230 | if (dev->vendor == PCI_VENDOR_ID_PANACOM || |
231 | dev->subsystem_vendor == PCI_SUBVENDOR_ID_EXSYS) { | ||
230 | irq_config = 0x43; | 232 | irq_config = 0x43; |
233 | } | ||
231 | if ((dev->vendor == PCI_VENDOR_ID_PLX) && | 234 | if ((dev->vendor == PCI_VENDOR_ID_PLX) && |
232 | (dev->device == PCI_DEVICE_ID_PLX_ROMULUS)) { | 235 | (dev->device == PCI_DEVICE_ID_PLX_ROMULUS)) { |
233 | /* | 236 | /* |
@@ -664,6 +667,15 @@ static struct pci_serial_quirk pci_serial_quirks[] = { | |||
664 | { | 667 | { |
665 | .vendor = PCI_VENDOR_ID_PLX, | 668 | .vendor = PCI_VENDOR_ID_PLX, |
666 | .device = PCI_DEVICE_ID_PLX_9050, | 669 | .device = PCI_DEVICE_ID_PLX_9050, |
670 | .subvendor = PCI_SUBVENDOR_ID_EXSYS, | ||
671 | .subdevice = PCI_SUBDEVICE_ID_EXSYS_4055, | ||
672 | .init = pci_plx9050_init, | ||
673 | .setup = pci_default_setup, | ||
674 | .exit = __devexit_p(pci_plx9050_exit), | ||
675 | }, | ||
676 | { | ||
677 | .vendor = PCI_VENDOR_ID_PLX, | ||
678 | .device = PCI_DEVICE_ID_PLX_9050, | ||
667 | .subvendor = PCI_SUBVENDOR_ID_KEYSPAN, | 679 | .subvendor = PCI_SUBVENDOR_ID_KEYSPAN, |
668 | .subdevice = PCI_SUBDEVICE_ID_KEYSPAN_SX2, | 680 | .subdevice = PCI_SUBDEVICE_ID_KEYSPAN_SX2, |
669 | .init = pci_plx9050_init, | 681 | .init = pci_plx9050_init, |
@@ -927,6 +939,7 @@ enum pci_board_num_t { | |||
927 | pbn_panacom, | 939 | pbn_panacom, |
928 | pbn_panacom2, | 940 | pbn_panacom2, |
929 | pbn_panacom4, | 941 | pbn_panacom4, |
942 | pbn_exsys_4055, | ||
930 | pbn_plx_romulus, | 943 | pbn_plx_romulus, |
931 | pbn_oxsemi, | 944 | pbn_oxsemi, |
932 | pbn_intel_i960, | 945 | pbn_intel_i960, |
@@ -1292,6 +1305,13 @@ static struct pciserial_board pci_boards[] __devinitdata = { | |||
1292 | .reg_shift = 7, | 1305 | .reg_shift = 7, |
1293 | }, | 1306 | }, |
1294 | 1307 | ||
1308 | [pbn_exsys_4055] = { | ||
1309 | .flags = FL_BASE2, | ||
1310 | .num_ports = 4, | ||
1311 | .base_baud = 115200, | ||
1312 | .uart_offset = 8, | ||
1313 | }, | ||
1314 | |||
1295 | /* I think this entry is broken - the first_offset looks wrong --rmk */ | 1315 | /* I think this entry is broken - the first_offset looks wrong --rmk */ |
1296 | [pbn_plx_romulus] = { | 1316 | [pbn_plx_romulus] = { |
1297 | .flags = FL_BASE2, | 1317 | .flags = FL_BASE2, |
@@ -1853,6 +1873,10 @@ static struct pci_device_id serial_pci_tbl[] = { | |||
1853 | PCI_SUBVENDOR_ID_CHASE_PCIRAS, | 1873 | PCI_SUBVENDOR_ID_CHASE_PCIRAS, |
1854 | PCI_SUBDEVICE_ID_CHASE_PCIRAS8, 0, 0, | 1874 | PCI_SUBDEVICE_ID_CHASE_PCIRAS8, 0, 0, |
1855 | pbn_b2_8_460800 }, | 1875 | pbn_b2_8_460800 }, |
1876 | { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, | ||
1877 | PCI_SUBVENDOR_ID_EXSYS, | ||
1878 | PCI_SUBDEVICE_ID_EXSYS_4055, 0, 0, | ||
1879 | pbn_exsys_4055 }, | ||
1856 | /* | 1880 | /* |
1857 | * Megawolf Romulus PCI Serial Card, from Mike Hudson | 1881 | * Megawolf Romulus PCI Serial Card, from Mike Hudson |
1858 | * (Exoray@isys.ca) | 1882 | * (Exoray@isys.ca) |
diff --git a/drivers/video/fbsysfs.c b/drivers/video/fbsysfs.c index 1147b899f007..007c8e9b2b39 100644 --- a/drivers/video/fbsysfs.c +++ b/drivers/video/fbsysfs.c | |||
@@ -242,6 +242,13 @@ static ssize_t show_virtual(struct class_device *class_device, char *buf) | |||
242 | fb_info->var.yres_virtual); | 242 | fb_info->var.yres_virtual); |
243 | } | 243 | } |
244 | 244 | ||
245 | static ssize_t show_stride(struct class_device *class_device, char *buf) | ||
246 | { | ||
247 | struct fb_info *fb_info = | ||
248 | (struct fb_info *)class_get_devdata(class_device); | ||
249 | return snprintf(buf, PAGE_SIZE, "%d\n", fb_info->fix.line_length); | ||
250 | } | ||
251 | |||
245 | /* Format for cmap is "%02x%c%4x%4x%4x\n" */ | 252 | /* Format for cmap is "%02x%c%4x%4x%4x\n" */ |
246 | /* %02x entry %c transp %4x red %4x blue %4x green \n */ | 253 | /* %02x entry %c transp %4x red %4x blue %4x green \n */ |
247 | /* 256 rows at 16 chars equals 4096, the normal page size */ | 254 | /* 256 rows at 16 chars equals 4096, the normal page size */ |
@@ -432,6 +439,7 @@ static struct class_device_attribute class_device_attrs[] = { | |||
432 | __ATTR(pan, S_IRUGO|S_IWUSR, show_pan, store_pan), | 439 | __ATTR(pan, S_IRUGO|S_IWUSR, show_pan, store_pan), |
433 | __ATTR(virtual_size, S_IRUGO|S_IWUSR, show_virtual, store_virtual), | 440 | __ATTR(virtual_size, S_IRUGO|S_IWUSR, show_virtual, store_virtual), |
434 | __ATTR(name, S_IRUGO, show_name, NULL), | 441 | __ATTR(name, S_IRUGO, show_name, NULL), |
442 | __ATTR(stride, S_IRUGO, show_stride, NULL), | ||
435 | }; | 443 | }; |
436 | 444 | ||
437 | int fb_init_class_device(struct fb_info *fb_info) | 445 | int fb_init_class_device(struct fb_info *fb_info) |
@@ -1397,6 +1397,9 @@ static ssize_t aio_setup_iocb(struct kiocb *kiocb) | |||
1397 | if (unlikely(!access_ok(VERIFY_WRITE, kiocb->ki_buf, | 1397 | if (unlikely(!access_ok(VERIFY_WRITE, kiocb->ki_buf, |
1398 | kiocb->ki_left))) | 1398 | kiocb->ki_left))) |
1399 | break; | 1399 | break; |
1400 | ret = security_file_permission(file, MAY_READ); | ||
1401 | if (unlikely(ret)) | ||
1402 | break; | ||
1400 | ret = -EINVAL; | 1403 | ret = -EINVAL; |
1401 | if (file->f_op->aio_read) | 1404 | if (file->f_op->aio_read) |
1402 | kiocb->ki_retry = aio_pread; | 1405 | kiocb->ki_retry = aio_pread; |
@@ -1409,6 +1412,9 @@ static ssize_t aio_setup_iocb(struct kiocb *kiocb) | |||
1409 | if (unlikely(!access_ok(VERIFY_READ, kiocb->ki_buf, | 1412 | if (unlikely(!access_ok(VERIFY_READ, kiocb->ki_buf, |
1410 | kiocb->ki_left))) | 1413 | kiocb->ki_left))) |
1411 | break; | 1414 | break; |
1415 | ret = security_file_permission(file, MAY_WRITE); | ||
1416 | if (unlikely(ret)) | ||
1417 | break; | ||
1412 | ret = -EINVAL; | 1418 | ret = -EINVAL; |
1413 | if (file->f_op->aio_write) | 1419 | if (file->f_op->aio_write) |
1414 | kiocb->ki_retry = aio_pwrite; | 1420 | kiocb->ki_retry = aio_pwrite; |
diff --git a/fs/hfsplus/super.c b/fs/hfsplus/super.c index fd0f0f050e1d..452fc1fdbd32 100644 --- a/fs/hfsplus/super.c +++ b/fs/hfsplus/super.c | |||
@@ -50,6 +50,7 @@ static void hfsplus_read_inode(struct inode *inode) | |||
50 | init_MUTEX(&HFSPLUS_I(inode).extents_lock); | 50 | init_MUTEX(&HFSPLUS_I(inode).extents_lock); |
51 | HFSPLUS_I(inode).flags = 0; | 51 | HFSPLUS_I(inode).flags = 0; |
52 | HFSPLUS_I(inode).rsrc_inode = NULL; | 52 | HFSPLUS_I(inode).rsrc_inode = NULL; |
53 | atomic_set(&HFSPLUS_I(inode).opencnt, 0); | ||
53 | 54 | ||
54 | if (inode->i_ino >= HFSPLUS_FIRSTUSER_CNID) { | 55 | if (inode->i_ino >= HFSPLUS_FIRSTUSER_CNID) { |
55 | read_inode: | 56 | read_inode: |
diff --git a/fs/inotify.c b/fs/inotify.c index a37e9fb1da58..9fbaebfdf40b 100644 --- a/fs/inotify.c +++ b/fs/inotify.c | |||
@@ -176,6 +176,7 @@ static inline void put_inotify_dev(struct inotify_device *dev) | |||
176 | if (atomic_dec_and_test(&dev->count)) { | 176 | if (atomic_dec_and_test(&dev->count)) { |
177 | atomic_dec(&dev->user->inotify_devs); | 177 | atomic_dec(&dev->user->inotify_devs); |
178 | free_uid(dev->user); | 178 | free_uid(dev->user); |
179 | idr_destroy(&dev->idr); | ||
179 | kfree(dev); | 180 | kfree(dev); |
180 | } | 181 | } |
181 | } | 182 | } |
diff --git a/include/asm-alpha/atomic.h b/include/asm-alpha/atomic.h index 1b383e3cb68c..20ac3d95ecd9 100644 --- a/include/asm-alpha/atomic.h +++ b/include/asm-alpha/atomic.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef _ALPHA_ATOMIC_H | 1 | #ifndef _ALPHA_ATOMIC_H |
2 | #define _ALPHA_ATOMIC_H | 2 | #define _ALPHA_ATOMIC_H |
3 | 3 | ||
4 | #include <asm/barrier.h> | ||
5 | |||
4 | /* | 6 | /* |
5 | * Atomic operations that C can't guarantee us. Useful for | 7 | * Atomic operations that C can't guarantee us. Useful for |
6 | * resource counting etc... | 8 | * resource counting etc... |
@@ -100,18 +102,19 @@ static __inline__ void atomic64_sub(long i, atomic64_t * v) | |||
100 | static __inline__ long atomic_add_return(int i, atomic_t * v) | 102 | static __inline__ long atomic_add_return(int i, atomic_t * v) |
101 | { | 103 | { |
102 | long temp, result; | 104 | long temp, result; |
105 | smp_mb(); | ||
103 | __asm__ __volatile__( | 106 | __asm__ __volatile__( |
104 | "1: ldl_l %0,%1\n" | 107 | "1: ldl_l %0,%1\n" |
105 | " addl %0,%3,%2\n" | 108 | " addl %0,%3,%2\n" |
106 | " addl %0,%3,%0\n" | 109 | " addl %0,%3,%0\n" |
107 | " stl_c %0,%1\n" | 110 | " stl_c %0,%1\n" |
108 | " beq %0,2f\n" | 111 | " beq %0,2f\n" |
109 | " mb\n" | ||
110 | ".subsection 2\n" | 112 | ".subsection 2\n" |
111 | "2: br 1b\n" | 113 | "2: br 1b\n" |
112 | ".previous" | 114 | ".previous" |
113 | :"=&r" (temp), "=m" (v->counter), "=&r" (result) | 115 | :"=&r" (temp), "=m" (v->counter), "=&r" (result) |
114 | :"Ir" (i), "m" (v->counter) : "memory"); | 116 | :"Ir" (i), "m" (v->counter) : "memory"); |
117 | smp_mb(); | ||
115 | return result; | 118 | return result; |
116 | } | 119 | } |
117 | 120 | ||
@@ -120,54 +123,57 @@ static __inline__ long atomic_add_return(int i, atomic_t * v) | |||
120 | static __inline__ long atomic64_add_return(long i, atomic64_t * v) | 123 | static __inline__ long atomic64_add_return(long i, atomic64_t * v) |
121 | { | 124 | { |
122 | long temp, result; | 125 | long temp, result; |
126 | smp_mb(); | ||
123 | __asm__ __volatile__( | 127 | __asm__ __volatile__( |
124 | "1: ldq_l %0,%1\n" | 128 | "1: ldq_l %0,%1\n" |
125 | " addq %0,%3,%2\n" | 129 | " addq %0,%3,%2\n" |
126 | " addq %0,%3,%0\n" | 130 | " addq %0,%3,%0\n" |
127 | " stq_c %0,%1\n" | 131 | " stq_c %0,%1\n" |
128 | " beq %0,2f\n" | 132 | " beq %0,2f\n" |
129 | " mb\n" | ||
130 | ".subsection 2\n" | 133 | ".subsection 2\n" |
131 | "2: br 1b\n" | 134 | "2: br 1b\n" |
132 | ".previous" | 135 | ".previous" |
133 | :"=&r" (temp), "=m" (v->counter), "=&r" (result) | 136 | :"=&r" (temp), "=m" (v->counter), "=&r" (result) |
134 | :"Ir" (i), "m" (v->counter) : "memory"); | 137 | :"Ir" (i), "m" (v->counter) : "memory"); |
138 | smp_mb(); | ||
135 | return result; | 139 | return result; |
136 | } | 140 | } |
137 | 141 | ||
138 | static __inline__ long atomic_sub_return(int i, atomic_t * v) | 142 | static __inline__ long atomic_sub_return(int i, atomic_t * v) |
139 | { | 143 | { |
140 | long temp, result; | 144 | long temp, result; |
145 | smp_mb(); | ||
141 | __asm__ __volatile__( | 146 | __asm__ __volatile__( |
142 | "1: ldl_l %0,%1\n" | 147 | "1: ldl_l %0,%1\n" |
143 | " subl %0,%3,%2\n" | 148 | " subl %0,%3,%2\n" |
144 | " subl %0,%3,%0\n" | 149 | " subl %0,%3,%0\n" |
145 | " stl_c %0,%1\n" | 150 | " stl_c %0,%1\n" |
146 | " beq %0,2f\n" | 151 | " beq %0,2f\n" |
147 | " mb\n" | ||
148 | ".subsection 2\n" | 152 | ".subsection 2\n" |
149 | "2: br 1b\n" | 153 | "2: br 1b\n" |
150 | ".previous" | 154 | ".previous" |
151 | :"=&r" (temp), "=m" (v->counter), "=&r" (result) | 155 | :"=&r" (temp), "=m" (v->counter), "=&r" (result) |
152 | :"Ir" (i), "m" (v->counter) : "memory"); | 156 | :"Ir" (i), "m" (v->counter) : "memory"); |
157 | smp_mb(); | ||
153 | return result; | 158 | return result; |
154 | } | 159 | } |
155 | 160 | ||
156 | static __inline__ long atomic64_sub_return(long i, atomic64_t * v) | 161 | static __inline__ long atomic64_sub_return(long i, atomic64_t * v) |
157 | { | 162 | { |
158 | long temp, result; | 163 | long temp, result; |
164 | smp_mb(); | ||
159 | __asm__ __volatile__( | 165 | __asm__ __volatile__( |
160 | "1: ldq_l %0,%1\n" | 166 | "1: ldq_l %0,%1\n" |
161 | " subq %0,%3,%2\n" | 167 | " subq %0,%3,%2\n" |
162 | " subq %0,%3,%0\n" | 168 | " subq %0,%3,%0\n" |
163 | " stq_c %0,%1\n" | 169 | " stq_c %0,%1\n" |
164 | " beq %0,2f\n" | 170 | " beq %0,2f\n" |
165 | " mb\n" | ||
166 | ".subsection 2\n" | 171 | ".subsection 2\n" |
167 | "2: br 1b\n" | 172 | "2: br 1b\n" |
168 | ".previous" | 173 | ".previous" |
169 | :"=&r" (temp), "=m" (v->counter), "=&r" (result) | 174 | :"=&r" (temp), "=m" (v->counter), "=&r" (result) |
170 | :"Ir" (i), "m" (v->counter) : "memory"); | 175 | :"Ir" (i), "m" (v->counter) : "memory"); |
176 | smp_mb(); | ||
171 | return result; | 177 | return result; |
172 | } | 178 | } |
173 | 179 | ||
diff --git a/include/asm-alpha/barrier.h b/include/asm-alpha/barrier.h new file mode 100644 index 000000000000..229c83fe77cb --- /dev/null +++ b/include/asm-alpha/barrier.h | |||
@@ -0,0 +1,34 @@ | |||
1 | #ifndef __BARRIER_H | ||
2 | #define __BARRIER_H | ||
3 | |||
4 | #define mb() \ | ||
5 | __asm__ __volatile__("mb": : :"memory") | ||
6 | |||
7 | #define rmb() \ | ||
8 | __asm__ __volatile__("mb": : :"memory") | ||
9 | |||
10 | #define wmb() \ | ||
11 | __asm__ __volatile__("wmb": : :"memory") | ||
12 | |||
13 | #define read_barrier_depends() \ | ||
14 | __asm__ __volatile__("mb": : :"memory") | ||
15 | |||
16 | #ifdef CONFIG_SMP | ||
17 | #define smp_mb() mb() | ||
18 | #define smp_rmb() rmb() | ||
19 | #define smp_wmb() wmb() | ||
20 | #define smp_read_barrier_depends() read_barrier_depends() | ||
21 | #else | ||
22 | #define smp_mb() barrier() | ||
23 | #define smp_rmb() barrier() | ||
24 | #define smp_wmb() barrier() | ||
25 | #define smp_read_barrier_depends() barrier() | ||
26 | #endif | ||
27 | |||
28 | #define set_mb(var, value) \ | ||
29 | do { var = value; mb(); } while (0) | ||
30 | |||
31 | #define set_wmb(var, value) \ | ||
32 | do { var = value; wmb(); } while (0) | ||
33 | |||
34 | #endif /* __BARRIER_H */ | ||
diff --git a/include/asm-alpha/system.h b/include/asm-alpha/system.h index bdb4d66418f1..050e86d12891 100644 --- a/include/asm-alpha/system.h +++ b/include/asm-alpha/system.h | |||
@@ -4,6 +4,7 @@ | |||
4 | #include <linux/config.h> | 4 | #include <linux/config.h> |
5 | #include <asm/pal.h> | 5 | #include <asm/pal.h> |
6 | #include <asm/page.h> | 6 | #include <asm/page.h> |
7 | #include <asm/barrier.h> | ||
7 | 8 | ||
8 | /* | 9 | /* |
9 | * System defines.. Note that this is included both from .c and .S | 10 | * System defines.. Note that this is included both from .c and .S |
@@ -139,36 +140,6 @@ extern void halt(void) __attribute__((noreturn)); | |||
139 | struct task_struct; | 140 | struct task_struct; |
140 | extern struct task_struct *alpha_switch_to(unsigned long, struct task_struct*); | 141 | extern struct task_struct *alpha_switch_to(unsigned long, struct task_struct*); |
141 | 142 | ||
142 | #define mb() \ | ||
143 | __asm__ __volatile__("mb": : :"memory") | ||
144 | |||
145 | #define rmb() \ | ||
146 | __asm__ __volatile__("mb": : :"memory") | ||
147 | |||
148 | #define wmb() \ | ||
149 | __asm__ __volatile__("wmb": : :"memory") | ||
150 | |||
151 | #define read_barrier_depends() \ | ||
152 | __asm__ __volatile__("mb": : :"memory") | ||
153 | |||
154 | #ifdef CONFIG_SMP | ||
155 | #define smp_mb() mb() | ||
156 | #define smp_rmb() rmb() | ||
157 | #define smp_wmb() wmb() | ||
158 | #define smp_read_barrier_depends() read_barrier_depends() | ||
159 | #else | ||
160 | #define smp_mb() barrier() | ||
161 | #define smp_rmb() barrier() | ||
162 | #define smp_wmb() barrier() | ||
163 | #define smp_read_barrier_depends() barrier() | ||
164 | #endif | ||
165 | |||
166 | #define set_mb(var, value) \ | ||
167 | do { var = value; mb(); } while (0) | ||
168 | |||
169 | #define set_wmb(var, value) \ | ||
170 | do { var = value; wmb(); } while (0) | ||
171 | |||
172 | #define imb() \ | 143 | #define imb() \ |
173 | __asm__ __volatile__ ("call_pal %0 #imb" : : "i" (PAL_imb) : "memory") | 144 | __asm__ __volatile__ ("call_pal %0 #imb" : : "i" (PAL_imb) : "memory") |
174 | 145 | ||
diff --git a/include/asm-arm/arch-s3c2410/regs-clock.h b/include/asm-arm/arch-s3c2410/regs-clock.h index 16f4c3cc1388..34360706e016 100644 --- a/include/asm-arm/arch-s3c2410/regs-clock.h +++ b/include/asm-arm/arch-s3c2410/regs-clock.h | |||
@@ -18,7 +18,9 @@ | |||
18 | * 10-Feb-2005 Ben Dooks Fixed CAMDIVN address (Guillaume Gourat) | 18 | * 10-Feb-2005 Ben Dooks Fixed CAMDIVN address (Guillaume Gourat) |
19 | * 10-Mar-2005 Lucas Villa Real Changed S3C2410_VA to S3C24XX_VA | 19 | * 10-Mar-2005 Lucas Villa Real Changed S3C2410_VA to S3C24XX_VA |
20 | * 27-Aug-2005 Ben Dooks Add clock-slow info | 20 | * 27-Aug-2005 Ben Dooks Add clock-slow info |
21 | */ | 21 | * 20-Oct-2005 Ben Dooks Fixed overflow in PLL (Guillaume Gourat) |
22 | * 20-Oct-2005 Ben Dooks Add masks for DCLK (Guillaume Gourat) | ||
23 | */ | ||
22 | 24 | ||
23 | #ifndef __ASM_ARM_REGS_CLOCK | 25 | #ifndef __ASM_ARM_REGS_CLOCK |
24 | #define __ASM_ARM_REGS_CLOCK "$Id: clock.h,v 1.4 2003/04/30 14:50:51 ben Exp $" | 26 | #define __ASM_ARM_REGS_CLOCK "$Id: clock.h,v 1.4 2003/04/30 14:50:51 ben Exp $" |
@@ -66,11 +68,16 @@ | |||
66 | #define S3C2410_DCLKCON_DCLK0_UCLK (1<<1) | 68 | #define S3C2410_DCLKCON_DCLK0_UCLK (1<<1) |
67 | #define S3C2410_DCLKCON_DCLK0_DIV(x) (((x) - 1 )<<4) | 69 | #define S3C2410_DCLKCON_DCLK0_DIV(x) (((x) - 1 )<<4) |
68 | #define S3C2410_DCLKCON_DCLK0_CMP(x) (((x) - 1 )<<8) | 70 | #define S3C2410_DCLKCON_DCLK0_CMP(x) (((x) - 1 )<<8) |
71 | #define S3C2410_DCLKCON_DCLK0_DIV_MASK ((0xf)<<4) | ||
72 | #define S3C2410_DCLKCON_DCLK0_CMP_MASK ((0xf)<<8) | ||
69 | 73 | ||
70 | #define S3C2410_DCLKCON_DCLK1EN (1<<16) | 74 | #define S3C2410_DCLKCON_DCLK1EN (1<<16) |
71 | #define S3C2410_DCLKCON_DCLK1_PCLK (0<<17) | 75 | #define S3C2410_DCLKCON_DCLK1_PCLK (0<<17) |
72 | #define S3C2410_DCLKCON_DCLK1_UCLK (1<<17) | 76 | #define S3C2410_DCLKCON_DCLK1_UCLK (1<<17) |
73 | #define S3C2410_DCLKCON_DCLK1_DIV(x) (((x) - 1) <<20) | 77 | #define S3C2410_DCLKCON_DCLK1_DIV(x) (((x) - 1) <<20) |
78 | #define S3C2410_DCLKCON_DCLK1_CMP(x) (((x) - 1) <<24) | ||
79 | #define S3C2410_DCLKCON_DCLK1_DIV_MASK ((0xf) <<20) | ||
80 | #define S3C2410_DCLKCON_DCLK1_CMP_MASK ((0xf) <<24) | ||
74 | 81 | ||
75 | #define S3C2410_CLKDIVN_PDIVN (1<<0) | 82 | #define S3C2410_CLKDIVN_PDIVN (1<<0) |
76 | #define S3C2410_CLKDIVN_HDIVN (1<<1) | 83 | #define S3C2410_CLKDIVN_HDIVN (1<<1) |
@@ -83,10 +90,13 @@ | |||
83 | 90 | ||
84 | #ifndef __ASSEMBLY__ | 91 | #ifndef __ASSEMBLY__ |
85 | 92 | ||
93 | #include <asm/div64.h> | ||
94 | |||
86 | static inline unsigned int | 95 | static inline unsigned int |
87 | s3c2410_get_pll(int pllval, int baseclk) | 96 | s3c2410_get_pll(unsigned int pllval, unsigned int baseclk) |
88 | { | 97 | { |
89 | int mdiv, pdiv, sdiv; | 98 | unsigned int mdiv, pdiv, sdiv; |
99 | uint64_t fvco; | ||
90 | 100 | ||
91 | mdiv = pllval >> S3C2410_PLLCON_MDIVSHIFT; | 101 | mdiv = pllval >> S3C2410_PLLCON_MDIVSHIFT; |
92 | pdiv = pllval >> S3C2410_PLLCON_PDIVSHIFT; | 102 | pdiv = pllval >> S3C2410_PLLCON_PDIVSHIFT; |
@@ -96,7 +106,10 @@ s3c2410_get_pll(int pllval, int baseclk) | |||
96 | pdiv &= S3C2410_PLLCON_PDIVMASK; | 106 | pdiv &= S3C2410_PLLCON_PDIVMASK; |
97 | sdiv &= S3C2410_PLLCON_SDIVMASK; | 107 | sdiv &= S3C2410_PLLCON_SDIVMASK; |
98 | 108 | ||
99 | return (baseclk * (mdiv + 8)) / ((pdiv + 2) << sdiv); | 109 | fvco = (uint64_t)baseclk * (mdiv + 8); |
110 | do_div(fvco, (pdiv + 2) << sdiv); | ||
111 | |||
112 | return (unsigned int)fvco; | ||
100 | } | 113 | } |
101 | 114 | ||
102 | #endif /* __ASSEMBLY__ */ | 115 | #endif /* __ASSEMBLY__ */ |
diff --git a/include/asm-arm/bitops.h b/include/asm-arm/bitops.h index aad7aad026b3..e007dd990da5 100644 --- a/include/asm-arm/bitops.h +++ b/include/asm-arm/bitops.h | |||
@@ -347,7 +347,6 @@ static inline unsigned long __ffs(unsigned long word) | |||
347 | * the clz instruction for much better code efficiency. | 347 | * the clz instruction for much better code efficiency. |
348 | */ | 348 | */ |
349 | 349 | ||
350 | static __inline__ int generic_fls(int x); | ||
351 | #define fls(x) \ | 350 | #define fls(x) \ |
352 | ( __builtin_constant_p(x) ? generic_fls(x) : \ | 351 | ( __builtin_constant_p(x) ? generic_fls(x) : \ |
353 | ({ int __r; asm("clz\t%0, %1" : "=r"(__r) : "r"(x) : "cc"); 32-__r; }) ) | 352 | ({ int __r; asm("clz\t%0, %1" : "=r"(__r) : "r"(x) : "cc"); 32-__r; }) ) |
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index 42cb7d70f9ac..d664330d900e 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h | |||
@@ -25,6 +25,8 @@ int is_hugepage_mem_enough(size_t); | |||
25 | unsigned long hugetlb_total_pages(void); | 25 | unsigned long hugetlb_total_pages(void); |
26 | struct page *alloc_huge_page(void); | 26 | struct page *alloc_huge_page(void); |
27 | void free_huge_page(struct page *); | 27 | void free_huge_page(struct page *); |
28 | int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, | ||
29 | unsigned long address, int write_access); | ||
28 | 30 | ||
29 | extern unsigned long max_huge_pages; | 31 | extern unsigned long max_huge_pages; |
30 | extern const unsigned long hugetlb_zero, hugetlb_infinity; | 32 | extern const unsigned long hugetlb_zero, hugetlb_infinity; |
@@ -99,6 +101,7 @@ static inline unsigned long hugetlb_total_pages(void) | |||
99 | do { } while (0) | 101 | do { } while (0) |
100 | #define alloc_huge_page() ({ NULL; }) | 102 | #define alloc_huge_page() ({ NULL; }) |
101 | #define free_huge_page(p) ({ (void)(p); BUG(); }) | 103 | #define free_huge_page(p) ({ (void)(p); BUG(); }) |
104 | #define hugetlb_fault(mm, vma, addr, write) ({ BUG(); 0; }) | ||
102 | 105 | ||
103 | #ifndef HPAGE_MASK | 106 | #ifndef HPAGE_MASK |
104 | #define HPAGE_MASK 0 /* Keep the compiler happy */ | 107 | #define HPAGE_MASK 0 /* Keep the compiler happy */ |
@@ -155,24 +158,11 @@ static inline void set_file_hugepages(struct file *file) | |||
155 | { | 158 | { |
156 | file->f_op = &hugetlbfs_file_operations; | 159 | file->f_op = &hugetlbfs_file_operations; |
157 | } | 160 | } |
158 | |||
159 | static inline int valid_hugetlb_file_off(struct vm_area_struct *vma, | ||
160 | unsigned long address) | ||
161 | { | ||
162 | struct inode *inode = vma->vm_file->f_dentry->d_inode; | ||
163 | loff_t file_off = address - vma->vm_start; | ||
164 | |||
165 | file_off += (vma->vm_pgoff << PAGE_SHIFT); | ||
166 | |||
167 | return (file_off < inode->i_size); | ||
168 | } | ||
169 | |||
170 | #else /* !CONFIG_HUGETLBFS */ | 161 | #else /* !CONFIG_HUGETLBFS */ |
171 | 162 | ||
172 | #define is_file_hugepages(file) 0 | 163 | #define is_file_hugepages(file) 0 |
173 | #define set_file_hugepages(file) BUG() | 164 | #define set_file_hugepages(file) BUG() |
174 | #define hugetlb_zero_setup(size) ERR_PTR(-ENOSYS) | 165 | #define hugetlb_zero_setup(size) ERR_PTR(-ENOSYS) |
175 | #define valid_hugetlb_file_off(vma, address) 0 | ||
176 | 166 | ||
177 | #endif /* !CONFIG_HUGETLBFS */ | 167 | #endif /* !CONFIG_HUGETLBFS */ |
178 | 168 | ||
diff --git a/include/linux/idr.h b/include/linux/idr.h index ca3b7e462576..3d5de45f961b 100644 --- a/include/linux/idr.h +++ b/include/linux/idr.h | |||
@@ -75,4 +75,5 @@ int idr_pre_get(struct idr *idp, unsigned gfp_mask); | |||
75 | int idr_get_new(struct idr *idp, void *ptr, int *id); | 75 | int idr_get_new(struct idr *idp, void *ptr, int *id); |
76 | int idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id); | 76 | int idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id); |
77 | void idr_remove(struct idr *idp, int id); | 77 | void idr_remove(struct idr *idp, int id); |
78 | void idr_destroy(struct idr *idp); | ||
78 | void idr_init(struct idr *idp); | 79 | void idr_init(struct idr *idp); |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index f74ed9462475..71834f05504f 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -723,6 +723,7 @@ | |||
723 | #define PCI_DEVICE_ID_HP_DIVA_EVEREST 0x1282 | 723 | #define PCI_DEVICE_ID_HP_DIVA_EVEREST 0x1282 |
724 | #define PCI_DEVICE_ID_HP_DIVA_AUX 0x1290 | 724 | #define PCI_DEVICE_ID_HP_DIVA_AUX 0x1290 |
725 | #define PCI_DEVICE_ID_HP_DIVA_RMP3 0x1301 | 725 | #define PCI_DEVICE_ID_HP_DIVA_RMP3 0x1301 |
726 | #define PCI_DEVICE_ID_HP_DIVA_HURRICANE 0x132a | ||
726 | #define PCI_DEVICE_ID_HP_CISS 0x3210 | 727 | #define PCI_DEVICE_ID_HP_CISS 0x3210 |
727 | #define PCI_DEVICE_ID_HP_CISSA 0x3220 | 728 | #define PCI_DEVICE_ID_HP_CISSA 0x3220 |
728 | #define PCI_DEVICE_ID_HP_CISSB 0x3222 | 729 | #define PCI_DEVICE_ID_HP_CISSB 0x3222 |
@@ -2696,6 +2697,7 @@ | |||
2696 | 2697 | ||
2697 | #define PCI_SUBVENDOR_ID_EXSYS 0xd84d | 2698 | #define PCI_SUBVENDOR_ID_EXSYS 0xd84d |
2698 | #define PCI_SUBDEVICE_ID_EXSYS_4014 0x4014 | 2699 | #define PCI_SUBDEVICE_ID_EXSYS_4014 0x4014 |
2700 | #define PCI_SUBDEVICE_ID_EXSYS_4055 0x4055 | ||
2699 | 2701 | ||
2700 | #define PCI_VENDOR_ID_TIGERJET 0xe159 | 2702 | #define PCI_VENDOR_ID_TIGERJET 0xe159 |
2701 | #define PCI_DEVICE_ID_TIGERJET_300 0x0001 | 2703 | #define PCI_DEVICE_ID_TIGERJET_300 0x0001 |
diff --git a/include/net/ax25.h b/include/net/ax25.h index 9dbcd9e51c00..30bb4a893237 100644 --- a/include/net/ax25.h +++ b/include/net/ax25.h | |||
@@ -171,7 +171,7 @@ typedef struct { | |||
171 | ax25_address calls[AX25_MAX_DIGIS]; | 171 | ax25_address calls[AX25_MAX_DIGIS]; |
172 | unsigned char repeated[AX25_MAX_DIGIS]; | 172 | unsigned char repeated[AX25_MAX_DIGIS]; |
173 | unsigned char ndigi; | 173 | unsigned char ndigi; |
174 | char lastrepeat; | 174 | signed char lastrepeat; |
175 | } ax25_digi; | 175 | } ax25_digi; |
176 | 176 | ||
177 | typedef struct ax25_route { | 177 | typedef struct ax25_route { |
diff --git a/include/net/llc_pdu.h b/include/net/llc_pdu.h index f45c37d89cf7..c7a959428b4f 100644 --- a/include/net/llc_pdu.h +++ b/include/net/llc_pdu.h | |||
@@ -254,8 +254,10 @@ static inline void llc_pdu_decode_sa(struct sk_buff *skb, u8 *sa) | |||
254 | { | 254 | { |
255 | if (skb->protocol == ntohs(ETH_P_802_2)) | 255 | if (skb->protocol == ntohs(ETH_P_802_2)) |
256 | memcpy(sa, eth_hdr(skb)->h_source, ETH_ALEN); | 256 | memcpy(sa, eth_hdr(skb)->h_source, ETH_ALEN); |
257 | else if (skb->protocol == ntohs(ETH_P_TR_802_2)) | 257 | else if (skb->protocol == ntohs(ETH_P_TR_802_2)) { |
258 | memcpy(sa, tr_hdr(skb)->saddr, ETH_ALEN); | 258 | memcpy(sa, tr_hdr(skb)->saddr, ETH_ALEN); |
259 | *sa &= 0x7F; | ||
260 | } | ||
259 | } | 261 | } |
260 | 262 | ||
261 | /** | 263 | /** |
diff --git a/kernel/exit.c b/kernel/exit.c index 43077732619b..3b25b182d2be 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
@@ -843,6 +843,7 @@ fastcall NORET_TYPE void do_exit(long code) | |||
843 | group_dead = atomic_dec_and_test(&tsk->signal->live); | 843 | group_dead = atomic_dec_and_test(&tsk->signal->live); |
844 | if (group_dead) { | 844 | if (group_dead) { |
845 | del_timer_sync(&tsk->signal->real_timer); | 845 | del_timer_sync(&tsk->signal->real_timer); |
846 | exit_itimers(tsk->signal); | ||
846 | acct_process(code); | 847 | acct_process(code); |
847 | } | 848 | } |
848 | exit_mm(tsk); | 849 | exit_mm(tsk); |
diff --git a/kernel/posix-cpu-timers.c b/kernel/posix-cpu-timers.c index b3f3edc475de..bf374fceb39c 100644 --- a/kernel/posix-cpu-timers.c +++ b/kernel/posix-cpu-timers.c | |||
@@ -91,7 +91,7 @@ static inline union cpu_time_count cpu_time_sub(clockid_t which_clock, | |||
91 | * Update expiry time from increment, and increase overrun count, | 91 | * Update expiry time from increment, and increase overrun count, |
92 | * given the current clock sample. | 92 | * given the current clock sample. |
93 | */ | 93 | */ |
94 | static inline void bump_cpu_timer(struct k_itimer *timer, | 94 | static void bump_cpu_timer(struct k_itimer *timer, |
95 | union cpu_time_count now) | 95 | union cpu_time_count now) |
96 | { | 96 | { |
97 | int i; | 97 | int i; |
@@ -110,7 +110,7 @@ static inline void bump_cpu_timer(struct k_itimer *timer, | |||
110 | for (i = 0; incr < delta - incr; i++) | 110 | for (i = 0; incr < delta - incr; i++) |
111 | incr = incr << 1; | 111 | incr = incr << 1; |
112 | for (; i >= 0; incr >>= 1, i--) { | 112 | for (; i >= 0; incr >>= 1, i--) { |
113 | if (delta <= incr) | 113 | if (delta < incr) |
114 | continue; | 114 | continue; |
115 | timer->it.cpu.expires.sched += incr; | 115 | timer->it.cpu.expires.sched += incr; |
116 | timer->it_overrun += 1 << i; | 116 | timer->it_overrun += 1 << i; |
@@ -128,7 +128,7 @@ static inline void bump_cpu_timer(struct k_itimer *timer, | |||
128 | for (i = 0; cputime_lt(incr, cputime_sub(delta, incr)); i++) | 128 | for (i = 0; cputime_lt(incr, cputime_sub(delta, incr)); i++) |
129 | incr = cputime_add(incr, incr); | 129 | incr = cputime_add(incr, incr); |
130 | for (; i >= 0; incr = cputime_halve(incr), i--) { | 130 | for (; i >= 0; incr = cputime_halve(incr), i--) { |
131 | if (cputime_le(delta, incr)) | 131 | if (cputime_lt(delta, incr)) |
132 | continue; | 132 | continue; |
133 | timer->it.cpu.expires.cpu = | 133 | timer->it.cpu.expires.cpu = |
134 | cputime_add(timer->it.cpu.expires.cpu, incr); | 134 | cputime_add(timer->it.cpu.expires.cpu, incr); |
@@ -380,28 +380,31 @@ int posix_cpu_timer_create(struct k_itimer *new_timer) | |||
380 | int posix_cpu_timer_del(struct k_itimer *timer) | 380 | int posix_cpu_timer_del(struct k_itimer *timer) |
381 | { | 381 | { |
382 | struct task_struct *p = timer->it.cpu.task; | 382 | struct task_struct *p = timer->it.cpu.task; |
383 | int ret = 0; | ||
383 | 384 | ||
384 | if (timer->it.cpu.firing) | 385 | if (likely(p != NULL)) { |
385 | return TIMER_RETRY; | 386 | read_lock(&tasklist_lock); |
386 | 387 | if (unlikely(p->signal == NULL)) { | |
387 | if (unlikely(p == NULL)) | 388 | /* |
388 | return 0; | 389 | * We raced with the reaping of the task. |
390 | * The deletion should have cleared us off the list. | ||
391 | */ | ||
392 | BUG_ON(!list_empty(&timer->it.cpu.entry)); | ||
393 | } else { | ||
394 | spin_lock(&p->sighand->siglock); | ||
395 | if (timer->it.cpu.firing) | ||
396 | ret = TIMER_RETRY; | ||
397 | else | ||
398 | list_del(&timer->it.cpu.entry); | ||
399 | spin_unlock(&p->sighand->siglock); | ||
400 | } | ||
401 | read_unlock(&tasklist_lock); | ||
389 | 402 | ||
390 | spin_lock(&p->sighand->siglock); | 403 | if (!ret) |
391 | if (!list_empty(&timer->it.cpu.entry)) { | 404 | put_task_struct(p); |
392 | /* | ||
393 | * Take us off the task's timer list. We don't need to | ||
394 | * take tasklist_lock and check for the task being reaped. | ||
395 | * If it was reaped, it already called posix_cpu_timers_exit | ||
396 | * and posix_cpu_timers_exit_group to clear all the timers | ||
397 | * that pointed to it. | ||
398 | */ | ||
399 | list_del(&timer->it.cpu.entry); | ||
400 | put_task_struct(p); | ||
401 | } | 405 | } |
402 | spin_unlock(&p->sighand->siglock); | ||
403 | 406 | ||
404 | return 0; | 407 | return ret; |
405 | } | 408 | } |
406 | 409 | ||
407 | /* | 410 | /* |
@@ -418,8 +421,6 @@ static void cleanup_timers(struct list_head *head, | |||
418 | cputime_t ptime = cputime_add(utime, stime); | 421 | cputime_t ptime = cputime_add(utime, stime); |
419 | 422 | ||
420 | list_for_each_entry_safe(timer, next, head, entry) { | 423 | list_for_each_entry_safe(timer, next, head, entry) { |
421 | put_task_struct(timer->task); | ||
422 | timer->task = NULL; | ||
423 | list_del_init(&timer->entry); | 424 | list_del_init(&timer->entry); |
424 | if (cputime_lt(timer->expires.cpu, ptime)) { | 425 | if (cputime_lt(timer->expires.cpu, ptime)) { |
425 | timer->expires.cpu = cputime_zero; | 426 | timer->expires.cpu = cputime_zero; |
@@ -431,8 +432,6 @@ static void cleanup_timers(struct list_head *head, | |||
431 | 432 | ||
432 | ++head; | 433 | ++head; |
433 | list_for_each_entry_safe(timer, next, head, entry) { | 434 | list_for_each_entry_safe(timer, next, head, entry) { |
434 | put_task_struct(timer->task); | ||
435 | timer->task = NULL; | ||
436 | list_del_init(&timer->entry); | 435 | list_del_init(&timer->entry); |
437 | if (cputime_lt(timer->expires.cpu, utime)) { | 436 | if (cputime_lt(timer->expires.cpu, utime)) { |
438 | timer->expires.cpu = cputime_zero; | 437 | timer->expires.cpu = cputime_zero; |
@@ -444,8 +443,6 @@ static void cleanup_timers(struct list_head *head, | |||
444 | 443 | ||
445 | ++head; | 444 | ++head; |
446 | list_for_each_entry_safe(timer, next, head, entry) { | 445 | list_for_each_entry_safe(timer, next, head, entry) { |
447 | put_task_struct(timer->task); | ||
448 | timer->task = NULL; | ||
449 | list_del_init(&timer->entry); | 446 | list_del_init(&timer->entry); |
450 | if (timer->expires.sched < sched_time) { | 447 | if (timer->expires.sched < sched_time) { |
451 | timer->expires.sched = 0; | 448 | timer->expires.sched = 0; |
@@ -489,6 +486,9 @@ static void process_timer_rebalance(struct task_struct *p, | |||
489 | struct task_struct *t = p; | 486 | struct task_struct *t = p; |
490 | unsigned int nthreads = atomic_read(&p->signal->live); | 487 | unsigned int nthreads = atomic_read(&p->signal->live); |
491 | 488 | ||
489 | if (!nthreads) | ||
490 | return; | ||
491 | |||
492 | switch (clock_idx) { | 492 | switch (clock_idx) { |
493 | default: | 493 | default: |
494 | BUG(); | 494 | BUG(); |
@@ -497,7 +497,7 @@ static void process_timer_rebalance(struct task_struct *p, | |||
497 | left = cputime_div(cputime_sub(expires.cpu, val.cpu), | 497 | left = cputime_div(cputime_sub(expires.cpu, val.cpu), |
498 | nthreads); | 498 | nthreads); |
499 | do { | 499 | do { |
500 | if (!unlikely(t->exit_state)) { | 500 | if (!unlikely(t->flags & PF_EXITING)) { |
501 | ticks = cputime_add(prof_ticks(t), left); | 501 | ticks = cputime_add(prof_ticks(t), left); |
502 | if (cputime_eq(t->it_prof_expires, | 502 | if (cputime_eq(t->it_prof_expires, |
503 | cputime_zero) || | 503 | cputime_zero) || |
@@ -512,7 +512,7 @@ static void process_timer_rebalance(struct task_struct *p, | |||
512 | left = cputime_div(cputime_sub(expires.cpu, val.cpu), | 512 | left = cputime_div(cputime_sub(expires.cpu, val.cpu), |
513 | nthreads); | 513 | nthreads); |
514 | do { | 514 | do { |
515 | if (!unlikely(t->exit_state)) { | 515 | if (!unlikely(t->flags & PF_EXITING)) { |
516 | ticks = cputime_add(virt_ticks(t), left); | 516 | ticks = cputime_add(virt_ticks(t), left); |
517 | if (cputime_eq(t->it_virt_expires, | 517 | if (cputime_eq(t->it_virt_expires, |
518 | cputime_zero) || | 518 | cputime_zero) || |
@@ -527,7 +527,7 @@ static void process_timer_rebalance(struct task_struct *p, | |||
527 | nsleft = expires.sched - val.sched; | 527 | nsleft = expires.sched - val.sched; |
528 | do_div(nsleft, nthreads); | 528 | do_div(nsleft, nthreads); |
529 | do { | 529 | do { |
530 | if (!unlikely(t->exit_state)) { | 530 | if (!unlikely(t->flags & PF_EXITING)) { |
531 | ns = t->sched_time + nsleft; | 531 | ns = t->sched_time + nsleft; |
532 | if (t->it_sched_expires == 0 || | 532 | if (t->it_sched_expires == 0 || |
533 | t->it_sched_expires > ns) { | 533 | t->it_sched_expires > ns) { |
@@ -566,6 +566,9 @@ static void arm_timer(struct k_itimer *timer, union cpu_time_count now) | |||
566 | struct cpu_timer_list *next; | 566 | struct cpu_timer_list *next; |
567 | unsigned long i; | 567 | unsigned long i; |
568 | 568 | ||
569 | if (CPUCLOCK_PERTHREAD(timer->it_clock) && (p->flags & PF_EXITING)) | ||
570 | return; | ||
571 | |||
569 | head = (CPUCLOCK_PERTHREAD(timer->it_clock) ? | 572 | head = (CPUCLOCK_PERTHREAD(timer->it_clock) ? |
570 | p->cpu_timers : p->signal->cpu_timers); | 573 | p->cpu_timers : p->signal->cpu_timers); |
571 | head += CPUCLOCK_WHICH(timer->it_clock); | 574 | head += CPUCLOCK_WHICH(timer->it_clock); |
@@ -576,17 +579,15 @@ static void arm_timer(struct k_itimer *timer, union cpu_time_count now) | |||
576 | listpos = head; | 579 | listpos = head; |
577 | if (CPUCLOCK_WHICH(timer->it_clock) == CPUCLOCK_SCHED) { | 580 | if (CPUCLOCK_WHICH(timer->it_clock) == CPUCLOCK_SCHED) { |
578 | list_for_each_entry(next, head, entry) { | 581 | list_for_each_entry(next, head, entry) { |
579 | if (next->expires.sched > nt->expires.sched) { | 582 | if (next->expires.sched > nt->expires.sched) |
580 | listpos = &next->entry; | ||
581 | break; | 583 | break; |
582 | } | 584 | listpos = &next->entry; |
583 | } | 585 | } |
584 | } else { | 586 | } else { |
585 | list_for_each_entry(next, head, entry) { | 587 | list_for_each_entry(next, head, entry) { |
586 | if (cputime_gt(next->expires.cpu, nt->expires.cpu)) { | 588 | if (cputime_gt(next->expires.cpu, nt->expires.cpu)) |
587 | listpos = &next->entry; | ||
588 | break; | 589 | break; |
589 | } | 590 | listpos = &next->entry; |
590 | } | 591 | } |
591 | } | 592 | } |
592 | list_add(&nt->entry, listpos); | 593 | list_add(&nt->entry, listpos); |
@@ -730,9 +731,15 @@ int posix_cpu_timer_set(struct k_itimer *timer, int flags, | |||
730 | * Disarm any old timer after extracting its expiry time. | 731 | * Disarm any old timer after extracting its expiry time. |
731 | */ | 732 | */ |
732 | BUG_ON(!irqs_disabled()); | 733 | BUG_ON(!irqs_disabled()); |
734 | |||
735 | ret = 0; | ||
733 | spin_lock(&p->sighand->siglock); | 736 | spin_lock(&p->sighand->siglock); |
734 | old_expires = timer->it.cpu.expires; | 737 | old_expires = timer->it.cpu.expires; |
735 | list_del_init(&timer->it.cpu.entry); | 738 | if (unlikely(timer->it.cpu.firing)) { |
739 | timer->it.cpu.firing = -1; | ||
740 | ret = TIMER_RETRY; | ||
741 | } else | ||
742 | list_del_init(&timer->it.cpu.entry); | ||
736 | spin_unlock(&p->sighand->siglock); | 743 | spin_unlock(&p->sighand->siglock); |
737 | 744 | ||
738 | /* | 745 | /* |
@@ -780,7 +787,7 @@ int posix_cpu_timer_set(struct k_itimer *timer, int flags, | |||
780 | } | 787 | } |
781 | } | 788 | } |
782 | 789 | ||
783 | if (unlikely(timer->it.cpu.firing)) { | 790 | if (unlikely(ret)) { |
784 | /* | 791 | /* |
785 | * We are colliding with the timer actually firing. | 792 | * We are colliding with the timer actually firing. |
786 | * Punt after filling in the timer's old value, and | 793 | * Punt after filling in the timer's old value, and |
@@ -788,8 +795,6 @@ int posix_cpu_timer_set(struct k_itimer *timer, int flags, | |||
788 | * it as an overrun (thanks to bump_cpu_timer above). | 795 | * it as an overrun (thanks to bump_cpu_timer above). |
789 | */ | 796 | */ |
790 | read_unlock(&tasklist_lock); | 797 | read_unlock(&tasklist_lock); |
791 | timer->it.cpu.firing = -1; | ||
792 | ret = TIMER_RETRY; | ||
793 | goto out; | 798 | goto out; |
794 | } | 799 | } |
795 | 800 | ||
@@ -955,14 +960,16 @@ void posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec *itp) | |||
955 | static void check_thread_timers(struct task_struct *tsk, | 960 | static void check_thread_timers(struct task_struct *tsk, |
956 | struct list_head *firing) | 961 | struct list_head *firing) |
957 | { | 962 | { |
963 | int maxfire; | ||
958 | struct list_head *timers = tsk->cpu_timers; | 964 | struct list_head *timers = tsk->cpu_timers; |
959 | 965 | ||
966 | maxfire = 20; | ||
960 | tsk->it_prof_expires = cputime_zero; | 967 | tsk->it_prof_expires = cputime_zero; |
961 | while (!list_empty(timers)) { | 968 | while (!list_empty(timers)) { |
962 | struct cpu_timer_list *t = list_entry(timers->next, | 969 | struct cpu_timer_list *t = list_entry(timers->next, |
963 | struct cpu_timer_list, | 970 | struct cpu_timer_list, |
964 | entry); | 971 | entry); |
965 | if (cputime_lt(prof_ticks(tsk), t->expires.cpu)) { | 972 | if (!--maxfire || cputime_lt(prof_ticks(tsk), t->expires.cpu)) { |
966 | tsk->it_prof_expires = t->expires.cpu; | 973 | tsk->it_prof_expires = t->expires.cpu; |
967 | break; | 974 | break; |
968 | } | 975 | } |
@@ -971,12 +978,13 @@ static void check_thread_timers(struct task_struct *tsk, | |||
971 | } | 978 | } |
972 | 979 | ||
973 | ++timers; | 980 | ++timers; |
981 | maxfire = 20; | ||
974 | tsk->it_virt_expires = cputime_zero; | 982 | tsk->it_virt_expires = cputime_zero; |
975 | while (!list_empty(timers)) { | 983 | while (!list_empty(timers)) { |
976 | struct cpu_timer_list *t = list_entry(timers->next, | 984 | struct cpu_timer_list *t = list_entry(timers->next, |
977 | struct cpu_timer_list, | 985 | struct cpu_timer_list, |
978 | entry); | 986 | entry); |
979 | if (cputime_lt(virt_ticks(tsk), t->expires.cpu)) { | 987 | if (!--maxfire || cputime_lt(virt_ticks(tsk), t->expires.cpu)) { |
980 | tsk->it_virt_expires = t->expires.cpu; | 988 | tsk->it_virt_expires = t->expires.cpu; |
981 | break; | 989 | break; |
982 | } | 990 | } |
@@ -985,12 +993,13 @@ static void check_thread_timers(struct task_struct *tsk, | |||
985 | } | 993 | } |
986 | 994 | ||
987 | ++timers; | 995 | ++timers; |
996 | maxfire = 20; | ||
988 | tsk->it_sched_expires = 0; | 997 | tsk->it_sched_expires = 0; |
989 | while (!list_empty(timers)) { | 998 | while (!list_empty(timers)) { |
990 | struct cpu_timer_list *t = list_entry(timers->next, | 999 | struct cpu_timer_list *t = list_entry(timers->next, |
991 | struct cpu_timer_list, | 1000 | struct cpu_timer_list, |
992 | entry); | 1001 | entry); |
993 | if (tsk->sched_time < t->expires.sched) { | 1002 | if (!--maxfire || tsk->sched_time < t->expires.sched) { |
994 | tsk->it_sched_expires = t->expires.sched; | 1003 | tsk->it_sched_expires = t->expires.sched; |
995 | break; | 1004 | break; |
996 | } | 1005 | } |
@@ -1007,6 +1016,7 @@ static void check_thread_timers(struct task_struct *tsk, | |||
1007 | static void check_process_timers(struct task_struct *tsk, | 1016 | static void check_process_timers(struct task_struct *tsk, |
1008 | struct list_head *firing) | 1017 | struct list_head *firing) |
1009 | { | 1018 | { |
1019 | int maxfire; | ||
1010 | struct signal_struct *const sig = tsk->signal; | 1020 | struct signal_struct *const sig = tsk->signal; |
1011 | cputime_t utime, stime, ptime, virt_expires, prof_expires; | 1021 | cputime_t utime, stime, ptime, virt_expires, prof_expires; |
1012 | unsigned long long sched_time, sched_expires; | 1022 | unsigned long long sched_time, sched_expires; |
@@ -1039,12 +1049,13 @@ static void check_process_timers(struct task_struct *tsk, | |||
1039 | } while (t != tsk); | 1049 | } while (t != tsk); |
1040 | ptime = cputime_add(utime, stime); | 1050 | ptime = cputime_add(utime, stime); |
1041 | 1051 | ||
1052 | maxfire = 20; | ||
1042 | prof_expires = cputime_zero; | 1053 | prof_expires = cputime_zero; |
1043 | while (!list_empty(timers)) { | 1054 | while (!list_empty(timers)) { |
1044 | struct cpu_timer_list *t = list_entry(timers->next, | 1055 | struct cpu_timer_list *t = list_entry(timers->next, |
1045 | struct cpu_timer_list, | 1056 | struct cpu_timer_list, |
1046 | entry); | 1057 | entry); |
1047 | if (cputime_lt(ptime, t->expires.cpu)) { | 1058 | if (!--maxfire || cputime_lt(ptime, t->expires.cpu)) { |
1048 | prof_expires = t->expires.cpu; | 1059 | prof_expires = t->expires.cpu; |
1049 | break; | 1060 | break; |
1050 | } | 1061 | } |
@@ -1053,12 +1064,13 @@ static void check_process_timers(struct task_struct *tsk, | |||
1053 | } | 1064 | } |
1054 | 1065 | ||
1055 | ++timers; | 1066 | ++timers; |
1067 | maxfire = 20; | ||
1056 | virt_expires = cputime_zero; | 1068 | virt_expires = cputime_zero; |
1057 | while (!list_empty(timers)) { | 1069 | while (!list_empty(timers)) { |
1058 | struct cpu_timer_list *t = list_entry(timers->next, | 1070 | struct cpu_timer_list *t = list_entry(timers->next, |
1059 | struct cpu_timer_list, | 1071 | struct cpu_timer_list, |
1060 | entry); | 1072 | entry); |
1061 | if (cputime_lt(utime, t->expires.cpu)) { | 1073 | if (!--maxfire || cputime_lt(utime, t->expires.cpu)) { |
1062 | virt_expires = t->expires.cpu; | 1074 | virt_expires = t->expires.cpu; |
1063 | break; | 1075 | break; |
1064 | } | 1076 | } |
@@ -1067,12 +1079,13 @@ static void check_process_timers(struct task_struct *tsk, | |||
1067 | } | 1079 | } |
1068 | 1080 | ||
1069 | ++timers; | 1081 | ++timers; |
1082 | maxfire = 20; | ||
1070 | sched_expires = 0; | 1083 | sched_expires = 0; |
1071 | while (!list_empty(timers)) { | 1084 | while (!list_empty(timers)) { |
1072 | struct cpu_timer_list *t = list_entry(timers->next, | 1085 | struct cpu_timer_list *t = list_entry(timers->next, |
1073 | struct cpu_timer_list, | 1086 | struct cpu_timer_list, |
1074 | entry); | 1087 | entry); |
1075 | if (sched_time < t->expires.sched) { | 1088 | if (!--maxfire || sched_time < t->expires.sched) { |
1076 | sched_expires = t->expires.sched; | 1089 | sched_expires = t->expires.sched; |
1077 | break; | 1090 | break; |
1078 | } | 1091 | } |
@@ -1155,6 +1168,9 @@ static void check_process_timers(struct task_struct *tsk, | |||
1155 | unsigned long long sched_left, sched; | 1168 | unsigned long long sched_left, sched; |
1156 | const unsigned int nthreads = atomic_read(&sig->live); | 1169 | const unsigned int nthreads = atomic_read(&sig->live); |
1157 | 1170 | ||
1171 | if (!nthreads) | ||
1172 | return; | ||
1173 | |||
1158 | prof_left = cputime_sub(prof_expires, utime); | 1174 | prof_left = cputime_sub(prof_expires, utime); |
1159 | prof_left = cputime_sub(prof_left, stime); | 1175 | prof_left = cputime_sub(prof_left, stime); |
1160 | prof_left = cputime_div(prof_left, nthreads); | 1176 | prof_left = cputime_div(prof_left, nthreads); |
@@ -1191,7 +1207,7 @@ static void check_process_timers(struct task_struct *tsk, | |||
1191 | 1207 | ||
1192 | do { | 1208 | do { |
1193 | t = next_thread(t); | 1209 | t = next_thread(t); |
1194 | } while (unlikely(t->exit_state)); | 1210 | } while (unlikely(t->flags & PF_EXITING)); |
1195 | } while (t != tsk); | 1211 | } while (t != tsk); |
1196 | } | 1212 | } |
1197 | } | 1213 | } |
diff --git a/kernel/posix-timers.c b/kernel/posix-timers.c index b7b532acd9fc..dda3cda73c77 100644 --- a/kernel/posix-timers.c +++ b/kernel/posix-timers.c | |||
@@ -1157,7 +1157,7 @@ retry_delete: | |||
1157 | } | 1157 | } |
1158 | 1158 | ||
1159 | /* | 1159 | /* |
1160 | * This is called by __exit_signal, only when there are no more | 1160 | * This is called by do_exit or de_thread, only when there are no more |
1161 | * references to the shared signal_struct. | 1161 | * references to the shared signal_struct. |
1162 | */ | 1162 | */ |
1163 | void exit_itimers(struct signal_struct *sig) | 1163 | void exit_itimers(struct signal_struct *sig) |
diff --git a/kernel/sched.c b/kernel/sched.c index 1f31a528fdba..1e5cafdf4e27 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -3879,6 +3879,7 @@ EXPORT_SYMBOL(cpu_present_map); | |||
3879 | 3879 | ||
3880 | #ifndef CONFIG_SMP | 3880 | #ifndef CONFIG_SMP |
3881 | cpumask_t cpu_online_map = CPU_MASK_ALL; | 3881 | cpumask_t cpu_online_map = CPU_MASK_ALL; |
3882 | EXPORT_SYMBOL_GPL(cpu_online_map); | ||
3882 | cpumask_t cpu_possible_map = CPU_MASK_ALL; | 3883 | cpumask_t cpu_possible_map = CPU_MASK_ALL; |
3883 | #endif | 3884 | #endif |
3884 | 3885 | ||
diff --git a/kernel/signal.c b/kernel/signal.c index 50c992643771..f2b96b08fb44 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
@@ -397,20 +397,8 @@ void __exit_signal(struct task_struct *tsk) | |||
397 | flush_sigqueue(&tsk->pending); | 397 | flush_sigqueue(&tsk->pending); |
398 | if (sig) { | 398 | if (sig) { |
399 | /* | 399 | /* |
400 | * We are cleaning up the signal_struct here. We delayed | 400 | * We are cleaning up the signal_struct here. |
401 | * calling exit_itimers until after flush_sigqueue, just in | ||
402 | * case our thread-local pending queue contained a queued | ||
403 | * timer signal that would have been cleared in | ||
404 | * exit_itimers. When that called sigqueue_free, it would | ||
405 | * attempt to re-take the tasklist_lock and deadlock. This | ||
406 | * can never happen if we ensure that all queues the | ||
407 | * timer's signal might be queued on have been flushed | ||
408 | * first. The shared_pending queue, and our own pending | ||
409 | * queue are the only queues the timer could be on, since | ||
410 | * there are no other threads left in the group and timer | ||
411 | * signals are constrained to threads inside the group. | ||
412 | */ | 401 | */ |
413 | exit_itimers(sig); | ||
414 | exit_thread_group_keys(sig); | 402 | exit_thread_group_keys(sig); |
415 | kmem_cache_free(signal_cachep, sig); | 403 | kmem_cache_free(signal_cachep, sig); |
416 | } | 404 | } |
@@ -346,6 +346,19 @@ void idr_remove(struct idr *idp, int id) | |||
346 | EXPORT_SYMBOL(idr_remove); | 346 | EXPORT_SYMBOL(idr_remove); |
347 | 347 | ||
348 | /** | 348 | /** |
349 | * idr_destroy - release all cached layers within an idr tree | ||
350 | * idp: idr handle | ||
351 | */ | ||
352 | void idr_destroy(struct idr *idp) | ||
353 | { | ||
354 | while (idp->id_free_cnt) { | ||
355 | struct idr_layer *p = alloc_layer(idp); | ||
356 | kmem_cache_free(idr_layer_cache, p); | ||
357 | } | ||
358 | } | ||
359 | EXPORT_SYMBOL(idr_destroy); | ||
360 | |||
361 | /** | ||
349 | * idr_find - return pointer for given id | 362 | * idr_find - return pointer for given id |
350 | * @idp: idr handle | 363 | * @idp: idr handle |
351 | * @id: lookup key | 364 | * @id: lookup key |
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index a1b30d45459e..61d380678030 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
@@ -394,6 +394,28 @@ out: | |||
394 | return ret; | 394 | return ret; |
395 | } | 395 | } |
396 | 396 | ||
397 | /* | ||
398 | * On ia64 at least, it is possible to receive a hugetlb fault from a | ||
399 | * stale zero entry left in the TLB from earlier hardware prefetching. | ||
400 | * Low-level arch code should already have flushed the stale entry as | ||
401 | * part of its fault handling, but we do need to accept this minor fault | ||
402 | * and return successfully. Whereas the "normal" case is that this is | ||
403 | * an access to a hugetlb page which has been truncated off since mmap. | ||
404 | */ | ||
405 | int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, | ||
406 | unsigned long address, int write_access) | ||
407 | { | ||
408 | int ret = VM_FAULT_SIGBUS; | ||
409 | pte_t *pte; | ||
410 | |||
411 | spin_lock(&mm->page_table_lock); | ||
412 | pte = huge_pte_offset(mm, address); | ||
413 | if (pte && !pte_none(*pte)) | ||
414 | ret = VM_FAULT_MINOR; | ||
415 | spin_unlock(&mm->page_table_lock); | ||
416 | return ret; | ||
417 | } | ||
418 | |||
397 | int follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma, | 419 | int follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma, |
398 | struct page **pages, struct vm_area_struct **vmas, | 420 | struct page **pages, struct vm_area_struct **vmas, |
399 | unsigned long *position, int *length, int i) | 421 | unsigned long *position, int *length, int i) |
diff --git a/mm/memory.c b/mm/memory.c index 8c88b973abc5..1db40e935e55 100644 --- a/mm/memory.c +++ b/mm/memory.c | |||
@@ -2045,18 +2045,8 @@ int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct * vma, | |||
2045 | 2045 | ||
2046 | inc_page_state(pgfault); | 2046 | inc_page_state(pgfault); |
2047 | 2047 | ||
2048 | if (unlikely(is_vm_hugetlb_page(vma))) { | 2048 | if (unlikely(is_vm_hugetlb_page(vma))) |
2049 | if (valid_hugetlb_file_off(vma, address)) | 2049 | return hugetlb_fault(mm, vma, address, write_access); |
2050 | /* We get here only if there was a stale(zero) TLB entry | ||
2051 | * (because of HW prefetching). | ||
2052 | * Low-level arch code (if needed) should have already | ||
2053 | * purged the stale entry as part of this fault handling. | ||
2054 | * Here we just return. | ||
2055 | */ | ||
2056 | return VM_FAULT_MINOR; | ||
2057 | else | ||
2058 | return VM_FAULT_SIGBUS; /* mapping truncation does this. */ | ||
2059 | } | ||
2060 | 2050 | ||
2061 | /* | 2051 | /* |
2062 | * We need the page table lock to synchronize with kswapd | 2052 | * We need the page table lock to synchronize with kswapd |
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index cc1fe2672a31..e1d3d77f4aee 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -1750,6 +1750,8 @@ inline void setup_pageset(struct per_cpu_pageset *p, unsigned long batch) | |||
1750 | { | 1750 | { |
1751 | struct per_cpu_pages *pcp; | 1751 | struct per_cpu_pages *pcp; |
1752 | 1752 | ||
1753 | memset(p, 0, sizeof(*p)); | ||
1754 | |||
1753 | pcp = &p->pcp[0]; /* hot */ | 1755 | pcp = &p->pcp[0]; /* hot */ |
1754 | pcp->count = 0; | 1756 | pcp->count = 0; |
1755 | pcp->low = 2 * batch; | 1757 | pcp->low = 2 * batch; |
diff --git a/net/802/tr.c b/net/802/tr.c index 1eaa3d19d8bf..afd8385c0c9c 100644 --- a/net/802/tr.c +++ b/net/802/tr.c | |||
@@ -340,9 +340,10 @@ static void tr_add_rif_info(struct trh_hdr *trh, struct net_device *dev) | |||
340 | unsigned int hash, rii_p = 0; | 340 | unsigned int hash, rii_p = 0; |
341 | unsigned long flags; | 341 | unsigned long flags; |
342 | struct rif_cache *entry; | 342 | struct rif_cache *entry; |
343 | 343 | unsigned char saddr0; | |
344 | 344 | ||
345 | spin_lock_irqsave(&rif_lock, flags); | 345 | spin_lock_irqsave(&rif_lock, flags); |
346 | saddr0 = trh->saddr[0]; | ||
346 | 347 | ||
347 | /* | 348 | /* |
348 | * Firstly see if the entry exists | 349 | * Firstly see if the entry exists |
@@ -395,7 +396,6 @@ printk("adding rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n", | |||
395 | entry->rcf = trh->rcf & htons((unsigned short)~TR_RCF_BROADCAST_MASK); | 396 | entry->rcf = trh->rcf & htons((unsigned short)~TR_RCF_BROADCAST_MASK); |
396 | memcpy(&(entry->rseg[0]),&(trh->rseg[0]),8*sizeof(unsigned short)); | 397 | memcpy(&(entry->rseg[0]),&(trh->rseg[0]),8*sizeof(unsigned short)); |
397 | entry->local_ring = 0; | 398 | entry->local_ring = 0; |
398 | trh->saddr[0]|=TR_RII; /* put the routing indicator back for tcpdump */ | ||
399 | } | 399 | } |
400 | else | 400 | else |
401 | { | 401 | { |
@@ -422,6 +422,7 @@ printk("updating rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n", | |||
422 | } | 422 | } |
423 | entry->last_used=jiffies; | 423 | entry->last_used=jiffies; |
424 | } | 424 | } |
425 | trh->saddr[0]=saddr0; /* put the routing indicator back for tcpdump */ | ||
425 | spin_unlock_irqrestore(&rif_lock, flags); | 426 | spin_unlock_irqrestore(&rif_lock, flags); |
426 | } | 427 | } |
427 | 428 | ||
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index 4128fc76ac3a..1dcf7fa1f0fe 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c | |||
@@ -175,39 +175,10 @@ static void pneigh_queue_purge(struct sk_buff_head *list) | |||
175 | } | 175 | } |
176 | } | 176 | } |
177 | 177 | ||
178 | void neigh_changeaddr(struct neigh_table *tbl, struct net_device *dev) | 178 | static void neigh_flush_dev(struct neigh_table *tbl, struct net_device *dev) |
179 | { | 179 | { |
180 | int i; | 180 | int i; |
181 | 181 | ||
182 | write_lock_bh(&tbl->lock); | ||
183 | |||
184 | for (i=0; i <= tbl->hash_mask; i++) { | ||
185 | struct neighbour *n, **np; | ||
186 | |||
187 | np = &tbl->hash_buckets[i]; | ||
188 | while ((n = *np) != NULL) { | ||
189 | if (dev && n->dev != dev) { | ||
190 | np = &n->next; | ||
191 | continue; | ||
192 | } | ||
193 | *np = n->next; | ||
194 | write_lock_bh(&n->lock); | ||
195 | n->dead = 1; | ||
196 | neigh_del_timer(n); | ||
197 | write_unlock_bh(&n->lock); | ||
198 | neigh_release(n); | ||
199 | } | ||
200 | } | ||
201 | |||
202 | write_unlock_bh(&tbl->lock); | ||
203 | } | ||
204 | |||
205 | int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev) | ||
206 | { | ||
207 | int i; | ||
208 | |||
209 | write_lock_bh(&tbl->lock); | ||
210 | |||
211 | for (i = 0; i <= tbl->hash_mask; i++) { | 182 | for (i = 0; i <= tbl->hash_mask; i++) { |
212 | struct neighbour *n, **np = &tbl->hash_buckets[i]; | 183 | struct neighbour *n, **np = &tbl->hash_buckets[i]; |
213 | 184 | ||
@@ -243,7 +214,19 @@ int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev) | |||
243 | neigh_release(n); | 214 | neigh_release(n); |
244 | } | 215 | } |
245 | } | 216 | } |
217 | } | ||
246 | 218 | ||
219 | void neigh_changeaddr(struct neigh_table *tbl, struct net_device *dev) | ||
220 | { | ||
221 | write_lock_bh(&tbl->lock); | ||
222 | neigh_flush_dev(tbl, dev); | ||
223 | write_unlock_bh(&tbl->lock); | ||
224 | } | ||
225 | |||
226 | int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev) | ||
227 | { | ||
228 | write_lock_bh(&tbl->lock); | ||
229 | neigh_flush_dev(tbl, dev); | ||
247 | pneigh_ifdown(tbl, dev); | 230 | pneigh_ifdown(tbl, dev); |
248 | write_unlock_bh(&tbl->lock); | 231 | write_unlock_bh(&tbl->lock); |
249 | 232 | ||
@@ -732,6 +715,7 @@ static inline void neigh_add_timer(struct neighbour *n, unsigned long when) | |||
732 | if (unlikely(mod_timer(&n->timer, when))) { | 715 | if (unlikely(mod_timer(&n->timer, when))) { |
733 | printk("NEIGH: BUG, double timer add, state is %x\n", | 716 | printk("NEIGH: BUG, double timer add, state is %x\n", |
734 | n->nud_state); | 717 | n->nud_state); |
718 | dump_stack(); | ||
735 | } | 719 | } |
736 | } | 720 | } |
737 | 721 | ||
@@ -815,10 +799,10 @@ static void neigh_timer_handler(unsigned long arg) | |||
815 | } | 799 | } |
816 | 800 | ||
817 | if (neigh->nud_state & NUD_IN_TIMER) { | 801 | if (neigh->nud_state & NUD_IN_TIMER) { |
818 | neigh_hold(neigh); | ||
819 | if (time_before(next, jiffies + HZ/2)) | 802 | if (time_before(next, jiffies + HZ/2)) |
820 | next = jiffies + HZ/2; | 803 | next = jiffies + HZ/2; |
821 | neigh_add_timer(neigh, next); | 804 | if (!mod_timer(&neigh->timer, next)) |
805 | neigh_hold(neigh); | ||
822 | } | 806 | } |
823 | if (neigh->nud_state & (NUD_INCOMPLETE | NUD_PROBE)) { | 807 | if (neigh->nud_state & (NUD_INCOMPLETE | NUD_PROBE)) { |
824 | struct sk_buff *skb = skb_peek(&neigh->arp_queue); | 808 | struct sk_buff *skb = skb_peek(&neigh->arp_queue); |
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index af9b1516e21f..02cd4cde2112 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
@@ -410,6 +410,9 @@ struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask) | |||
410 | C(nfct); | 410 | C(nfct); |
411 | nf_conntrack_get(skb->nfct); | 411 | nf_conntrack_get(skb->nfct); |
412 | C(nfctinfo); | 412 | C(nfctinfo); |
413 | #if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE) | ||
414 | C(ipvs_property); | ||
415 | #endif | ||
413 | #ifdef CONFIG_BRIDGE_NETFILTER | 416 | #ifdef CONFIG_BRIDGE_NETFILTER |
414 | C(nf_bridge); | 417 | C(nf_bridge); |
415 | nf_bridge_get(skb->nf_bridge); | 418 | nf_bridge_get(skb->nf_bridge); |
@@ -467,6 +470,9 @@ static void copy_skb_header(struct sk_buff *new, const struct sk_buff *old) | |||
467 | new->nfct = old->nfct; | 470 | new->nfct = old->nfct; |
468 | nf_conntrack_get(old->nfct); | 471 | nf_conntrack_get(old->nfct); |
469 | new->nfctinfo = old->nfctinfo; | 472 | new->nfctinfo = old->nfctinfo; |
473 | #if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE) | ||
474 | new->ipvs_property = old->ipvs_property; | ||
475 | #endif | ||
470 | #ifdef CONFIG_BRIDGE_NETFILTER | 476 | #ifdef CONFIG_BRIDGE_NETFILTER |
471 | new->nf_bridge = old->nf_bridge; | 477 | new->nf_bridge = old->nf_bridge; |
472 | nf_bridge_get(old->nf_bridge); | 478 | nf_bridge_get(old->nf_bridge); |
diff --git a/net/core/wireless.c b/net/core/wireless.c index d17f1583ea3e..271ddb35b0b2 100644 --- a/net/core/wireless.c +++ b/net/core/wireless.c | |||
@@ -455,10 +455,15 @@ static inline struct iw_statistics *get_wireless_stats(struct net_device *dev) | |||
455 | 455 | ||
456 | /* Old location, field to be removed in next WE */ | 456 | /* Old location, field to be removed in next WE */ |
457 | if(dev->get_wireless_stats) { | 457 | if(dev->get_wireless_stats) { |
458 | printk(KERN_DEBUG "%s (WE) : Driver using old /proc/net/wireless support, please fix driver !\n", | 458 | static int printed_message; |
459 | dev->name); | 459 | |
460 | if (!printed_message++) | ||
461 | printk(KERN_DEBUG "%s (WE) : Driver using old /proc/net/wireless support, please fix driver !\n", | ||
462 | dev->name); | ||
463 | |||
460 | return dev->get_wireless_stats(dev); | 464 | return dev->get_wireless_stats(dev); |
461 | } | 465 | } |
466 | |||
462 | /* Not found */ | 467 | /* Not found */ |
463 | return (struct iw_statistics *) NULL; | 468 | return (struct iw_statistics *) NULL; |
464 | } | 469 | } |
diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c index ae088d1347af..6298cf58ff9e 100644 --- a/net/dccp/ipv4.c +++ b/net/dccp/ipv4.c | |||
@@ -463,6 +463,7 @@ static int dccp_v4_send_response(struct sock *sk, struct request_sock *req, | |||
463 | if (skb != NULL) { | 463 | if (skb != NULL) { |
464 | const struct inet_request_sock *ireq = inet_rsk(req); | 464 | const struct inet_request_sock *ireq = inet_rsk(req); |
465 | 465 | ||
466 | memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); | ||
466 | err = ip_build_and_send_pkt(skb, sk, ireq->loc_addr, | 467 | err = ip_build_and_send_pkt(skb, sk, ireq->loc_addr, |
467 | ireq->rmt_addr, | 468 | ireq->rmt_addr, |
468 | ireq->opt); | 469 | ireq->opt); |
@@ -647,6 +648,7 @@ int dccp_v4_send_reset(struct sock *sk, enum dccp_reset_codes code) | |||
647 | if (skb != NULL) { | 648 | if (skb != NULL) { |
648 | const struct inet_sock *inet = inet_sk(sk); | 649 | const struct inet_sock *inet = inet_sk(sk); |
649 | 650 | ||
651 | memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); | ||
650 | err = ip_build_and_send_pkt(skb, sk, | 652 | err = ip_build_and_send_pkt(skb, sk, |
651 | inet->saddr, inet->daddr, NULL); | 653 | inet->saddr, inet->daddr, NULL); |
652 | if (err == NET_XMIT_CN) | 654 | if (err == NET_XMIT_CN) |
diff --git a/net/dccp/output.c b/net/dccp/output.c index 4786bdcddcc9..29250749f16f 100644 --- a/net/dccp/output.c +++ b/net/dccp/output.c | |||
@@ -62,10 +62,8 @@ int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb) | |||
62 | 62 | ||
63 | skb->h.raw = skb_push(skb, dccp_header_size); | 63 | skb->h.raw = skb_push(skb, dccp_header_size); |
64 | dh = dccp_hdr(skb); | 64 | dh = dccp_hdr(skb); |
65 | /* | 65 | |
66 | * Data packets are not cloned as they are never retransmitted | 66 | if (!skb->sk) |
67 | */ | ||
68 | if (skb_cloned(skb)) | ||
69 | skb_set_owner_w(skb, sk); | 67 | skb_set_owner_w(skb, sk); |
70 | 68 | ||
71 | /* Build DCCP header and checksum it. */ | 69 | /* Build DCCP header and checksum it. */ |
@@ -102,6 +100,7 @@ int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb) | |||
102 | 100 | ||
103 | DCCP_INC_STATS(DCCP_MIB_OUTSEGS); | 101 | DCCP_INC_STATS(DCCP_MIB_OUTSEGS); |
104 | 102 | ||
103 | memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); | ||
105 | err = ip_queue_xmit(skb, 0); | 104 | err = ip_queue_xmit(skb, 0); |
106 | if (err <= 0) | 105 | if (err <= 0) |
107 | return err; | 106 | return err; |
@@ -243,7 +242,8 @@ int dccp_write_xmit(struct sock *sk, struct sk_buff *skb, long *timeo) | |||
243 | 242 | ||
244 | err = dccp_transmit_skb(sk, skb); | 243 | err = dccp_transmit_skb(sk, skb); |
245 | ccid_hc_tx_packet_sent(dp->dccps_hc_tx_ccid, sk, 0, len); | 244 | ccid_hc_tx_packet_sent(dp->dccps_hc_tx_ccid, sk, 0, len); |
246 | } | 245 | } else |
246 | kfree_skb(skb); | ||
247 | 247 | ||
248 | return err; | 248 | return err; |
249 | } | 249 | } |
diff --git a/net/dccp/proto.c b/net/dccp/proto.c index a1cfd0e9e3bc..a021c3422f67 100644 --- a/net/dccp/proto.c +++ b/net/dccp/proto.c | |||
@@ -402,8 +402,6 @@ int dccp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, | |||
402 | * This bug was _quickly_ found & fixed by just looking at an OSTRA | 402 | * This bug was _quickly_ found & fixed by just looking at an OSTRA |
403 | * generated callgraph 8) -acme | 403 | * generated callgraph 8) -acme |
404 | */ | 404 | */ |
405 | if (rc != 0) | ||
406 | goto out_discard; | ||
407 | out_release: | 405 | out_release: |
408 | release_sock(sk); | 406 | release_sock(sk); |
409 | return rc ? : len; | 407 | return rc ? : len; |
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 3f1a263e1249..1ad5202e556b 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
@@ -391,6 +391,9 @@ static void ip_copy_metadata(struct sk_buff *to, struct sk_buff *from) | |||
391 | to->nfct = from->nfct; | 391 | to->nfct = from->nfct; |
392 | nf_conntrack_get(to->nfct); | 392 | nf_conntrack_get(to->nfct); |
393 | to->nfctinfo = from->nfctinfo; | 393 | to->nfctinfo = from->nfctinfo; |
394 | #if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE) | ||
395 | to->ipvs_property = from->ipvs_property; | ||
396 | #endif | ||
394 | #ifdef CONFIG_BRIDGE_NETFILTER | 397 | #ifdef CONFIG_BRIDGE_NETFILTER |
395 | nf_bridge_put(to->nf_bridge); | 398 | nf_bridge_put(to->nf_bridge); |
396 | to->nf_bridge = from->nf_bridge; | 399 | to->nf_bridge = from->nf_bridge; |
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 7114031fdc70..b907456a79f4 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
@@ -435,17 +435,7 @@ int tcp_fragment(struct sock *sk, struct sk_buff *skb, u32 len, unsigned int mss | |||
435 | int nsize, old_factor; | 435 | int nsize, old_factor; |
436 | u16 flags; | 436 | u16 flags; |
437 | 437 | ||
438 | if (unlikely(len >= skb->len)) { | 438 | BUG_ON(len > skb->len); |
439 | if (net_ratelimit()) { | ||
440 | printk(KERN_DEBUG "TCP: seg_size=%u, mss=%u, seq=%u, " | ||
441 | "end_seq=%u, skb->len=%u.\n", len, mss_now, | ||
442 | TCP_SKB_CB(skb)->seq, TCP_SKB_CB(skb)->end_seq, | ||
443 | skb->len); | ||
444 | WARN_ON(1); | ||
445 | } | ||
446 | return 0; | ||
447 | } | ||
448 | |||
449 | nsize = skb_headlen(skb) - len; | 439 | nsize = skb_headlen(skb) - len; |
450 | if (nsize < 0) | 440 | if (nsize < 0) |
451 | nsize = 0; | 441 | nsize = 0; |
diff --git a/net/ipv6/ip6_flowlabel.c b/net/ipv6/ip6_flowlabel.c index f841bde30c18..bbbe80cdaf72 100644 --- a/net/ipv6/ip6_flowlabel.c +++ b/net/ipv6/ip6_flowlabel.c | |||
@@ -483,7 +483,7 @@ int ipv6_flowlabel_opt(struct sock *sk, char __user *optval, int optlen) | |||
483 | goto done; | 483 | goto done; |
484 | } | 484 | } |
485 | fl1 = sfl->fl; | 485 | fl1 = sfl->fl; |
486 | atomic_inc(&fl->users); | 486 | atomic_inc(&fl1->users); |
487 | break; | 487 | break; |
488 | } | 488 | } |
489 | } | 489 | } |
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c index 130f2b5d93dd..f16e7cdd6150 100644 --- a/net/sunrpc/svcsock.c +++ b/net/sunrpc/svcsock.c | |||
@@ -584,7 +584,7 @@ svc_udp_recvfrom(struct svc_rqst *rqstp) | |||
584 | struct timeval tv; | 584 | struct timeval tv; |
585 | 585 | ||
586 | tv.tv_sec = xtime.tv_sec; | 586 | tv.tv_sec = xtime.tv_sec; |
587 | tv.tv_usec = xtime.tv_nsec * 1000; | 587 | tv.tv_usec = xtime.tv_nsec / NSEC_PER_USEC; |
588 | skb_set_timestamp(skb, &tv); | 588 | skb_set_timestamp(skb, &tv); |
589 | /* Don't enable netstamp, sunrpc doesn't | 589 | /* Don't enable netstamp, sunrpc doesn't |
590 | need that much accuracy */ | 590 | need that much accuracy */ |
diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c index 8eb140dd2e4b..a45cc971e735 100644 --- a/security/selinux/selinuxfs.c +++ b/security/selinux/selinuxfs.c | |||
@@ -879,7 +879,7 @@ static ssize_t sel_commit_bools_write(struct file *filep, | |||
879 | if (sscanf(page, "%d", &new_value) != 1) | 879 | if (sscanf(page, "%d", &new_value) != 1) |
880 | goto out; | 880 | goto out; |
881 | 881 | ||
882 | if (new_value) { | 882 | if (new_value && bool_pending_values) { |
883 | security_set_bools(bool_num, bool_pending_values); | 883 | security_set_bools(bool_num, bool_pending_values); |
884 | } | 884 | } |
885 | 885 | ||
@@ -952,6 +952,7 @@ static int sel_make_bools(void) | |||
952 | 952 | ||
953 | /* remove any existing files */ | 953 | /* remove any existing files */ |
954 | kfree(bool_pending_values); | 954 | kfree(bool_pending_values); |
955 | bool_pending_values = NULL; | ||
955 | 956 | ||
956 | sel_remove_bools(dir); | 957 | sel_remove_bools(dir); |
957 | 958 | ||
@@ -1002,6 +1003,7 @@ out: | |||
1002 | } | 1003 | } |
1003 | return ret; | 1004 | return ret; |
1004 | err: | 1005 | err: |
1006 | kfree(values); | ||
1005 | d_genocide(dir); | 1007 | d_genocide(dir); |
1006 | ret = -ENOMEM; | 1008 | ret = -ENOMEM; |
1007 | goto out; | 1009 | goto out; |
diff --git a/security/selinux/ss/policydb.c b/security/selinux/ss/policydb.c index 0a758323a9cf..8e6262d12aa9 100644 --- a/security/selinux/ss/policydb.c +++ b/security/selinux/ss/policydb.c | |||
@@ -650,8 +650,10 @@ void policydb_destroy(struct policydb *p) | |||
650 | } | 650 | } |
651 | if (lrt) kfree(lrt); | 651 | if (lrt) kfree(lrt); |
652 | 652 | ||
653 | for (i = 0; i < p->p_types.nprim; i++) | 653 | if (p->type_attr_map) { |
654 | ebitmap_destroy(&p->type_attr_map[i]); | 654 | for (i = 0; i < p->p_types.nprim; i++) |
655 | ebitmap_destroy(&p->type_attr_map[i]); | ||
656 | } | ||
655 | kfree(p->type_attr_map); | 657 | kfree(p->type_attr_map); |
656 | 658 | ||
657 | return; | 659 | return; |
diff --git a/sound/core/init.c b/sound/core/init.c index a5702014a704..c72a79115cca 100644 --- a/sound/core/init.c +++ b/sound/core/init.c | |||
@@ -828,7 +828,8 @@ static int snd_generic_suspend(struct device *dev, pm_message_t state, u32 level | |||
828 | card = get_snd_generic_card(dev); | 828 | card = get_snd_generic_card(dev); |
829 | if (card->power_state == SNDRV_CTL_POWER_D3hot) | 829 | if (card->power_state == SNDRV_CTL_POWER_D3hot) |
830 | return 0; | 830 | return 0; |
831 | card->pm_suspend(card, PMSG_SUSPEND); | 831 | if (card->pm_suspend) |
832 | card->pm_suspend(card, PMSG_SUSPEND); | ||
832 | snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); | 833 | snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); |
833 | return 0; | 834 | return 0; |
834 | } | 835 | } |
@@ -843,7 +844,8 @@ static int snd_generic_resume(struct device *dev, u32 level) | |||
843 | card = get_snd_generic_card(dev); | 844 | card = get_snd_generic_card(dev); |
844 | if (card->power_state == SNDRV_CTL_POWER_D0) | 845 | if (card->power_state == SNDRV_CTL_POWER_D0) |
845 | return 0; | 846 | return 0; |
846 | card->pm_resume(card); | 847 | if (card->pm_suspend) |
848 | card->pm_resume(card); | ||
847 | snd_power_change_state(card, SNDRV_CTL_POWER_D0); | 849 | snd_power_change_state(card, SNDRV_CTL_POWER_D0); |
848 | return 0; | 850 | return 0; |
849 | } | 851 | } |