diff options
| author | Kyle McMartin <kyle@parisc-linux.org> | 2005-10-26 23:28:40 -0400 |
|---|---|---|
| committer | Kyle McMartin <kyle@parisc-linux.org> | 2005-10-26 23:28:40 -0400 |
| commit | e0f998930eb67c49f2862c58a45262ad0bc03eca (patch) | |
| tree | d2bc6cbe11a00a05f96da01b1d4ac27adaabd546 | |
| parent | 6958ae318bb1af5e0b77968384700fb184fb8893 (diff) | |
| parent | 7a4ed937aa44acdeb8c6ba671509dc7b54b09d3a (diff) | |
Auto-update from upstream
45 files changed, 617 insertions, 428 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-pxa/corgi_lcd.c b/arch/arm/mach-pxa/corgi_lcd.c index 850538fadece..370df113dc06 100644 --- a/arch/arm/mach-pxa/corgi_lcd.c +++ b/arch/arm/mach-pxa/corgi_lcd.c | |||
| @@ -488,6 +488,7 @@ static int is_pxafb_device(struct device * dev, void * data) | |||
| 488 | 488 | ||
| 489 | unsigned long spitz_get_hsync_len(void) | 489 | unsigned long spitz_get_hsync_len(void) |
| 490 | { | 490 | { |
| 491 | #ifdef CONFIG_FB_PXA | ||
| 491 | if (!spitz_pxafb_dev) { | 492 | if (!spitz_pxafb_dev) { |
| 492 | spitz_pxafb_dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device); | 493 | spitz_pxafb_dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device); |
| 493 | if (!spitz_pxafb_dev) | 494 | if (!spitz_pxafb_dev) |
| @@ -496,6 +497,7 @@ unsigned long spitz_get_hsync_len(void) | |||
| 496 | if (!get_hsync_time) | 497 | if (!get_hsync_time) |
| 497 | get_hsync_time = symbol_get(pxafb_get_hsync_time); | 498 | get_hsync_time = symbol_get(pxafb_get_hsync_time); |
| 498 | if (!get_hsync_time) | 499 | if (!get_hsync_time) |
| 500 | #endif | ||
| 499 | return 0; | 501 | return 0; |
| 500 | 502 | ||
| 501 | return pxafb_get_hsync_time(spitz_pxafb_dev); | 503 | return pxafb_get_hsync_time(spitz_pxafb_dev); |
diff --git a/arch/ppc64/kernel/mpic.c b/arch/ppc64/kernel/mpic.c index cc262a05ddb4..5f5bc73754d9 100644 --- a/arch/ppc64/kernel/mpic.c +++ b/arch/ppc64/kernel/mpic.c | |||
| @@ -506,8 +506,8 @@ struct mpic * __init mpic_alloc(unsigned long phys_addr, | |||
| 506 | mpic->senses_count = senses_count; | 506 | mpic->senses_count = senses_count; |
| 507 | 507 | ||
| 508 | /* Map the global registers */ | 508 | /* Map the global registers */ |
| 509 | mpic->gregs = ioremap(phys_addr + MPIC_GREG_BASE, 0x1000); | 509 | mpic->gregs = ioremap(phys_addr + MPIC_GREG_BASE, 0x2000); |
| 510 | mpic->tmregs = mpic->gregs + (MPIC_TIMER_BASE >> 2); | 510 | mpic->tmregs = mpic->gregs + ((MPIC_TIMER_BASE - MPIC_GREG_BASE) >> 2); |
| 511 | BUG_ON(mpic->gregs == NULL); | 511 | BUG_ON(mpic->gregs == NULL); |
| 512 | 512 | ||
| 513 | /* Reset */ | 513 | /* Reset */ |
diff --git a/arch/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/radeon_cp.c b/drivers/char/drm/radeon_cp.c index 6d9080a3ca7e..12ef13ff04ca 100644 --- a/drivers/char/drm/radeon_cp.c +++ b/drivers/char/drm/radeon_cp.c | |||
| @@ -1133,10 +1133,10 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev, | |||
| 1133 | ring_start = (dev_priv->cp_ring->offset | 1133 | ring_start = (dev_priv->cp_ring->offset |
| 1134 | - dev->agp->base | 1134 | - dev->agp->base |
| 1135 | + dev_priv->gart_vm_start); | 1135 | + dev_priv->gart_vm_start); |
| 1136 | } else | 1136 | } else |
| 1137 | #endif | 1137 | #endif |
| 1138 | ring_start = (dev_priv->cp_ring->offset | 1138 | ring_start = (dev_priv->cp_ring->offset |
| 1139 | - dev->sg->handle | 1139 | - (unsigned long)dev->sg->virtual |
| 1140 | + dev_priv->gart_vm_start); | 1140 | + dev_priv->gart_vm_start); |
| 1141 | 1141 | ||
| 1142 | RADEON_WRITE( RADEON_CP_RB_BASE, ring_start ); | 1142 | RADEON_WRITE( RADEON_CP_RB_BASE, ring_start ); |
| @@ -1164,7 +1164,8 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev, | |||
| 1164 | drm_sg_mem_t *entry = dev->sg; | 1164 | drm_sg_mem_t *entry = dev->sg; |
| 1165 | unsigned long tmp_ofs, page_ofs; | 1165 | unsigned long tmp_ofs, page_ofs; |
| 1166 | 1166 | ||
| 1167 | tmp_ofs = dev_priv->ring_rptr->offset - dev->sg->handle; | 1167 | tmp_ofs = dev_priv->ring_rptr->offset - |
| 1168 | (unsigned long)dev->sg->virtual; | ||
| 1168 | page_ofs = tmp_ofs >> PAGE_SHIFT; | 1169 | page_ofs = tmp_ofs >> PAGE_SHIFT; |
| 1169 | 1170 | ||
| 1170 | RADEON_WRITE( RADEON_CP_RB_RPTR_ADDR, | 1171 | RADEON_WRITE( RADEON_CP_RB_RPTR_ADDR, |
| @@ -1491,8 +1492,8 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) | |||
| 1491 | else | 1492 | else |
| 1492 | #endif | 1493 | #endif |
| 1493 | dev_priv->gart_buffers_offset = (dev->agp_buffer_map->offset | 1494 | dev_priv->gart_buffers_offset = (dev->agp_buffer_map->offset |
| 1494 | - dev->sg->handle | 1495 | - (unsigned long)dev->sg->virtual |
| 1495 | + dev_priv->gart_vm_start); | 1496 | + dev_priv->gart_vm_start); |
| 1496 | 1497 | ||
| 1497 | DRM_DEBUG( "dev_priv->gart_size %d\n", | 1498 | DRM_DEBUG( "dev_priv->gart_size %d\n", |
| 1498 | dev_priv->gart_size ); | 1499 | dev_priv->gart_size ); |
diff --git a/drivers/infiniband/hw/mthca/mthca_eq.c b/drivers/infiniband/hw/mthca/mthca_eq.c index c81fa8e975ef..8dfafda5ed24 100644 --- a/drivers/infiniband/hw/mthca/mthca_eq.c +++ b/drivers/infiniband/hw/mthca/mthca_eq.c | |||
| @@ -396,20 +396,21 @@ static irqreturn_t mthca_tavor_interrupt(int irq, void *dev_ptr, struct pt_regs | |||
| 396 | writel(dev->eq_table.clr_mask, dev->eq_table.clr_int); | 396 | writel(dev->eq_table.clr_mask, dev->eq_table.clr_int); |
| 397 | 397 | ||
| 398 | ecr = readl(dev->eq_regs.tavor.ecr_base + 4); | 398 | ecr = readl(dev->eq_regs.tavor.ecr_base + 4); |
| 399 | if (ecr) { | 399 | if (!ecr) |
| 400 | writel(ecr, dev->eq_regs.tavor.ecr_base + | 400 | return IRQ_NONE; |
| 401 | MTHCA_ECR_CLR_BASE - MTHCA_ECR_BASE + 4); | ||
| 402 | 401 | ||
| 403 | for (i = 0; i < MTHCA_NUM_EQ; ++i) | 402 | writel(ecr, dev->eq_regs.tavor.ecr_base + |
| 404 | if (ecr & dev->eq_table.eq[i].eqn_mask && | 403 | MTHCA_ECR_CLR_BASE - MTHCA_ECR_BASE + 4); |
| 405 | mthca_eq_int(dev, &dev->eq_table.eq[i])) { | 404 | |
| 405 | for (i = 0; i < MTHCA_NUM_EQ; ++i) | ||
| 406 | if (ecr & dev->eq_table.eq[i].eqn_mask) { | ||
| 407 | if (mthca_eq_int(dev, &dev->eq_table.eq[i])) | ||
| 406 | tavor_set_eq_ci(dev, &dev->eq_table.eq[i], | 408 | tavor_set_eq_ci(dev, &dev->eq_table.eq[i], |
| 407 | dev->eq_table.eq[i].cons_index); | 409 | dev->eq_table.eq[i].cons_index); |
| 408 | tavor_eq_req_not(dev, dev->eq_table.eq[i].eqn); | 410 | tavor_eq_req_not(dev, dev->eq_table.eq[i].eqn); |
| 409 | } | 411 | } |
| 410 | } | ||
| 411 | 412 | ||
| 412 | return IRQ_RETVAL(ecr); | 413 | return IRQ_HANDLED; |
| 413 | } | 414 | } |
| 414 | 415 | ||
| 415 | static irqreturn_t mthca_tavor_msi_x_interrupt(int irq, void *eq_ptr, | 416 | static irqreturn_t mthca_tavor_msi_x_interrupt(int irq, void *eq_ptr, |
diff --git a/drivers/md/md.c b/drivers/md/md.c index e9476075aa13..2a8a5696bf8a 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
| @@ -3568,7 +3568,8 @@ static void md_do_sync(mddev_t *mddev) | |||
| 3568 | mddev->curr_resync = 2; | 3568 | mddev->curr_resync = 2; |
| 3569 | 3569 | ||
| 3570 | try_again: | 3570 | try_again: |
| 3571 | if (signal_pending(current)) { | 3571 | if (signal_pending(current) || |
| 3572 | kthread_should_stop()) { | ||
| 3572 | flush_signals(current); | 3573 | flush_signals(current); |
| 3573 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); | 3574 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); |
| 3574 | goto skip; | 3575 | goto skip; |
| @@ -3590,8 +3591,9 @@ static void md_do_sync(mddev_t *mddev) | |||
| 3590 | */ | 3591 | */ |
| 3591 | continue; | 3592 | continue; |
| 3592 | prepare_to_wait(&resync_wait, &wq, TASK_INTERRUPTIBLE); | 3593 | prepare_to_wait(&resync_wait, &wq, TASK_INTERRUPTIBLE); |
| 3593 | if (!signal_pending(current) | 3594 | if (!signal_pending(current) && |
| 3594 | && mddev2->curr_resync >= mddev->curr_resync) { | 3595 | !kthread_should_stop() && |
| 3596 | mddev2->curr_resync >= mddev->curr_resync) { | ||
| 3595 | printk(KERN_INFO "md: delaying resync of %s" | 3597 | printk(KERN_INFO "md: delaying resync of %s" |
| 3596 | " until %s has finished resync (they" | 3598 | " until %s has finished resync (they" |
| 3597 | " share one or more physical units)\n", | 3599 | " share one or more physical units)\n", |
| @@ -3697,7 +3699,7 @@ static void md_do_sync(mddev_t *mddev) | |||
| 3697 | } | 3699 | } |
| 3698 | 3700 | ||
| 3699 | 3701 | ||
| 3700 | if (signal_pending(current)) { | 3702 | if (signal_pending(current) || kthread_should_stop()) { |
| 3701 | /* | 3703 | /* |
| 3702 | * got a signal, exit. | 3704 | * got a signal, exit. |
| 3703 | */ | 3705 | */ |
diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig index 93570355819a..bbb989df4cf0 100644 --- a/drivers/media/video/Kconfig +++ b/drivers/media/video/Kconfig | |||
| @@ -262,7 +262,6 @@ config VIDEO_SAA7134_DVB | |||
| 262 | depends on VIDEO_SAA7134 && DVB_CORE | 262 | depends on VIDEO_SAA7134 && DVB_CORE |
| 263 | select VIDEO_BUF_DVB | 263 | select VIDEO_BUF_DVB |
| 264 | select DVB_MT352 | 264 | select DVB_MT352 |
| 265 | select DVB_CX22702 | ||
| 266 | select DVB_TDA1004X | 265 | select DVB_TDA1004X |
| 267 | ---help--- | 266 | ---help--- |
| 268 | This adds support for DVB cards based on the | 267 | This adds support for DVB cards based on the |
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index a6a630a950d0..7992bc8cc6a4 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
| @@ -241,7 +241,8 @@ static void __devinit quirk_s3_64M(struct pci_dev *dev) | |||
| 241 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_868, quirk_s3_64M ); | 241 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_868, quirk_s3_64M ); |
| 242 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_968, quirk_s3_64M ); | 242 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_968, quirk_s3_64M ); |
| 243 | 243 | ||
| 244 | static void __devinit quirk_io_region(struct pci_dev *dev, unsigned region, unsigned size, int nr) | 244 | static void __devinit quirk_io_region(struct pci_dev *dev, unsigned region, |
| 245 | unsigned size, int nr, const char *name) | ||
| 245 | { | 246 | { |
| 246 | region &= ~(size-1); | 247 | region &= ~(size-1); |
| 247 | if (region) { | 248 | if (region) { |
| @@ -259,6 +260,7 @@ static void __devinit quirk_io_region(struct pci_dev *dev, unsigned region, unsi | |||
| 259 | pcibios_bus_to_resource(dev, res, &bus_region); | 260 | pcibios_bus_to_resource(dev, res, &bus_region); |
| 260 | 261 | ||
| 261 | pci_claim_resource(dev, nr); | 262 | pci_claim_resource(dev, nr); |
| 263 | printk("PCI quirk: region %04x-%04x claimed by %s\n", region, region + size - 1, name); | ||
| 262 | } | 264 | } |
| 263 | } | 265 | } |
| 264 | 266 | ||
| @@ -291,25 +293,98 @@ static void __devinit quirk_ali7101_acpi(struct pci_dev *dev) | |||
| 291 | u16 region; | 293 | u16 region; |
| 292 | 294 | ||
| 293 | pci_read_config_word(dev, 0xE0, ®ion); | 295 | pci_read_config_word(dev, 0xE0, ®ion); |
| 294 | quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES); | 296 | quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES, "ali7101 ACPI"); |
| 295 | pci_read_config_word(dev, 0xE2, ®ion); | 297 | pci_read_config_word(dev, 0xE2, ®ion); |
| 296 | quirk_io_region(dev, region, 32, PCI_BRIDGE_RESOURCES+1); | 298 | quirk_io_region(dev, region, 32, PCI_BRIDGE_RESOURCES+1, "ali7101 SMB"); |
| 297 | } | 299 | } |
| 298 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M7101, quirk_ali7101_acpi ); | 300 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M7101, quirk_ali7101_acpi ); |
| 299 | 301 | ||
| 302 | static void piix4_io_quirk(struct pci_dev *dev, const char *name, unsigned int port, unsigned int enable) | ||
| 303 | { | ||
| 304 | u32 devres; | ||
| 305 | u32 mask, size, base; | ||
| 306 | |||
| 307 | pci_read_config_dword(dev, port, &devres); | ||
| 308 | if ((devres & enable) != enable) | ||
| 309 | return; | ||
| 310 | mask = (devres >> 16) & 15; | ||
| 311 | base = devres & 0xffff; | ||
| 312 | size = 16; | ||
| 313 | for (;;) { | ||
| 314 | unsigned bit = size >> 1; | ||
| 315 | if ((bit & mask) == bit) | ||
| 316 | break; | ||
| 317 | size = bit; | ||
| 318 | } | ||
| 319 | /* | ||
| 320 | * For now we only print it out. Eventually we'll want to | ||
| 321 | * reserve it (at least if it's in the 0x1000+ range), but | ||
| 322 | * let's get enough confirmation reports first. | ||
| 323 | */ | ||
| 324 | base &= -size; | ||
| 325 | printk("%s PIO at %04x-%04x\n", name, base, base + size - 1); | ||
| 326 | } | ||
| 327 | |||
| 328 | static void piix4_mem_quirk(struct pci_dev *dev, const char *name, unsigned int port, unsigned int enable) | ||
| 329 | { | ||
| 330 | u32 devres; | ||
| 331 | u32 mask, size, base; | ||
| 332 | |||
| 333 | pci_read_config_dword(dev, port, &devres); | ||
| 334 | if ((devres & enable) != enable) | ||
| 335 | return; | ||
| 336 | base = devres & 0xffff0000; | ||
| 337 | mask = (devres & 0x3f) << 16; | ||
| 338 | size = 128 << 16; | ||
| 339 | for (;;) { | ||
| 340 | unsigned bit = size >> 1; | ||
| 341 | if ((bit & mask) == bit) | ||
| 342 | break; | ||
| 343 | size = bit; | ||
| 344 | } | ||
| 345 | /* | ||
| 346 | * For now we only print it out. Eventually we'll want to | ||
| 347 | * reserve it, but let's get enough confirmation reports first. | ||
| 348 | */ | ||
| 349 | base &= -size; | ||
| 350 | printk("%s MMIO at %04x-%04x\n", name, base, base + size - 1); | ||
| 351 | } | ||
| 352 | |||
| 300 | /* | 353 | /* |
| 301 | * PIIX4 ACPI: Two IO regions pointed to by longwords at | 354 | * PIIX4 ACPI: Two IO regions pointed to by longwords at |
| 302 | * 0x40 (64 bytes of ACPI registers) | 355 | * 0x40 (64 bytes of ACPI registers) |
| 303 | * 0x90 (32 bytes of SMB registers) | 356 | * 0x90 (32 bytes of SMB registers) |
| 357 | * and a few strange programmable PIIX4 device resources. | ||
| 304 | */ | 358 | */ |
| 305 | static void __devinit quirk_piix4_acpi(struct pci_dev *dev) | 359 | static void __devinit quirk_piix4_acpi(struct pci_dev *dev) |
| 306 | { | 360 | { |
| 307 | u32 region; | 361 | u32 region, res_a; |
| 308 | 362 | ||
| 309 | pci_read_config_dword(dev, 0x40, ®ion); | 363 | pci_read_config_dword(dev, 0x40, ®ion); |
| 310 | quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES); | 364 | quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES, "PIIX4 ACPI"); |
| 311 | pci_read_config_dword(dev, 0x90, ®ion); | 365 | pci_read_config_dword(dev, 0x90, ®ion); |
| 312 | quirk_io_region(dev, region, 32, PCI_BRIDGE_RESOURCES+1); | 366 | quirk_io_region(dev, region, 32, PCI_BRIDGE_RESOURCES+1, "PIIX4 SMB"); |
| 367 | |||
| 368 | /* Device resource A has enables for some of the other ones */ | ||
| 369 | pci_read_config_dword(dev, 0x5c, &res_a); | ||
| 370 | |||
| 371 | piix4_io_quirk(dev, "PIIX4 devres B", 0x60, 3 << 21); | ||
| 372 | piix4_io_quirk(dev, "PIIX4 devres C", 0x64, 3 << 21); | ||
| 373 | |||
| 374 | /* Device resource D is just bitfields for static resources */ | ||
| 375 | |||
| 376 | /* Device 12 enabled? */ | ||
| 377 | if (res_a & (1 << 29)) { | ||
| 378 | piix4_io_quirk(dev, "PIIX4 devres E", 0x68, 1 << 20); | ||
| 379 | piix4_mem_quirk(dev, "PIIX4 devres F", 0x6c, 1 << 7); | ||
| 380 | } | ||
| 381 | /* Device 13 enabled? */ | ||
| 382 | if (res_a & (1 << 30)) { | ||
| 383 | piix4_io_quirk(dev, "PIIX4 devres G", 0x70, 1 << 20); | ||
| 384 | piix4_mem_quirk(dev, "PIIX4 devres H", 0x74, 1 << 7); | ||
| 385 | } | ||
| 386 | piix4_io_quirk(dev, "PIIX4 devres I", 0x78, 1 << 20); | ||
| 387 | piix4_io_quirk(dev, "PIIX4 devres J", 0x7c, 1 << 20); | ||
| 313 | } | 388 | } |
| 314 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, quirk_piix4_acpi ); | 389 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, quirk_piix4_acpi ); |
| 315 | 390 | ||
| @@ -323,10 +398,10 @@ static void __devinit quirk_ich4_lpc_acpi(struct pci_dev *dev) | |||
| 323 | u32 region; | 398 | u32 region; |
| 324 | 399 | ||
| 325 | pci_read_config_dword(dev, 0x40, ®ion); | 400 | pci_read_config_dword(dev, 0x40, ®ion); |
| 326 | quirk_io_region(dev, region, 128, PCI_BRIDGE_RESOURCES); | 401 | quirk_io_region(dev, region, 128, PCI_BRIDGE_RESOURCES, "ICH4 ACPI/GPIO/TCO"); |
| 327 | 402 | ||
| 328 | pci_read_config_dword(dev, 0x58, ®ion); | 403 | pci_read_config_dword(dev, 0x58, ®ion); |
| 329 | quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES+1); | 404 | quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES+1, "ICH4 GPIO"); |
| 330 | } | 405 | } |
| 331 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_0, quirk_ich4_lpc_acpi ); | 406 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_0, quirk_ich4_lpc_acpi ); |
| 332 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_0, quirk_ich4_lpc_acpi ); | 407 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_0, quirk_ich4_lpc_acpi ); |
| @@ -352,7 +427,7 @@ static void __devinit quirk_vt82c586_acpi(struct pci_dev *dev) | |||
| 352 | if (rev & 0x10) { | 427 | if (rev & 0x10) { |
| 353 | pci_read_config_dword(dev, 0x48, ®ion); | 428 | pci_read_config_dword(dev, 0x48, ®ion); |
| 354 | region &= PCI_BASE_ADDRESS_IO_MASK; | 429 | region &= PCI_BASE_ADDRESS_IO_MASK; |
| 355 | quirk_io_region(dev, region, 256, PCI_BRIDGE_RESOURCES); | 430 | quirk_io_region(dev, region, 256, PCI_BRIDGE_RESOURCES, "vt82c586 ACPI"); |
| 356 | } | 431 | } |
| 357 | } | 432 | } |
| 358 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_3, quirk_vt82c586_acpi ); | 433 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_3, quirk_vt82c586_acpi ); |
| @@ -372,11 +447,11 @@ static void __devinit quirk_vt82c686_acpi(struct pci_dev *dev) | |||
| 372 | 447 | ||
| 373 | pci_read_config_word(dev, 0x70, &hm); | 448 | pci_read_config_word(dev, 0x70, &hm); |
| 374 | hm &= PCI_BASE_ADDRESS_IO_MASK; | 449 | hm &= PCI_BASE_ADDRESS_IO_MASK; |
| 375 | quirk_io_region(dev, hm, 128, PCI_BRIDGE_RESOURCES + 1); | 450 | quirk_io_region(dev, hm, 128, PCI_BRIDGE_RESOURCES + 1, "vt82c868 HW-mon"); |
| 376 | 451 | ||
| 377 | pci_read_config_dword(dev, 0x90, &smb); | 452 | pci_read_config_dword(dev, 0x90, &smb); |
| 378 | smb &= PCI_BASE_ADDRESS_IO_MASK; | 453 | smb &= PCI_BASE_ADDRESS_IO_MASK; |
| 379 | quirk_io_region(dev, smb, 16, PCI_BRIDGE_RESOURCES + 2); | 454 | quirk_io_region(dev, smb, 16, PCI_BRIDGE_RESOURCES + 2, "vt82c868 SMB"); |
| 380 | } | 455 | } |
| 381 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4, quirk_vt82c686_acpi ); | 456 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4, quirk_vt82c686_acpi ); |
| 382 | 457 | ||
| @@ -391,11 +466,11 @@ static void __devinit quirk_vt8235_acpi(struct pci_dev *dev) | |||
| 391 | 466 | ||
| 392 | pci_read_config_word(dev, 0x88, &pm); | 467 | pci_read_config_word(dev, 0x88, &pm); |
| 393 | pm &= PCI_BASE_ADDRESS_IO_MASK; | 468 | pm &= PCI_BASE_ADDRESS_IO_MASK; |
| 394 | quirk_io_region(dev, pm, 128, PCI_BRIDGE_RESOURCES); | 469 | quirk_io_region(dev, pm, 128, PCI_BRIDGE_RESOURCES, "vt8235 PM"); |
| 395 | 470 | ||
| 396 | pci_read_config_word(dev, 0xd0, &smb); | 471 | pci_read_config_word(dev, 0xd0, &smb); |
| 397 | smb &= PCI_BASE_ADDRESS_IO_MASK; | 472 | smb &= PCI_BASE_ADDRESS_IO_MASK; |
| 398 | quirk_io_region(dev, smb, 16, PCI_BRIDGE_RESOURCES + 1); | 473 | quirk_io_region(dev, smb, 16, PCI_BRIDGE_RESOURCES + 1, "vt8235 SMB"); |
| 399 | } | 474 | } |
| 400 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8235, quirk_vt8235_acpi); | 475 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8235, quirk_vt8235_acpi); |
| 401 | 476 | ||
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c index 657be948baf7..28ce3a7ee434 100644 --- a/drivers/pci/setup-bus.c +++ b/drivers/pci/setup-bus.c | |||
| @@ -40,7 +40,7 @@ | |||
| 40 | * FIXME: IO should be max 256 bytes. However, since we may | 40 | * FIXME: IO should be max 256 bytes. However, since we may |
| 41 | * have a P2P bridge below a cardbus bridge, we need 4K. | 41 | * have a P2P bridge below a cardbus bridge, we need 4K. |
| 42 | */ | 42 | */ |
| 43 | #define CARDBUS_IO_SIZE (4*1024) | 43 | #define CARDBUS_IO_SIZE (256) |
| 44 | #define CARDBUS_MEM_SIZE (32*1024*1024) | 44 | #define CARDBUS_MEM_SIZE (32*1024*1024) |
| 45 | 45 | ||
| 46 | static void __devinit | 46 | static void __devinit |
diff --git a/drivers/scsi/NCR5380.c b/drivers/scsi/NCR5380.c index d40ba0bd68a3..23392ae7df8b 100644 --- a/drivers/scsi/NCR5380.c +++ b/drivers/scsi/NCR5380.c | |||
| @@ -91,7 +91,7 @@ | |||
| 91 | #ifndef NDEBUG | 91 | #ifndef NDEBUG |
| 92 | #define NDEBUG 0 | 92 | #define NDEBUG 0 |
| 93 | #endif | 93 | #endif |
| 94 | #ifndef NDEBUG | 94 | #ifndef NDEBUG_ABORT |
| 95 | #define NDEBUG_ABORT 0 | 95 | #define NDEBUG_ABORT 0 |
| 96 | #endif | 96 | #endif |
| 97 | 97 | ||
diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h index 4a99d2f000f4..d54b1cc88d0d 100644 --- a/drivers/scsi/aacraid/aacraid.h +++ b/drivers/scsi/aacraid/aacraid.h | |||
| @@ -19,7 +19,7 @@ | |||
| 19 | #define AAC_MAX_LUN (8) | 19 | #define AAC_MAX_LUN (8) |
| 20 | 20 | ||
| 21 | #define AAC_MAX_HOSTPHYSMEMPAGES (0xfffff) | 21 | #define AAC_MAX_HOSTPHYSMEMPAGES (0xfffff) |
| 22 | #define AAC_MAX_32BIT_SGBCOUNT ((unsigned short)512) | 22 | #define AAC_MAX_32BIT_SGBCOUNT ((unsigned short)256) |
| 23 | 23 | ||
| 24 | /* | 24 | /* |
| 25 | * These macros convert from physical channels to virtual channels | 25 | * These macros convert from physical channels to virtual channels |
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 8982978c42fd..7aec93f9d423 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c | |||
| @@ -1325,6 +1325,8 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info) | |||
| 1325 | ha->brd_info = brd_info; | 1325 | ha->brd_info = brd_info; |
| 1326 | sprintf(ha->host_str, "%s_%ld", ha->brd_info->drv_name, ha->host_no); | 1326 | sprintf(ha->host_str, "%s_%ld", ha->brd_info->drv_name, ha->host_no); |
| 1327 | 1327 | ||
| 1328 | ha->dpc_pid = -1; | ||
| 1329 | |||
| 1328 | /* Configure PCI I/O space */ | 1330 | /* Configure PCI I/O space */ |
| 1329 | ret = qla2x00_iospace_config(ha); | 1331 | ret = qla2x00_iospace_config(ha); |
| 1330 | if (ret) | 1332 | if (ret) |
| @@ -1448,7 +1450,6 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info) | |||
| 1448 | */ | 1450 | */ |
| 1449 | spin_lock_init(&ha->mbx_reg_lock); | 1451 | spin_lock_init(&ha->mbx_reg_lock); |
| 1450 | 1452 | ||
| 1451 | ha->dpc_pid = -1; | ||
| 1452 | init_completion(&ha->dpc_inited); | 1453 | init_completion(&ha->dpc_inited); |
| 1453 | init_completion(&ha->dpc_exited); | 1454 | init_completion(&ha->dpc_exited); |
| 1454 | 1455 | ||
diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c index 64fc9e21f35b..e69477d1889b 100644 --- a/drivers/scsi/scsi_devinfo.c +++ b/drivers/scsi/scsi_devinfo.c | |||
| @@ -185,6 +185,7 @@ static struct { | |||
| 185 | {"PIONEER", "CD-ROM DRM-600", NULL, BLIST_FORCELUN | BLIST_SINGLELUN}, | 185 | {"PIONEER", "CD-ROM DRM-600", NULL, BLIST_FORCELUN | BLIST_SINGLELUN}, |
| 186 | {"PIONEER", "CD-ROM DRM-602X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN}, | 186 | {"PIONEER", "CD-ROM DRM-602X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN}, |
| 187 | {"PIONEER", "CD-ROM DRM-604X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN}, | 187 | {"PIONEER", "CD-ROM DRM-604X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN}, |
| 188 | {"PIONEER", "CD-ROM DRM-624X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN}, | ||
| 188 | {"REGAL", "CDC-4X", NULL, BLIST_MAX5LUN | BLIST_SINGLELUN}, | 189 | {"REGAL", "CDC-4X", NULL, BLIST_MAX5LUN | BLIST_SINGLELUN}, |
| 189 | {"SanDisk", "ImageMate CF-SD1", NULL, BLIST_FORCELUN}, | 190 | {"SanDisk", "ImageMate CF-SD1", NULL, BLIST_FORCELUN}, |
| 190 | {"SEAGATE", "ST34555N", "0930", BLIST_NOTQ}, /* Chokes on tagged INQUIRY */ | 191 | {"SEAGATE", "ST34555N", "0930", BLIST_NOTQ}, /* Chokes on tagged INQUIRY */ |
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index dc9c772bc874..0074f28c37b2 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
| @@ -97,7 +97,6 @@ int scsi_insert_special_req(struct scsi_request *sreq, int at_head) | |||
| 97 | } | 97 | } |
| 98 | 98 | ||
| 99 | static void scsi_run_queue(struct request_queue *q); | 99 | static void scsi_run_queue(struct request_queue *q); |
| 100 | static void scsi_release_buffers(struct scsi_cmnd *cmd); | ||
| 101 | 100 | ||
| 102 | /* | 101 | /* |
| 103 | * Function: scsi_unprep_request() | 102 | * Function: scsi_unprep_request() |
| @@ -1040,8 +1039,10 @@ static int scsi_init_io(struct scsi_cmnd *cmd) | |||
| 1040 | * if sg table allocation fails, requeue request later. | 1039 | * if sg table allocation fails, requeue request later. |
| 1041 | */ | 1040 | */ |
| 1042 | sgpnt = scsi_alloc_sgtable(cmd, GFP_ATOMIC); | 1041 | sgpnt = scsi_alloc_sgtable(cmd, GFP_ATOMIC); |
| 1043 | if (unlikely(!sgpnt)) | 1042 | if (unlikely(!sgpnt)) { |
| 1043 | scsi_unprep_request(req); | ||
| 1044 | return BLKPREP_DEFER; | 1044 | return BLKPREP_DEFER; |
| 1045 | } | ||
| 1045 | 1046 | ||
| 1046 | cmd->request_buffer = (char *) sgpnt; | 1047 | cmd->request_buffer = (char *) sgpnt; |
| 1047 | cmd->request_bufflen = req->nr_sectors << 9; | 1048 | cmd->request_bufflen = req->nr_sectors << 9; |
| @@ -1245,8 +1246,8 @@ static int scsi_prep_fn(struct request_queue *q, struct request *req) | |||
| 1245 | */ | 1246 | */ |
| 1246 | ret = scsi_init_io(cmd); | 1247 | ret = scsi_init_io(cmd); |
| 1247 | switch(ret) { | 1248 | switch(ret) { |
| 1249 | /* For BLKPREP_KILL/DEFER the cmd was released */ | ||
| 1248 | case BLKPREP_KILL: | 1250 | case BLKPREP_KILL: |
| 1249 | /* BLKPREP_KILL return also releases the command */ | ||
| 1250 | goto kill; | 1251 | goto kill; |
| 1251 | case BLKPREP_DEFER: | 1252 | case BLKPREP_DEFER: |
| 1252 | goto defer; | 1253 | goto defer; |
diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c index 2cab556b6e82..771e97ef136e 100644 --- a/drivers/scsi/scsi_transport_fc.c +++ b/drivers/scsi/scsi_transport_fc.c | |||
| @@ -819,12 +819,15 @@ show_fc_private_host_tgtid_bind_type(struct class_device *cdev, char *buf) | |||
| 819 | return snprintf(buf, FC_BINDTYPE_MAX_NAMELEN, "%s\n", name); | 819 | return snprintf(buf, FC_BINDTYPE_MAX_NAMELEN, "%s\n", name); |
| 820 | } | 820 | } |
| 821 | 821 | ||
| 822 | #define get_list_head_entry(pos, head, member) \ | ||
| 823 | pos = list_entry((head)->next, typeof(*pos), member) | ||
| 824 | |||
| 822 | static ssize_t | 825 | static ssize_t |
| 823 | store_fc_private_host_tgtid_bind_type(struct class_device *cdev, | 826 | store_fc_private_host_tgtid_bind_type(struct class_device *cdev, |
| 824 | const char *buf, size_t count) | 827 | const char *buf, size_t count) |
| 825 | { | 828 | { |
| 826 | struct Scsi_Host *shost = transport_class_to_shost(cdev); | 829 | struct Scsi_Host *shost = transport_class_to_shost(cdev); |
| 827 | struct fc_rport *rport, *next_rport; | 830 | struct fc_rport *rport; |
| 828 | enum fc_tgtid_binding_type val; | 831 | enum fc_tgtid_binding_type val; |
| 829 | unsigned long flags; | 832 | unsigned long flags; |
| 830 | 833 | ||
| @@ -834,9 +837,13 @@ store_fc_private_host_tgtid_bind_type(struct class_device *cdev, | |||
| 834 | /* if changing bind type, purge all unused consistent bindings */ | 837 | /* if changing bind type, purge all unused consistent bindings */ |
| 835 | if (val != fc_host_tgtid_bind_type(shost)) { | 838 | if (val != fc_host_tgtid_bind_type(shost)) { |
| 836 | spin_lock_irqsave(shost->host_lock, flags); | 839 | spin_lock_irqsave(shost->host_lock, flags); |
| 837 | list_for_each_entry_safe(rport, next_rport, | 840 | while (!list_empty(&fc_host_rport_bindings(shost))) { |
| 838 | &fc_host_rport_bindings(shost), peers) | 841 | get_list_head_entry(rport, |
| 842 | &fc_host_rport_bindings(shost), peers); | ||
| 843 | spin_unlock_irqrestore(shost->host_lock, flags); | ||
| 839 | fc_rport_terminate(rport); | 844 | fc_rport_terminate(rport); |
| 845 | spin_lock_irqsave(shost->host_lock, flags); | ||
| 846 | } | ||
| 840 | spin_unlock_irqrestore(shost->host_lock, flags); | 847 | spin_unlock_irqrestore(shost->host_lock, flags); |
| 841 | } | 848 | } |
| 842 | 849 | ||
diff --git a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c index 0e21f583690e..5c3c03932d6d 100644 --- a/drivers/serial/8250_pci.c +++ b/drivers/serial/8250_pci.c | |||
| @@ -152,6 +152,7 @@ static int __devinit pci_hp_diva_init(struct pci_dev *dev) | |||
| 152 | rc = 4; | 152 | rc = 4; |
| 153 | break; | 153 | break; |
| 154 | case PCI_DEVICE_ID_HP_DIVA_POWERBAR: | 154 | case PCI_DEVICE_ID_HP_DIVA_POWERBAR: |
| 155 | case PCI_DEVICE_ID_HP_DIVA_HURRICANE: | ||
| 155 | rc = 1; | 156 | rc = 1; |
| 156 | break; | 157 | break; |
| 157 | } | 158 | } |
| @@ -226,8 +227,10 @@ static int __devinit pci_plx9050_init(struct pci_dev *dev) | |||
| 226 | } | 227 | } |
| 227 | 228 | ||
| 228 | irq_config = 0x41; | 229 | irq_config = 0x41; |
| 229 | if (dev->vendor == PCI_VENDOR_ID_PANACOM) | 230 | if (dev->vendor == PCI_VENDOR_ID_PANACOM || |
| 231 | dev->subsystem_vendor == PCI_SUBVENDOR_ID_EXSYS) { | ||
| 230 | irq_config = 0x43; | 232 | irq_config = 0x43; |
| 233 | } | ||
| 231 | if ((dev->vendor == PCI_VENDOR_ID_PLX) && | 234 | if ((dev->vendor == PCI_VENDOR_ID_PLX) && |
| 232 | (dev->device == PCI_DEVICE_ID_PLX_ROMULUS)) { | 235 | (dev->device == PCI_DEVICE_ID_PLX_ROMULUS)) { |
| 233 | /* | 236 | /* |
| @@ -664,6 +667,15 @@ static struct pci_serial_quirk pci_serial_quirks[] = { | |||
| 664 | { | 667 | { |
| 665 | .vendor = PCI_VENDOR_ID_PLX, | 668 | .vendor = PCI_VENDOR_ID_PLX, |
| 666 | .device = PCI_DEVICE_ID_PLX_9050, | 669 | .device = PCI_DEVICE_ID_PLX_9050, |
| 670 | .subvendor = PCI_SUBVENDOR_ID_EXSYS, | ||
| 671 | .subdevice = PCI_SUBDEVICE_ID_EXSYS_4055, | ||
| 672 | .init = pci_plx9050_init, | ||
| 673 | .setup = pci_default_setup, | ||
| 674 | .exit = __devexit_p(pci_plx9050_exit), | ||
| 675 | }, | ||
| 676 | { | ||
| 677 | .vendor = PCI_VENDOR_ID_PLX, | ||
| 678 | .device = PCI_DEVICE_ID_PLX_9050, | ||
| 667 | .subvendor = PCI_SUBVENDOR_ID_KEYSPAN, | 679 | .subvendor = PCI_SUBVENDOR_ID_KEYSPAN, |
| 668 | .subdevice = PCI_SUBDEVICE_ID_KEYSPAN_SX2, | 680 | .subdevice = PCI_SUBDEVICE_ID_KEYSPAN_SX2, |
| 669 | .init = pci_plx9050_init, | 681 | .init = pci_plx9050_init, |
| @@ -927,6 +939,7 @@ enum pci_board_num_t { | |||
| 927 | pbn_panacom, | 939 | pbn_panacom, |
| 928 | pbn_panacom2, | 940 | pbn_panacom2, |
| 929 | pbn_panacom4, | 941 | pbn_panacom4, |
| 942 | pbn_exsys_4055, | ||
| 930 | pbn_plx_romulus, | 943 | pbn_plx_romulus, |
| 931 | pbn_oxsemi, | 944 | pbn_oxsemi, |
| 932 | pbn_intel_i960, | 945 | pbn_intel_i960, |
| @@ -1292,6 +1305,13 @@ static struct pciserial_board pci_boards[] __devinitdata = { | |||
| 1292 | .reg_shift = 7, | 1305 | .reg_shift = 7, |
| 1293 | }, | 1306 | }, |
| 1294 | 1307 | ||
| 1308 | [pbn_exsys_4055] = { | ||
| 1309 | .flags = FL_BASE2, | ||
| 1310 | .num_ports = 4, | ||
| 1311 | .base_baud = 115200, | ||
| 1312 | .uart_offset = 8, | ||
| 1313 | }, | ||
| 1314 | |||
| 1295 | /* I think this entry is broken - the first_offset looks wrong --rmk */ | 1315 | /* I think this entry is broken - the first_offset looks wrong --rmk */ |
| 1296 | [pbn_plx_romulus] = { | 1316 | [pbn_plx_romulus] = { |
| 1297 | .flags = FL_BASE2, | 1317 | .flags = FL_BASE2, |
| @@ -1853,6 +1873,10 @@ static struct pci_device_id serial_pci_tbl[] = { | |||
| 1853 | PCI_SUBVENDOR_ID_CHASE_PCIRAS, | 1873 | PCI_SUBVENDOR_ID_CHASE_PCIRAS, |
| 1854 | PCI_SUBDEVICE_ID_CHASE_PCIRAS8, 0, 0, | 1874 | PCI_SUBDEVICE_ID_CHASE_PCIRAS8, 0, 0, |
| 1855 | pbn_b2_8_460800 }, | 1875 | pbn_b2_8_460800 }, |
| 1876 | { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, | ||
| 1877 | PCI_SUBVENDOR_ID_EXSYS, | ||
| 1878 | PCI_SUBDEVICE_ID_EXSYS_4055, 0, 0, | ||
| 1879 | pbn_exsys_4055 }, | ||
| 1856 | /* | 1880 | /* |
| 1857 | * Megawolf Romulus PCI Serial Card, from Mike Hudson | 1881 | * Megawolf Romulus PCI Serial Card, from Mike Hudson |
| 1858 | * (Exoray@isys.ca) | 1882 | * (Exoray@isys.ca) |
diff --git a/drivers/video/fbsysfs.c b/drivers/video/fbsysfs.c index 1147b899f007..007c8e9b2b39 100644 --- a/drivers/video/fbsysfs.c +++ b/drivers/video/fbsysfs.c | |||
| @@ -242,6 +242,13 @@ static ssize_t show_virtual(struct class_device *class_device, char *buf) | |||
| 242 | fb_info->var.yres_virtual); | 242 | fb_info->var.yres_virtual); |
| 243 | } | 243 | } |
| 244 | 244 | ||
| 245 | static ssize_t show_stride(struct class_device *class_device, char *buf) | ||
| 246 | { | ||
| 247 | struct fb_info *fb_info = | ||
| 248 | (struct fb_info *)class_get_devdata(class_device); | ||
| 249 | return snprintf(buf, PAGE_SIZE, "%d\n", fb_info->fix.line_length); | ||
| 250 | } | ||
| 251 | |||
| 245 | /* Format for cmap is "%02x%c%4x%4x%4x\n" */ | 252 | /* Format for cmap is "%02x%c%4x%4x%4x\n" */ |
| 246 | /* %02x entry %c transp %4x red %4x blue %4x green \n */ | 253 | /* %02x entry %c transp %4x red %4x blue %4x green \n */ |
| 247 | /* 256 rows at 16 chars equals 4096, the normal page size */ | 254 | /* 256 rows at 16 chars equals 4096, the normal page size */ |
| @@ -432,6 +439,7 @@ static struct class_device_attribute class_device_attrs[] = { | |||
| 432 | __ATTR(pan, S_IRUGO|S_IWUSR, show_pan, store_pan), | 439 | __ATTR(pan, S_IRUGO|S_IWUSR, show_pan, store_pan), |
| 433 | __ATTR(virtual_size, S_IRUGO|S_IWUSR, show_virtual, store_virtual), | 440 | __ATTR(virtual_size, S_IRUGO|S_IWUSR, show_virtual, store_virtual), |
| 434 | __ATTR(name, S_IRUGO, show_name, NULL), | 441 | __ATTR(name, S_IRUGO, show_name, NULL), |
| 442 | __ATTR(stride, S_IRUGO, show_stride, NULL), | ||
| 435 | }; | 443 | }; |
| 436 | 444 | ||
| 437 | int fb_init_class_device(struct fb_info *fb_info) | 445 | int fb_init_class_device(struct fb_info *fb_info) |
| @@ -1397,6 +1397,9 @@ static ssize_t aio_setup_iocb(struct kiocb *kiocb) | |||
| 1397 | if (unlikely(!access_ok(VERIFY_WRITE, kiocb->ki_buf, | 1397 | if (unlikely(!access_ok(VERIFY_WRITE, kiocb->ki_buf, |
| 1398 | kiocb->ki_left))) | 1398 | kiocb->ki_left))) |
| 1399 | break; | 1399 | break; |
| 1400 | ret = security_file_permission(file, MAY_READ); | ||
| 1401 | if (unlikely(ret)) | ||
| 1402 | break; | ||
| 1400 | ret = -EINVAL; | 1403 | ret = -EINVAL; |
| 1401 | if (file->f_op->aio_read) | 1404 | if (file->f_op->aio_read) |
| 1402 | kiocb->ki_retry = aio_pread; | 1405 | kiocb->ki_retry = aio_pread; |
| @@ -1409,6 +1412,9 @@ static ssize_t aio_setup_iocb(struct kiocb *kiocb) | |||
| 1409 | if (unlikely(!access_ok(VERIFY_READ, kiocb->ki_buf, | 1412 | if (unlikely(!access_ok(VERIFY_READ, kiocb->ki_buf, |
| 1410 | kiocb->ki_left))) | 1413 | kiocb->ki_left))) |
| 1411 | break; | 1414 | break; |
| 1415 | ret = security_file_permission(file, MAY_WRITE); | ||
| 1416 | if (unlikely(ret)) | ||
| 1417 | break; | ||
| 1412 | ret = -EINVAL; | 1418 | ret = -EINVAL; |
| 1413 | if (file->f_op->aio_write) | 1419 | if (file->f_op->aio_write) |
| 1414 | kiocb->ki_retry = aio_pwrite; | 1420 | kiocb->ki_retry = aio_pwrite; |
diff --git a/fs/hfsplus/super.c b/fs/hfsplus/super.c index fd0f0f050e1d..452fc1fdbd32 100644 --- a/fs/hfsplus/super.c +++ b/fs/hfsplus/super.c | |||
| @@ -50,6 +50,7 @@ static void hfsplus_read_inode(struct inode *inode) | |||
| 50 | init_MUTEX(&HFSPLUS_I(inode).extents_lock); | 50 | init_MUTEX(&HFSPLUS_I(inode).extents_lock); |
| 51 | HFSPLUS_I(inode).flags = 0; | 51 | HFSPLUS_I(inode).flags = 0; |
| 52 | HFSPLUS_I(inode).rsrc_inode = NULL; | 52 | HFSPLUS_I(inode).rsrc_inode = NULL; |
| 53 | atomic_set(&HFSPLUS_I(inode).opencnt, 0); | ||
| 53 | 54 | ||
| 54 | if (inode->i_ino >= HFSPLUS_FIRSTUSER_CNID) { | 55 | if (inode->i_ino >= HFSPLUS_FIRSTUSER_CNID) { |
| 55 | read_inode: | 56 | read_inode: |
diff --git a/fs/inotify.c b/fs/inotify.c index a37e9fb1da58..9fbaebfdf40b 100644 --- a/fs/inotify.c +++ b/fs/inotify.c | |||
| @@ -176,6 +176,7 @@ static inline void put_inotify_dev(struct inotify_device *dev) | |||
| 176 | if (atomic_dec_and_test(&dev->count)) { | 176 | if (atomic_dec_and_test(&dev->count)) { |
| 177 | atomic_dec(&dev->user->inotify_devs); | 177 | atomic_dec(&dev->user->inotify_devs); |
| 178 | free_uid(dev->user); | 178 | free_uid(dev->user); |
| 179 | idr_destroy(&dev->idr); | ||
| 179 | kfree(dev); | 180 | kfree(dev); |
| 180 | } | 181 | } |
| 181 | } | 182 | } |
diff --git a/include/asm-alpha/atomic.h b/include/asm-alpha/atomic.h index 1b383e3cb68c..20ac3d95ecd9 100644 --- a/include/asm-alpha/atomic.h +++ b/include/asm-alpha/atomic.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _ALPHA_ATOMIC_H | 1 | #ifndef _ALPHA_ATOMIC_H |
| 2 | #define _ALPHA_ATOMIC_H | 2 | #define _ALPHA_ATOMIC_H |
| 3 | 3 | ||
| 4 | #include <asm/barrier.h> | ||
| 5 | |||
| 4 | /* | 6 | /* |
| 5 | * Atomic operations that C can't guarantee us. Useful for | 7 | * Atomic operations that C can't guarantee us. Useful for |
| 6 | * resource counting etc... | 8 | * resource counting etc... |
| @@ -100,18 +102,19 @@ static __inline__ void atomic64_sub(long i, atomic64_t * v) | |||
| 100 | static __inline__ long atomic_add_return(int i, atomic_t * v) | 102 | static __inline__ long atomic_add_return(int i, atomic_t * v) |
| 101 | { | 103 | { |
| 102 | long temp, result; | 104 | long temp, result; |
| 105 | smp_mb(); | ||
| 103 | __asm__ __volatile__( | 106 | __asm__ __volatile__( |
| 104 | "1: ldl_l %0,%1\n" | 107 | "1: ldl_l %0,%1\n" |
| 105 | " addl %0,%3,%2\n" | 108 | " addl %0,%3,%2\n" |
| 106 | " addl %0,%3,%0\n" | 109 | " addl %0,%3,%0\n" |
| 107 | " stl_c %0,%1\n" | 110 | " stl_c %0,%1\n" |
| 108 | " beq %0,2f\n" | 111 | " beq %0,2f\n" |
| 109 | " mb\n" | ||
| 110 | ".subsection 2\n" | 112 | ".subsection 2\n" |
| 111 | "2: br 1b\n" | 113 | "2: br 1b\n" |
| 112 | ".previous" | 114 | ".previous" |
| 113 | :"=&r" (temp), "=m" (v->counter), "=&r" (result) | 115 | :"=&r" (temp), "=m" (v->counter), "=&r" (result) |
| 114 | :"Ir" (i), "m" (v->counter) : "memory"); | 116 | :"Ir" (i), "m" (v->counter) : "memory"); |
| 117 | smp_mb(); | ||
| 115 | return result; | 118 | return result; |
| 116 | } | 119 | } |
| 117 | 120 | ||
| @@ -120,54 +123,57 @@ static __inline__ long atomic_add_return(int i, atomic_t * v) | |||
| 120 | static __inline__ long atomic64_add_return(long i, atomic64_t * v) | 123 | static __inline__ long atomic64_add_return(long i, atomic64_t * v) |
| 121 | { | 124 | { |
| 122 | long temp, result; | 125 | long temp, result; |
| 126 | smp_mb(); | ||
| 123 | __asm__ __volatile__( | 127 | __asm__ __volatile__( |
| 124 | "1: ldq_l %0,%1\n" | 128 | "1: ldq_l %0,%1\n" |
| 125 | " addq %0,%3,%2\n" | 129 | " addq %0,%3,%2\n" |
| 126 | " addq %0,%3,%0\n" | 130 | " addq %0,%3,%0\n" |
| 127 | " stq_c %0,%1\n" | 131 | " stq_c %0,%1\n" |
| 128 | " beq %0,2f\n" | 132 | " beq %0,2f\n" |
| 129 | " mb\n" | ||
| 130 | ".subsection 2\n" | 133 | ".subsection 2\n" |
| 131 | "2: br 1b\n" | 134 | "2: br 1b\n" |
| 132 | ".previous" | 135 | ".previous" |
| 133 | :"=&r" (temp), "=m" (v->counter), "=&r" (result) | 136 | :"=&r" (temp), "=m" (v->counter), "=&r" (result) |
| 134 | :"Ir" (i), "m" (v->counter) : "memory"); | 137 | :"Ir" (i), "m" (v->counter) : "memory"); |
| 138 | smp_mb(); | ||
| 135 | return result; | 139 | return result; |
| 136 | } | 140 | } |
| 137 | 141 | ||
| 138 | static __inline__ long atomic_sub_return(int i, atomic_t * v) | 142 | static __inline__ long atomic_sub_return(int i, atomic_t * v) |
| 139 | { | 143 | { |
| 140 | long temp, result; | 144 | long temp, result; |
| 145 | smp_mb(); | ||
| 141 | __asm__ __volatile__( | 146 | __asm__ __volatile__( |
| 142 | "1: ldl_l %0,%1\n" | 147 | "1: ldl_l %0,%1\n" |
| 143 | " subl %0,%3,%2\n" | 148 | " subl %0,%3,%2\n" |
| 144 | " subl %0,%3,%0\n" | 149 | " subl %0,%3,%0\n" |
| 145 | " stl_c %0,%1\n" | 150 | " stl_c %0,%1\n" |
| 146 | " beq %0,2f\n" | 151 | " beq %0,2f\n" |
| 147 | " mb\n" | ||
| 148 | ".subsection 2\n" | 152 | ".subsection 2\n" |
| 149 | "2: br 1b\n" | 153 | "2: br 1b\n" |
| 150 | ".previous" | 154 | ".previous" |
| 151 | :"=&r" (temp), "=m" (v->counter), "=&r" (result) | 155 | :"=&r" (temp), "=m" (v->counter), "=&r" (result) |
| 152 | :"Ir" (i), "m" (v->counter) : "memory"); | 156 | :"Ir" (i), "m" (v->counter) : "memory"); |
| 157 | smp_mb(); | ||
| 153 | return result; | 158 | return result; |
| 154 | } | 159 | } |
| 155 | 160 | ||
| 156 | static __inline__ long atomic64_sub_return(long i, atomic64_t * v) | 161 | static __inline__ long atomic64_sub_return(long i, atomic64_t * v) |
| 157 | { | 162 | { |
| 158 | long temp, result; | 163 | long temp, result; |
| 164 | smp_mb(); | ||
| 159 | __asm__ __volatile__( | 165 | __asm__ __volatile__( |
| 160 | "1: ldq_l %0,%1\n" | 166 | "1: ldq_l %0,%1\n" |
| 161 | " subq %0,%3,%2\n" | 167 | " subq %0,%3,%2\n" |
| 162 | " subq %0,%3,%0\n" | 168 | " subq %0,%3,%0\n" |
| 163 | " stq_c %0,%1\n" | 169 | " stq_c %0,%1\n" |
| 164 | " beq %0,2f\n" | 170 | " beq %0,2f\n" |
| 165 | " mb\n" | ||
| 166 | ".subsection 2\n" | 171 | ".subsection 2\n" |
| 167 | "2: br 1b\n" | 172 | "2: br 1b\n" |
| 168 | ".previous" | 173 | ".previous" |
| 169 | :"=&r" (temp), "=m" (v->counter), "=&r" (result) | 174 | :"=&r" (temp), "=m" (v->counter), "=&r" (result) |
| 170 | :"Ir" (i), "m" (v->counter) : "memory"); | 175 | :"Ir" (i), "m" (v->counter) : "memory"); |
| 176 | smp_mb(); | ||
| 171 | return result; | 177 | return result; |
| 172 | } | 178 | } |
| 173 | 179 | ||
diff --git a/include/asm-alpha/barrier.h b/include/asm-alpha/barrier.h new file mode 100644 index 000000000000..229c83fe77cb --- /dev/null +++ b/include/asm-alpha/barrier.h | |||
| @@ -0,0 +1,34 @@ | |||
| 1 | #ifndef __BARRIER_H | ||
| 2 | #define __BARRIER_H | ||
| 3 | |||
| 4 | #define mb() \ | ||
| 5 | __asm__ __volatile__("mb": : :"memory") | ||
| 6 | |||
| 7 | #define rmb() \ | ||
| 8 | __asm__ __volatile__("mb": : :"memory") | ||
| 9 | |||
| 10 | #define wmb() \ | ||
| 11 | __asm__ __volatile__("wmb": : :"memory") | ||
| 12 | |||
| 13 | #define read_barrier_depends() \ | ||
| 14 | __asm__ __volatile__("mb": : :"memory") | ||
| 15 | |||
| 16 | #ifdef CONFIG_SMP | ||
| 17 | #define smp_mb() mb() | ||
| 18 | #define smp_rmb() rmb() | ||
| 19 | #define smp_wmb() wmb() | ||
| 20 | #define smp_read_barrier_depends() read_barrier_depends() | ||
| 21 | #else | ||
| 22 | #define smp_mb() barrier() | ||
| 23 | #define smp_rmb() barrier() | ||
| 24 | #define smp_wmb() barrier() | ||
| 25 | #define smp_read_barrier_depends() barrier() | ||
| 26 | #endif | ||
| 27 | |||
| 28 | #define set_mb(var, value) \ | ||
| 29 | do { var = value; mb(); } while (0) | ||
| 30 | |||
| 31 | #define set_wmb(var, value) \ | ||
| 32 | do { var = value; wmb(); } while (0) | ||
| 33 | |||
| 34 | #endif /* __BARRIER_H */ | ||
diff --git a/include/asm-alpha/system.h b/include/asm-alpha/system.h index bdb4d66418f1..050e86d12891 100644 --- a/include/asm-alpha/system.h +++ b/include/asm-alpha/system.h | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | #include <linux/config.h> | 4 | #include <linux/config.h> |
| 5 | #include <asm/pal.h> | 5 | #include <asm/pal.h> |
| 6 | #include <asm/page.h> | 6 | #include <asm/page.h> |
| 7 | #include <asm/barrier.h> | ||
| 7 | 8 | ||
| 8 | /* | 9 | /* |
| 9 | * System defines.. Note that this is included both from .c and .S | 10 | * System defines.. Note that this is included both from .c and .S |
| @@ -139,36 +140,6 @@ extern void halt(void) __attribute__((noreturn)); | |||
| 139 | struct task_struct; | 140 | struct task_struct; |
| 140 | extern struct task_struct *alpha_switch_to(unsigned long, struct task_struct*); | 141 | extern struct task_struct *alpha_switch_to(unsigned long, struct task_struct*); |
| 141 | 142 | ||
| 142 | #define mb() \ | ||
| 143 | __asm__ __volatile__("mb": : :"memory") | ||
| 144 | |||
| 145 | #define rmb() \ | ||
| 146 | __asm__ __volatile__("mb": : :"memory") | ||
| 147 | |||
| 148 | #define wmb() \ | ||
| 149 | __asm__ __volatile__("wmb": : :"memory") | ||
| 150 | |||
| 151 | #define read_barrier_depends() \ | ||
| 152 | __asm__ __volatile__("mb": : :"memory") | ||
| 153 | |||
| 154 | #ifdef CONFIG_SMP | ||
| 155 | #define smp_mb() mb() | ||
| 156 | #define smp_rmb() rmb() | ||
| 157 | #define smp_wmb() wmb() | ||
| 158 | #define smp_read_barrier_depends() read_barrier_depends() | ||
| 159 | #else | ||
| 160 | #define smp_mb() barrier() | ||
| 161 | #define smp_rmb() barrier() | ||
| 162 | #define smp_wmb() barrier() | ||
| 163 | #define smp_read_barrier_depends() barrier() | ||
| 164 | #endif | ||
| 165 | |||
| 166 | #define set_mb(var, value) \ | ||
| 167 | do { var = value; mb(); } while (0) | ||
| 168 | |||
| 169 | #define set_wmb(var, value) \ | ||
| 170 | do { var = value; wmb(); } while (0) | ||
| 171 | |||
| 172 | #define imb() \ | 143 | #define imb() \ |
| 173 | __asm__ __volatile__ ("call_pal %0 #imb" : : "i" (PAL_imb) : "memory") | 144 | __asm__ __volatile__ ("call_pal %0 #imb" : : "i" (PAL_imb) : "memory") |
| 174 | 145 | ||
diff --git a/include/asm-arm/bitops.h b/include/asm-arm/bitops.h index aad7aad026b3..e007dd990da5 100644 --- a/include/asm-arm/bitops.h +++ b/include/asm-arm/bitops.h | |||
| @@ -347,7 +347,6 @@ static inline unsigned long __ffs(unsigned long word) | |||
| 347 | * the clz instruction for much better code efficiency. | 347 | * the clz instruction for much better code efficiency. |
| 348 | */ | 348 | */ |
| 349 | 349 | ||
| 350 | static __inline__ int generic_fls(int x); | ||
| 351 | #define fls(x) \ | 350 | #define fls(x) \ |
| 352 | ( __builtin_constant_p(x) ? generic_fls(x) : \ | 351 | ( __builtin_constant_p(x) ? generic_fls(x) : \ |
| 353 | ({ int __r; asm("clz\t%0, %1" : "=r"(__r) : "r"(x) : "cc"); 32-__r; }) ) | 352 | ({ int __r; asm("clz\t%0, %1" : "=r"(__r) : "r"(x) : "cc"); 32-__r; }) ) |
diff --git a/include/linux/idr.h b/include/linux/idr.h index ca3b7e462576..3d5de45f961b 100644 --- a/include/linux/idr.h +++ b/include/linux/idr.h | |||
| @@ -75,4 +75,5 @@ int idr_pre_get(struct idr *idp, unsigned gfp_mask); | |||
| 75 | int idr_get_new(struct idr *idp, void *ptr, int *id); | 75 | int idr_get_new(struct idr *idp, void *ptr, int *id); |
| 76 | int idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id); | 76 | int idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id); |
| 77 | void idr_remove(struct idr *idp, int id); | 77 | void idr_remove(struct idr *idp, int id); |
| 78 | void idr_destroy(struct idr *idp); | ||
| 78 | void idr_init(struct idr *idp); | 79 | void idr_init(struct idr *idp); |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index f74ed9462475..71834f05504f 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -723,6 +723,7 @@ | |||
| 723 | #define PCI_DEVICE_ID_HP_DIVA_EVEREST 0x1282 | 723 | #define PCI_DEVICE_ID_HP_DIVA_EVEREST 0x1282 |
| 724 | #define PCI_DEVICE_ID_HP_DIVA_AUX 0x1290 | 724 | #define PCI_DEVICE_ID_HP_DIVA_AUX 0x1290 |
| 725 | #define PCI_DEVICE_ID_HP_DIVA_RMP3 0x1301 | 725 | #define PCI_DEVICE_ID_HP_DIVA_RMP3 0x1301 |
| 726 | #define PCI_DEVICE_ID_HP_DIVA_HURRICANE 0x132a | ||
| 726 | #define PCI_DEVICE_ID_HP_CISS 0x3210 | 727 | #define PCI_DEVICE_ID_HP_CISS 0x3210 |
| 727 | #define PCI_DEVICE_ID_HP_CISSA 0x3220 | 728 | #define PCI_DEVICE_ID_HP_CISSA 0x3220 |
| 728 | #define PCI_DEVICE_ID_HP_CISSB 0x3222 | 729 | #define PCI_DEVICE_ID_HP_CISSB 0x3222 |
| @@ -2696,6 +2697,7 @@ | |||
| 2696 | 2697 | ||
| 2697 | #define PCI_SUBVENDOR_ID_EXSYS 0xd84d | 2698 | #define PCI_SUBVENDOR_ID_EXSYS 0xd84d |
| 2698 | #define PCI_SUBDEVICE_ID_EXSYS_4014 0x4014 | 2699 | #define PCI_SUBDEVICE_ID_EXSYS_4014 0x4014 |
| 2700 | #define PCI_SUBDEVICE_ID_EXSYS_4055 0x4055 | ||
| 2699 | 2701 | ||
| 2700 | #define PCI_VENDOR_ID_TIGERJET 0xe159 | 2702 | #define PCI_VENDOR_ID_TIGERJET 0xe159 |
| 2701 | #define PCI_DEVICE_ID_TIGERJET_300 0x0001 | 2703 | #define PCI_DEVICE_ID_TIGERJET_300 0x0001 |
diff --git a/include/net/ax25.h b/include/net/ax25.h index 9dbcd9e51c00..30bb4a893237 100644 --- a/include/net/ax25.h +++ b/include/net/ax25.h | |||
| @@ -171,7 +171,7 @@ typedef struct { | |||
| 171 | ax25_address calls[AX25_MAX_DIGIS]; | 171 | ax25_address calls[AX25_MAX_DIGIS]; |
| 172 | unsigned char repeated[AX25_MAX_DIGIS]; | 172 | unsigned char repeated[AX25_MAX_DIGIS]; |
| 173 | unsigned char ndigi; | 173 | unsigned char ndigi; |
| 174 | char lastrepeat; | 174 | signed char lastrepeat; |
| 175 | } ax25_digi; | 175 | } ax25_digi; |
| 176 | 176 | ||
| 177 | typedef struct ax25_route { | 177 | typedef struct ax25_route { |
diff --git a/include/net/llc_pdu.h b/include/net/llc_pdu.h index f45c37d89cf7..c7a959428b4f 100644 --- a/include/net/llc_pdu.h +++ b/include/net/llc_pdu.h | |||
| @@ -254,8 +254,10 @@ static inline void llc_pdu_decode_sa(struct sk_buff *skb, u8 *sa) | |||
| 254 | { | 254 | { |
| 255 | if (skb->protocol == ntohs(ETH_P_802_2)) | 255 | if (skb->protocol == ntohs(ETH_P_802_2)) |
| 256 | memcpy(sa, eth_hdr(skb)->h_source, ETH_ALEN); | 256 | memcpy(sa, eth_hdr(skb)->h_source, ETH_ALEN); |
| 257 | else if (skb->protocol == ntohs(ETH_P_TR_802_2)) | 257 | else if (skb->protocol == ntohs(ETH_P_TR_802_2)) { |
| 258 | memcpy(sa, tr_hdr(skb)->saddr, ETH_ALEN); | 258 | memcpy(sa, tr_hdr(skb)->saddr, ETH_ALEN); |
| 259 | *sa &= 0x7F; | ||
| 260 | } | ||
| 259 | } | 261 | } |
| 260 | 262 | ||
| 261 | /** | 263 | /** |
diff --git a/kernel/exit.c b/kernel/exit.c index 3b25b182d2be..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, |
diff --git a/kernel/posix-cpu-timers.c b/kernel/posix-cpu-timers.c index 7a51a5597c33..383ba22f0b62 100644 --- a/kernel/posix-cpu-timers.c +++ b/kernel/posix-cpu-timers.c | |||
| @@ -91,7 +91,7 @@ static inline union cpu_time_count cpu_time_sub(clockid_t which_clock, | |||
| 91 | * Update expiry time from increment, and increase overrun count, | 91 | * Update expiry time from increment, and increase overrun count, |
| 92 | * given the current clock sample. | 92 | * given the current clock sample. |
| 93 | */ | 93 | */ |
| 94 | static inline void bump_cpu_timer(struct k_itimer *timer, | 94 | static void bump_cpu_timer(struct k_itimer *timer, |
| 95 | union cpu_time_count now) | 95 | union cpu_time_count now) |
| 96 | { | 96 | { |
| 97 | int i; | 97 | int i; |
| @@ -110,7 +110,7 @@ static inline void bump_cpu_timer(struct k_itimer *timer, | |||
| 110 | for (i = 0; incr < delta - incr; i++) | 110 | for (i = 0; incr < delta - incr; i++) |
| 111 | incr = incr << 1; | 111 | incr = incr << 1; |
| 112 | for (; i >= 0; incr >>= 1, i--) { | 112 | for (; i >= 0; incr >>= 1, i--) { |
| 113 | if (delta <= incr) | 113 | if (delta < incr) |
| 114 | continue; | 114 | continue; |
| 115 | timer->it.cpu.expires.sched += incr; | 115 | timer->it.cpu.expires.sched += incr; |
| 116 | timer->it_overrun += 1 << i; | 116 | timer->it_overrun += 1 << i; |
| @@ -128,7 +128,7 @@ static inline void bump_cpu_timer(struct k_itimer *timer, | |||
| 128 | for (i = 0; cputime_lt(incr, cputime_sub(delta, incr)); i++) | 128 | for (i = 0; cputime_lt(incr, cputime_sub(delta, incr)); i++) |
| 129 | incr = cputime_add(incr, incr); | 129 | incr = cputime_add(incr, incr); |
| 130 | for (; i >= 0; incr = cputime_halve(incr), i--) { | 130 | for (; i >= 0; incr = cputime_halve(incr), i--) { |
| 131 | if (cputime_le(delta, incr)) | 131 | if (cputime_lt(delta, incr)) |
| 132 | continue; | 132 | continue; |
| 133 | timer->it.cpu.expires.cpu = | 133 | timer->it.cpu.expires.cpu = |
| 134 | cputime_add(timer->it.cpu.expires.cpu, incr); | 134 | cputime_add(timer->it.cpu.expires.cpu, incr); |
| @@ -380,14 +380,9 @@ 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 | |||
| 387 | if (unlikely(p == NULL)) | ||
| 388 | return 0; | ||
| 389 | |||
| 390 | if (!list_empty(&timer->it.cpu.entry)) { | ||
| 391 | read_lock(&tasklist_lock); | 386 | read_lock(&tasklist_lock); |
| 392 | if (unlikely(p->signal == NULL)) { | 387 | if (unlikely(p->signal == NULL)) { |
| 393 | /* | 388 | /* |
| @@ -396,18 +391,20 @@ int posix_cpu_timer_del(struct k_itimer *timer) | |||
| 396 | */ | 391 | */ |
| 397 | BUG_ON(!list_empty(&timer->it.cpu.entry)); | 392 | BUG_ON(!list_empty(&timer->it.cpu.entry)); |
| 398 | } else { | 393 | } else { |
| 399 | /* | ||
| 400 | * Take us off the task's timer list. | ||
| 401 | */ | ||
| 402 | spin_lock(&p->sighand->siglock); | 394 | spin_lock(&p->sighand->siglock); |
| 403 | list_del(&timer->it.cpu.entry); | 395 | if (timer->it.cpu.firing) |
| 396 | ret = TIMER_RETRY; | ||
| 397 | else | ||
| 398 | list_del(&timer->it.cpu.entry); | ||
| 404 | spin_unlock(&p->sighand->siglock); | 399 | spin_unlock(&p->sighand->siglock); |
| 405 | } | 400 | } |
| 406 | read_unlock(&tasklist_lock); | 401 | read_unlock(&tasklist_lock); |
| 402 | |||
| 403 | if (!ret) | ||
| 404 | put_task_struct(p); | ||
| 407 | } | 405 | } |
| 408 | put_task_struct(p); | ||
| 409 | 406 | ||
| 410 | return 0; | 407 | return ret; |
| 411 | } | 408 | } |
| 412 | 409 | ||
| 413 | /* | 410 | /* |
| @@ -424,8 +421,6 @@ static void cleanup_timers(struct list_head *head, | |||
| 424 | cputime_t ptime = cputime_add(utime, stime); | 421 | cputime_t ptime = cputime_add(utime, stime); |
| 425 | 422 | ||
| 426 | list_for_each_entry_safe(timer, next, head, entry) { | 423 | list_for_each_entry_safe(timer, next, head, entry) { |
| 427 | put_task_struct(timer->task); | ||
| 428 | timer->task = NULL; | ||
| 429 | list_del_init(&timer->entry); | 424 | list_del_init(&timer->entry); |
| 430 | if (cputime_lt(timer->expires.cpu, ptime)) { | 425 | if (cputime_lt(timer->expires.cpu, ptime)) { |
| 431 | timer->expires.cpu = cputime_zero; | 426 | timer->expires.cpu = cputime_zero; |
| @@ -437,8 +432,6 @@ static void cleanup_timers(struct list_head *head, | |||
| 437 | 432 | ||
| 438 | ++head; | 433 | ++head; |
| 439 | list_for_each_entry_safe(timer, next, head, entry) { | 434 | list_for_each_entry_safe(timer, next, head, entry) { |
| 440 | put_task_struct(timer->task); | ||
| 441 | timer->task = NULL; | ||
| 442 | list_del_init(&timer->entry); | 435 | list_del_init(&timer->entry); |
| 443 | if (cputime_lt(timer->expires.cpu, utime)) { | 436 | if (cputime_lt(timer->expires.cpu, utime)) { |
| 444 | timer->expires.cpu = cputime_zero; | 437 | timer->expires.cpu = cputime_zero; |
| @@ -450,8 +443,6 @@ static void cleanup_timers(struct list_head *head, | |||
| 450 | 443 | ||
| 451 | ++head; | 444 | ++head; |
| 452 | list_for_each_entry_safe(timer, next, head, entry) { | 445 | list_for_each_entry_safe(timer, next, head, entry) { |
| 453 | put_task_struct(timer->task); | ||
| 454 | timer->task = NULL; | ||
| 455 | list_del_init(&timer->entry); | 446 | list_del_init(&timer->entry); |
| 456 | if (timer->expires.sched < sched_time) { | 447 | if (timer->expires.sched < sched_time) { |
| 457 | timer->expires.sched = 0; | 448 | timer->expires.sched = 0; |
| @@ -495,6 +486,9 @@ static void process_timer_rebalance(struct task_struct *p, | |||
| 495 | struct task_struct *t = p; | 486 | struct task_struct *t = p; |
| 496 | unsigned int nthreads = atomic_read(&p->signal->live); | 487 | unsigned int nthreads = atomic_read(&p->signal->live); |
| 497 | 488 | ||
| 489 | if (!nthreads) | ||
| 490 | return; | ||
| 491 | |||
| 498 | switch (clock_idx) { | 492 | switch (clock_idx) { |
| 499 | default: | 493 | default: |
| 500 | BUG(); | 494 | BUG(); |
| @@ -582,17 +576,15 @@ static void arm_timer(struct k_itimer *timer, union cpu_time_count now) | |||
| 582 | listpos = head; | 576 | listpos = head; |
| 583 | if (CPUCLOCK_WHICH(timer->it_clock) == CPUCLOCK_SCHED) { | 577 | if (CPUCLOCK_WHICH(timer->it_clock) == CPUCLOCK_SCHED) { |
| 584 | list_for_each_entry(next, head, entry) { | 578 | list_for_each_entry(next, head, entry) { |
| 585 | if (next->expires.sched > nt->expires.sched) { | 579 | if (next->expires.sched > nt->expires.sched) |
| 586 | listpos = &next->entry; | ||
| 587 | break; | 580 | break; |
| 588 | } | 581 | listpos = &next->entry; |
| 589 | } | 582 | } |
| 590 | } else { | 583 | } else { |
| 591 | list_for_each_entry(next, head, entry) { | 584 | list_for_each_entry(next, head, entry) { |
| 592 | if (cputime_gt(next->expires.cpu, nt->expires.cpu)) { | 585 | if (cputime_gt(next->expires.cpu, nt->expires.cpu)) |
| 593 | listpos = &next->entry; | ||
| 594 | break; | 586 | break; |
| 595 | } | 587 | listpos = &next->entry; |
| 596 | } | 588 | } |
| 597 | } | 589 | } |
| 598 | list_add(&nt->entry, listpos); | 590 | list_add(&nt->entry, listpos); |
| @@ -736,9 +728,15 @@ int posix_cpu_timer_set(struct k_itimer *timer, int flags, | |||
| 736 | * Disarm any old timer after extracting its expiry time. | 728 | * Disarm any old timer after extracting its expiry time. |
| 737 | */ | 729 | */ |
| 738 | BUG_ON(!irqs_disabled()); | 730 | BUG_ON(!irqs_disabled()); |
| 731 | |||
| 732 | ret = 0; | ||
| 739 | spin_lock(&p->sighand->siglock); | 733 | spin_lock(&p->sighand->siglock); |
| 740 | old_expires = timer->it.cpu.expires; | 734 | old_expires = timer->it.cpu.expires; |
| 741 | list_del_init(&timer->it.cpu.entry); | 735 | if (unlikely(timer->it.cpu.firing)) { |
| 736 | timer->it.cpu.firing = -1; | ||
| 737 | ret = TIMER_RETRY; | ||
| 738 | } else | ||
| 739 | list_del_init(&timer->it.cpu.entry); | ||
| 742 | spin_unlock(&p->sighand->siglock); | 740 | spin_unlock(&p->sighand->siglock); |
| 743 | 741 | ||
| 744 | /* | 742 | /* |
| @@ -786,7 +784,7 @@ int posix_cpu_timer_set(struct k_itimer *timer, int flags, | |||
| 786 | } | 784 | } |
| 787 | } | 785 | } |
| 788 | 786 | ||
| 789 | if (unlikely(timer->it.cpu.firing)) { | 787 | if (unlikely(ret)) { |
| 790 | /* | 788 | /* |
| 791 | * We are colliding with the timer actually firing. | 789 | * We are colliding with the timer actually firing. |
| 792 | * Punt after filling in the timer's old value, and | 790 | * Punt after filling in the timer's old value, and |
| @@ -794,8 +792,6 @@ int posix_cpu_timer_set(struct k_itimer *timer, int flags, | |||
| 794 | * it as an overrun (thanks to bump_cpu_timer above). | 792 | * it as an overrun (thanks to bump_cpu_timer above). |
| 795 | */ | 793 | */ |
| 796 | read_unlock(&tasklist_lock); | 794 | read_unlock(&tasklist_lock); |
| 797 | timer->it.cpu.firing = -1; | ||
| 798 | ret = TIMER_RETRY; | ||
| 799 | goto out; | 795 | goto out; |
| 800 | } | 796 | } |
| 801 | 797 | ||
| @@ -961,14 +957,16 @@ void posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec *itp) | |||
| 961 | static void check_thread_timers(struct task_struct *tsk, | 957 | static void check_thread_timers(struct task_struct *tsk, |
| 962 | struct list_head *firing) | 958 | struct list_head *firing) |
| 963 | { | 959 | { |
| 960 | int maxfire; | ||
| 964 | struct list_head *timers = tsk->cpu_timers; | 961 | struct list_head *timers = tsk->cpu_timers; |
| 965 | 962 | ||
| 963 | maxfire = 20; | ||
| 966 | tsk->it_prof_expires = cputime_zero; | 964 | tsk->it_prof_expires = cputime_zero; |
| 967 | while (!list_empty(timers)) { | 965 | while (!list_empty(timers)) { |
| 968 | struct cpu_timer_list *t = list_entry(timers->next, | 966 | struct cpu_timer_list *t = list_entry(timers->next, |
| 969 | struct cpu_timer_list, | 967 | struct cpu_timer_list, |
| 970 | entry); | 968 | entry); |
| 971 | if (cputime_lt(prof_ticks(tsk), t->expires.cpu)) { | 969 | if (!--maxfire || cputime_lt(prof_ticks(tsk), t->expires.cpu)) { |
| 972 | tsk->it_prof_expires = t->expires.cpu; | 970 | tsk->it_prof_expires = t->expires.cpu; |
| 973 | break; | 971 | break; |
| 974 | } | 972 | } |
| @@ -977,12 +975,13 @@ static void check_thread_timers(struct task_struct *tsk, | |||
| 977 | } | 975 | } |
| 978 | 976 | ||
| 979 | ++timers; | 977 | ++timers; |
| 978 | maxfire = 20; | ||
| 980 | tsk->it_virt_expires = cputime_zero; | 979 | tsk->it_virt_expires = cputime_zero; |
| 981 | while (!list_empty(timers)) { | 980 | while (!list_empty(timers)) { |
| 982 | struct cpu_timer_list *t = list_entry(timers->next, | 981 | struct cpu_timer_list *t = list_entry(timers->next, |
| 983 | struct cpu_timer_list, | 982 | struct cpu_timer_list, |
| 984 | entry); | 983 | entry); |
| 985 | if (cputime_lt(virt_ticks(tsk), t->expires.cpu)) { | 984 | if (!--maxfire || cputime_lt(virt_ticks(tsk), t->expires.cpu)) { |
| 986 | tsk->it_virt_expires = t->expires.cpu; | 985 | tsk->it_virt_expires = t->expires.cpu; |
| 987 | break; | 986 | break; |
| 988 | } | 987 | } |
| @@ -991,12 +990,13 @@ static void check_thread_timers(struct task_struct *tsk, | |||
| 991 | } | 990 | } |
| 992 | 991 | ||
| 993 | ++timers; | 992 | ++timers; |
| 993 | maxfire = 20; | ||
| 994 | tsk->it_sched_expires = 0; | 994 | tsk->it_sched_expires = 0; |
| 995 | while (!list_empty(timers)) { | 995 | while (!list_empty(timers)) { |
| 996 | struct cpu_timer_list *t = list_entry(timers->next, | 996 | struct cpu_timer_list *t = list_entry(timers->next, |
| 997 | struct cpu_timer_list, | 997 | struct cpu_timer_list, |
| 998 | entry); | 998 | entry); |
| 999 | if (tsk->sched_time < t->expires.sched) { | 999 | if (!--maxfire || tsk->sched_time < t->expires.sched) { |
| 1000 | tsk->it_sched_expires = t->expires.sched; | 1000 | tsk->it_sched_expires = t->expires.sched; |
| 1001 | break; | 1001 | break; |
| 1002 | } | 1002 | } |
| @@ -1013,6 +1013,7 @@ static void check_thread_timers(struct task_struct *tsk, | |||
| 1013 | static void check_process_timers(struct task_struct *tsk, | 1013 | static void check_process_timers(struct task_struct *tsk, |
| 1014 | struct list_head *firing) | 1014 | struct list_head *firing) |
| 1015 | { | 1015 | { |
| 1016 | int maxfire; | ||
| 1016 | struct signal_struct *const sig = tsk->signal; | 1017 | struct signal_struct *const sig = tsk->signal; |
| 1017 | cputime_t utime, stime, ptime, virt_expires, prof_expires; | 1018 | cputime_t utime, stime, ptime, virt_expires, prof_expires; |
| 1018 | unsigned long long sched_time, sched_expires; | 1019 | unsigned long long sched_time, sched_expires; |
| @@ -1045,12 +1046,13 @@ static void check_process_timers(struct task_struct *tsk, | |||
| 1045 | } while (t != tsk); | 1046 | } while (t != tsk); |
| 1046 | ptime = cputime_add(utime, stime); | 1047 | ptime = cputime_add(utime, stime); |
| 1047 | 1048 | ||
| 1049 | maxfire = 20; | ||
| 1048 | prof_expires = cputime_zero; | 1050 | prof_expires = cputime_zero; |
| 1049 | while (!list_empty(timers)) { | 1051 | while (!list_empty(timers)) { |
| 1050 | struct cpu_timer_list *t = list_entry(timers->next, | 1052 | struct cpu_timer_list *t = list_entry(timers->next, |
| 1051 | struct cpu_timer_list, | 1053 | struct cpu_timer_list, |
| 1052 | entry); | 1054 | entry); |
| 1053 | if (cputime_lt(ptime, t->expires.cpu)) { | 1055 | if (!--maxfire || cputime_lt(ptime, t->expires.cpu)) { |
| 1054 | prof_expires = t->expires.cpu; | 1056 | prof_expires = t->expires.cpu; |
| 1055 | break; | 1057 | break; |
| 1056 | } | 1058 | } |
| @@ -1059,12 +1061,13 @@ static void check_process_timers(struct task_struct *tsk, | |||
| 1059 | } | 1061 | } |
| 1060 | 1062 | ||
| 1061 | ++timers; | 1063 | ++timers; |
| 1064 | maxfire = 20; | ||
| 1062 | virt_expires = cputime_zero; | 1065 | virt_expires = cputime_zero; |
| 1063 | while (!list_empty(timers)) { | 1066 | while (!list_empty(timers)) { |
| 1064 | struct cpu_timer_list *t = list_entry(timers->next, | 1067 | struct cpu_timer_list *t = list_entry(timers->next, |
| 1065 | struct cpu_timer_list, | 1068 | struct cpu_timer_list, |
| 1066 | entry); | 1069 | entry); |
| 1067 | if (cputime_lt(utime, t->expires.cpu)) { | 1070 | if (!--maxfire || cputime_lt(utime, t->expires.cpu)) { |
| 1068 | virt_expires = t->expires.cpu; | 1071 | virt_expires = t->expires.cpu; |
| 1069 | break; | 1072 | break; |
| 1070 | } | 1073 | } |
| @@ -1073,12 +1076,13 @@ static void check_process_timers(struct task_struct *tsk, | |||
| 1073 | } | 1076 | } |
| 1074 | 1077 | ||
| 1075 | ++timers; | 1078 | ++timers; |
| 1079 | maxfire = 20; | ||
| 1076 | sched_expires = 0; | 1080 | sched_expires = 0; |
| 1077 | while (!list_empty(timers)) { | 1081 | while (!list_empty(timers)) { |
| 1078 | struct cpu_timer_list *t = list_entry(timers->next, | 1082 | struct cpu_timer_list *t = list_entry(timers->next, |
| 1079 | struct cpu_timer_list, | 1083 | struct cpu_timer_list, |
| 1080 | entry); | 1084 | entry); |
| 1081 | if (sched_time < t->expires.sched) { | 1085 | if (!--maxfire || sched_time < t->expires.sched) { |
| 1082 | sched_expires = t->expires.sched; | 1086 | sched_expires = t->expires.sched; |
| 1083 | break; | 1087 | break; |
| 1084 | } | 1088 | } |
| @@ -1161,6 +1165,9 @@ static void check_process_timers(struct task_struct *tsk, | |||
| 1161 | unsigned long long sched_left, sched; | 1165 | unsigned long long sched_left, sched; |
| 1162 | const unsigned int nthreads = atomic_read(&sig->live); | 1166 | const unsigned int nthreads = atomic_read(&sig->live); |
| 1163 | 1167 | ||
| 1168 | if (!nthreads) | ||
| 1169 | return; | ||
| 1170 | |||
| 1164 | prof_left = cputime_sub(prof_expires, utime); | 1171 | prof_left = cputime_sub(prof_expires, utime); |
| 1165 | prof_left = cputime_sub(prof_left, stime); | 1172 | prof_left = cputime_sub(prof_left, stime); |
| 1166 | prof_left = cputime_div(prof_left, nthreads); | 1173 | prof_left = cputime_div(prof_left, nthreads); |
| @@ -1286,30 +1293,30 @@ void run_posix_cpu_timers(struct task_struct *tsk) | |||
| 1286 | 1293 | ||
| 1287 | #undef UNEXPIRED | 1294 | #undef UNEXPIRED |
| 1288 | 1295 | ||
| 1289 | BUG_ON(tsk->exit_state); | ||
| 1290 | |||
| 1291 | /* | 1296 | /* |
| 1292 | * Double-check with locks held. | 1297 | * Double-check with locks held. |
| 1293 | */ | 1298 | */ |
| 1294 | read_lock(&tasklist_lock); | 1299 | read_lock(&tasklist_lock); |
| 1295 | spin_lock(&tsk->sighand->siglock); | 1300 | if (likely(tsk->signal != NULL)) { |
| 1301 | spin_lock(&tsk->sighand->siglock); | ||
| 1296 | 1302 | ||
| 1297 | /* | 1303 | /* |
| 1298 | * Here we take off tsk->cpu_timers[N] and tsk->signal->cpu_timers[N] | 1304 | * Here we take off tsk->cpu_timers[N] and tsk->signal->cpu_timers[N] |
| 1299 | * all the timers that are firing, and put them on the firing list. | 1305 | * all the timers that are firing, and put them on the firing list. |
| 1300 | */ | 1306 | */ |
| 1301 | check_thread_timers(tsk, &firing); | 1307 | check_thread_timers(tsk, &firing); |
| 1302 | check_process_timers(tsk, &firing); | 1308 | check_process_timers(tsk, &firing); |
| 1303 | 1309 | ||
| 1304 | /* | 1310 | /* |
| 1305 | * We must release these locks before taking any timer's lock. | 1311 | * We must release these locks before taking any timer's lock. |
| 1306 | * There is a potential race with timer deletion here, as the | 1312 | * There is a potential race with timer deletion here, as the |
| 1307 | * siglock now protects our private firing list. We have set | 1313 | * siglock now protects our private firing list. We have set |
| 1308 | * the firing flag in each timer, so that a deletion attempt | 1314 | * the firing flag in each timer, so that a deletion attempt |
| 1309 | * that gets the timer lock before we do will give it up and | 1315 | * that gets the timer lock before we do will give it up and |
| 1310 | * spin until we've taken care of that timer below. | 1316 | * spin until we've taken care of that timer below. |
| 1311 | */ | 1317 | */ |
| 1312 | spin_unlock(&tsk->sighand->siglock); | 1318 | spin_unlock(&tsk->sighand->siglock); |
| 1319 | } | ||
| 1313 | read_unlock(&tasklist_lock); | 1320 | read_unlock(&tasklist_lock); |
| 1314 | 1321 | ||
| 1315 | /* | 1322 | /* |
diff --git a/kernel/sched.c b/kernel/sched.c index 1f31a528fdba..1e5cafdf4e27 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
| @@ -3879,6 +3879,7 @@ EXPORT_SYMBOL(cpu_present_map); | |||
| 3879 | 3879 | ||
| 3880 | #ifndef CONFIG_SMP | 3880 | #ifndef CONFIG_SMP |
| 3881 | cpumask_t cpu_online_map = CPU_MASK_ALL; | 3881 | cpumask_t cpu_online_map = CPU_MASK_ALL; |
| 3882 | EXPORT_SYMBOL_GPL(cpu_online_map); | ||
| 3882 | cpumask_t cpu_possible_map = CPU_MASK_ALL; | 3883 | cpumask_t cpu_possible_map = CPU_MASK_ALL; |
| 3883 | #endif | 3884 | #endif |
| 3884 | 3885 | ||
| @@ -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/page_alloc.c b/mm/page_alloc.c index cc1fe2672a31..e1d3d77f4aee 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
| @@ -1750,6 +1750,8 @@ inline void setup_pageset(struct per_cpu_pageset *p, unsigned long batch) | |||
| 1750 | { | 1750 | { |
| 1751 | struct per_cpu_pages *pcp; | 1751 | struct per_cpu_pages *pcp; |
| 1752 | 1752 | ||
| 1753 | memset(p, 0, sizeof(*p)); | ||
| 1754 | |||
| 1753 | pcp = &p->pcp[0]; /* hot */ | 1755 | pcp = &p->pcp[0]; /* hot */ |
| 1754 | pcp->count = 0; | 1756 | pcp->count = 0; |
| 1755 | pcp->low = 2 * batch; | 1757 | pcp->low = 2 * batch; |
diff --git a/net/802/tr.c b/net/802/tr.c index 1eaa3d19d8bf..afd8385c0c9c 100644 --- a/net/802/tr.c +++ b/net/802/tr.c | |||
| @@ -340,9 +340,10 @@ static void tr_add_rif_info(struct trh_hdr *trh, struct net_device *dev) | |||
| 340 | unsigned int hash, rii_p = 0; | 340 | unsigned int hash, rii_p = 0; |
| 341 | unsigned long flags; | 341 | unsigned long flags; |
| 342 | struct rif_cache *entry; | 342 | struct rif_cache *entry; |
| 343 | 343 | unsigned char saddr0; | |
| 344 | 344 | ||
| 345 | spin_lock_irqsave(&rif_lock, flags); | 345 | spin_lock_irqsave(&rif_lock, flags); |
| 346 | saddr0 = trh->saddr[0]; | ||
| 346 | 347 | ||
| 347 | /* | 348 | /* |
| 348 | * Firstly see if the entry exists | 349 | * Firstly see if the entry exists |
| @@ -395,7 +396,6 @@ printk("adding rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n", | |||
| 395 | entry->rcf = trh->rcf & htons((unsigned short)~TR_RCF_BROADCAST_MASK); | 396 | entry->rcf = trh->rcf & htons((unsigned short)~TR_RCF_BROADCAST_MASK); |
| 396 | memcpy(&(entry->rseg[0]),&(trh->rseg[0]),8*sizeof(unsigned short)); | 397 | memcpy(&(entry->rseg[0]),&(trh->rseg[0]),8*sizeof(unsigned short)); |
| 397 | entry->local_ring = 0; | 398 | entry->local_ring = 0; |
| 398 | trh->saddr[0]|=TR_RII; /* put the routing indicator back for tcpdump */ | ||
| 399 | } | 399 | } |
| 400 | else | 400 | else |
| 401 | { | 401 | { |
| @@ -422,6 +422,7 @@ printk("updating rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n", | |||
| 422 | } | 422 | } |
| 423 | entry->last_used=jiffies; | 423 | entry->last_used=jiffies; |
| 424 | } | 424 | } |
| 425 | trh->saddr[0]=saddr0; /* put the routing indicator back for tcpdump */ | ||
| 425 | spin_unlock_irqrestore(&rif_lock, flags); | 426 | spin_unlock_irqrestore(&rif_lock, flags); |
| 426 | } | 427 | } |
| 427 | 428 | ||
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index 4128fc76ac3a..1dcf7fa1f0fe 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c | |||
| @@ -175,39 +175,10 @@ static void pneigh_queue_purge(struct sk_buff_head *list) | |||
| 175 | } | 175 | } |
| 176 | } | 176 | } |
| 177 | 177 | ||
| 178 | void neigh_changeaddr(struct neigh_table *tbl, struct net_device *dev) | 178 | static void neigh_flush_dev(struct neigh_table *tbl, struct net_device *dev) |
| 179 | { | 179 | { |
| 180 | int i; | 180 | int i; |
| 181 | 181 | ||
| 182 | write_lock_bh(&tbl->lock); | ||
| 183 | |||
| 184 | for (i=0; i <= tbl->hash_mask; i++) { | ||
| 185 | struct neighbour *n, **np; | ||
| 186 | |||
| 187 | np = &tbl->hash_buckets[i]; | ||
| 188 | while ((n = *np) != NULL) { | ||
| 189 | if (dev && n->dev != dev) { | ||
| 190 | np = &n->next; | ||
| 191 | continue; | ||
| 192 | } | ||
| 193 | *np = n->next; | ||
| 194 | write_lock_bh(&n->lock); | ||
| 195 | n->dead = 1; | ||
| 196 | neigh_del_timer(n); | ||
| 197 | write_unlock_bh(&n->lock); | ||
| 198 | neigh_release(n); | ||
| 199 | } | ||
| 200 | } | ||
| 201 | |||
| 202 | write_unlock_bh(&tbl->lock); | ||
| 203 | } | ||
| 204 | |||
| 205 | int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev) | ||
| 206 | { | ||
| 207 | int i; | ||
| 208 | |||
| 209 | write_lock_bh(&tbl->lock); | ||
| 210 | |||
| 211 | for (i = 0; i <= tbl->hash_mask; i++) { | 182 | for (i = 0; i <= tbl->hash_mask; i++) { |
| 212 | struct neighbour *n, **np = &tbl->hash_buckets[i]; | 183 | struct neighbour *n, **np = &tbl->hash_buckets[i]; |
| 213 | 184 | ||
| @@ -243,7 +214,19 @@ int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev) | |||
| 243 | neigh_release(n); | 214 | neigh_release(n); |
| 244 | } | 215 | } |
| 245 | } | 216 | } |
| 217 | } | ||
| 246 | 218 | ||
| 219 | void neigh_changeaddr(struct neigh_table *tbl, struct net_device *dev) | ||
| 220 | { | ||
| 221 | write_lock_bh(&tbl->lock); | ||
| 222 | neigh_flush_dev(tbl, dev); | ||
| 223 | write_unlock_bh(&tbl->lock); | ||
| 224 | } | ||
| 225 | |||
| 226 | int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev) | ||
| 227 | { | ||
| 228 | write_lock_bh(&tbl->lock); | ||
| 229 | neigh_flush_dev(tbl, dev); | ||
| 247 | pneigh_ifdown(tbl, dev); | 230 | pneigh_ifdown(tbl, dev); |
| 248 | write_unlock_bh(&tbl->lock); | 231 | write_unlock_bh(&tbl->lock); |
| 249 | 232 | ||
| @@ -732,6 +715,7 @@ static inline void neigh_add_timer(struct neighbour *n, unsigned long when) | |||
| 732 | if (unlikely(mod_timer(&n->timer, when))) { | 715 | if (unlikely(mod_timer(&n->timer, when))) { |
| 733 | printk("NEIGH: BUG, double timer add, state is %x\n", | 716 | printk("NEIGH: BUG, double timer add, state is %x\n", |
| 734 | n->nud_state); | 717 | n->nud_state); |
| 718 | dump_stack(); | ||
| 735 | } | 719 | } |
| 736 | } | 720 | } |
| 737 | 721 | ||
| @@ -815,10 +799,10 @@ static void neigh_timer_handler(unsigned long arg) | |||
| 815 | } | 799 | } |
| 816 | 800 | ||
| 817 | if (neigh->nud_state & NUD_IN_TIMER) { | 801 | if (neigh->nud_state & NUD_IN_TIMER) { |
| 818 | neigh_hold(neigh); | ||
| 819 | if (time_before(next, jiffies + HZ/2)) | 802 | if (time_before(next, jiffies + HZ/2)) |
| 820 | next = jiffies + HZ/2; | 803 | next = jiffies + HZ/2; |
| 821 | neigh_add_timer(neigh, next); | 804 | if (!mod_timer(&neigh->timer, next)) |
| 805 | neigh_hold(neigh); | ||
| 822 | } | 806 | } |
| 823 | if (neigh->nud_state & (NUD_INCOMPLETE | NUD_PROBE)) { | 807 | if (neigh->nud_state & (NUD_INCOMPLETE | NUD_PROBE)) { |
| 824 | struct sk_buff *skb = skb_peek(&neigh->arp_queue); | 808 | struct sk_buff *skb = skb_peek(&neigh->arp_queue); |
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index af9b1516e21f..02cd4cde2112 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
| @@ -410,6 +410,9 @@ struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask) | |||
| 410 | C(nfct); | 410 | C(nfct); |
| 411 | nf_conntrack_get(skb->nfct); | 411 | nf_conntrack_get(skb->nfct); |
| 412 | C(nfctinfo); | 412 | C(nfctinfo); |
| 413 | #if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE) | ||
| 414 | C(ipvs_property); | ||
| 415 | #endif | ||
| 413 | #ifdef CONFIG_BRIDGE_NETFILTER | 416 | #ifdef CONFIG_BRIDGE_NETFILTER |
| 414 | C(nf_bridge); | 417 | C(nf_bridge); |
| 415 | nf_bridge_get(skb->nf_bridge); | 418 | nf_bridge_get(skb->nf_bridge); |
| @@ -467,6 +470,9 @@ static void copy_skb_header(struct sk_buff *new, const struct sk_buff *old) | |||
| 467 | new->nfct = old->nfct; | 470 | new->nfct = old->nfct; |
| 468 | nf_conntrack_get(old->nfct); | 471 | nf_conntrack_get(old->nfct); |
| 469 | new->nfctinfo = old->nfctinfo; | 472 | new->nfctinfo = old->nfctinfo; |
| 473 | #if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE) | ||
| 474 | new->ipvs_property = old->ipvs_property; | ||
| 475 | #endif | ||
| 470 | #ifdef CONFIG_BRIDGE_NETFILTER | 476 | #ifdef CONFIG_BRIDGE_NETFILTER |
| 471 | new->nf_bridge = old->nf_bridge; | 477 | new->nf_bridge = old->nf_bridge; |
| 472 | nf_bridge_get(old->nf_bridge); | 478 | nf_bridge_get(old->nf_bridge); |
diff --git a/net/core/wireless.c b/net/core/wireless.c index d17f1583ea3e..271ddb35b0b2 100644 --- a/net/core/wireless.c +++ b/net/core/wireless.c | |||
| @@ -455,10 +455,15 @@ static inline struct iw_statistics *get_wireless_stats(struct net_device *dev) | |||
| 455 | 455 | ||
| 456 | /* Old location, field to be removed in next WE */ | 456 | /* Old location, field to be removed in next WE */ |
| 457 | if(dev->get_wireless_stats) { | 457 | if(dev->get_wireless_stats) { |
| 458 | printk(KERN_DEBUG "%s (WE) : Driver using old /proc/net/wireless support, please fix driver !\n", | 458 | static int printed_message; |
| 459 | dev->name); | 459 | |
| 460 | if (!printed_message++) | ||
| 461 | printk(KERN_DEBUG "%s (WE) : Driver using old /proc/net/wireless support, please fix driver !\n", | ||
| 462 | dev->name); | ||
| 463 | |||
| 460 | return dev->get_wireless_stats(dev); | 464 | return dev->get_wireless_stats(dev); |
| 461 | } | 465 | } |
| 466 | |||
| 462 | /* Not found */ | 467 | /* Not found */ |
| 463 | return (struct iw_statistics *) NULL; | 468 | return (struct iw_statistics *) NULL; |
| 464 | } | 469 | } |
diff --git a/net/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/ipv6/ip6_flowlabel.c b/net/ipv6/ip6_flowlabel.c index f841bde30c18..bbbe80cdaf72 100644 --- a/net/ipv6/ip6_flowlabel.c +++ b/net/ipv6/ip6_flowlabel.c | |||
| @@ -483,7 +483,7 @@ int ipv6_flowlabel_opt(struct sock *sk, char __user *optval, int optlen) | |||
| 483 | goto done; | 483 | goto done; |
| 484 | } | 484 | } |
| 485 | fl1 = sfl->fl; | 485 | fl1 = sfl->fl; |
| 486 | atomic_inc(&fl->users); | 486 | atomic_inc(&fl1->users); |
| 487 | break; | 487 | break; |
| 488 | } | 488 | } |
| 489 | } | 489 | } |
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c index 30ec3efc48a6..691dea4a58e7 100644 --- a/net/sunrpc/svcsock.c +++ b/net/sunrpc/svcsock.c | |||
| @@ -587,7 +587,7 @@ svc_udp_recvfrom(struct svc_rqst *rqstp) | |||
| 587 | struct timeval tv; | 587 | struct timeval tv; |
| 588 | 588 | ||
| 589 | tv.tv_sec = xtime.tv_sec; | 589 | tv.tv_sec = xtime.tv_sec; |
| 590 | tv.tv_usec = xtime.tv_nsec * 1000; | 590 | tv.tv_usec = xtime.tv_nsec / NSEC_PER_USEC; |
| 591 | skb_set_timestamp(skb, &tv); | 591 | skb_set_timestamp(skb, &tv); |
| 592 | /* Don't enable netstamp, sunrpc doesn't | 592 | /* Don't enable netstamp, sunrpc doesn't |
| 593 | need that much accuracy */ | 593 | need that much accuracy */ |
diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c index 8eb140dd2e4b..a45cc971e735 100644 --- a/security/selinux/selinuxfs.c +++ b/security/selinux/selinuxfs.c | |||
| @@ -879,7 +879,7 @@ static ssize_t sel_commit_bools_write(struct file *filep, | |||
| 879 | if (sscanf(page, "%d", &new_value) != 1) | 879 | if (sscanf(page, "%d", &new_value) != 1) |
| 880 | goto out; | 880 | goto out; |
| 881 | 881 | ||
| 882 | if (new_value) { | 882 | if (new_value && bool_pending_values) { |
| 883 | security_set_bools(bool_num, bool_pending_values); | 883 | security_set_bools(bool_num, bool_pending_values); |
| 884 | } | 884 | } |
| 885 | 885 | ||
| @@ -952,6 +952,7 @@ static int sel_make_bools(void) | |||
| 952 | 952 | ||
| 953 | /* remove any existing files */ | 953 | /* remove any existing files */ |
| 954 | kfree(bool_pending_values); | 954 | kfree(bool_pending_values); |
| 955 | bool_pending_values = NULL; | ||
| 955 | 956 | ||
| 956 | sel_remove_bools(dir); | 957 | sel_remove_bools(dir); |
| 957 | 958 | ||
| @@ -1002,6 +1003,7 @@ out: | |||
| 1002 | } | 1003 | } |
| 1003 | return ret; | 1004 | return ret; |
| 1004 | err: | 1005 | err: |
| 1006 | kfree(values); | ||
| 1005 | d_genocide(dir); | 1007 | d_genocide(dir); |
| 1006 | ret = -ENOMEM; | 1008 | ret = -ENOMEM; |
| 1007 | goto out; | 1009 | goto out; |
diff --git a/security/selinux/ss/policydb.c b/security/selinux/ss/policydb.c index 0a758323a9cf..8e6262d12aa9 100644 --- a/security/selinux/ss/policydb.c +++ b/security/selinux/ss/policydb.c | |||
| @@ -650,8 +650,10 @@ void policydb_destroy(struct policydb *p) | |||
| 650 | } | 650 | } |
| 651 | if (lrt) kfree(lrt); | 651 | if (lrt) kfree(lrt); |
| 652 | 652 | ||
| 653 | for (i = 0; i < p->p_types.nprim; i++) | 653 | if (p->type_attr_map) { |
| 654 | ebitmap_destroy(&p->type_attr_map[i]); | 654 | for (i = 0; i < p->p_types.nprim; i++) |
| 655 | ebitmap_destroy(&p->type_attr_map[i]); | ||
| 656 | } | ||
| 655 | kfree(p->type_attr_map); | 657 | kfree(p->type_attr_map); |
| 656 | 658 | ||
| 657 | return; | 659 | return; |
diff --git a/sound/core/init.c b/sound/core/init.c index a5702014a704..c72a79115cca 100644 --- a/sound/core/init.c +++ b/sound/core/init.c | |||
| @@ -828,7 +828,8 @@ static int snd_generic_suspend(struct device *dev, pm_message_t state, u32 level | |||
| 828 | card = get_snd_generic_card(dev); | 828 | card = get_snd_generic_card(dev); |
| 829 | if (card->power_state == SNDRV_CTL_POWER_D3hot) | 829 | if (card->power_state == SNDRV_CTL_POWER_D3hot) |
| 830 | return 0; | 830 | return 0; |
| 831 | card->pm_suspend(card, PMSG_SUSPEND); | 831 | if (card->pm_suspend) |
| 832 | card->pm_suspend(card, PMSG_SUSPEND); | ||
| 832 | snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); | 833 | snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); |
| 833 | return 0; | 834 | return 0; |
| 834 | } | 835 | } |
| @@ -843,7 +844,8 @@ static int snd_generic_resume(struct device *dev, u32 level) | |||
| 843 | card = get_snd_generic_card(dev); | 844 | card = get_snd_generic_card(dev); |
| 844 | if (card->power_state == SNDRV_CTL_POWER_D0) | 845 | if (card->power_state == SNDRV_CTL_POWER_D0) |
| 845 | return 0; | 846 | return 0; |
| 846 | card->pm_resume(card); | 847 | if (card->pm_suspend) |
| 848 | card->pm_resume(card); | ||
| 847 | snd_power_change_state(card, SNDRV_CTL_POWER_D0); | 849 | snd_power_change_state(card, SNDRV_CTL_POWER_D0); |
| 848 | return 0; | 850 | return 0; |
| 849 | } | 851 | } |
