mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 13:14:07 +08:00
Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git
This commit is contained in:
commit
04290949b3
@ -17,7 +17,7 @@ are specified on the kernel command line with the module name plus
|
||||
|
||||
usbcore.blinkenlights=1
|
||||
|
||||
The text in square brackets at the beginning of the description state the
|
||||
The text in square brackets at the beginning of the description states the
|
||||
restrictions on the kernel for the said kernel parameter to be valid. The
|
||||
restrictions referred to are that the relevant option is valid if:
|
||||
|
||||
@ -27,8 +27,8 @@ restrictions referred to are that the relevant option is valid if:
|
||||
APM Advanced Power Management support is enabled.
|
||||
AX25 Appropriate AX.25 support is enabled.
|
||||
CD Appropriate CD support is enabled.
|
||||
DEVFS devfs support is enabled.
|
||||
DRM Direct Rendering Management support is enabled.
|
||||
DEVFS devfs support is enabled.
|
||||
DRM Direct Rendering Management support is enabled.
|
||||
EDD BIOS Enhanced Disk Drive Services (EDD) is enabled
|
||||
EFI EFI Partitioning (GPT) is enabled
|
||||
EIDE EIDE/ATAPI support is enabled.
|
||||
@ -71,7 +71,7 @@ restrictions referred to are that the relevant option is valid if:
|
||||
SERIAL Serial support is enabled.
|
||||
SMP The kernel is an SMP kernel.
|
||||
SPARC Sparc architecture is enabled.
|
||||
SWSUSP Software suspension is enabled.
|
||||
SWSUSP Software suspend is enabled.
|
||||
TS Appropriate touchscreen support is enabled.
|
||||
USB USB support is enabled.
|
||||
USBHID USB Human Interface Device support is enabled.
|
||||
@ -105,13 +105,13 @@ running once the system is up.
|
||||
See header of drivers/scsi/53c7xx.c.
|
||||
See also Documentation/scsi/ncr53c7xx.txt.
|
||||
|
||||
acpi= [HW,ACPI] Advanced Configuration and Power Interface
|
||||
Format: { force | off | ht | strict }
|
||||
acpi= [HW,ACPI] Advanced Configuration and Power Interface
|
||||
Format: { force | off | ht | strict | noirq }
|
||||
force -- enable ACPI if default was off
|
||||
off -- disable ACPI if default was on
|
||||
noirq -- do not use ACPI for IRQ routing
|
||||
ht -- run only enough ACPI to enable Hyper Threading
|
||||
strict -- Be less tolerant of platforms that are not
|
||||
strict -- Be less tolerant of platforms that are not
|
||||
strictly ACPI specification compliant.
|
||||
|
||||
See also Documentation/pm.txt, pci=noacpi
|
||||
@ -119,20 +119,23 @@ running once the system is up.
|
||||
acpi_sleep= [HW,ACPI] Sleep options
|
||||
Format: { s3_bios, s3_mode }
|
||||
See Documentation/power/video.txt
|
||||
|
||||
|
||||
acpi_sci= [HW,ACPI] ACPI System Control Interrupt trigger mode
|
||||
Format: { level | edge | high | low }
|
||||
Format: { level | edge | high | low }
|
||||
|
||||
acpi_irq_balance [HW,ACPI] ACPI will balance active IRQs
|
||||
default in APIC mode
|
||||
acpi_irq_balance [HW,ACPI]
|
||||
ACPI will balance active IRQs
|
||||
default in APIC mode
|
||||
|
||||
acpi_irq_nobalance [HW,ACPI] ACPI will not move active IRQs (default)
|
||||
default in PIC mode
|
||||
acpi_irq_nobalance [HW,ACPI]
|
||||
ACPI will not move active IRQs (default)
|
||||
default in PIC mode
|
||||
|
||||
acpi_irq_pci= [HW,ACPI] If irq_balance, Clear listed IRQs for use by PCI
|
||||
acpi_irq_pci= [HW,ACPI] If irq_balance, clear listed IRQs for
|
||||
use by PCI
|
||||
Format: <irq>,<irq>...
|
||||
|
||||
acpi_irq_isa= [HW,ACPI] If irq_balance, Mark listed IRQs used by ISA
|
||||
acpi_irq_isa= [HW,ACPI] If irq_balance, mark listed IRQs used by ISA
|
||||
Format: <irq>,<irq>...
|
||||
|
||||
acpi_osi= [HW,ACPI] empty param disables _OSI
|
||||
@ -145,14 +148,14 @@ running once the system is up.
|
||||
|
||||
acpi_dbg_layer= [HW,ACPI]
|
||||
Format: <int>
|
||||
Each bit of the <int> indicates an acpi debug layer,
|
||||
Each bit of the <int> indicates an ACPI debug layer,
|
||||
1: enable, 0: disable. It is useful for boot time
|
||||
debugging. After system has booted up, it can be set
|
||||
via /proc/acpi/debug_layer.
|
||||
|
||||
acpi_dbg_level= [HW,ACPI]
|
||||
Format: <int>
|
||||
Each bit of the <int> indicates an acpi debug level,
|
||||
Each bit of the <int> indicates an ACPI debug level,
|
||||
1: enable, 0: disable. It is useful for boot time
|
||||
debugging. After system has booted up, it can be set
|
||||
via /proc/acpi/debug_level.
|
||||
@ -161,12 +164,13 @@ running once the system is up.
|
||||
|
||||
acpi_generic_hotkey [HW,ACPI]
|
||||
Allow consolidated generic hotkey driver to
|
||||
over-ride platform specific driver.
|
||||
override platform specific driver.
|
||||
See also Documentation/acpi-hotkey.txt.
|
||||
|
||||
enable_timer_pin_1 [i386,x86-64]
|
||||
Enable PIN 1 of APIC timer
|
||||
Can be useful to work around chipset bugs (in particular on some ATI chipsets)
|
||||
Can be useful to work around chipset bugs
|
||||
(in particular on some ATI chipsets).
|
||||
The kernel tries to set a reasonable default.
|
||||
|
||||
disable_timer_pin_1 [i386,x86-64]
|
||||
@ -182,7 +186,7 @@ running once the system is up.
|
||||
|
||||
adlib= [HW,OSS]
|
||||
Format: <io>
|
||||
|
||||
|
||||
advansys= [HW,SCSI]
|
||||
See header of drivers/scsi/advansys.c.
|
||||
|
||||
@ -192,7 +196,7 @@ running once the system is up.
|
||||
aedsp16= [HW,OSS] Audio Excel DSP 16
|
||||
Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq>
|
||||
See also header of sound/oss/aedsp16.c.
|
||||
|
||||
|
||||
aha152x= [HW,SCSI]
|
||||
See Documentation/scsi/aha152x.txt.
|
||||
|
||||
@ -205,10 +209,6 @@ running once the system is up.
|
||||
aic79xx= [HW,SCSI]
|
||||
See Documentation/scsi/aic79xx.txt.
|
||||
|
||||
AM53C974= [HW,SCSI]
|
||||
Format: <host-scsi-id>,<target-scsi-id>,<max-rate>,<max-offset>
|
||||
See also header of drivers/scsi/AM53C974.c.
|
||||
|
||||
amijoy.map= [HW,JOY] Amiga joystick support
|
||||
Map of devices attached to JOY0DAT and JOY1DAT
|
||||
Format: <a>,<b>
|
||||
@ -219,23 +219,24 @@ running once the system is up.
|
||||
connected to one of 16 gameports
|
||||
Format: <type1>,<type2>,..<type16>
|
||||
|
||||
apc= [HW,SPARC] Power management functions (SPARCstation-4/5 + deriv.)
|
||||
apc= [HW,SPARC]
|
||||
Power management functions (SPARCstation-4/5 + deriv.)
|
||||
Format: noidle
|
||||
Disable APC CPU standby support. SPARCstation-Fox does
|
||||
not play well with APC CPU idle - disable it if you have
|
||||
APC and your system crashes randomly.
|
||||
|
||||
apic= [APIC,i386] Change the output verbosity whilst booting
|
||||
apic= [APIC,i386] Change the output verbosity whilst booting
|
||||
Format: { quiet (default) | verbose | debug }
|
||||
Change the amount of debugging information output
|
||||
when initialising the APIC and IO-APIC components.
|
||||
|
||||
|
||||
apm= [APM] Advanced Power Management
|
||||
See header of arch/i386/kernel/apm.c.
|
||||
|
||||
applicom= [HW]
|
||||
Format: <mem>,<irq>
|
||||
|
||||
|
||||
arcrimi= [HW,NET] ARCnet - "RIM I" (entirely mem-mapped) cards
|
||||
Format: <io>,<irq>,<nodeID>
|
||||
|
||||
@ -250,38 +251,40 @@ running once the system is up.
|
||||
|
||||
atkbd.reset= [HW] Reset keyboard during initialization
|
||||
|
||||
atkbd.set= [HW] Select keyboard code set
|
||||
Format: <int> (2 = AT (default) 3 = PS/2)
|
||||
atkbd.set= [HW] Select keyboard code set
|
||||
Format: <int> (2 = AT (default), 3 = PS/2)
|
||||
|
||||
atkbd.scroll= [HW] Enable scroll wheel on MS Office and similar
|
||||
keyboards
|
||||
|
||||
atkbd.softraw= [HW] Choose between synthetic and real raw mode
|
||||
Format: <bool> (0 = real, 1 = synthetic (default))
|
||||
|
||||
atkbd.softrepeat=
|
||||
[HW] Use software keyboard repeat
|
||||
|
||||
atkbd.softrepeat= [HW]
|
||||
Use software keyboard repeat
|
||||
|
||||
autotest [IA64]
|
||||
|
||||
awe= [HW,OSS] AWE32/SB32/AWE64 wave table synth
|
||||
Format: <io>,<memsize>,<isapnp>
|
||||
|
||||
|
||||
aztcd= [HW,CD] Aztech CD268 CDROM driver
|
||||
Format: <io>,0x79 (?)
|
||||
|
||||
baycom_epp= [HW,AX25]
|
||||
Format: <io>,<mode>
|
||||
|
||||
|
||||
baycom_par= [HW,AX25] BayCom Parallel Port AX.25 Modem
|
||||
Format: <io>,<mode>
|
||||
See header of drivers/net/hamradio/baycom_par.c.
|
||||
|
||||
baycom_ser_fdx= [HW,AX25] BayCom Serial Port AX.25 Modem (Full Duplex Mode)
|
||||
baycom_ser_fdx= [HW,AX25]
|
||||
BayCom Serial Port AX.25 Modem (Full Duplex Mode)
|
||||
Format: <io>,<irq>,<mode>[,<baud>]
|
||||
See header of drivers/net/hamradio/baycom_ser_fdx.c.
|
||||
|
||||
baycom_ser_hdx= [HW,AX25] BayCom Serial Port AX.25 Modem (Half Duplex Mode)
|
||||
baycom_ser_hdx= [HW,AX25]
|
||||
BayCom Serial Port AX.25 Modem (Half Duplex Mode)
|
||||
Format: <io>,<irq>,<mode>
|
||||
See header of drivers/net/hamradio/baycom_ser_hdx.c.
|
||||
|
||||
@ -292,7 +295,8 @@ running once the system is up.
|
||||
blkmtd_count=
|
||||
|
||||
bttv.card= [HW,V4L] bttv (bt848 + bt878 based grabber cards)
|
||||
bttv.radio= Most important insmod options are available as kernel args too.
|
||||
bttv.radio= Most important insmod options are available as
|
||||
kernel args too.
|
||||
bttv.pll= See Documentation/video4linux/bttv/Insmod-options
|
||||
bttv.tuner= and Documentation/video4linux/bttv/CARDLIST
|
||||
|
||||
@ -318,15 +322,17 @@ running once the system is up.
|
||||
checkreqprot [SELINUX] Set initial checkreqprot flag value.
|
||||
Format: { "0" | "1" }
|
||||
See security/selinux/Kconfig help text.
|
||||
0 -- check protection applied by kernel (includes any implied execute protection).
|
||||
0 -- check protection applied by kernel (includes
|
||||
any implied execute protection).
|
||||
1 -- check protection requested by application.
|
||||
Default value is set via a kernel config option.
|
||||
Value can be changed at runtime via /selinux/checkreqprot.
|
||||
|
||||
clock= [BUGS=IA-32, HW] gettimeofday timesource override.
|
||||
Value can be changed at runtime via
|
||||
/selinux/checkreqprot.
|
||||
|
||||
clock= [BUGS=IA-32,HW] gettimeofday timesource override.
|
||||
Forces specified timesource (if avaliable) to be used
|
||||
when calculating gettimeofday(). If specicified timesource
|
||||
is not avalible, it defaults to PIT.
|
||||
when calculating gettimeofday(). If specicified
|
||||
timesource is not avalible, it defaults to PIT.
|
||||
Format: { pit | tsc | cyclone | pmtmr }
|
||||
|
||||
hpet= [IA-32,HPET] option to disable HPET and use PIT.
|
||||
@ -336,17 +342,19 @@ running once the system is up.
|
||||
Format: { auto | [<io>,][<irq>] }
|
||||
|
||||
com20020= [HW,NET] ARCnet - COM20020 chipset
|
||||
Format: <io>[,<irq>[,<nodeID>[,<backplane>[,<ckp>[,<timeout>]]]]]
|
||||
Format:
|
||||
<io>[,<irq>[,<nodeID>[,<backplane>[,<ckp>[,<timeout>]]]]]
|
||||
|
||||
com90io= [HW,NET] ARCnet - COM90xx chipset (IO-mapped buffers)
|
||||
Format: <io>[,<irq>]
|
||||
|
||||
com90xx= [HW,NET] ARCnet - COM90xx chipset (memory-mapped buffers)
|
||||
com90xx= [HW,NET]
|
||||
ARCnet - COM90xx chipset (memory-mapped buffers)
|
||||
Format: <io>[,<irq>[,<memstart>]]
|
||||
|
||||
condev= [HW,S390] console device
|
||||
conmode=
|
||||
|
||||
|
||||
console= [KNL] Output console device and options.
|
||||
|
||||
tty<n> Use the virtual console device <n>.
|
||||
@ -367,7 +375,8 @@ running once the system is up.
|
||||
options are the same as for ttyS, above.
|
||||
|
||||
cpcihp_generic= [HW,PCI] Generic port I/O CompactPCI driver
|
||||
Format: <first_slot>,<last_slot>,<port>,<enum_bit>[,<debug>]
|
||||
Format:
|
||||
<first_slot>,<last_slot>,<port>,<enum_bit>[,<debug>]
|
||||
|
||||
cpia_pp= [HW,PPT]
|
||||
Format: { parport<nr> | auto | none }
|
||||
@ -384,10 +393,10 @@ running once the system is up.
|
||||
|
||||
cs89x0_media= [HW,NET]
|
||||
Format: { rj45 | aui | bnc }
|
||||
|
||||
|
||||
cyclades= [HW,SERIAL] Cyclades multi-serial port adapter.
|
||||
|
||||
dasd= [HW,NET]
|
||||
|
||||
dasd= [HW,NET]
|
||||
See header of drivers/s390/block/dasd_devmap.c.
|
||||
|
||||
db9.dev[2|3]= [HW,JOY] Multisystem joystick support via parallel port
|
||||
@ -406,7 +415,7 @@ running once the system is up.
|
||||
|
||||
dhash_entries= [KNL]
|
||||
Set number of hash buckets for dentry cache.
|
||||
|
||||
|
||||
digi= [HW,SERIAL]
|
||||
IO parameters + enable/disable command.
|
||||
|
||||
@ -424,11 +433,11 @@ running once the system is up.
|
||||
|
||||
dtc3181e= [HW,SCSI]
|
||||
|
||||
earlyprintk= [IA-32, X86-64]
|
||||
earlyprintk= [IA-32,X86-64]
|
||||
earlyprintk=vga
|
||||
earlyprintk=serial[,ttySn[,baudrate]]
|
||||
|
||||
Append ,keep to not disable it when the real console
|
||||
Append ",keep" to not disable it when the real console
|
||||
takes over.
|
||||
|
||||
Only vga or serial at a time, not both.
|
||||
@ -451,7 +460,7 @@ running once the system is up.
|
||||
Format: {"of[f]" | "sk[ipmbr]"}
|
||||
See comment in arch/i386/boot/edd.S
|
||||
|
||||
eicon= [HW,ISDN]
|
||||
eicon= [HW,ISDN]
|
||||
Format: <id>,<membase>,<irq>
|
||||
|
||||
eisa_irq_edge= [PARISC,HW]
|
||||
@ -462,12 +471,13 @@ running once the system is up.
|
||||
arch/i386/kernel/cpu/cpufreq/elanfreq.c.
|
||||
|
||||
elevator= [IOSCHED]
|
||||
Format: {"as"|"cfq"|"deadline"|"noop"}
|
||||
See Documentation/block/as-iosched.txt
|
||||
and Documentation/block/deadline-iosched.txt for details.
|
||||
Format: {"as" | "cfq" | "deadline" | "noop"}
|
||||
See Documentation/block/as-iosched.txt and
|
||||
Documentation/block/deadline-iosched.txt for details.
|
||||
|
||||
elfcorehdr= [IA-32]
|
||||
Specifies physical address of start of kernel core image
|
||||
elf header.
|
||||
Specifies physical address of start of kernel core
|
||||
image elf header.
|
||||
See Documentation/kdump.txt for details.
|
||||
|
||||
enforcing [SELINUX] Set initial enforcing status.
|
||||
@ -485,7 +495,7 @@ running once the system is up.
|
||||
es1371= [HW,OSS]
|
||||
Format: <spdif>,[<nomix>,[<amplifier>]]
|
||||
See also header of sound/oss/es1371.c.
|
||||
|
||||
|
||||
ether= [HW,NET] Ethernet cards parameters
|
||||
This option is obsoleted by the "netdev=" option, which
|
||||
has equivalent usage. See its documentation for details.
|
||||
@ -526,12 +536,13 @@ running once the system is up.
|
||||
|
||||
gus= [HW,OSS]
|
||||
Format: <io>,<irq>,<dma>,<dma16>
|
||||
|
||||
|
||||
gvp11= [HW,SCSI]
|
||||
|
||||
hashdist= [KNL,NUMA] Large hashes allocated during boot
|
||||
are distributed across NUMA nodes. Defaults on
|
||||
for IA-64, off otherwise.
|
||||
Format: 0 | 1 (for off | on)
|
||||
|
||||
hcl= [IA-64] SGI's Hardware Graph compatibility layer
|
||||
|
||||
@ -595,13 +606,13 @@ running once the system is up.
|
||||
ide?= [HW] (E)IDE subsystem
|
||||
Format: ide?=noprobe or chipset specific parameters.
|
||||
See Documentation/ide.txt.
|
||||
|
||||
|
||||
idebus= [HW] (E)IDE subsystem - VLB/PCI bus speed
|
||||
See Documentation/ide.txt.
|
||||
|
||||
idle= [HW]
|
||||
Format: idle=poll or idle=halt
|
||||
|
||||
|
||||
ihash_entries= [KNL]
|
||||
Set number of hash buckets for inode cache.
|
||||
|
||||
@ -649,7 +660,7 @@ running once the system is up.
|
||||
firmware running.
|
||||
|
||||
isapnp= [ISAPNP]
|
||||
Format: <RDP>, <reset>, <pci_scan>, <verbosity>
|
||||
Format: <RDP>,<reset>,<pci_scan>,<verbosity>
|
||||
|
||||
isolcpus= [KNL,SMP] Isolate CPUs from the general scheduler.
|
||||
Format: <cpu number>,...,<cpu number>
|
||||
@ -661,32 +672,33 @@ running once the system is up.
|
||||
"number of CPUs in system - 1".
|
||||
|
||||
This option is the preferred way to isolate CPUs. The
|
||||
alternative - manually setting the CPU mask of all tasks
|
||||
in the system can cause problems and suboptimal load
|
||||
balancer performance.
|
||||
alternative -- manually setting the CPU mask of all
|
||||
tasks in the system -- can cause problems and
|
||||
suboptimal load balancer performance.
|
||||
|
||||
isp16= [HW,CD]
|
||||
Format: <io>,<irq>,<dma>,<setup>
|
||||
|
||||
iucv= [HW,NET]
|
||||
iucv= [HW,NET]
|
||||
|
||||
js= [HW,JOY] Analog joystick
|
||||
See Documentation/input/joystick.txt.
|
||||
|
||||
keepinitrd [HW,ARM]
|
||||
|
||||
kstack=N [IA-32, X86-64] Print N words from the kernel stack
|
||||
kstack=N [IA-32,X86-64] Print N words from the kernel stack
|
||||
in oops dumps.
|
||||
|
||||
l2cr= [PPC]
|
||||
|
||||
lapic [IA-32,APIC] Enable the local APIC even if BIOS disabled it.
|
||||
lapic [IA-32,APIC] Enable the local APIC even if BIOS
|
||||
disabled it.
|
||||
|
||||
lasi= [HW,SCSI] PARISC LASI driver for the 53c700 chip
|
||||
Format: addr:<io>,irq:<irq>
|
||||
|
||||
llsc*= [IA64]
|
||||
See function print_params() in arch/ia64/sn/kernel/llsc4.c.
|
||||
llsc*= [IA64] See function print_params() in
|
||||
arch/ia64/sn/kernel/llsc4.c.
|
||||
|
||||
load_ramdisk= [RAM] List of ramdisks to load from floppy
|
||||
See Documentation/ramdisk.txt.
|
||||
@ -713,8 +725,9 @@ running once the system is up.
|
||||
7 (KERN_DEBUG) debug-level messages
|
||||
|
||||
log_buf_len=n Sets the size of the printk ring buffer, in bytes.
|
||||
Format is n, nk, nM. n must be a power of two. The
|
||||
default is set in kernel config.
|
||||
Format: { n | nk | nM }
|
||||
n must be a power of two. The default size
|
||||
is set in the kernel config file.
|
||||
|
||||
lp=0 [LP] Specify parallel ports to use, e.g,
|
||||
lp=port[,port...] lp=none,parport0 (lp0 not configured, lp1 uses
|
||||
@ -750,23 +763,23 @@ running once the system is up.
|
||||
ltpc= [NET]
|
||||
Format: <io>,<irq>,<dma>
|
||||
|
||||
mac5380= [HW,SCSI]
|
||||
Format: <can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags>
|
||||
mac5380= [HW,SCSI] Format:
|
||||
<can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags>
|
||||
|
||||
mac53c9x= [HW,SCSI]
|
||||
Format: <num_esps>,<disconnect>,<nosync>,<can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags>
|
||||
mac53c9x= [HW,SCSI] Format:
|
||||
<num_esps>,<disconnect>,<nosync>,<can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags>
|
||||
|
||||
machvec= [IA64]
|
||||
Force the use of a particular machine-vector (machvec) in a generic
|
||||
kernel. Example: machvec=hpzx1_swiotlb
|
||||
machvec= [IA64] Force the use of a particular machine-vector
|
||||
(machvec) in a generic kernel.
|
||||
Example: machvec=hpzx1_swiotlb
|
||||
|
||||
mad16= [HW,OSS]
|
||||
Format: <io>,<irq>,<dma>,<dma16>,<mpu_io>,<mpu_irq>,<joystick>
|
||||
mad16= [HW,OSS] Format:
|
||||
<io>,<irq>,<dma>,<dma16>,<mpu_io>,<mpu_irq>,<joystick>
|
||||
|
||||
maui= [HW,OSS]
|
||||
Format: <io>,<irq>
|
||||
|
||||
max_loop= [LOOP] Maximum number of loopback devices that can
|
||||
|
||||
max_loop= [LOOP] Maximum number of loopback devices that can
|
||||
be mounted
|
||||
Format: <1-256>
|
||||
|
||||
@ -776,11 +789,11 @@ running once the system is up.
|
||||
max_addr=[KMG] [KNL,BOOT,ia64] All physical memory greater than or
|
||||
equal to this physical address is ignored.
|
||||
|
||||
max_luns= [SCSI] Maximum number of LUNs to probe
|
||||
max_luns= [SCSI] Maximum number of LUNs to probe.
|
||||
Should be between 1 and 2^32-1.
|
||||
|
||||
max_report_luns=
|
||||
[SCSI] Maximum number of LUNs received
|
||||
[SCSI] Maximum number of LUNs received.
|
||||
Should be between 1 and 16384.
|
||||
|
||||
mca-pentium [BUGS=IA-32]
|
||||
@ -796,11 +809,11 @@ running once the system is up.
|
||||
|
||||
md= [HW] RAID subsystems devices and level
|
||||
See Documentation/md.txt.
|
||||
|
||||
|
||||
mdacon= [MDA]
|
||||
Format: <first>,<last>
|
||||
Specifies range of consoles to be captured by the MDA.
|
||||
|
||||
|
||||
mem=nn[KMG] [KNL,BOOT] Force usage of a specific amount of memory
|
||||
Amount of memory to be used when the kernel is not able
|
||||
to see the whole system memory or for test.
|
||||
@ -851,15 +864,15 @@ running once the system is up.
|
||||
MTD_Partition= [MTD]
|
||||
Format: <name>,<region-number>,<size>,<offset>
|
||||
|
||||
MTD_Region= [MTD]
|
||||
Format: <name>,<region-number>[,<base>,<size>,<buswidth>,<altbuswidth>]
|
||||
MTD_Region= [MTD] Format:
|
||||
<name>,<region-number>[,<base>,<size>,<buswidth>,<altbuswidth>]
|
||||
|
||||
mtdparts= [MTD]
|
||||
See drivers/mtd/cmdline.c.
|
||||
|
||||
mtouchusb.raw_coordinates=
|
||||
[HW] Make the MicroTouch USB driver use raw coordinates ('y', default)
|
||||
or cooked coordinates ('n')
|
||||
[HW] Make the MicroTouch USB driver use raw coordinates
|
||||
('y', default) or cooked coordinates ('n')
|
||||
|
||||
n2= [NET] SDL Inc. RISCom/N2 synchronous serial card
|
||||
|
||||
@ -880,7 +893,9 @@ running once the system is up.
|
||||
Format: <irq>,<io>,<mem_start>,<mem_end>,<name>
|
||||
Note that mem_start is often overloaded to mean
|
||||
something different and driver-specific.
|
||||
|
||||
This usage is only documented in each driver source
|
||||
file if at all.
|
||||
|
||||
nfsaddrs= [NFS]
|
||||
See Documentation/nfsroot.txt.
|
||||
|
||||
@ -893,8 +908,8 @@ running once the system is up.
|
||||
emulation library even if a 387 maths coprocessor
|
||||
is present.
|
||||
|
||||
noalign [KNL,ARM]
|
||||
|
||||
noalign [KNL,ARM]
|
||||
|
||||
noapic [SMP,APIC] Tells the kernel to not make use of any
|
||||
IOAPICs that may be present in the system.
|
||||
|
||||
@ -905,19 +920,19 @@ running once the system is up.
|
||||
on "Classic" PPC cores.
|
||||
|
||||
nocache [ARM]
|
||||
|
||||
|
||||
nodisconnect [HW,SCSI,M68K] Disables SCSI disconnects.
|
||||
|
||||
noexec [IA-64]
|
||||
|
||||
noexec [IA-32, X86-64]
|
||||
noexec [IA-32,X86-64]
|
||||
noexec=on: enable non-executable mappings (default)
|
||||
noexec=off: disable nn-executable mappings
|
||||
|
||||
nofxsr [BUGS=IA-32]
|
||||
|
||||
nohlt [BUGS=ARM]
|
||||
|
||||
|
||||
no-hlt [BUGS=IA-32] Tells the kernel that the hlt
|
||||
instruction doesn't work correctly and not to
|
||||
use it.
|
||||
@ -948,8 +963,9 @@ running once the system is up.
|
||||
|
||||
noresidual [PPC] Don't use residual data on PReP machines.
|
||||
|
||||
noresume [SWSUSP] Disables resume and restore original swap space.
|
||||
|
||||
noresume [SWSUSP] Disables resume and restores original swap
|
||||
space.
|
||||
|
||||
no-scroll [VGA] Disables scrollback.
|
||||
This is required for the Braillex ib80-piezo Braille
|
||||
reader made by F.H. Papenmeier (Germany).
|
||||
@ -965,16 +981,16 @@ running once the system is up.
|
||||
nousb [USB] Disable the USB subsystem
|
||||
|
||||
nowb [ARM]
|
||||
|
||||
|
||||
opl3= [HW,OSS]
|
||||
Format: <io>
|
||||
|
||||
opl3sa= [HW,OSS]
|
||||
Format: <io>,<irq>,<dma>,<dma2>,<mpu_io>,<mpu_irq>
|
||||
|
||||
opl3sa2= [HW,OSS]
|
||||
Format: <io>,<irq>,<dma>,<dma2>,<mss_io>,<mpu_io>,<ymode>,<loopback>[,<isapnp>,<multiple]
|
||||
|
||||
opl3sa2= [HW,OSS] Format:
|
||||
<io>,<irq>,<dma>,<dma2>,<mss_io>,<mpu_io>,<ymode>,<loopback>[,<isapnp>,<multiple]
|
||||
|
||||
oprofile.timer= [HW]
|
||||
Use timer interrupt instead of performance counters
|
||||
|
||||
@ -993,36 +1009,33 @@ running once the system is up.
|
||||
Format: <parport#>
|
||||
parkbd.mode= [HW] Parallel port keyboard adapter mode of operation,
|
||||
0 for XT, 1 for AT (default is AT).
|
||||
Format: <mode>
|
||||
Format: <mode>
|
||||
|
||||
parport=0 [HW,PPT] Specify parallel ports. 0 disables.
|
||||
parport=auto Use 'auto' to force the driver to use
|
||||
parport=0xBBB[,IRQ[,DMA]] any IRQ/DMA settings detected (the
|
||||
default is to ignore detected IRQ/DMA
|
||||
settings because of possible
|
||||
conflicts). You can specify the base
|
||||
address, IRQ, and DMA settings; IRQ and
|
||||
DMA should be numbers, or 'auto' (for
|
||||
using detected settings on that
|
||||
particular port), or 'nofifo' (to avoid
|
||||
using a FIFO even if it is detected).
|
||||
Parallel ports are assigned in the
|
||||
order they are specified on the command
|
||||
line, starting with parport0.
|
||||
parport= [HW,PPT] Specify parallel ports. 0 disables.
|
||||
Format: { 0 | auto | 0xBBB[,IRQ[,DMA]] }
|
||||
Use 'auto' to force the driver to use any
|
||||
IRQ/DMA settings detected (the default is to
|
||||
ignore detected IRQ/DMA settings because of
|
||||
possible conflicts). You can specify the base
|
||||
address, IRQ, and DMA settings; IRQ and DMA
|
||||
should be numbers, or 'auto' (for using detected
|
||||
settings on that particular port), or 'nofifo'
|
||||
(to avoid using a FIFO even if it is detected).
|
||||
Parallel ports are assigned in the order they
|
||||
are specified on the command line, starting
|
||||
with parport0.
|
||||
|
||||
parport_init_mode=
|
||||
[HW,PPT] Configure VIA parallel port to
|
||||
operate in specific mode. This is
|
||||
necessary on Pegasos computer where
|
||||
firmware has no options for setting up
|
||||
parallel port mode and sets it to
|
||||
spp. Currently this function knows
|
||||
686a and 8231 chips.
|
||||
parport_init_mode= [HW,PPT]
|
||||
Configure VIA parallel port to operate in
|
||||
a specific mode. This is necessary on Pegasos
|
||||
computer where firmware has no options for setting
|
||||
up parallel port mode and sets it to spp.
|
||||
Currently this function knows 686a and 8231 chips.
|
||||
Format: [spp|ps2|epp|ecp|ecpepp]
|
||||
|
||||
pas2= [HW,OSS]
|
||||
Format: <io>,<irq>,<dma>,<dma16>,<sb_io>,<sb_irq>,<sb_dma>,<sb_dma16>
|
||||
|
||||
pas2= [HW,OSS] Format:
|
||||
<io>,<irq>,<dma>,<dma16>,<sb_io>,<sb_irq>,<sb_dma>,<sb_dma16>
|
||||
|
||||
pas16= [HW,SCSI]
|
||||
See header of drivers/scsi/pas16.c.
|
||||
|
||||
@ -1032,64 +1045,67 @@ running once the system is up.
|
||||
See header of drivers/block/paride/pcd.c.
|
||||
See also Documentation/paride.txt.
|
||||
|
||||
pci=option[,option...] [PCI] various PCI subsystem options:
|
||||
off [IA-32] don't probe for the PCI bus
|
||||
bios [IA-32] force use of PCI BIOS, don't access
|
||||
the hardware directly. Use this if your machine
|
||||
has a non-standard PCI host bridge.
|
||||
nobios [IA-32] disallow use of PCI BIOS, only direct
|
||||
hardware access methods are allowed. Use this
|
||||
if you experience crashes upon bootup and you
|
||||
suspect they are caused by the BIOS.
|
||||
conf1 [IA-32] Force use of PCI Configuration Mechanism 1.
|
||||
conf2 [IA-32] Force use of PCI Configuration Mechanism 2.
|
||||
nosort [IA-32] Don't sort PCI devices according to
|
||||
order given by the PCI BIOS. This sorting is done
|
||||
to get a device order compatible with older kernels.
|
||||
biosirq [IA-32] Use PCI BIOS calls to get the interrupt
|
||||
routing table. These calls are known to be buggy
|
||||
on several machines and they hang the machine when used,
|
||||
but on other computers it's the only way to get the
|
||||
interrupt routing table. Try this option if the kernel
|
||||
is unable to allocate IRQs or discover secondary PCI
|
||||
buses on your motherboard.
|
||||
rom [IA-32] Assign address space to expansion ROMs.
|
||||
Use with caution as certain devices share address
|
||||
decoders between ROMs and other resources.
|
||||
irqmask=0xMMMM [IA-32] Set a bit mask of IRQs allowed to be assigned
|
||||
automatically to PCI devices. You can make the kernel
|
||||
exclude IRQs of your ISA cards this way.
|
||||
pci=option[,option...] [PCI] various PCI subsystem options:
|
||||
off [IA-32] don't probe for the PCI bus
|
||||
bios [IA-32] force use of PCI BIOS, don't access
|
||||
the hardware directly. Use this if your machine
|
||||
has a non-standard PCI host bridge.
|
||||
nobios [IA-32] disallow use of PCI BIOS, only direct
|
||||
hardware access methods are allowed. Use this
|
||||
if you experience crashes upon bootup and you
|
||||
suspect they are caused by the BIOS.
|
||||
conf1 [IA-32] Force use of PCI Configuration
|
||||
Mechanism 1.
|
||||
conf2 [IA-32] Force use of PCI Configuration
|
||||
Mechanism 2.
|
||||
nosort [IA-32] Don't sort PCI devices according to
|
||||
order given by the PCI BIOS. This sorting is
|
||||
done to get a device order compatible with
|
||||
older kernels.
|
||||
biosirq [IA-32] Use PCI BIOS calls to get the interrupt
|
||||
routing table. These calls are known to be buggy
|
||||
on several machines and they hang the machine
|
||||
when used, but on other computers it's the only
|
||||
way to get the interrupt routing table. Try
|
||||
this option if the kernel is unable to allocate
|
||||
IRQs or discover secondary PCI buses on your
|
||||
motherboard.
|
||||
rom [IA-32] Assign address space to expansion ROMs.
|
||||
Use with caution as certain devices share
|
||||
address decoders between ROMs and other
|
||||
resources.
|
||||
irqmask=0xMMMM [IA-32] Set a bit mask of IRQs allowed to be
|
||||
assigned automatically to PCI devices. You can
|
||||
make the kernel exclude IRQs of your ISA cards
|
||||
this way.
|
||||
pirqaddr=0xAAAAA [IA-32] Specify the physical address
|
||||
of the PIRQ table (normally generated
|
||||
by the BIOS) if it is outside the
|
||||
F0000h-100000h range.
|
||||
lastbus=N [IA-32] Scan all buses till bus #N. Can be useful
|
||||
if the kernel is unable to find your secondary buses
|
||||
and you want to tell it explicitly which ones they are.
|
||||
assign-busses [IA-32] Always assign all PCI bus
|
||||
numbers ourselves, overriding
|
||||
whatever the firmware may have
|
||||
done.
|
||||
usepirqmask [IA-32] Honor the possible IRQ mask
|
||||
stored in the BIOS $PIR table. This is
|
||||
needed on some systems with broken
|
||||
BIOSes, notably some HP Pavilion N5400
|
||||
and Omnibook XE3 notebooks. This will
|
||||
have no effect if ACPI IRQ routing is
|
||||
enabled.
|
||||
noacpi [IA-32] Do not use ACPI for IRQ routing
|
||||
or for PCI scanning.
|
||||
routeirq Do IRQ routing for all PCI devices.
|
||||
This is normally done in pci_enable_device(),
|
||||
so this option is a temporary workaround
|
||||
for broken drivers that don't call it.
|
||||
|
||||
firmware [ARM] Do not re-enumerate the bus but
|
||||
instead just use the configuration
|
||||
from the bootloader. This is currently
|
||||
used on IXP2000 systems where the
|
||||
bus has to be configured a certain way
|
||||
for adjunct CPUs.
|
||||
of the PIRQ table (normally generated
|
||||
by the BIOS) if it is outside the
|
||||
F0000h-100000h range.
|
||||
lastbus=N [IA-32] Scan all buses thru bus #N. Can be
|
||||
useful if the kernel is unable to find your
|
||||
secondary buses and you want to tell it
|
||||
explicitly which ones they are.
|
||||
assign-busses [IA-32] Always assign all PCI bus
|
||||
numbers ourselves, overriding
|
||||
whatever the firmware may have done.
|
||||
usepirqmask [IA-32] Honor the possible IRQ mask stored
|
||||
in the BIOS $PIR table. This is needed on
|
||||
some systems with broken BIOSes, notably
|
||||
some HP Pavilion N5400 and Omnibook XE3
|
||||
notebooks. This will have no effect if ACPI
|
||||
IRQ routing is enabled.
|
||||
noacpi [IA-32] Do not use ACPI for IRQ routing
|
||||
or for PCI scanning.
|
||||
routeirq Do IRQ routing for all PCI devices.
|
||||
This is normally done in pci_enable_device(),
|
||||
so this option is a temporary workaround
|
||||
for broken drivers that don't call it.
|
||||
firmware [ARM] Do not re-enumerate the bus but instead
|
||||
just use the configuration from the
|
||||
bootloader. This is currently used on
|
||||
IXP2000 systems where the bus has to be
|
||||
configured a certain way for adjunct CPUs.
|
||||
|
||||
pcmv= [HW,PCMCIA] BadgePAD 4
|
||||
|
||||
@ -1127,19 +1143,20 @@ running once the system is up.
|
||||
[ISAPNP] Exclude DMAs for the autoconfiguration
|
||||
|
||||
pnp_reserve_io= [ISAPNP] Exclude I/O ports for the autoconfiguration
|
||||
Ranges are in pairs (I/O port base and size).
|
||||
Ranges are in pairs (I/O port base and size).
|
||||
|
||||
pnp_reserve_mem=
|
||||
[ISAPNP] Exclude memory regions for the autoconfiguration
|
||||
[ISAPNP] Exclude memory regions for the
|
||||
autoconfiguration.
|
||||
Ranges are in pairs (memory base and size).
|
||||
|
||||
profile= [KNL] Enable kernel profiling via /proc/profile
|
||||
{ schedule | <number> }
|
||||
(param: schedule - profile schedule points}
|
||||
(param: profile step/bucket size as a power of 2 for
|
||||
statistical time based profiling)
|
||||
Format: [schedule,]<number>
|
||||
Param: "schedule" - profile schedule points.
|
||||
Param: <number> - step/bucket size as a power of 2 for
|
||||
statistical time based profiling.
|
||||
|
||||
processor.max_cstate= [HW, ACPI]
|
||||
processor.max_cstate= [HW,ACPI]
|
||||
Limit processor to maximum C-state
|
||||
max_cstate=9 overrides any DMI blacklist limit.
|
||||
|
||||
@ -1147,27 +1164,28 @@ running once the system is up.
|
||||
before loading.
|
||||
See Documentation/ramdisk.txt.
|
||||
|
||||
psmouse.proto= [HW,MOUSE] Highest PS2 mouse protocol extension to
|
||||
probe for (bare|imps|exps|lifebook|any).
|
||||
psmouse.proto= [HW,MOUSE] Highest PS2 mouse protocol extension to
|
||||
probe for; one of (bare|imps|exps|lifebook|any).
|
||||
psmouse.rate= [HW,MOUSE] Set desired mouse report rate, in reports
|
||||
per second.
|
||||
psmouse.resetafter=
|
||||
[HW,MOUSE] Try to reset the device after so many bad packets
|
||||
psmouse.resetafter= [HW,MOUSE]
|
||||
Try to reset the device after so many bad packets
|
||||
(0 = never).
|
||||
psmouse.resolution=
|
||||
[HW,MOUSE] Set desired mouse resolution, in dpi.
|
||||
psmouse.smartscroll=
|
||||
[HW,MOUSE] Controls Logitech smartscroll autorepeat,
|
||||
[HW,MOUSE] Controls Logitech smartscroll autorepeat.
|
||||
0 = disabled, 1 = enabled (default).
|
||||
|
||||
pss= [HW,OSS] Personal Sound System (ECHO ESC614)
|
||||
Format: <io>,<mss_io>,<mss_irq>,<mss_dma>,<mpu_io>,<mpu_irq>
|
||||
Format:
|
||||
<io>,<mss_io>,<mss_irq>,<mss_dma>,<mpu_io>,<mpu_irq>
|
||||
|
||||
pt. [PARIDE]
|
||||
See Documentation/paride.txt.
|
||||
|
||||
quiet= [KNL] Disable log messages
|
||||
|
||||
|
||||
r128= [HW,DRM]
|
||||
|
||||
raid= [HW,RAID]
|
||||
@ -1176,10 +1194,9 @@ running once the system is up.
|
||||
ramdisk= [RAM] Sizes of RAM disks in kilobytes [deprecated]
|
||||
See Documentation/ramdisk.txt.
|
||||
|
||||
ramdisk_blocksize=
|
||||
[RAM]
|
||||
ramdisk_blocksize= [RAM]
|
||||
See Documentation/ramdisk.txt.
|
||||
|
||||
|
||||
ramdisk_size= [RAM] Sizes of RAM disks in kilobytes
|
||||
New name for the ramdisk parameter.
|
||||
See Documentation/ramdisk.txt.
|
||||
@ -1195,7 +1212,8 @@ running once the system is up.
|
||||
|
||||
reserve= [KNL,BUGS] Force the kernel to ignore some iomem area
|
||||
|
||||
resume= [SWSUSP] Specify the partition device for software suspension
|
||||
resume= [SWSUSP]
|
||||
Specify the partition device for software suspend
|
||||
|
||||
rhash_entries= [KNL,NET]
|
||||
Set number of hash buckets for route cache
|
||||
@ -1225,7 +1243,7 @@ running once the system is up.
|
||||
Format: <io>,<irq>,<dma>,<dma2>
|
||||
|
||||
sbni= [NET] Granch SBNI12 leased line adapter
|
||||
|
||||
|
||||
sbpcd= [HW,CD] Soundblaster CD adapter
|
||||
Format: <io>,<type>
|
||||
See a comment before function sbpcd_setup() in
|
||||
@ -1258,21 +1276,20 @@ running once the system is up.
|
||||
|
||||
serialnumber [BUGS=IA-32]
|
||||
|
||||
sg_def_reserved_size=
|
||||
[SCSI]
|
||||
|
||||
sg_def_reserved_size= [SCSI]
|
||||
|
||||
sgalaxy= [HW,OSS]
|
||||
Format: <io>,<irq>,<dma>,<dma2>,<sgbase>
|
||||
|
||||
shapers= [NET]
|
||||
Maximal number of shapers.
|
||||
|
||||
|
||||
sim710= [SCSI,HW]
|
||||
See header of drivers/scsi/sim710.c.
|
||||
|
||||
simeth= [IA-64]
|
||||
simscsi=
|
||||
|
||||
|
||||
sjcd= [HW,CD]
|
||||
Format: <io>,<irq>,<dma>
|
||||
See header of drivers/cdrom/sjcd.c.
|
||||
@ -1403,10 +1420,10 @@ running once the system is up.
|
||||
snd-wavefront= [HW,ALSA]
|
||||
|
||||
snd-ymfpci= [HW,ALSA]
|
||||
|
||||
|
||||
sonicvibes= [HW,OSS]
|
||||
Format: <reverb>
|
||||
|
||||
|
||||
sonycd535= [HW,CD]
|
||||
Format: <io>[,<irq>]
|
||||
|
||||
@ -1423,7 +1440,7 @@ running once the system is up.
|
||||
|
||||
sscape= [HW,OSS]
|
||||
Format: <io>,<irq>,<dma>,<mpu_io>,<mpu_irq>
|
||||
|
||||
|
||||
st= [HW,SCSI] SCSI tape parameters (buffers, etc.)
|
||||
See Documentation/scsi/st.txt.
|
||||
|
||||
@ -1446,7 +1463,7 @@ running once the system is up.
|
||||
stram_swap= [HW,M68k]
|
||||
|
||||
swiotlb= [IA-64] Number of I/O TLB slabs
|
||||
|
||||
|
||||
switches= [HW,M68k]
|
||||
|
||||
sym53c416= [HW,SCSI]
|
||||
@ -1479,14 +1496,16 @@ running once the system is up.
|
||||
tp720= [HW,PS2]
|
||||
|
||||
trix= [HW,OSS] MediaTrix AudioTrix Pro
|
||||
Format: <io>,<irq>,<dma>,<dma2>,<sb_io>,<sb_irq>,<sb_dma>,<mpu_io>,<mpu_irq>
|
||||
|
||||
Format:
|
||||
<io>,<irq>,<dma>,<dma2>,<sb_io>,<sb_irq>,<sb_dma>,<mpu_io>,<mpu_irq>
|
||||
|
||||
tsdev.xres= [TS] Horizontal screen resolution.
|
||||
tsdev.yres= [TS] Vertical screen resolution.
|
||||
|
||||
turbografx.map[2|3]=
|
||||
[HW,JOY] TurboGraFX parallel port interface
|
||||
Format: <port#>,<js1>,<js2>,<js3>,<js4>,<js5>,<js6>,<js7>
|
||||
turbografx.map[2|3]= [HW,JOY]
|
||||
TurboGraFX parallel port interface
|
||||
Format:
|
||||
<port#>,<js1>,<js2>,<js3>,<js4>,<js5>,<js6>,<js7>
|
||||
See also Documentation/input/joystick-parport.txt
|
||||
|
||||
u14-34f= [HW,SCSI] UltraStor 14F/34F SCSI host adapter
|
||||
@ -1502,17 +1521,18 @@ running once the system is up.
|
||||
|
||||
usbhid.mousepoll=
|
||||
[USBHID] The interval which mice are to be polled at.
|
||||
|
||||
|
||||
video= [FB] Frame buffer configuration
|
||||
See Documentation/fb/modedb.txt.
|
||||
|
||||
vga= [BOOT,IA-32] Select a particular video mode
|
||||
See Documentation/i386/boot.txt and Documentation/svga.txt.
|
||||
See Documentation/i386/boot.txt and
|
||||
Documentation/svga.txt.
|
||||
Use vga=ask for menu.
|
||||
This is actually a boot loader parameter; the value is
|
||||
passed to the kernel using a special protocol.
|
||||
|
||||
vmalloc=nn[KMG] [KNL,BOOT] forces the vmalloc area to have an exact
|
||||
vmalloc=nn[KMG] [KNL,BOOT] Forces the vmalloc area to have an exact
|
||||
size of <nn>. This can be used to increase the
|
||||
minimum size (128MB on x86). It can also be used to
|
||||
decrease the size and leave more room for directly
|
||||
@ -1520,11 +1540,11 @@ running once the system is up.
|
||||
|
||||
vmhalt= [KNL,S390]
|
||||
|
||||
vmpoff= [KNL,S390]
|
||||
|
||||
vmpoff= [KNL,S390]
|
||||
|
||||
waveartist= [HW,OSS]
|
||||
Format: <io>,<irq>,<dma>,<dma2>
|
||||
|
||||
|
||||
wd33c93= [HW,SCSI]
|
||||
See header of drivers/scsi/wd33c93.c.
|
||||
|
||||
@ -1538,21 +1558,25 @@ running once the system is up.
|
||||
xd_geo= See header of drivers/block/xd.c.
|
||||
|
||||
xirc2ps_cs= [NET,PCMCIA]
|
||||
Format: <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
|
||||
|
||||
Format:
|
||||
<irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
|
||||
|
||||
|
||||
______________________________________________________________________
|
||||
Changelog:
|
||||
|
||||
2000-06-?? Mr. Unknown
|
||||
The last known update (for 2.4.0) - the changelog was not kept before.
|
||||
2000-06-?? Mr. Unknown
|
||||
|
||||
2002-11-24 Petr Baudis <pasky@ucw.cz>
|
||||
Randy Dunlap <randy.dunlap@verizon.net>
|
||||
Update for 2.5.49, description for most of the options introduced,
|
||||
references to other documentation (C files, READMEs, ..), added S390,
|
||||
PPC, SPARC, MTD, ALSA and OSS category. Minor corrections and
|
||||
reformatting.
|
||||
2002-11-24 Petr Baudis <pasky@ucw.cz>
|
||||
Randy Dunlap <randy.dunlap@verizon.net>
|
||||
|
||||
2005-10-19 Randy Dunlap <rdunlap@xenotime.net>
|
||||
Lots of typos, whitespace, some reformatting.
|
||||
|
||||
TODO:
|
||||
|
||||
|
@ -67,7 +67,7 @@ static void impd1_setvco(struct clk *clk, struct icst525_vco vco)
|
||||
}
|
||||
writel(0, impd1->base + IMPD1_LOCK);
|
||||
|
||||
#if DEBUG
|
||||
#ifdef DEBUG
|
||||
vco.v = val & 0x1ff;
|
||||
vco.r = (val >> 9) & 0x7f;
|
||||
vco.s = (val >> 16) & 7;
|
||||
@ -427,17 +427,18 @@ static int impd1_probe(struct lm_device *dev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int impd1_remove_one(struct device *dev, void *data)
|
||||
{
|
||||
device_unregister(dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void impd1_remove(struct lm_device *dev)
|
||||
{
|
||||
struct impd1_module *impd1 = lm_get_drvdata(dev);
|
||||
struct list_head *l, *n;
|
||||
int i;
|
||||
|
||||
list_for_each_safe(l, n, &dev->dev.children) {
|
||||
struct device *d = list_to_dev(l);
|
||||
|
||||
device_unregister(d);
|
||||
}
|
||||
device_for_each_child(&dev->dev, NULL, impd1_remove_one);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(impd1->vcos); i++)
|
||||
clk_unregister(&impd1->vcos[i]);
|
||||
|
@ -488,6 +488,7 @@ static int is_pxafb_device(struct device * dev, void * data)
|
||||
|
||||
unsigned long spitz_get_hsync_len(void)
|
||||
{
|
||||
#ifdef CONFIG_FB_PXA
|
||||
if (!spitz_pxafb_dev) {
|
||||
spitz_pxafb_dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device);
|
||||
if (!spitz_pxafb_dev)
|
||||
@ -496,6 +497,7 @@ unsigned long spitz_get_hsync_len(void)
|
||||
if (!get_hsync_time)
|
||||
get_hsync_time = symbol_get(pxafb_get_hsync_time);
|
||||
if (!get_hsync_time)
|
||||
#endif
|
||||
return 0;
|
||||
|
||||
return pxafb_get_hsync_time(spitz_pxafb_dev);
|
||||
|
@ -250,6 +250,25 @@ void __init pxa_set_i2c_info(struct i2c_pxa_platform_data *info)
|
||||
i2c_device.dev.platform_data = info;
|
||||
}
|
||||
|
||||
static struct resource i2s_resources[] = {
|
||||
{
|
||||
.start = 0x40400000,
|
||||
.end = 0x40400083,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = IRQ_I2S,
|
||||
.end = IRQ_I2S,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device i2s_device = {
|
||||
.name = "pxa2xx-i2s",
|
||||
.id = -1,
|
||||
.resource = i2c_resources,
|
||||
.num_resources = ARRAY_SIZE(i2s_resources),
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&pxamci_device,
|
||||
&udc_device,
|
||||
@ -258,6 +277,7 @@ static struct platform_device *devices[] __initdata = {
|
||||
&btuart_device,
|
||||
&stuart_device,
|
||||
&i2c_device,
|
||||
&i2s_device,
|
||||
};
|
||||
|
||||
static int __init pxa_init(void)
|
||||
|
@ -307,9 +307,9 @@ static void bast_nand_select(struct s3c2410_nand_set *set, int slot)
|
||||
}
|
||||
|
||||
static struct s3c2410_platform_nand bast_nand_info = {
|
||||
.tacls = 40,
|
||||
.twrph0 = 80,
|
||||
.twrph1 = 80,
|
||||
.tacls = 30,
|
||||
.twrph0 = 60,
|
||||
.twrph1 = 60,
|
||||
.nr_sets = ARRAY_SIZE(bast_nand_sets),
|
||||
.sets = bast_nand_sets,
|
||||
.select_chip = bast_nand_select,
|
||||
|
@ -44,7 +44,7 @@
|
||||
|
||||
#define PFX "powernow-k8: "
|
||||
#define BFX PFX "BIOS error: "
|
||||
#define VERSION "version 1.50.3"
|
||||
#define VERSION "version 1.50.4"
|
||||
#include "powernow-k8.h"
|
||||
|
||||
/* serialize freq changes */
|
||||
@ -111,8 +111,8 @@ static int query_current_values_with_pending_wait(struct powernow_k8_data *data)
|
||||
u32 i = 0;
|
||||
|
||||
do {
|
||||
if (i++ > 0x1000000) {
|
||||
printk(KERN_ERR PFX "detected change pending stuck\n");
|
||||
if (i++ > 10000) {
|
||||
dprintk("detected change pending stuck\n");
|
||||
return 1;
|
||||
}
|
||||
rdmsr(MSR_FIDVID_STATUS, lo, hi);
|
||||
@ -159,6 +159,7 @@ static int write_new_fid(struct powernow_k8_data *data, u32 fid)
|
||||
{
|
||||
u32 lo;
|
||||
u32 savevid = data->currvid;
|
||||
u32 i = 0;
|
||||
|
||||
if ((fid & INVALID_FID_MASK) || (data->currvid & INVALID_VID_MASK)) {
|
||||
printk(KERN_ERR PFX "internal error - overflow on fid write\n");
|
||||
@ -170,10 +171,13 @@ static int write_new_fid(struct powernow_k8_data *data, u32 fid)
|
||||
dprintk("writing fid 0x%x, lo 0x%x, hi 0x%x\n",
|
||||
fid, lo, data->plllock * PLL_LOCK_CONVERSION);
|
||||
|
||||
wrmsr(MSR_FIDVID_CTL, lo, data->plllock * PLL_LOCK_CONVERSION);
|
||||
|
||||
if (query_current_values_with_pending_wait(data))
|
||||
return 1;
|
||||
do {
|
||||
wrmsr(MSR_FIDVID_CTL, lo, data->plllock * PLL_LOCK_CONVERSION);
|
||||
if (i++ > 100) {
|
||||
printk(KERN_ERR PFX "internal error - pending bit very stuck - no further pstate changes possible\n");
|
||||
return 1;
|
||||
}
|
||||
} while (query_current_values_with_pending_wait(data));
|
||||
|
||||
count_off_irt(data);
|
||||
|
||||
@ -197,6 +201,7 @@ static int write_new_vid(struct powernow_k8_data *data, u32 vid)
|
||||
{
|
||||
u32 lo;
|
||||
u32 savefid = data->currfid;
|
||||
int i = 0;
|
||||
|
||||
if ((data->currfid & INVALID_FID_MASK) || (vid & INVALID_VID_MASK)) {
|
||||
printk(KERN_ERR PFX "internal error - overflow on vid write\n");
|
||||
@ -208,10 +213,13 @@ static int write_new_vid(struct powernow_k8_data *data, u32 vid)
|
||||
dprintk("writing vid 0x%x, lo 0x%x, hi 0x%x\n",
|
||||
vid, lo, STOP_GRANT_5NS);
|
||||
|
||||
wrmsr(MSR_FIDVID_CTL, lo, STOP_GRANT_5NS);
|
||||
|
||||
if (query_current_values_with_pending_wait(data))
|
||||
return 1;
|
||||
do {
|
||||
wrmsr(MSR_FIDVID_CTL, lo, STOP_GRANT_5NS);
|
||||
if (i++ > 100) {
|
||||
printk(KERN_ERR PFX "internal error - pending bit very stuck - no further pstate changes possible\n");
|
||||
return 1;
|
||||
}
|
||||
} while (query_current_values_with_pending_wait(data));
|
||||
|
||||
if (savefid != data->currfid) {
|
||||
printk(KERN_ERR PFX "fid changed on vid trans, old 0x%x new 0x%x\n",
|
||||
|
@ -66,7 +66,7 @@ static long iSeries_hpte_insert(unsigned long hpte_group, unsigned long va,
|
||||
}
|
||||
|
||||
if (slot < 0) { /* MSB set means secondary group */
|
||||
vflags |= HPTE_V_VALID;
|
||||
vflags |= HPTE_V_SECONDARY;
|
||||
secondary = 1;
|
||||
slot &= 0x7fffffffffffffff;
|
||||
}
|
||||
|
@ -506,8 +506,8 @@ struct mpic * __init mpic_alloc(unsigned long phys_addr,
|
||||
mpic->senses_count = senses_count;
|
||||
|
||||
/* Map the global registers */
|
||||
mpic->gregs = ioremap(phys_addr + MPIC_GREG_BASE, 0x1000);
|
||||
mpic->tmregs = mpic->gregs + (MPIC_TIMER_BASE >> 2);
|
||||
mpic->gregs = ioremap(phys_addr + MPIC_GREG_BASE, 0x2000);
|
||||
mpic->tmregs = mpic->gregs + ((MPIC_TIMER_BASE - MPIC_GREG_BASE) >> 2);
|
||||
BUG_ON(mpic->gregs == NULL);
|
||||
|
||||
/* Reset */
|
||||
|
@ -870,7 +870,7 @@ void div128_by_32( unsigned long dividend_high, unsigned long dividend_low,
|
||||
rb = ((ra + b) - (x * divisor)) << 32;
|
||||
|
||||
y = (rb + c)/divisor;
|
||||
rc = ((rb + b) - (y * divisor)) << 32;
|
||||
rc = ((rb + c) - (y * divisor)) << 32;
|
||||
|
||||
z = (rc + d)/divisor;
|
||||
|
||||
|
@ -799,8 +799,7 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long ea,
|
||||
if (cpus_equal(vma->vm_mm->cpu_vm_mask, tmp))
|
||||
local = 1;
|
||||
|
||||
__hash_page(ea, pte_val(pte) & (_PAGE_USER|_PAGE_RW), vsid, ptep,
|
||||
0x300, local);
|
||||
__hash_page(ea, 0, vsid, ptep, 0x300, local);
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
#include <kern_constants.h>
|
||||
|
||||
#define TASK_DEBUGREGS(task) ((unsigned long *) &(((char *) (task))[HOST_TASK_DEBUGREGS]))
|
||||
#ifdef CONFIG_MODE_TT
|
||||
#ifdef UML_CONFIG_MODE_TT
|
||||
#define TASK_EXTERN_PID(task) *((int *) &(((char *) (task))[HOST_TASK_EXTERN_PID]))
|
||||
#endif
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
#include <kern_constants.h>
|
||||
|
||||
#ifdef CONFIG_MODE_TT
|
||||
#ifdef UML_CONFIG_MODE_TT
|
||||
#define TASK_EXTERN_PID(task) *((int *) &(((char *) (task))[HOST_TASK_EXTERN_PID]))
|
||||
#endif
|
||||
|
||||
|
@ -148,7 +148,8 @@ static __inline__ struct page *drm_do_vm_shm_nopage(struct vm_area_struct *vma,
|
||||
|
||||
offset = address - vma->vm_start;
|
||||
i = (unsigned long)map->handle + offset;
|
||||
page = vmalloc_to_page((void *)i);
|
||||
page = (map->type == _DRM_CONSISTENT) ?
|
||||
virt_to_page((void *)i) : vmalloc_to_page((void *)i);
|
||||
if (!page)
|
||||
return NOPAGE_OOM;
|
||||
get_page(page);
|
||||
|
@ -227,7 +227,7 @@ static inline u32 _MGA_READ(u32 *addr)
|
||||
#define MGA_EMIT_STATE( dev_priv, dirty ) \
|
||||
do { \
|
||||
if ( (dirty) & ~MGA_UPLOAD_CLIPRECTS ) { \
|
||||
if ( dev_priv->chipset == MGA_CARD_TYPE_G400 ) { \
|
||||
if ( dev_priv->chipset >= MGA_CARD_TYPE_G400 ) { \
|
||||
mga_g400_emit_state( dev_priv ); \
|
||||
} else { \
|
||||
mga_g200_emit_state( dev_priv ); \
|
||||
|
@ -53,7 +53,7 @@ static void mga_emit_clip_rect( drm_mga_private_t *dev_priv,
|
||||
|
||||
/* Force reset of DWGCTL on G400 (eliminates clip disable bit).
|
||||
*/
|
||||
if (dev_priv->chipset == MGA_CARD_TYPE_G400) {
|
||||
if (dev_priv->chipset >= MGA_CARD_TYPE_G400) {
|
||||
DMA_BLOCK(MGA_DWGCTL, ctx->dwgctl,
|
||||
MGA_LEN + MGA_EXEC, 0x80000000,
|
||||
MGA_DWGCTL, ctx->dwgctl,
|
||||
|
@ -1133,10 +1133,10 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev,
|
||||
ring_start = (dev_priv->cp_ring->offset
|
||||
- dev->agp->base
|
||||
+ dev_priv->gart_vm_start);
|
||||
} else
|
||||
} else
|
||||
#endif
|
||||
ring_start = (dev_priv->cp_ring->offset
|
||||
- dev->sg->handle
|
||||
- (unsigned long)dev->sg->virtual
|
||||
+ dev_priv->gart_vm_start);
|
||||
|
||||
RADEON_WRITE( RADEON_CP_RB_BASE, ring_start );
|
||||
@ -1164,7 +1164,8 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev,
|
||||
drm_sg_mem_t *entry = dev->sg;
|
||||
unsigned long tmp_ofs, page_ofs;
|
||||
|
||||
tmp_ofs = dev_priv->ring_rptr->offset - dev->sg->handle;
|
||||
tmp_ofs = dev_priv->ring_rptr->offset -
|
||||
(unsigned long)dev->sg->virtual;
|
||||
page_ofs = tmp_ofs >> PAGE_SHIFT;
|
||||
|
||||
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 )
|
||||
else
|
||||
#endif
|
||||
dev_priv->gart_buffers_offset = (dev->agp_buffer_map->offset
|
||||
- dev->sg->handle
|
||||
+ dev_priv->gart_vm_start);
|
||||
- (unsigned long)dev->sg->virtual
|
||||
+ dev_priv->gart_vm_start);
|
||||
|
||||
DRM_DEBUG( "dev_priv->gart_size %d\n",
|
||||
dev_priv->gart_size );
|
||||
|
@ -396,20 +396,21 @@ static irqreturn_t mthca_tavor_interrupt(int irq, void *dev_ptr, struct pt_regs
|
||||
writel(dev->eq_table.clr_mask, dev->eq_table.clr_int);
|
||||
|
||||
ecr = readl(dev->eq_regs.tavor.ecr_base + 4);
|
||||
if (ecr) {
|
||||
writel(ecr, dev->eq_regs.tavor.ecr_base +
|
||||
MTHCA_ECR_CLR_BASE - MTHCA_ECR_BASE + 4);
|
||||
if (!ecr)
|
||||
return IRQ_NONE;
|
||||
|
||||
for (i = 0; i < MTHCA_NUM_EQ; ++i)
|
||||
if (ecr & dev->eq_table.eq[i].eqn_mask &&
|
||||
mthca_eq_int(dev, &dev->eq_table.eq[i])) {
|
||||
writel(ecr, dev->eq_regs.tavor.ecr_base +
|
||||
MTHCA_ECR_CLR_BASE - MTHCA_ECR_BASE + 4);
|
||||
|
||||
for (i = 0; i < MTHCA_NUM_EQ; ++i)
|
||||
if (ecr & dev->eq_table.eq[i].eqn_mask) {
|
||||
if (mthca_eq_int(dev, &dev->eq_table.eq[i]))
|
||||
tavor_set_eq_ci(dev, &dev->eq_table.eq[i],
|
||||
dev->eq_table.eq[i].cons_index);
|
||||
tavor_eq_req_not(dev, dev->eq_table.eq[i].eqn);
|
||||
}
|
||||
}
|
||||
tavor_eq_req_not(dev, dev->eq_table.eq[i].eqn);
|
||||
}
|
||||
|
||||
return IRQ_RETVAL(ecr);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static irqreturn_t mthca_tavor_msi_x_interrupt(int irq, void *eq_ptr,
|
||||
|
@ -3568,7 +3568,8 @@ static void md_do_sync(mddev_t *mddev)
|
||||
mddev->curr_resync = 2;
|
||||
|
||||
try_again:
|
||||
if (signal_pending(current)) {
|
||||
if (signal_pending(current) ||
|
||||
kthread_should_stop()) {
|
||||
flush_signals(current);
|
||||
set_bit(MD_RECOVERY_INTR, &mddev->recovery);
|
||||
goto skip;
|
||||
@ -3590,8 +3591,9 @@ static void md_do_sync(mddev_t *mddev)
|
||||
*/
|
||||
continue;
|
||||
prepare_to_wait(&resync_wait, &wq, TASK_INTERRUPTIBLE);
|
||||
if (!signal_pending(current)
|
||||
&& mddev2->curr_resync >= mddev->curr_resync) {
|
||||
if (!signal_pending(current) &&
|
||||
!kthread_should_stop() &&
|
||||
mddev2->curr_resync >= mddev->curr_resync) {
|
||||
printk(KERN_INFO "md: delaying resync of %s"
|
||||
" until %s has finished resync (they"
|
||||
" share one or more physical units)\n",
|
||||
@ -3697,7 +3699,7 @@ static void md_do_sync(mddev_t *mddev)
|
||||
}
|
||||
|
||||
|
||||
if (signal_pending(current)) {
|
||||
if (signal_pending(current) || kthread_should_stop()) {
|
||||
/*
|
||||
* got a signal, exit.
|
||||
*/
|
||||
|
@ -262,7 +262,6 @@ config VIDEO_SAA7134_DVB
|
||||
depends on VIDEO_SAA7134 && DVB_CORE
|
||||
select VIDEO_BUF_DVB
|
||||
select DVB_MT352
|
||||
select DVB_CX22702
|
||||
select DVB_TDA1004X
|
||||
---help---
|
||||
This adds support for DVB cards based on the
|
||||
|
@ -257,8 +257,8 @@ static void mptsas_print_device_pg0(SasDevicePage0_t *pg0)
|
||||
printk("SAS Address=0x%llX\n", le64_to_cpu(sas_address));
|
||||
printk("Target ID=0x%X\n", pg0->TargetID);
|
||||
printk("Bus=0x%X\n", pg0->Bus);
|
||||
printk("PhyNum=0x%X\n", pg0->PhyNum);
|
||||
printk("AccessStatus=0x%X\n", le16_to_cpu(pg0->AccessStatus));
|
||||
printk("Parent Phy Num=0x%X\n", pg0->PhyNum);
|
||||
printk("Access Status=0x%X\n", le16_to_cpu(pg0->AccessStatus));
|
||||
printk("Device Info=0x%X\n", le32_to_cpu(pg0->DeviceInfo));
|
||||
printk("Flags=0x%X\n", le16_to_cpu(pg0->Flags));
|
||||
printk("Physical Port=0x%X\n", pg0->PhysicalPort);
|
||||
@ -270,7 +270,7 @@ static void mptsas_print_expander_pg1(SasExpanderPage1_t *pg1)
|
||||
printk("---- SAS EXPANDER PAGE 1 ------------\n");
|
||||
|
||||
printk("Physical Port=0x%X\n", pg1->PhysicalPort);
|
||||
printk("PHY Identifier=0x%X\n", pg1->Phy);
|
||||
printk("PHY Identifier=0x%X\n", pg1->PhyIdentifier);
|
||||
printk("Negotiated Link Rate=0x%X\n", pg1->NegotiatedLinkRate);
|
||||
printk("Programmed Link Rate=0x%X\n", pg1->ProgrammedLinkRate);
|
||||
printk("Hardware Link Rate=0x%X\n", pg1->HwLinkRate);
|
||||
@ -604,7 +604,7 @@ mptsas_sas_expander_pg1(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info,
|
||||
mptsas_print_expander_pg1(buffer);
|
||||
|
||||
/* save config data */
|
||||
phy_info->phy_id = buffer->Phy;
|
||||
phy_info->phy_id = buffer->PhyIdentifier;
|
||||
phy_info->port_id = buffer->PhysicalPort;
|
||||
phy_info->negotiated_link_rate = buffer->NegotiatedLinkRate;
|
||||
phy_info->programmed_link_rate = buffer->ProgrammedLinkRate;
|
||||
@ -825,6 +825,8 @@ mptsas_probe_hba_phys(MPT_ADAPTER *ioc, int *index)
|
||||
mptsas_sas_device_pg0(ioc, &port_info->phy_info[i].identify,
|
||||
(MPI_SAS_DEVICE_PGAD_FORM_GET_NEXT_HANDLE <<
|
||||
MPI_SAS_DEVICE_PGAD_FORM_SHIFT), handle);
|
||||
port_info->phy_info[i].identify.phy_id =
|
||||
port_info->phy_info[i].phy_id;
|
||||
handle = port_info->phy_info[i].identify.handle;
|
||||
|
||||
if (port_info->phy_info[i].attached.handle) {
|
||||
@ -881,6 +883,8 @@ mptsas_probe_expander_phys(MPT_ADAPTER *ioc, u32 *handle, int *index)
|
||||
(MPI_SAS_DEVICE_PGAD_FORM_HANDLE <<
|
||||
MPI_SAS_DEVICE_PGAD_FORM_SHIFT),
|
||||
port_info->phy_info[i].identify.handle);
|
||||
port_info->phy_info[i].identify.phy_id =
|
||||
port_info->phy_info[i].phy_id;
|
||||
}
|
||||
|
||||
if (port_info->phy_info[i].attached.handle) {
|
||||
|
@ -241,7 +241,8 @@ static void __devinit quirk_s3_64M(struct pci_dev *dev)
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_868, quirk_s3_64M );
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_968, quirk_s3_64M );
|
||||
|
||||
static void __devinit quirk_io_region(struct pci_dev *dev, unsigned region, unsigned size, int nr)
|
||||
static void __devinit quirk_io_region(struct pci_dev *dev, unsigned region,
|
||||
unsigned size, int nr, const char *name)
|
||||
{
|
||||
region &= ~(size-1);
|
||||
if (region) {
|
||||
@ -259,6 +260,7 @@ static void __devinit quirk_io_region(struct pci_dev *dev, unsigned region, unsi
|
||||
pcibios_bus_to_resource(dev, res, &bus_region);
|
||||
|
||||
pci_claim_resource(dev, nr);
|
||||
printk("PCI quirk: region %04x-%04x claimed by %s\n", region, region + size - 1, name);
|
||||
}
|
||||
}
|
||||
|
||||
@ -291,25 +293,98 @@ static void __devinit quirk_ali7101_acpi(struct pci_dev *dev)
|
||||
u16 region;
|
||||
|
||||
pci_read_config_word(dev, 0xE0, ®ion);
|
||||
quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES);
|
||||
quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES, "ali7101 ACPI");
|
||||
pci_read_config_word(dev, 0xE2, ®ion);
|
||||
quirk_io_region(dev, region, 32, PCI_BRIDGE_RESOURCES+1);
|
||||
quirk_io_region(dev, region, 32, PCI_BRIDGE_RESOURCES+1, "ali7101 SMB");
|
||||
}
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M7101, quirk_ali7101_acpi );
|
||||
|
||||
static void piix4_io_quirk(struct pci_dev *dev, const char *name, unsigned int port, unsigned int enable)
|
||||
{
|
||||
u32 devres;
|
||||
u32 mask, size, base;
|
||||
|
||||
pci_read_config_dword(dev, port, &devres);
|
||||
if ((devres & enable) != enable)
|
||||
return;
|
||||
mask = (devres >> 16) & 15;
|
||||
base = devres & 0xffff;
|
||||
size = 16;
|
||||
for (;;) {
|
||||
unsigned bit = size >> 1;
|
||||
if ((bit & mask) == bit)
|
||||
break;
|
||||
size = bit;
|
||||
}
|
||||
/*
|
||||
* For now we only print it out. Eventually we'll want to
|
||||
* reserve it (at least if it's in the 0x1000+ range), but
|
||||
* let's get enough confirmation reports first.
|
||||
*/
|
||||
base &= -size;
|
||||
printk("%s PIO at %04x-%04x\n", name, base, base + size - 1);
|
||||
}
|
||||
|
||||
static void piix4_mem_quirk(struct pci_dev *dev, const char *name, unsigned int port, unsigned int enable)
|
||||
{
|
||||
u32 devres;
|
||||
u32 mask, size, base;
|
||||
|
||||
pci_read_config_dword(dev, port, &devres);
|
||||
if ((devres & enable) != enable)
|
||||
return;
|
||||
base = devres & 0xffff0000;
|
||||
mask = (devres & 0x3f) << 16;
|
||||
size = 128 << 16;
|
||||
for (;;) {
|
||||
unsigned bit = size >> 1;
|
||||
if ((bit & mask) == bit)
|
||||
break;
|
||||
size = bit;
|
||||
}
|
||||
/*
|
||||
* For now we only print it out. Eventually we'll want to
|
||||
* reserve it, but let's get enough confirmation reports first.
|
||||
*/
|
||||
base &= -size;
|
||||
printk("%s MMIO at %04x-%04x\n", name, base, base + size - 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* PIIX4 ACPI: Two IO regions pointed to by longwords at
|
||||
* 0x40 (64 bytes of ACPI registers)
|
||||
* 0x90 (32 bytes of SMB registers)
|
||||
* and a few strange programmable PIIX4 device resources.
|
||||
*/
|
||||
static void __devinit quirk_piix4_acpi(struct pci_dev *dev)
|
||||
{
|
||||
u32 region;
|
||||
u32 region, res_a;
|
||||
|
||||
pci_read_config_dword(dev, 0x40, ®ion);
|
||||
quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES);
|
||||
quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES, "PIIX4 ACPI");
|
||||
pci_read_config_dword(dev, 0x90, ®ion);
|
||||
quirk_io_region(dev, region, 32, PCI_BRIDGE_RESOURCES+1);
|
||||
quirk_io_region(dev, region, 32, PCI_BRIDGE_RESOURCES+1, "PIIX4 SMB");
|
||||
|
||||
/* Device resource A has enables for some of the other ones */
|
||||
pci_read_config_dword(dev, 0x5c, &res_a);
|
||||
|
||||
piix4_io_quirk(dev, "PIIX4 devres B", 0x60, 3 << 21);
|
||||
piix4_io_quirk(dev, "PIIX4 devres C", 0x64, 3 << 21);
|
||||
|
||||
/* Device resource D is just bitfields for static resources */
|
||||
|
||||
/* Device 12 enabled? */
|
||||
if (res_a & (1 << 29)) {
|
||||
piix4_io_quirk(dev, "PIIX4 devres E", 0x68, 1 << 20);
|
||||
piix4_mem_quirk(dev, "PIIX4 devres F", 0x6c, 1 << 7);
|
||||
}
|
||||
/* Device 13 enabled? */
|
||||
if (res_a & (1 << 30)) {
|
||||
piix4_io_quirk(dev, "PIIX4 devres G", 0x70, 1 << 20);
|
||||
piix4_mem_quirk(dev, "PIIX4 devres H", 0x74, 1 << 7);
|
||||
}
|
||||
piix4_io_quirk(dev, "PIIX4 devres I", 0x78, 1 << 20);
|
||||
piix4_io_quirk(dev, "PIIX4 devres J", 0x7c, 1 << 20);
|
||||
}
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, quirk_piix4_acpi );
|
||||
|
||||
@ -323,10 +398,10 @@ static void __devinit quirk_ich4_lpc_acpi(struct pci_dev *dev)
|
||||
u32 region;
|
||||
|
||||
pci_read_config_dword(dev, 0x40, ®ion);
|
||||
quirk_io_region(dev, region, 128, PCI_BRIDGE_RESOURCES);
|
||||
quirk_io_region(dev, region, 128, PCI_BRIDGE_RESOURCES, "ICH4 ACPI/GPIO/TCO");
|
||||
|
||||
pci_read_config_dword(dev, 0x58, ®ion);
|
||||
quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES+1);
|
||||
quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES+1, "ICH4 GPIO");
|
||||
}
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_0, quirk_ich4_lpc_acpi );
|
||||
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)
|
||||
if (rev & 0x10) {
|
||||
pci_read_config_dword(dev, 0x48, ®ion);
|
||||
region &= PCI_BASE_ADDRESS_IO_MASK;
|
||||
quirk_io_region(dev, region, 256, PCI_BRIDGE_RESOURCES);
|
||||
quirk_io_region(dev, region, 256, PCI_BRIDGE_RESOURCES, "vt82c586 ACPI");
|
||||
}
|
||||
}
|
||||
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)
|
||||
|
||||
pci_read_config_word(dev, 0x70, &hm);
|
||||
hm &= PCI_BASE_ADDRESS_IO_MASK;
|
||||
quirk_io_region(dev, hm, 128, PCI_BRIDGE_RESOURCES + 1);
|
||||
quirk_io_region(dev, hm, 128, PCI_BRIDGE_RESOURCES + 1, "vt82c868 HW-mon");
|
||||
|
||||
pci_read_config_dword(dev, 0x90, &smb);
|
||||
smb &= PCI_BASE_ADDRESS_IO_MASK;
|
||||
quirk_io_region(dev, smb, 16, PCI_BRIDGE_RESOURCES + 2);
|
||||
quirk_io_region(dev, smb, 16, PCI_BRIDGE_RESOURCES + 2, "vt82c868 SMB");
|
||||
}
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4, quirk_vt82c686_acpi );
|
||||
|
||||
@ -391,11 +466,11 @@ static void __devinit quirk_vt8235_acpi(struct pci_dev *dev)
|
||||
|
||||
pci_read_config_word(dev, 0x88, &pm);
|
||||
pm &= PCI_BASE_ADDRESS_IO_MASK;
|
||||
quirk_io_region(dev, pm, 128, PCI_BRIDGE_RESOURCES);
|
||||
quirk_io_region(dev, pm, 128, PCI_BRIDGE_RESOURCES, "vt8235 PM");
|
||||
|
||||
pci_read_config_word(dev, 0xd0, &smb);
|
||||
smb &= PCI_BASE_ADDRESS_IO_MASK;
|
||||
quirk_io_region(dev, smb, 16, PCI_BRIDGE_RESOURCES + 1);
|
||||
quirk_io_region(dev, smb, 16, PCI_BRIDGE_RESOURCES + 1, "vt8235 SMB");
|
||||
}
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8235, quirk_vt8235_acpi);
|
||||
|
||||
|
@ -40,7 +40,7 @@
|
||||
* FIXME: IO should be max 256 bytes. However, since we may
|
||||
* have a P2P bridge below a cardbus bridge, we need 4K.
|
||||
*/
|
||||
#define CARDBUS_IO_SIZE (4*1024)
|
||||
#define CARDBUS_IO_SIZE (256)
|
||||
#define CARDBUS_MEM_SIZE (32*1024*1024)
|
||||
|
||||
static void __devinit
|
||||
|
@ -91,7 +91,7 @@
|
||||
#ifndef NDEBUG
|
||||
#define NDEBUG 0
|
||||
#endif
|
||||
#ifndef NDEBUG
|
||||
#ifndef NDEBUG_ABORT
|
||||
#define NDEBUG_ABORT 0
|
||||
#endif
|
||||
|
||||
|
@ -19,7 +19,7 @@
|
||||
#define AAC_MAX_LUN (8)
|
||||
|
||||
#define AAC_MAX_HOSTPHYSMEMPAGES (0xfffff)
|
||||
#define AAC_MAX_32BIT_SGBCOUNT ((unsigned short)512)
|
||||
#define AAC_MAX_32BIT_SGBCOUNT ((unsigned short)256)
|
||||
|
||||
/*
|
||||
* These macros convert from physical channels to virtual channels
|
||||
|
@ -1325,6 +1325,8 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
|
||||
ha->brd_info = brd_info;
|
||||
sprintf(ha->host_str, "%s_%ld", ha->brd_info->drv_name, ha->host_no);
|
||||
|
||||
ha->dpc_pid = -1;
|
||||
|
||||
/* Configure PCI I/O space */
|
||||
ret = qla2x00_iospace_config(ha);
|
||||
if (ret)
|
||||
@ -1448,7 +1450,6 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
|
||||
*/
|
||||
spin_lock_init(&ha->mbx_reg_lock);
|
||||
|
||||
ha->dpc_pid = -1;
|
||||
init_completion(&ha->dpc_inited);
|
||||
init_completion(&ha->dpc_exited);
|
||||
|
||||
|
@ -185,6 +185,7 @@ static struct {
|
||||
{"PIONEER", "CD-ROM DRM-600", NULL, BLIST_FORCELUN | BLIST_SINGLELUN},
|
||||
{"PIONEER", "CD-ROM DRM-602X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN},
|
||||
{"PIONEER", "CD-ROM DRM-604X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN},
|
||||
{"PIONEER", "CD-ROM DRM-624X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN},
|
||||
{"REGAL", "CDC-4X", NULL, BLIST_MAX5LUN | BLIST_SINGLELUN},
|
||||
{"SanDisk", "ImageMate CF-SD1", NULL, BLIST_FORCELUN},
|
||||
{"SEAGATE", "ST34555N", "0930", BLIST_NOTQ}, /* Chokes on tagged INQUIRY */
|
||||
|
@ -97,7 +97,6 @@ int scsi_insert_special_req(struct scsi_request *sreq, int at_head)
|
||||
}
|
||||
|
||||
static void scsi_run_queue(struct request_queue *q);
|
||||
static void scsi_release_buffers(struct scsi_cmnd *cmd);
|
||||
|
||||
/*
|
||||
* Function: scsi_unprep_request()
|
||||
@ -1040,8 +1039,10 @@ static int scsi_init_io(struct scsi_cmnd *cmd)
|
||||
* if sg table allocation fails, requeue request later.
|
||||
*/
|
||||
sgpnt = scsi_alloc_sgtable(cmd, GFP_ATOMIC);
|
||||
if (unlikely(!sgpnt))
|
||||
if (unlikely(!sgpnt)) {
|
||||
scsi_unprep_request(req);
|
||||
return BLKPREP_DEFER;
|
||||
}
|
||||
|
||||
cmd->request_buffer = (char *) sgpnt;
|
||||
cmd->request_bufflen = req->nr_sectors << 9;
|
||||
@ -1245,8 +1246,8 @@ static int scsi_prep_fn(struct request_queue *q, struct request *req)
|
||||
*/
|
||||
ret = scsi_init_io(cmd);
|
||||
switch(ret) {
|
||||
/* For BLKPREP_KILL/DEFER the cmd was released */
|
||||
case BLKPREP_KILL:
|
||||
/* BLKPREP_KILL return also releases the command */
|
||||
goto kill;
|
||||
case BLKPREP_DEFER:
|
||||
goto defer;
|
||||
|
@ -819,12 +819,15 @@ show_fc_private_host_tgtid_bind_type(struct class_device *cdev, char *buf)
|
||||
return snprintf(buf, FC_BINDTYPE_MAX_NAMELEN, "%s\n", name);
|
||||
}
|
||||
|
||||
#define get_list_head_entry(pos, head, member) \
|
||||
pos = list_entry((head)->next, typeof(*pos), member)
|
||||
|
||||
static ssize_t
|
||||
store_fc_private_host_tgtid_bind_type(struct class_device *cdev,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
struct Scsi_Host *shost = transport_class_to_shost(cdev);
|
||||
struct fc_rport *rport, *next_rport;
|
||||
struct fc_rport *rport;
|
||||
enum fc_tgtid_binding_type val;
|
||||
unsigned long flags;
|
||||
|
||||
@ -834,9 +837,13 @@ store_fc_private_host_tgtid_bind_type(struct class_device *cdev,
|
||||
/* if changing bind type, purge all unused consistent bindings */
|
||||
if (val != fc_host_tgtid_bind_type(shost)) {
|
||||
spin_lock_irqsave(shost->host_lock, flags);
|
||||
list_for_each_entry_safe(rport, next_rport,
|
||||
&fc_host_rport_bindings(shost), peers)
|
||||
while (!list_empty(&fc_host_rport_bindings(shost))) {
|
||||
get_list_head_entry(rport,
|
||||
&fc_host_rport_bindings(shost), peers);
|
||||
spin_unlock_irqrestore(shost->host_lock, flags);
|
||||
fc_rport_terminate(rport);
|
||||
spin_lock_irqsave(shost->host_lock, flags);
|
||||
}
|
||||
spin_unlock_irqrestore(shost->host_lock, flags);
|
||||
}
|
||||
|
||||
|
@ -152,6 +152,7 @@ static int __devinit pci_hp_diva_init(struct pci_dev *dev)
|
||||
rc = 4;
|
||||
break;
|
||||
case PCI_DEVICE_ID_HP_DIVA_POWERBAR:
|
||||
case PCI_DEVICE_ID_HP_DIVA_HURRICANE:
|
||||
rc = 1;
|
||||
break;
|
||||
}
|
||||
@ -226,8 +227,10 @@ static int __devinit pci_plx9050_init(struct pci_dev *dev)
|
||||
}
|
||||
|
||||
irq_config = 0x41;
|
||||
if (dev->vendor == PCI_VENDOR_ID_PANACOM)
|
||||
if (dev->vendor == PCI_VENDOR_ID_PANACOM ||
|
||||
dev->subsystem_vendor == PCI_SUBVENDOR_ID_EXSYS) {
|
||||
irq_config = 0x43;
|
||||
}
|
||||
if ((dev->vendor == PCI_VENDOR_ID_PLX) &&
|
||||
(dev->device == PCI_DEVICE_ID_PLX_ROMULUS)) {
|
||||
/*
|
||||
@ -661,6 +664,15 @@ static struct pci_serial_quirk pci_serial_quirks[] = {
|
||||
/*
|
||||
* PLX
|
||||
*/
|
||||
{
|
||||
.vendor = PCI_VENDOR_ID_PLX,
|
||||
.device = PCI_DEVICE_ID_PLX_9050,
|
||||
.subvendor = PCI_SUBVENDOR_ID_EXSYS,
|
||||
.subdevice = PCI_SUBDEVICE_ID_EXSYS_4055,
|
||||
.init = pci_plx9050_init,
|
||||
.setup = pci_default_setup,
|
||||
.exit = __devexit_p(pci_plx9050_exit),
|
||||
},
|
||||
{
|
||||
.vendor = PCI_VENDOR_ID_PLX,
|
||||
.device = PCI_DEVICE_ID_PLX_9050,
|
||||
@ -927,6 +939,7 @@ enum pci_board_num_t {
|
||||
pbn_panacom,
|
||||
pbn_panacom2,
|
||||
pbn_panacom4,
|
||||
pbn_exsys_4055,
|
||||
pbn_plx_romulus,
|
||||
pbn_oxsemi,
|
||||
pbn_intel_i960,
|
||||
@ -1292,6 +1305,13 @@ static struct pciserial_board pci_boards[] __devinitdata = {
|
||||
.reg_shift = 7,
|
||||
},
|
||||
|
||||
[pbn_exsys_4055] = {
|
||||
.flags = FL_BASE2,
|
||||
.num_ports = 4,
|
||||
.base_baud = 115200,
|
||||
.uart_offset = 8,
|
||||
},
|
||||
|
||||
/* I think this entry is broken - the first_offset looks wrong --rmk */
|
||||
[pbn_plx_romulus] = {
|
||||
.flags = FL_BASE2,
|
||||
@ -1853,6 +1873,10 @@ static struct pci_device_id serial_pci_tbl[] = {
|
||||
PCI_SUBVENDOR_ID_CHASE_PCIRAS,
|
||||
PCI_SUBDEVICE_ID_CHASE_PCIRAS8, 0, 0,
|
||||
pbn_b2_8_460800 },
|
||||
{ PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
|
||||
PCI_SUBVENDOR_ID_EXSYS,
|
||||
PCI_SUBDEVICE_ID_EXSYS_4055, 0, 0,
|
||||
pbn_exsys_4055 },
|
||||
/*
|
||||
* Megawolf Romulus PCI Serial Card, from Mike Hudson
|
||||
* (Exoray@isys.ca)
|
||||
|
@ -242,6 +242,13 @@ static ssize_t show_virtual(struct class_device *class_device, char *buf)
|
||||
fb_info->var.yres_virtual);
|
||||
}
|
||||
|
||||
static ssize_t show_stride(struct class_device *class_device, char *buf)
|
||||
{
|
||||
struct fb_info *fb_info =
|
||||
(struct fb_info *)class_get_devdata(class_device);
|
||||
return snprintf(buf, PAGE_SIZE, "%d\n", fb_info->fix.line_length);
|
||||
}
|
||||
|
||||
/* Format for cmap is "%02x%c%4x%4x%4x\n" */
|
||||
/* %02x entry %c transp %4x red %4x blue %4x green \n */
|
||||
/* 256 rows at 16 chars equals 4096, the normal page size */
|
||||
@ -432,6 +439,7 @@ static struct class_device_attribute class_device_attrs[] = {
|
||||
__ATTR(pan, S_IRUGO|S_IWUSR, show_pan, store_pan),
|
||||
__ATTR(virtual_size, S_IRUGO|S_IWUSR, show_virtual, store_virtual),
|
||||
__ATTR(name, S_IRUGO, show_name, NULL),
|
||||
__ATTR(stride, S_IRUGO, show_stride, NULL),
|
||||
};
|
||||
|
||||
int fb_init_class_device(struct fb_info *fb_info)
|
||||
|
6
fs/aio.c
6
fs/aio.c
@ -1397,6 +1397,9 @@ static ssize_t aio_setup_iocb(struct kiocb *kiocb)
|
||||
if (unlikely(!access_ok(VERIFY_WRITE, kiocb->ki_buf,
|
||||
kiocb->ki_left)))
|
||||
break;
|
||||
ret = security_file_permission(file, MAY_READ);
|
||||
if (unlikely(ret))
|
||||
break;
|
||||
ret = -EINVAL;
|
||||
if (file->f_op->aio_read)
|
||||
kiocb->ki_retry = aio_pread;
|
||||
@ -1409,6 +1412,9 @@ static ssize_t aio_setup_iocb(struct kiocb *kiocb)
|
||||
if (unlikely(!access_ok(VERIFY_READ, kiocb->ki_buf,
|
||||
kiocb->ki_left)))
|
||||
break;
|
||||
ret = security_file_permission(file, MAY_WRITE);
|
||||
if (unlikely(ret))
|
||||
break;
|
||||
ret = -EINVAL;
|
||||
if (file->f_op->aio_write)
|
||||
kiocb->ki_retry = aio_pwrite;
|
||||
|
@ -50,6 +50,7 @@ static void hfsplus_read_inode(struct inode *inode)
|
||||
init_MUTEX(&HFSPLUS_I(inode).extents_lock);
|
||||
HFSPLUS_I(inode).flags = 0;
|
||||
HFSPLUS_I(inode).rsrc_inode = NULL;
|
||||
atomic_set(&HFSPLUS_I(inode).opencnt, 0);
|
||||
|
||||
if (inode->i_ino >= HFSPLUS_FIRSTUSER_CNID) {
|
||||
read_inode:
|
||||
|
@ -176,6 +176,7 @@ static inline void put_inotify_dev(struct inotify_device *dev)
|
||||
if (atomic_dec_and_test(&dev->count)) {
|
||||
atomic_dec(&dev->user->inotify_devs);
|
||||
free_uid(dev->user);
|
||||
idr_destroy(&dev->idr);
|
||||
kfree(dev);
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
#ifndef _ALPHA_ATOMIC_H
|
||||
#define _ALPHA_ATOMIC_H
|
||||
|
||||
#include <asm/barrier.h>
|
||||
|
||||
/*
|
||||
* Atomic operations that C can't guarantee us. Useful for
|
||||
* resource counting etc...
|
||||
@ -100,18 +102,19 @@ static __inline__ void atomic64_sub(long i, atomic64_t * v)
|
||||
static __inline__ long atomic_add_return(int i, atomic_t * v)
|
||||
{
|
||||
long temp, result;
|
||||
smp_mb();
|
||||
__asm__ __volatile__(
|
||||
"1: ldl_l %0,%1\n"
|
||||
" addl %0,%3,%2\n"
|
||||
" addl %0,%3,%0\n"
|
||||
" stl_c %0,%1\n"
|
||||
" beq %0,2f\n"
|
||||
" mb\n"
|
||||
".subsection 2\n"
|
||||
"2: br 1b\n"
|
||||
".previous"
|
||||
:"=&r" (temp), "=m" (v->counter), "=&r" (result)
|
||||
:"Ir" (i), "m" (v->counter) : "memory");
|
||||
smp_mb();
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -120,54 +123,57 @@ static __inline__ long atomic_add_return(int i, atomic_t * v)
|
||||
static __inline__ long atomic64_add_return(long i, atomic64_t * v)
|
||||
{
|
||||
long temp, result;
|
||||
smp_mb();
|
||||
__asm__ __volatile__(
|
||||
"1: ldq_l %0,%1\n"
|
||||
" addq %0,%3,%2\n"
|
||||
" addq %0,%3,%0\n"
|
||||
" stq_c %0,%1\n"
|
||||
" beq %0,2f\n"
|
||||
" mb\n"
|
||||
".subsection 2\n"
|
||||
"2: br 1b\n"
|
||||
".previous"
|
||||
:"=&r" (temp), "=m" (v->counter), "=&r" (result)
|
||||
:"Ir" (i), "m" (v->counter) : "memory");
|
||||
smp_mb();
|
||||
return result;
|
||||
}
|
||||
|
||||
static __inline__ long atomic_sub_return(int i, atomic_t * v)
|
||||
{
|
||||
long temp, result;
|
||||
smp_mb();
|
||||
__asm__ __volatile__(
|
||||
"1: ldl_l %0,%1\n"
|
||||
" subl %0,%3,%2\n"
|
||||
" subl %0,%3,%0\n"
|
||||
" stl_c %0,%1\n"
|
||||
" beq %0,2f\n"
|
||||
" mb\n"
|
||||
".subsection 2\n"
|
||||
"2: br 1b\n"
|
||||
".previous"
|
||||
:"=&r" (temp), "=m" (v->counter), "=&r" (result)
|
||||
:"Ir" (i), "m" (v->counter) : "memory");
|
||||
smp_mb();
|
||||
return result;
|
||||
}
|
||||
|
||||
static __inline__ long atomic64_sub_return(long i, atomic64_t * v)
|
||||
{
|
||||
long temp, result;
|
||||
smp_mb();
|
||||
__asm__ __volatile__(
|
||||
"1: ldq_l %0,%1\n"
|
||||
" subq %0,%3,%2\n"
|
||||
" subq %0,%3,%0\n"
|
||||
" stq_c %0,%1\n"
|
||||
" beq %0,2f\n"
|
||||
" mb\n"
|
||||
".subsection 2\n"
|
||||
"2: br 1b\n"
|
||||
".previous"
|
||||
:"=&r" (temp), "=m" (v->counter), "=&r" (result)
|
||||
:"Ir" (i), "m" (v->counter) : "memory");
|
||||
smp_mb();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
34
include/asm-alpha/barrier.h
Normal file
34
include/asm-alpha/barrier.h
Normal file
@ -0,0 +1,34 @@
|
||||
#ifndef __BARRIER_H
|
||||
#define __BARRIER_H
|
||||
|
||||
#define mb() \
|
||||
__asm__ __volatile__("mb": : :"memory")
|
||||
|
||||
#define rmb() \
|
||||
__asm__ __volatile__("mb": : :"memory")
|
||||
|
||||
#define wmb() \
|
||||
__asm__ __volatile__("wmb": : :"memory")
|
||||
|
||||
#define read_barrier_depends() \
|
||||
__asm__ __volatile__("mb": : :"memory")
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
#define smp_mb() mb()
|
||||
#define smp_rmb() rmb()
|
||||
#define smp_wmb() wmb()
|
||||
#define smp_read_barrier_depends() read_barrier_depends()
|
||||
#else
|
||||
#define smp_mb() barrier()
|
||||
#define smp_rmb() barrier()
|
||||
#define smp_wmb() barrier()
|
||||
#define smp_read_barrier_depends() barrier()
|
||||
#endif
|
||||
|
||||
#define set_mb(var, value) \
|
||||
do { var = value; mb(); } while (0)
|
||||
|
||||
#define set_wmb(var, value) \
|
||||
do { var = value; wmb(); } while (0)
|
||||
|
||||
#endif /* __BARRIER_H */
|
@ -4,6 +4,7 @@
|
||||
#include <linux/config.h>
|
||||
#include <asm/pal.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/barrier.h>
|
||||
|
||||
/*
|
||||
* System defines.. Note that this is included both from .c and .S
|
||||
@ -139,36 +140,6 @@ extern void halt(void) __attribute__((noreturn));
|
||||
struct task_struct;
|
||||
extern struct task_struct *alpha_switch_to(unsigned long, struct task_struct*);
|
||||
|
||||
#define mb() \
|
||||
__asm__ __volatile__("mb": : :"memory")
|
||||
|
||||
#define rmb() \
|
||||
__asm__ __volatile__("mb": : :"memory")
|
||||
|
||||
#define wmb() \
|
||||
__asm__ __volatile__("wmb": : :"memory")
|
||||
|
||||
#define read_barrier_depends() \
|
||||
__asm__ __volatile__("mb": : :"memory")
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
#define smp_mb() mb()
|
||||
#define smp_rmb() rmb()
|
||||
#define smp_wmb() wmb()
|
||||
#define smp_read_barrier_depends() read_barrier_depends()
|
||||
#else
|
||||
#define smp_mb() barrier()
|
||||
#define smp_rmb() barrier()
|
||||
#define smp_wmb() barrier()
|
||||
#define smp_read_barrier_depends() barrier()
|
||||
#endif
|
||||
|
||||
#define set_mb(var, value) \
|
||||
do { var = value; mb(); } while (0)
|
||||
|
||||
#define set_wmb(var, value) \
|
||||
do { var = value; wmb(); } while (0)
|
||||
|
||||
#define imb() \
|
||||
__asm__ __volatile__ ("call_pal %0 #imb" : : "i" (PAL_imb) : "memory")
|
||||
|
||||
|
@ -18,7 +18,9 @@
|
||||
* 10-Feb-2005 Ben Dooks Fixed CAMDIVN address (Guillaume Gourat)
|
||||
* 10-Mar-2005 Lucas Villa Real Changed S3C2410_VA to S3C24XX_VA
|
||||
* 27-Aug-2005 Ben Dooks Add clock-slow info
|
||||
*/
|
||||
* 20-Oct-2005 Ben Dooks Fixed overflow in PLL (Guillaume Gourat)
|
||||
* 20-Oct-2005 Ben Dooks Add masks for DCLK (Guillaume Gourat)
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARM_REGS_CLOCK
|
||||
#define __ASM_ARM_REGS_CLOCK "$Id: clock.h,v 1.4 2003/04/30 14:50:51 ben Exp $"
|
||||
@ -66,11 +68,16 @@
|
||||
#define S3C2410_DCLKCON_DCLK0_UCLK (1<<1)
|
||||
#define S3C2410_DCLKCON_DCLK0_DIV(x) (((x) - 1 )<<4)
|
||||
#define S3C2410_DCLKCON_DCLK0_CMP(x) (((x) - 1 )<<8)
|
||||
#define S3C2410_DCLKCON_DCLK0_DIV_MASK ((0xf)<<4)
|
||||
#define S3C2410_DCLKCON_DCLK0_CMP_MASK ((0xf)<<8)
|
||||
|
||||
#define S3C2410_DCLKCON_DCLK1EN (1<<16)
|
||||
#define S3C2410_DCLKCON_DCLK1_PCLK (0<<17)
|
||||
#define S3C2410_DCLKCON_DCLK1_UCLK (1<<17)
|
||||
#define S3C2410_DCLKCON_DCLK1_DIV(x) (((x) - 1) <<20)
|
||||
#define S3C2410_DCLKCON_DCLK1_CMP(x) (((x) - 1) <<24)
|
||||
#define S3C2410_DCLKCON_DCLK1_DIV_MASK ((0xf) <<20)
|
||||
#define S3C2410_DCLKCON_DCLK1_CMP_MASK ((0xf) <<24)
|
||||
|
||||
#define S3C2410_CLKDIVN_PDIVN (1<<0)
|
||||
#define S3C2410_CLKDIVN_HDIVN (1<<1)
|
||||
@ -83,10 +90,13 @@
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#include <asm/div64.h>
|
||||
|
||||
static inline unsigned int
|
||||
s3c2410_get_pll(int pllval, int baseclk)
|
||||
s3c2410_get_pll(unsigned int pllval, unsigned int baseclk)
|
||||
{
|
||||
int mdiv, pdiv, sdiv;
|
||||
unsigned int mdiv, pdiv, sdiv;
|
||||
uint64_t fvco;
|
||||
|
||||
mdiv = pllval >> S3C2410_PLLCON_MDIVSHIFT;
|
||||
pdiv = pllval >> S3C2410_PLLCON_PDIVSHIFT;
|
||||
@ -96,7 +106,10 @@ s3c2410_get_pll(int pllval, int baseclk)
|
||||
pdiv &= S3C2410_PLLCON_PDIVMASK;
|
||||
sdiv &= S3C2410_PLLCON_SDIVMASK;
|
||||
|
||||
return (baseclk * (mdiv + 8)) / ((pdiv + 2) << sdiv);
|
||||
fvco = (uint64_t)baseclk * (mdiv + 8);
|
||||
do_div(fvco, (pdiv + 2) << sdiv);
|
||||
|
||||
return (unsigned int)fvco;
|
||||
}
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
@ -347,7 +347,6 @@ static inline unsigned long __ffs(unsigned long word)
|
||||
* the clz instruction for much better code efficiency.
|
||||
*/
|
||||
|
||||
static __inline__ int generic_fls(int x);
|
||||
#define fls(x) \
|
||||
( __builtin_constant_p(x) ? generic_fls(x) : \
|
||||
({ int __r; asm("clz\t%0, %1" : "=r"(__r) : "r"(x) : "cc"); 32-__r; }) )
|
||||
|
@ -75,4 +75,5 @@ int idr_pre_get(struct idr *idp, unsigned gfp_mask);
|
||||
int idr_get_new(struct idr *idp, void *ptr, int *id);
|
||||
int idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id);
|
||||
void idr_remove(struct idr *idp, int id);
|
||||
void idr_destroy(struct idr *idp);
|
||||
void idr_init(struct idr *idp);
|
||||
|
@ -723,6 +723,7 @@
|
||||
#define PCI_DEVICE_ID_HP_DIVA_EVEREST 0x1282
|
||||
#define PCI_DEVICE_ID_HP_DIVA_AUX 0x1290
|
||||
#define PCI_DEVICE_ID_HP_DIVA_RMP3 0x1301
|
||||
#define PCI_DEVICE_ID_HP_DIVA_HURRICANE 0x132a
|
||||
#define PCI_DEVICE_ID_HP_CISS 0x3210
|
||||
#define PCI_DEVICE_ID_HP_CISSA 0x3220
|
||||
#define PCI_DEVICE_ID_HP_CISSB 0x3222
|
||||
@ -2696,6 +2697,7 @@
|
||||
|
||||
#define PCI_SUBVENDOR_ID_EXSYS 0xd84d
|
||||
#define PCI_SUBDEVICE_ID_EXSYS_4014 0x4014
|
||||
#define PCI_SUBDEVICE_ID_EXSYS_4055 0x4055
|
||||
|
||||
#define PCI_VENDOR_ID_TIGERJET 0xe159
|
||||
#define PCI_DEVICE_ID_TIGERJET_300 0x0001
|
||||
|
@ -171,7 +171,7 @@ typedef struct {
|
||||
ax25_address calls[AX25_MAX_DIGIS];
|
||||
unsigned char repeated[AX25_MAX_DIGIS];
|
||||
unsigned char ndigi;
|
||||
char lastrepeat;
|
||||
signed char lastrepeat;
|
||||
} ax25_digi;
|
||||
|
||||
typedef struct ax25_route {
|
||||
|
@ -254,8 +254,10 @@ static inline void llc_pdu_decode_sa(struct sk_buff *skb, u8 *sa)
|
||||
{
|
||||
if (skb->protocol == ntohs(ETH_P_802_2))
|
||||
memcpy(sa, eth_hdr(skb)->h_source, ETH_ALEN);
|
||||
else if (skb->protocol == ntohs(ETH_P_TR_802_2))
|
||||
else if (skb->protocol == ntohs(ETH_P_TR_802_2)) {
|
||||
memcpy(sa, tr_hdr(skb)->saddr, ETH_ALEN);
|
||||
*sa &= 0x7F;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -843,6 +843,7 @@ fastcall NORET_TYPE void do_exit(long code)
|
||||
group_dead = atomic_dec_and_test(&tsk->signal->live);
|
||||
if (group_dead) {
|
||||
del_timer_sync(&tsk->signal->real_timer);
|
||||
exit_itimers(tsk->signal);
|
||||
acct_process(code);
|
||||
}
|
||||
exit_mm(tsk);
|
||||
|
@ -91,7 +91,7 @@ static inline union cpu_time_count cpu_time_sub(clockid_t which_clock,
|
||||
* Update expiry time from increment, and increase overrun count,
|
||||
* given the current clock sample.
|
||||
*/
|
||||
static inline void bump_cpu_timer(struct k_itimer *timer,
|
||||
static void bump_cpu_timer(struct k_itimer *timer,
|
||||
union cpu_time_count now)
|
||||
{
|
||||
int i;
|
||||
@ -110,7 +110,7 @@ static inline void bump_cpu_timer(struct k_itimer *timer,
|
||||
for (i = 0; incr < delta - incr; i++)
|
||||
incr = incr << 1;
|
||||
for (; i >= 0; incr >>= 1, i--) {
|
||||
if (delta <= incr)
|
||||
if (delta < incr)
|
||||
continue;
|
||||
timer->it.cpu.expires.sched += incr;
|
||||
timer->it_overrun += 1 << i;
|
||||
@ -128,7 +128,7 @@ static inline void bump_cpu_timer(struct k_itimer *timer,
|
||||
for (i = 0; cputime_lt(incr, cputime_sub(delta, incr)); i++)
|
||||
incr = cputime_add(incr, incr);
|
||||
for (; i >= 0; incr = cputime_halve(incr), i--) {
|
||||
if (cputime_le(delta, incr))
|
||||
if (cputime_lt(delta, incr))
|
||||
continue;
|
||||
timer->it.cpu.expires.cpu =
|
||||
cputime_add(timer->it.cpu.expires.cpu, incr);
|
||||
@ -380,28 +380,31 @@ int posix_cpu_timer_create(struct k_itimer *new_timer)
|
||||
int posix_cpu_timer_del(struct k_itimer *timer)
|
||||
{
|
||||
struct task_struct *p = timer->it.cpu.task;
|
||||
int ret = 0;
|
||||
|
||||
if (timer->it.cpu.firing)
|
||||
return TIMER_RETRY;
|
||||
if (likely(p != NULL)) {
|
||||
read_lock(&tasklist_lock);
|
||||
if (unlikely(p->signal == NULL)) {
|
||||
/*
|
||||
* We raced with the reaping of the task.
|
||||
* The deletion should have cleared us off the list.
|
||||
*/
|
||||
BUG_ON(!list_empty(&timer->it.cpu.entry));
|
||||
} else {
|
||||
spin_lock(&p->sighand->siglock);
|
||||
if (timer->it.cpu.firing)
|
||||
ret = TIMER_RETRY;
|
||||
else
|
||||
list_del(&timer->it.cpu.entry);
|
||||
spin_unlock(&p->sighand->siglock);
|
||||
}
|
||||
read_unlock(&tasklist_lock);
|
||||
|
||||
if (unlikely(p == NULL))
|
||||
return 0;
|
||||
|
||||
spin_lock(&p->sighand->siglock);
|
||||
if (!list_empty(&timer->it.cpu.entry)) {
|
||||
/*
|
||||
* Take us off the task's timer list. We don't need to
|
||||
* take tasklist_lock and check for the task being reaped.
|
||||
* If it was reaped, it already called posix_cpu_timers_exit
|
||||
* and posix_cpu_timers_exit_group to clear all the timers
|
||||
* that pointed to it.
|
||||
*/
|
||||
list_del(&timer->it.cpu.entry);
|
||||
put_task_struct(p);
|
||||
if (!ret)
|
||||
put_task_struct(p);
|
||||
}
|
||||
spin_unlock(&p->sighand->siglock);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -418,8 +421,6 @@ static void cleanup_timers(struct list_head *head,
|
||||
cputime_t ptime = cputime_add(utime, stime);
|
||||
|
||||
list_for_each_entry_safe(timer, next, head, entry) {
|
||||
put_task_struct(timer->task);
|
||||
timer->task = NULL;
|
||||
list_del_init(&timer->entry);
|
||||
if (cputime_lt(timer->expires.cpu, ptime)) {
|
||||
timer->expires.cpu = cputime_zero;
|
||||
@ -431,8 +432,6 @@ static void cleanup_timers(struct list_head *head,
|
||||
|
||||
++head;
|
||||
list_for_each_entry_safe(timer, next, head, entry) {
|
||||
put_task_struct(timer->task);
|
||||
timer->task = NULL;
|
||||
list_del_init(&timer->entry);
|
||||
if (cputime_lt(timer->expires.cpu, utime)) {
|
||||
timer->expires.cpu = cputime_zero;
|
||||
@ -444,8 +443,6 @@ static void cleanup_timers(struct list_head *head,
|
||||
|
||||
++head;
|
||||
list_for_each_entry_safe(timer, next, head, entry) {
|
||||
put_task_struct(timer->task);
|
||||
timer->task = NULL;
|
||||
list_del_init(&timer->entry);
|
||||
if (timer->expires.sched < sched_time) {
|
||||
timer->expires.sched = 0;
|
||||
@ -489,6 +486,9 @@ static void process_timer_rebalance(struct task_struct *p,
|
||||
struct task_struct *t = p;
|
||||
unsigned int nthreads = atomic_read(&p->signal->live);
|
||||
|
||||
if (!nthreads)
|
||||
return;
|
||||
|
||||
switch (clock_idx) {
|
||||
default:
|
||||
BUG();
|
||||
@ -497,7 +497,7 @@ static void process_timer_rebalance(struct task_struct *p,
|
||||
left = cputime_div(cputime_sub(expires.cpu, val.cpu),
|
||||
nthreads);
|
||||
do {
|
||||
if (!unlikely(t->exit_state)) {
|
||||
if (!unlikely(t->flags & PF_EXITING)) {
|
||||
ticks = cputime_add(prof_ticks(t), left);
|
||||
if (cputime_eq(t->it_prof_expires,
|
||||
cputime_zero) ||
|
||||
@ -512,7 +512,7 @@ static void process_timer_rebalance(struct task_struct *p,
|
||||
left = cputime_div(cputime_sub(expires.cpu, val.cpu),
|
||||
nthreads);
|
||||
do {
|
||||
if (!unlikely(t->exit_state)) {
|
||||
if (!unlikely(t->flags & PF_EXITING)) {
|
||||
ticks = cputime_add(virt_ticks(t), left);
|
||||
if (cputime_eq(t->it_virt_expires,
|
||||
cputime_zero) ||
|
||||
@ -527,7 +527,7 @@ static void process_timer_rebalance(struct task_struct *p,
|
||||
nsleft = expires.sched - val.sched;
|
||||
do_div(nsleft, nthreads);
|
||||
do {
|
||||
if (!unlikely(t->exit_state)) {
|
||||
if (!unlikely(t->flags & PF_EXITING)) {
|
||||
ns = t->sched_time + nsleft;
|
||||
if (t->it_sched_expires == 0 ||
|
||||
t->it_sched_expires > ns) {
|
||||
@ -566,6 +566,9 @@ static void arm_timer(struct k_itimer *timer, union cpu_time_count now)
|
||||
struct cpu_timer_list *next;
|
||||
unsigned long i;
|
||||
|
||||
if (CPUCLOCK_PERTHREAD(timer->it_clock) && (p->flags & PF_EXITING))
|
||||
return;
|
||||
|
||||
head = (CPUCLOCK_PERTHREAD(timer->it_clock) ?
|
||||
p->cpu_timers : p->signal->cpu_timers);
|
||||
head += CPUCLOCK_WHICH(timer->it_clock);
|
||||
@ -576,17 +579,15 @@ static void arm_timer(struct k_itimer *timer, union cpu_time_count now)
|
||||
listpos = head;
|
||||
if (CPUCLOCK_WHICH(timer->it_clock) == CPUCLOCK_SCHED) {
|
||||
list_for_each_entry(next, head, entry) {
|
||||
if (next->expires.sched > nt->expires.sched) {
|
||||
listpos = &next->entry;
|
||||
if (next->expires.sched > nt->expires.sched)
|
||||
break;
|
||||
}
|
||||
listpos = &next->entry;
|
||||
}
|
||||
} else {
|
||||
list_for_each_entry(next, head, entry) {
|
||||
if (cputime_gt(next->expires.cpu, nt->expires.cpu)) {
|
||||
listpos = &next->entry;
|
||||
if (cputime_gt(next->expires.cpu, nt->expires.cpu))
|
||||
break;
|
||||
}
|
||||
listpos = &next->entry;
|
||||
}
|
||||
}
|
||||
list_add(&nt->entry, listpos);
|
||||
@ -730,9 +731,15 @@ int posix_cpu_timer_set(struct k_itimer *timer, int flags,
|
||||
* Disarm any old timer after extracting its expiry time.
|
||||
*/
|
||||
BUG_ON(!irqs_disabled());
|
||||
|
||||
ret = 0;
|
||||
spin_lock(&p->sighand->siglock);
|
||||
old_expires = timer->it.cpu.expires;
|
||||
list_del_init(&timer->it.cpu.entry);
|
||||
if (unlikely(timer->it.cpu.firing)) {
|
||||
timer->it.cpu.firing = -1;
|
||||
ret = TIMER_RETRY;
|
||||
} else
|
||||
list_del_init(&timer->it.cpu.entry);
|
||||
spin_unlock(&p->sighand->siglock);
|
||||
|
||||
/*
|
||||
@ -780,7 +787,7 @@ int posix_cpu_timer_set(struct k_itimer *timer, int flags,
|
||||
}
|
||||
}
|
||||
|
||||
if (unlikely(timer->it.cpu.firing)) {
|
||||
if (unlikely(ret)) {
|
||||
/*
|
||||
* We are colliding with the timer actually firing.
|
||||
* Punt after filling in the timer's old value, and
|
||||
@ -788,8 +795,6 @@ int posix_cpu_timer_set(struct k_itimer *timer, int flags,
|
||||
* it as an overrun (thanks to bump_cpu_timer above).
|
||||
*/
|
||||
read_unlock(&tasklist_lock);
|
||||
timer->it.cpu.firing = -1;
|
||||
ret = TIMER_RETRY;
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -955,14 +960,16 @@ void posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec *itp)
|
||||
static void check_thread_timers(struct task_struct *tsk,
|
||||
struct list_head *firing)
|
||||
{
|
||||
int maxfire;
|
||||
struct list_head *timers = tsk->cpu_timers;
|
||||
|
||||
maxfire = 20;
|
||||
tsk->it_prof_expires = cputime_zero;
|
||||
while (!list_empty(timers)) {
|
||||
struct cpu_timer_list *t = list_entry(timers->next,
|
||||
struct cpu_timer_list,
|
||||
entry);
|
||||
if (cputime_lt(prof_ticks(tsk), t->expires.cpu)) {
|
||||
if (!--maxfire || cputime_lt(prof_ticks(tsk), t->expires.cpu)) {
|
||||
tsk->it_prof_expires = t->expires.cpu;
|
||||
break;
|
||||
}
|
||||
@ -971,12 +978,13 @@ static void check_thread_timers(struct task_struct *tsk,
|
||||
}
|
||||
|
||||
++timers;
|
||||
maxfire = 20;
|
||||
tsk->it_virt_expires = cputime_zero;
|
||||
while (!list_empty(timers)) {
|
||||
struct cpu_timer_list *t = list_entry(timers->next,
|
||||
struct cpu_timer_list,
|
||||
entry);
|
||||
if (cputime_lt(virt_ticks(tsk), t->expires.cpu)) {
|
||||
if (!--maxfire || cputime_lt(virt_ticks(tsk), t->expires.cpu)) {
|
||||
tsk->it_virt_expires = t->expires.cpu;
|
||||
break;
|
||||
}
|
||||
@ -985,12 +993,13 @@ static void check_thread_timers(struct task_struct *tsk,
|
||||
}
|
||||
|
||||
++timers;
|
||||
maxfire = 20;
|
||||
tsk->it_sched_expires = 0;
|
||||
while (!list_empty(timers)) {
|
||||
struct cpu_timer_list *t = list_entry(timers->next,
|
||||
struct cpu_timer_list,
|
||||
entry);
|
||||
if (tsk->sched_time < t->expires.sched) {
|
||||
if (!--maxfire || tsk->sched_time < t->expires.sched) {
|
||||
tsk->it_sched_expires = t->expires.sched;
|
||||
break;
|
||||
}
|
||||
@ -1007,6 +1016,7 @@ static void check_thread_timers(struct task_struct *tsk,
|
||||
static void check_process_timers(struct task_struct *tsk,
|
||||
struct list_head *firing)
|
||||
{
|
||||
int maxfire;
|
||||
struct signal_struct *const sig = tsk->signal;
|
||||
cputime_t utime, stime, ptime, virt_expires, prof_expires;
|
||||
unsigned long long sched_time, sched_expires;
|
||||
@ -1039,12 +1049,13 @@ static void check_process_timers(struct task_struct *tsk,
|
||||
} while (t != tsk);
|
||||
ptime = cputime_add(utime, stime);
|
||||
|
||||
maxfire = 20;
|
||||
prof_expires = cputime_zero;
|
||||
while (!list_empty(timers)) {
|
||||
struct cpu_timer_list *t = list_entry(timers->next,
|
||||
struct cpu_timer_list,
|
||||
entry);
|
||||
if (cputime_lt(ptime, t->expires.cpu)) {
|
||||
if (!--maxfire || cputime_lt(ptime, t->expires.cpu)) {
|
||||
prof_expires = t->expires.cpu;
|
||||
break;
|
||||
}
|
||||
@ -1053,12 +1064,13 @@ static void check_process_timers(struct task_struct *tsk,
|
||||
}
|
||||
|
||||
++timers;
|
||||
maxfire = 20;
|
||||
virt_expires = cputime_zero;
|
||||
while (!list_empty(timers)) {
|
||||
struct cpu_timer_list *t = list_entry(timers->next,
|
||||
struct cpu_timer_list,
|
||||
entry);
|
||||
if (cputime_lt(utime, t->expires.cpu)) {
|
||||
if (!--maxfire || cputime_lt(utime, t->expires.cpu)) {
|
||||
virt_expires = t->expires.cpu;
|
||||
break;
|
||||
}
|
||||
@ -1067,12 +1079,13 @@ static void check_process_timers(struct task_struct *tsk,
|
||||
}
|
||||
|
||||
++timers;
|
||||
maxfire = 20;
|
||||
sched_expires = 0;
|
||||
while (!list_empty(timers)) {
|
||||
struct cpu_timer_list *t = list_entry(timers->next,
|
||||
struct cpu_timer_list,
|
||||
entry);
|
||||
if (sched_time < t->expires.sched) {
|
||||
if (!--maxfire || sched_time < t->expires.sched) {
|
||||
sched_expires = t->expires.sched;
|
||||
break;
|
||||
}
|
||||
@ -1155,6 +1168,9 @@ static void check_process_timers(struct task_struct *tsk,
|
||||
unsigned long long sched_left, sched;
|
||||
const unsigned int nthreads = atomic_read(&sig->live);
|
||||
|
||||
if (!nthreads)
|
||||
return;
|
||||
|
||||
prof_left = cputime_sub(prof_expires, utime);
|
||||
prof_left = cputime_sub(prof_left, stime);
|
||||
prof_left = cputime_div(prof_left, nthreads);
|
||||
@ -1191,7 +1207,7 @@ static void check_process_timers(struct task_struct *tsk,
|
||||
|
||||
do {
|
||||
t = next_thread(t);
|
||||
} while (unlikely(t->exit_state));
|
||||
} while (unlikely(t->flags & PF_EXITING));
|
||||
} while (t != tsk);
|
||||
}
|
||||
}
|
||||
|
@ -1157,7 +1157,7 @@ retry_delete:
|
||||
}
|
||||
|
||||
/*
|
||||
* This is called by __exit_signal, only when there are no more
|
||||
* This is called by do_exit or de_thread, only when there are no more
|
||||
* references to the shared signal_struct.
|
||||
*/
|
||||
void exit_itimers(struct signal_struct *sig)
|
||||
|
@ -3879,6 +3879,7 @@ EXPORT_SYMBOL(cpu_present_map);
|
||||
|
||||
#ifndef CONFIG_SMP
|
||||
cpumask_t cpu_online_map = CPU_MASK_ALL;
|
||||
EXPORT_SYMBOL_GPL(cpu_online_map);
|
||||
cpumask_t cpu_possible_map = CPU_MASK_ALL;
|
||||
#endif
|
||||
|
||||
|
@ -397,20 +397,8 @@ void __exit_signal(struct task_struct *tsk)
|
||||
flush_sigqueue(&tsk->pending);
|
||||
if (sig) {
|
||||
/*
|
||||
* We are cleaning up the signal_struct here. We delayed
|
||||
* calling exit_itimers until after flush_sigqueue, just in
|
||||
* case our thread-local pending queue contained a queued
|
||||
* timer signal that would have been cleared in
|
||||
* exit_itimers. When that called sigqueue_free, it would
|
||||
* attempt to re-take the tasklist_lock and deadlock. This
|
||||
* can never happen if we ensure that all queues the
|
||||
* timer's signal might be queued on have been flushed
|
||||
* first. The shared_pending queue, and our own pending
|
||||
* queue are the only queues the timer could be on, since
|
||||
* there are no other threads left in the group and timer
|
||||
* signals are constrained to threads inside the group.
|
||||
* We are cleaning up the signal_struct here.
|
||||
*/
|
||||
exit_itimers(sig);
|
||||
exit_thread_group_keys(sig);
|
||||
kmem_cache_free(signal_cachep, sig);
|
||||
}
|
||||
|
13
lib/idr.c
13
lib/idr.c
@ -345,6 +345,19 @@ void idr_remove(struct idr *idp, int id)
|
||||
}
|
||||
EXPORT_SYMBOL(idr_remove);
|
||||
|
||||
/**
|
||||
* idr_destroy - release all cached layers within an idr tree
|
||||
* idp: idr handle
|
||||
*/
|
||||
void idr_destroy(struct idr *idp)
|
||||
{
|
||||
while (idp->id_free_cnt) {
|
||||
struct idr_layer *p = alloc_layer(idp);
|
||||
kmem_cache_free(idr_layer_cache, p);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(idr_destroy);
|
||||
|
||||
/**
|
||||
* idr_find - return pointer for given id
|
||||
* @idp: idr handle
|
||||
|
@ -1750,6 +1750,8 @@ inline void setup_pageset(struct per_cpu_pageset *p, unsigned long batch)
|
||||
{
|
||||
struct per_cpu_pages *pcp;
|
||||
|
||||
memset(p, 0, sizeof(*p));
|
||||
|
||||
pcp = &p->pcp[0]; /* hot */
|
||||
pcp->count = 0;
|
||||
pcp->low = 2 * batch;
|
||||
|
@ -340,9 +340,10 @@ static void tr_add_rif_info(struct trh_hdr *trh, struct net_device *dev)
|
||||
unsigned int hash, rii_p = 0;
|
||||
unsigned long flags;
|
||||
struct rif_cache *entry;
|
||||
|
||||
unsigned char saddr0;
|
||||
|
||||
spin_lock_irqsave(&rif_lock, flags);
|
||||
saddr0 = trh->saddr[0];
|
||||
|
||||
/*
|
||||
* Firstly see if the entry exists
|
||||
@ -395,7 +396,6 @@ printk("adding rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n",
|
||||
entry->rcf = trh->rcf & htons((unsigned short)~TR_RCF_BROADCAST_MASK);
|
||||
memcpy(&(entry->rseg[0]),&(trh->rseg[0]),8*sizeof(unsigned short));
|
||||
entry->local_ring = 0;
|
||||
trh->saddr[0]|=TR_RII; /* put the routing indicator back for tcpdump */
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -422,6 +422,7 @@ printk("updating rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n",
|
||||
}
|
||||
entry->last_used=jiffies;
|
||||
}
|
||||
trh->saddr[0]=saddr0; /* put the routing indicator back for tcpdump */
|
||||
spin_unlock_irqrestore(&rif_lock, flags);
|
||||
}
|
||||
|
||||
|
@ -175,39 +175,10 @@ static void pneigh_queue_purge(struct sk_buff_head *list)
|
||||
}
|
||||
}
|
||||
|
||||
void neigh_changeaddr(struct neigh_table *tbl, struct net_device *dev)
|
||||
static void neigh_flush_dev(struct neigh_table *tbl, struct net_device *dev)
|
||||
{
|
||||
int i;
|
||||
|
||||
write_lock_bh(&tbl->lock);
|
||||
|
||||
for (i=0; i <= tbl->hash_mask; i++) {
|
||||
struct neighbour *n, **np;
|
||||
|
||||
np = &tbl->hash_buckets[i];
|
||||
while ((n = *np) != NULL) {
|
||||
if (dev && n->dev != dev) {
|
||||
np = &n->next;
|
||||
continue;
|
||||
}
|
||||
*np = n->next;
|
||||
write_lock_bh(&n->lock);
|
||||
n->dead = 1;
|
||||
neigh_del_timer(n);
|
||||
write_unlock_bh(&n->lock);
|
||||
neigh_release(n);
|
||||
}
|
||||
}
|
||||
|
||||
write_unlock_bh(&tbl->lock);
|
||||
}
|
||||
|
||||
int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev)
|
||||
{
|
||||
int i;
|
||||
|
||||
write_lock_bh(&tbl->lock);
|
||||
|
||||
for (i = 0; i <= tbl->hash_mask; i++) {
|
||||
struct neighbour *n, **np = &tbl->hash_buckets[i];
|
||||
|
||||
@ -243,7 +214,19 @@ int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev)
|
||||
neigh_release(n);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void neigh_changeaddr(struct neigh_table *tbl, struct net_device *dev)
|
||||
{
|
||||
write_lock_bh(&tbl->lock);
|
||||
neigh_flush_dev(tbl, dev);
|
||||
write_unlock_bh(&tbl->lock);
|
||||
}
|
||||
|
||||
int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev)
|
||||
{
|
||||
write_lock_bh(&tbl->lock);
|
||||
neigh_flush_dev(tbl, dev);
|
||||
pneigh_ifdown(tbl, dev);
|
||||
write_unlock_bh(&tbl->lock);
|
||||
|
||||
@ -732,6 +715,7 @@ static inline void neigh_add_timer(struct neighbour *n, unsigned long when)
|
||||
if (unlikely(mod_timer(&n->timer, when))) {
|
||||
printk("NEIGH: BUG, double timer add, state is %x\n",
|
||||
n->nud_state);
|
||||
dump_stack();
|
||||
}
|
||||
}
|
||||
|
||||
@ -815,10 +799,10 @@ static void neigh_timer_handler(unsigned long arg)
|
||||
}
|
||||
|
||||
if (neigh->nud_state & NUD_IN_TIMER) {
|
||||
neigh_hold(neigh);
|
||||
if (time_before(next, jiffies + HZ/2))
|
||||
next = jiffies + HZ/2;
|
||||
neigh_add_timer(neigh, next);
|
||||
if (!mod_timer(&neigh->timer, next))
|
||||
neigh_hold(neigh);
|
||||
}
|
||||
if (neigh->nud_state & (NUD_INCOMPLETE | NUD_PROBE)) {
|
||||
struct sk_buff *skb = skb_peek(&neigh->arp_queue);
|
||||
|
@ -410,6 +410,9 @@ struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask)
|
||||
C(nfct);
|
||||
nf_conntrack_get(skb->nfct);
|
||||
C(nfctinfo);
|
||||
#if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE)
|
||||
C(ipvs_property);
|
||||
#endif
|
||||
#ifdef CONFIG_BRIDGE_NETFILTER
|
||||
C(nf_bridge);
|
||||
nf_bridge_get(skb->nf_bridge);
|
||||
@ -467,6 +470,9 @@ static void copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
|
||||
new->nfct = old->nfct;
|
||||
nf_conntrack_get(old->nfct);
|
||||
new->nfctinfo = old->nfctinfo;
|
||||
#if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE)
|
||||
new->ipvs_property = old->ipvs_property;
|
||||
#endif
|
||||
#ifdef CONFIG_BRIDGE_NETFILTER
|
||||
new->nf_bridge = old->nf_bridge;
|
||||
nf_bridge_get(old->nf_bridge);
|
||||
|
@ -455,10 +455,15 @@ static inline struct iw_statistics *get_wireless_stats(struct net_device *dev)
|
||||
|
||||
/* Old location, field to be removed in next WE */
|
||||
if(dev->get_wireless_stats) {
|
||||
printk(KERN_DEBUG "%s (WE) : Driver using old /proc/net/wireless support, please fix driver !\n",
|
||||
dev->name);
|
||||
static int printed_message;
|
||||
|
||||
if (!printed_message++)
|
||||
printk(KERN_DEBUG "%s (WE) : Driver using old /proc/net/wireless support, please fix driver !\n",
|
||||
dev->name);
|
||||
|
||||
return dev->get_wireless_stats(dev);
|
||||
}
|
||||
|
||||
/* Not found */
|
||||
return (struct iw_statistics *) NULL;
|
||||
}
|
||||
|
@ -463,6 +463,7 @@ static int dccp_v4_send_response(struct sock *sk, struct request_sock *req,
|
||||
if (skb != NULL) {
|
||||
const struct inet_request_sock *ireq = inet_rsk(req);
|
||||
|
||||
memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
|
||||
err = ip_build_and_send_pkt(skb, sk, ireq->loc_addr,
|
||||
ireq->rmt_addr,
|
||||
ireq->opt);
|
||||
@ -647,6 +648,7 @@ int dccp_v4_send_reset(struct sock *sk, enum dccp_reset_codes code)
|
||||
if (skb != NULL) {
|
||||
const struct inet_sock *inet = inet_sk(sk);
|
||||
|
||||
memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
|
||||
err = ip_build_and_send_pkt(skb, sk,
|
||||
inet->saddr, inet->daddr, NULL);
|
||||
if (err == NET_XMIT_CN)
|
||||
|
@ -62,10 +62,8 @@ int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)
|
||||
|
||||
skb->h.raw = skb_push(skb, dccp_header_size);
|
||||
dh = dccp_hdr(skb);
|
||||
/*
|
||||
* Data packets are not cloned as they are never retransmitted
|
||||
*/
|
||||
if (skb_cloned(skb))
|
||||
|
||||
if (!skb->sk)
|
||||
skb_set_owner_w(skb, sk);
|
||||
|
||||
/* Build DCCP header and checksum it. */
|
||||
@ -102,6 +100,7 @@ int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)
|
||||
|
||||
DCCP_INC_STATS(DCCP_MIB_OUTSEGS);
|
||||
|
||||
memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
|
||||
err = ip_queue_xmit(skb, 0);
|
||||
if (err <= 0)
|
||||
return err;
|
||||
@ -243,7 +242,8 @@ int dccp_write_xmit(struct sock *sk, struct sk_buff *skb, long *timeo)
|
||||
|
||||
err = dccp_transmit_skb(sk, skb);
|
||||
ccid_hc_tx_packet_sent(dp->dccps_hc_tx_ccid, sk, 0, len);
|
||||
}
|
||||
} else
|
||||
kfree_skb(skb);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
@ -402,8 +402,6 @@ int dccp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
|
||||
* This bug was _quickly_ found & fixed by just looking at an OSTRA
|
||||
* generated callgraph 8) -acme
|
||||
*/
|
||||
if (rc != 0)
|
||||
goto out_discard;
|
||||
out_release:
|
||||
release_sock(sk);
|
||||
return rc ? : len;
|
||||
|
@ -391,6 +391,9 @@ static void ip_copy_metadata(struct sk_buff *to, struct sk_buff *from)
|
||||
to->nfct = from->nfct;
|
||||
nf_conntrack_get(to->nfct);
|
||||
to->nfctinfo = from->nfctinfo;
|
||||
#if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE)
|
||||
to->ipvs_property = from->ipvs_property;
|
||||
#endif
|
||||
#ifdef CONFIG_BRIDGE_NETFILTER
|
||||
nf_bridge_put(to->nf_bridge);
|
||||
to->nf_bridge = from->nf_bridge;
|
||||
|
@ -435,17 +435,7 @@ int tcp_fragment(struct sock *sk, struct sk_buff *skb, u32 len, unsigned int mss
|
||||
int nsize, old_factor;
|
||||
u16 flags;
|
||||
|
||||
if (unlikely(len >= skb->len)) {
|
||||
if (net_ratelimit()) {
|
||||
printk(KERN_DEBUG "TCP: seg_size=%u, mss=%u, seq=%u, "
|
||||
"end_seq=%u, skb->len=%u.\n", len, mss_now,
|
||||
TCP_SKB_CB(skb)->seq, TCP_SKB_CB(skb)->end_seq,
|
||||
skb->len);
|
||||
WARN_ON(1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
BUG_ON(len > skb->len);
|
||||
nsize = skb_headlen(skb) - len;
|
||||
if (nsize < 0)
|
||||
nsize = 0;
|
||||
|
@ -483,7 +483,7 @@ int ipv6_flowlabel_opt(struct sock *sk, char __user *optval, int optlen)
|
||||
goto done;
|
||||
}
|
||||
fl1 = sfl->fl;
|
||||
atomic_inc(&fl->users);
|
||||
atomic_inc(&fl1->users);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -587,7 +587,7 @@ svc_udp_recvfrom(struct svc_rqst *rqstp)
|
||||
struct timeval tv;
|
||||
|
||||
tv.tv_sec = xtime.tv_sec;
|
||||
tv.tv_usec = xtime.tv_nsec * 1000;
|
||||
tv.tv_usec = xtime.tv_nsec / NSEC_PER_USEC;
|
||||
skb_set_timestamp(skb, &tv);
|
||||
/* Don't enable netstamp, sunrpc doesn't
|
||||
need that much accuracy */
|
||||
|
@ -879,7 +879,7 @@ static ssize_t sel_commit_bools_write(struct file *filep,
|
||||
if (sscanf(page, "%d", &new_value) != 1)
|
||||
goto out;
|
||||
|
||||
if (new_value) {
|
||||
if (new_value && bool_pending_values) {
|
||||
security_set_bools(bool_num, bool_pending_values);
|
||||
}
|
||||
|
||||
@ -952,6 +952,7 @@ static int sel_make_bools(void)
|
||||
|
||||
/* remove any existing files */
|
||||
kfree(bool_pending_values);
|
||||
bool_pending_values = NULL;
|
||||
|
||||
sel_remove_bools(dir);
|
||||
|
||||
@ -1002,6 +1003,7 @@ out:
|
||||
}
|
||||
return ret;
|
||||
err:
|
||||
kfree(values);
|
||||
d_genocide(dir);
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
|
@ -650,8 +650,10 @@ void policydb_destroy(struct policydb *p)
|
||||
}
|
||||
if (lrt) kfree(lrt);
|
||||
|
||||
for (i = 0; i < p->p_types.nprim; i++)
|
||||
ebitmap_destroy(&p->type_attr_map[i]);
|
||||
if (p->type_attr_map) {
|
||||
for (i = 0; i < p->p_types.nprim; i++)
|
||||
ebitmap_destroy(&p->type_attr_map[i]);
|
||||
}
|
||||
kfree(p->type_attr_map);
|
||||
|
||||
return;
|
||||
|
@ -828,7 +828,8 @@ static int snd_generic_suspend(struct device *dev, pm_message_t state, u32 level
|
||||
card = get_snd_generic_card(dev);
|
||||
if (card->power_state == SNDRV_CTL_POWER_D3hot)
|
||||
return 0;
|
||||
card->pm_suspend(card, PMSG_SUSPEND);
|
||||
if (card->pm_suspend)
|
||||
card->pm_suspend(card, PMSG_SUSPEND);
|
||||
snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
|
||||
return 0;
|
||||
}
|
||||
@ -843,7 +844,8 @@ static int snd_generic_resume(struct device *dev, u32 level)
|
||||
card = get_snd_generic_card(dev);
|
||||
if (card->power_state == SNDRV_CTL_POWER_D0)
|
||||
return 0;
|
||||
card->pm_resume(card);
|
||||
if (card->pm_suspend)
|
||||
card->pm_resume(card);
|
||||
snd_power_change_state(card, SNDRV_CTL_POWER_D0);
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user