diff options
54 files changed, 686 insertions, 501 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/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/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/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/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/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/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/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/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..4897977a1f4b 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
| @@ -825,14 +825,6 @@ fastcall NORET_TYPE void do_exit(long code) | |||
| 825 | 825 | ||
| 826 | tsk->flags |= PF_EXITING; | 826 | tsk->flags |= PF_EXITING; | 
| 827 | 827 | ||
| 828 | /* | ||
| 829 | * Make sure we don't try to process any timer firings | ||
| 830 | * while we are already exiting. | ||
| 831 | */ | ||
| 832 | tsk->it_virt_expires = cputime_zero; | ||
| 833 | tsk->it_prof_expires = cputime_zero; | ||
| 834 | tsk->it_sched_expires = 0; | ||
| 835 | |||
| 836 | if (unlikely(in_atomic())) | 828 | if (unlikely(in_atomic())) | 
| 837 | printk(KERN_INFO "note: %s[%d] exited with preempt_count %d\n", | 829 | printk(KERN_INFO "note: %s[%d] exited with preempt_count %d\n", | 
| 838 | current->comm, current->pid, | 830 | current->comm, current->pid, | 
| @@ -843,6 +835,7 @@ fastcall NORET_TYPE void do_exit(long code) | |||
| 843 | group_dead = atomic_dec_and_test(&tsk->signal->live); | 835 | group_dead = atomic_dec_and_test(&tsk->signal->live); | 
| 844 | if (group_dead) { | 836 | if (group_dead) { | 
| 845 | del_timer_sync(&tsk->signal->real_timer); | 837 | del_timer_sync(&tsk->signal->real_timer); | 
| 838 | exit_itimers(tsk->signal); | ||
| 846 | acct_process(code); | 839 | acct_process(code); | 
| 847 | } | 840 | } | 
| 848 | exit_mm(tsk); | 841 | exit_mm(tsk); | 
| diff --git a/kernel/posix-cpu-timers.c b/kernel/posix-cpu-timers.c index b3f3edc475de..b15462b17a58 100644 --- a/kernel/posix-cpu-timers.c +++ b/kernel/posix-cpu-timers.c | |||
| @@ -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(); | 
| @@ -730,9 +730,15 @@ int posix_cpu_timer_set(struct k_itimer *timer, int flags, | |||
| 730 | * Disarm any old timer after extracting its expiry time. | 730 | * Disarm any old timer after extracting its expiry time. | 
| 731 | */ | 731 | */ | 
| 732 | BUG_ON(!irqs_disabled()); | 732 | BUG_ON(!irqs_disabled()); | 
| 733 | |||
| 734 | ret = 0; | ||
| 733 | spin_lock(&p->sighand->siglock); | 735 | spin_lock(&p->sighand->siglock); | 
| 734 | old_expires = timer->it.cpu.expires; | 736 | old_expires = timer->it.cpu.expires; | 
| 735 | list_del_init(&timer->it.cpu.entry); | 737 | if (unlikely(timer->it.cpu.firing)) { | 
| 738 | timer->it.cpu.firing = -1; | ||
| 739 | ret = TIMER_RETRY; | ||
| 740 | } else | ||
| 741 | list_del_init(&timer->it.cpu.entry); | ||
| 736 | spin_unlock(&p->sighand->siglock); | 742 | spin_unlock(&p->sighand->siglock); | 
| 737 | 743 | ||
| 738 | /* | 744 | /* | 
| @@ -780,7 +786,7 @@ int posix_cpu_timer_set(struct k_itimer *timer, int flags, | |||
| 780 | } | 786 | } | 
| 781 | } | 787 | } | 
| 782 | 788 | ||
| 783 | if (unlikely(timer->it.cpu.firing)) { | 789 | if (unlikely(ret)) { | 
| 784 | /* | 790 | /* | 
| 785 | * We are colliding with the timer actually firing. | 791 | * We are colliding with the timer actually firing. | 
| 786 | * Punt after filling in the timer's old value, and | 792 | * Punt after filling in the timer's old value, and | 
| @@ -788,8 +794,6 @@ int posix_cpu_timer_set(struct k_itimer *timer, int flags, | |||
| 788 | * it as an overrun (thanks to bump_cpu_timer above). | 794 | * it as an overrun (thanks to bump_cpu_timer above). | 
| 789 | */ | 795 | */ | 
| 790 | read_unlock(&tasklist_lock); | 796 | read_unlock(&tasklist_lock); | 
| 791 | timer->it.cpu.firing = -1; | ||
| 792 | ret = TIMER_RETRY; | ||
| 793 | goto out; | 797 | goto out; | 
| 794 | } | 798 | } | 
| 795 | 799 | ||
| @@ -955,14 +959,16 @@ void posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec *itp) | |||
| 955 | static void check_thread_timers(struct task_struct *tsk, | 959 | static void check_thread_timers(struct task_struct *tsk, | 
| 956 | struct list_head *firing) | 960 | struct list_head *firing) | 
| 957 | { | 961 | { | 
| 962 | int maxfire; | ||
| 958 | struct list_head *timers = tsk->cpu_timers; | 963 | struct list_head *timers = tsk->cpu_timers; | 
| 959 | 964 | ||
| 965 | maxfire = 20; | ||
| 960 | tsk->it_prof_expires = cputime_zero; | 966 | tsk->it_prof_expires = cputime_zero; | 
| 961 | while (!list_empty(timers)) { | 967 | while (!list_empty(timers)) { | 
| 962 | struct cpu_timer_list *t = list_entry(timers->next, | 968 | struct cpu_timer_list *t = list_entry(timers->next, | 
| 963 | struct cpu_timer_list, | 969 | struct cpu_timer_list, | 
| 964 | entry); | 970 | entry); | 
| 965 | if (cputime_lt(prof_ticks(tsk), t->expires.cpu)) { | 971 | if (!--maxfire || cputime_lt(prof_ticks(tsk), t->expires.cpu)) { | 
| 966 | tsk->it_prof_expires = t->expires.cpu; | 972 | tsk->it_prof_expires = t->expires.cpu; | 
| 967 | break; | 973 | break; | 
| 968 | } | 974 | } | 
| @@ -971,12 +977,13 @@ static void check_thread_timers(struct task_struct *tsk, | |||
| 971 | } | 977 | } | 
| 972 | 978 | ||
| 973 | ++timers; | 979 | ++timers; | 
| 980 | maxfire = 20; | ||
| 974 | tsk->it_virt_expires = cputime_zero; | 981 | tsk->it_virt_expires = cputime_zero; | 
| 975 | while (!list_empty(timers)) { | 982 | while (!list_empty(timers)) { | 
| 976 | struct cpu_timer_list *t = list_entry(timers->next, | 983 | struct cpu_timer_list *t = list_entry(timers->next, | 
| 977 | struct cpu_timer_list, | 984 | struct cpu_timer_list, | 
| 978 | entry); | 985 | entry); | 
| 979 | if (cputime_lt(virt_ticks(tsk), t->expires.cpu)) { | 986 | if (!--maxfire || cputime_lt(virt_ticks(tsk), t->expires.cpu)) { | 
| 980 | tsk->it_virt_expires = t->expires.cpu; | 987 | tsk->it_virt_expires = t->expires.cpu; | 
| 981 | break; | 988 | break; | 
| 982 | } | 989 | } | 
| @@ -985,12 +992,13 @@ static void check_thread_timers(struct task_struct *tsk, | |||
| 985 | } | 992 | } | 
| 986 | 993 | ||
| 987 | ++timers; | 994 | ++timers; | 
| 995 | maxfire = 20; | ||
| 988 | tsk->it_sched_expires = 0; | 996 | tsk->it_sched_expires = 0; | 
| 989 | while (!list_empty(timers)) { | 997 | while (!list_empty(timers)) { | 
| 990 | struct cpu_timer_list *t = list_entry(timers->next, | 998 | struct cpu_timer_list *t = list_entry(timers->next, | 
| 991 | struct cpu_timer_list, | 999 | struct cpu_timer_list, | 
| 992 | entry); | 1000 | entry); | 
| 993 | if (tsk->sched_time < t->expires.sched) { | 1001 | if (!--maxfire || tsk->sched_time < t->expires.sched) { | 
| 994 | tsk->it_sched_expires = t->expires.sched; | 1002 | tsk->it_sched_expires = t->expires.sched; | 
| 995 | break; | 1003 | break; | 
| 996 | } | 1004 | } | 
| @@ -1007,6 +1015,7 @@ static void check_thread_timers(struct task_struct *tsk, | |||
| 1007 | static void check_process_timers(struct task_struct *tsk, | 1015 | static void check_process_timers(struct task_struct *tsk, | 
| 1008 | struct list_head *firing) | 1016 | struct list_head *firing) | 
| 1009 | { | 1017 | { | 
| 1018 | int maxfire; | ||
| 1010 | struct signal_struct *const sig = tsk->signal; | 1019 | struct signal_struct *const sig = tsk->signal; | 
| 1011 | cputime_t utime, stime, ptime, virt_expires, prof_expires; | 1020 | cputime_t utime, stime, ptime, virt_expires, prof_expires; | 
| 1012 | unsigned long long sched_time, sched_expires; | 1021 | unsigned long long sched_time, sched_expires; | 
| @@ -1039,12 +1048,13 @@ static void check_process_timers(struct task_struct *tsk, | |||
| 1039 | } while (t != tsk); | 1048 | } while (t != tsk); | 
| 1040 | ptime = cputime_add(utime, stime); | 1049 | ptime = cputime_add(utime, stime); | 
| 1041 | 1050 | ||
| 1051 | maxfire = 20; | ||
| 1042 | prof_expires = cputime_zero; | 1052 | prof_expires = cputime_zero; | 
| 1043 | while (!list_empty(timers)) { | 1053 | while (!list_empty(timers)) { | 
| 1044 | struct cpu_timer_list *t = list_entry(timers->next, | 1054 | struct cpu_timer_list *t = list_entry(timers->next, | 
| 1045 | struct cpu_timer_list, | 1055 | struct cpu_timer_list, | 
| 1046 | entry); | 1056 | entry); | 
| 1047 | if (cputime_lt(ptime, t->expires.cpu)) { | 1057 | if (!--maxfire || cputime_lt(ptime, t->expires.cpu)) { | 
| 1048 | prof_expires = t->expires.cpu; | 1058 | prof_expires = t->expires.cpu; | 
| 1049 | break; | 1059 | break; | 
| 1050 | } | 1060 | } | 
| @@ -1053,12 +1063,13 @@ static void check_process_timers(struct task_struct *tsk, | |||
| 1053 | } | 1063 | } | 
| 1054 | 1064 | ||
| 1055 | ++timers; | 1065 | ++timers; | 
| 1066 | maxfire = 20; | ||
| 1056 | virt_expires = cputime_zero; | 1067 | virt_expires = cputime_zero; | 
| 1057 | while (!list_empty(timers)) { | 1068 | while (!list_empty(timers)) { | 
| 1058 | struct cpu_timer_list *t = list_entry(timers->next, | 1069 | struct cpu_timer_list *t = list_entry(timers->next, | 
| 1059 | struct cpu_timer_list, | 1070 | struct cpu_timer_list, | 
| 1060 | entry); | 1071 | entry); | 
| 1061 | if (cputime_lt(utime, t->expires.cpu)) { | 1072 | if (!--maxfire || cputime_lt(utime, t->expires.cpu)) { | 
| 1062 | virt_expires = t->expires.cpu; | 1073 | virt_expires = t->expires.cpu; | 
| 1063 | break; | 1074 | break; | 
| 1064 | } | 1075 | } | 
| @@ -1067,12 +1078,13 @@ static void check_process_timers(struct task_struct *tsk, | |||
| 1067 | } | 1078 | } | 
| 1068 | 1079 | ||
| 1069 | ++timers; | 1080 | ++timers; | 
| 1081 | maxfire = 20; | ||
| 1070 | sched_expires = 0; | 1082 | sched_expires = 0; | 
| 1071 | while (!list_empty(timers)) { | 1083 | while (!list_empty(timers)) { | 
| 1072 | struct cpu_timer_list *t = list_entry(timers->next, | 1084 | struct cpu_timer_list *t = list_entry(timers->next, | 
| 1073 | struct cpu_timer_list, | 1085 | struct cpu_timer_list, | 
| 1074 | entry); | 1086 | entry); | 
| 1075 | if (sched_time < t->expires.sched) { | 1087 | if (!--maxfire || sched_time < t->expires.sched) { | 
| 1076 | sched_expires = t->expires.sched; | 1088 | sched_expires = t->expires.sched; | 
| 1077 | break; | 1089 | break; | 
| 1078 | } | 1090 | } | 
| @@ -1155,6 +1167,9 @@ static void check_process_timers(struct task_struct *tsk, | |||
| 1155 | unsigned long long sched_left, sched; | 1167 | unsigned long long sched_left, sched; | 
| 1156 | const unsigned int nthreads = atomic_read(&sig->live); | 1168 | const unsigned int nthreads = atomic_read(&sig->live); | 
| 1157 | 1169 | ||
| 1170 | if (!nthreads) | ||
| 1171 | return; | ||
| 1172 | |||
| 1158 | prof_left = cputime_sub(prof_expires, utime); | 1173 | prof_left = cputime_sub(prof_expires, utime); | 
| 1159 | prof_left = cputime_sub(prof_left, stime); | 1174 | prof_left = cputime_sub(prof_left, stime); | 
| 1160 | prof_left = cputime_div(prof_left, nthreads); | 1175 | prof_left = cputime_div(prof_left, nthreads); | 
| @@ -1280,30 +1295,30 @@ void run_posix_cpu_timers(struct task_struct *tsk) | |||
| 1280 | 1295 | ||
| 1281 | #undef UNEXPIRED | 1296 | #undef UNEXPIRED | 
| 1282 | 1297 | ||
| 1283 | BUG_ON(tsk->exit_state); | ||
| 1284 | |||
| 1285 | /* | 1298 | /* | 
| 1286 | * Double-check with locks held. | 1299 | * Double-check with locks held. | 
| 1287 | */ | 1300 | */ | 
| 1288 | read_lock(&tasklist_lock); | 1301 | read_lock(&tasklist_lock); | 
| 1289 | spin_lock(&tsk->sighand->siglock); | 1302 | if (likely(tsk->signal != NULL)) { | 
| 1303 | spin_lock(&tsk->sighand->siglock); | ||
| 1290 | 1304 | ||
| 1291 | /* | 1305 | /* | 
| 1292 | * Here we take off tsk->cpu_timers[N] and tsk->signal->cpu_timers[N] | 1306 | * Here we take off tsk->cpu_timers[N] and tsk->signal->cpu_timers[N] | 
| 1293 | * all the timers that are firing, and put them on the firing list. | 1307 | * all the timers that are firing, and put them on the firing list. | 
| 1294 | */ | 1308 | */ | 
| 1295 | check_thread_timers(tsk, &firing); | 1309 | check_thread_timers(tsk, &firing); | 
| 1296 | check_process_timers(tsk, &firing); | 1310 | check_process_timers(tsk, &firing); | 
| 1297 | 1311 | ||
| 1298 | /* | 1312 | /* | 
| 1299 | * We must release these locks before taking any timer's lock. | 1313 | * We must release these locks before taking any timer's lock. | 
| 1300 | * There is a potential race with timer deletion here, as the | 1314 | * There is a potential race with timer deletion here, as the | 
| 1301 | * siglock now protects our private firing list. We have set | 1315 | * siglock now protects our private firing list. We have set | 
| 1302 | * the firing flag in each timer, so that a deletion attempt | 1316 | * the firing flag in each timer, so that a deletion attempt | 
| 1303 | * that gets the timer lock before we do will give it up and | 1317 | * that gets the timer lock before we do will give it up and | 
| 1304 | * spin until we've taken care of that timer below. | 1318 | * spin until we've taken care of that timer below. | 
| 1305 | */ | 1319 | */ | 
| 1306 | spin_unlock(&tsk->sighand->siglock); | 1320 | spin_unlock(&tsk->sighand->siglock); | 
| 1321 | } | ||
| 1307 | read_unlock(&tasklist_lock); | 1322 | read_unlock(&tasklist_lock); | 
| 1308 | 1323 | ||
| 1309 | /* | 1324 | /* | 
| 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/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/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/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/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 | } | 
