Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
4c2cb58c
K
Kernel
项目概览
openeuler
/
Kernel
2 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
4c2cb58c
编写于
10月 27, 2005
作者:
T
Trond Myklebust
浏览文件
操作
浏览文件
下载
差异文件
Merge /home/trondmy/scm/kernel/git/torvalds/linux-2.6
上级
34123da6
72ab373a
变更
66
显示空白变更内容
内联
并排
Showing
66 changed file
with
737 addition
and
504 deletion
+737
-504
Documentation/kernel-parameters.txt
Documentation/kernel-parameters.txt
+260
-236
arch/arm/mach-integrator/impd1.c
arch/arm/mach-integrator/impd1.c
+8
-7
arch/arm/mach-pxa/corgi_lcd.c
arch/arm/mach-pxa/corgi_lcd.c
+2
-0
arch/arm/mach-pxa/generic.c
arch/arm/mach-pxa/generic.c
+20
-0
arch/arm/mach-s3c2410/mach-bast.c
arch/arm/mach-s3c2410/mach-bast.c
+3
-3
arch/i386/kernel/cpu/cpufreq/powernow-k8.c
arch/i386/kernel/cpu/cpufreq/powernow-k8.c
+19
-11
arch/ppc64/kernel/iSeries_htab.c
arch/ppc64/kernel/iSeries_htab.c
+1
-1
arch/ppc64/kernel/mpic.c
arch/ppc64/kernel/mpic.c
+2
-2
arch/ppc64/kernel/time.c
arch/ppc64/kernel/time.c
+1
-1
arch/ppc64/mm/init.c
arch/ppc64/mm/init.c
+1
-2
arch/um/include/sysdep-i386/thread.h
arch/um/include/sysdep-i386/thread.h
+1
-1
arch/um/include/sysdep-x86_64/thread.h
arch/um/include/sysdep-x86_64/thread.h
+1
-1
drivers/char/drm/drm_vm.c
drivers/char/drm/drm_vm.c
+2
-1
drivers/char/drm/mga_drv.h
drivers/char/drm/mga_drv.h
+1
-1
drivers/char/drm/mga_state.c
drivers/char/drm/mga_state.c
+1
-1
drivers/char/drm/radeon_cp.c
drivers/char/drm/radeon_cp.c
+6
-5
drivers/infiniband/hw/mthca/mthca_eq.c
drivers/infiniband/hw/mthca/mthca_eq.c
+11
-10
drivers/md/md.c
drivers/md/md.c
+6
-4
drivers/media/video/Kconfig
drivers/media/video/Kconfig
+0
-1
drivers/message/fusion/mptsas.c
drivers/message/fusion/mptsas.c
+8
-4
drivers/pci/quirks.c
drivers/pci/quirks.c
+88
-13
drivers/pci/setup-bus.c
drivers/pci/setup-bus.c
+1
-1
drivers/scsi/NCR5380.c
drivers/scsi/NCR5380.c
+1
-1
drivers/scsi/aacraid/aacraid.h
drivers/scsi/aacraid/aacraid.h
+1
-1
drivers/scsi/qla2xxx/qla_os.c
drivers/scsi/qla2xxx/qla_os.c
+2
-1
drivers/scsi/scsi_devinfo.c
drivers/scsi/scsi_devinfo.c
+1
-0
drivers/scsi/scsi_lib.c
drivers/scsi/scsi_lib.c
+4
-3
drivers/scsi/scsi_transport_fc.c
drivers/scsi/scsi_transport_fc.c
+10
-3
drivers/serial/8250_pci.c
drivers/serial/8250_pci.c
+25
-1
drivers/video/fbsysfs.c
drivers/video/fbsysfs.c
+8
-0
fs/aio.c
fs/aio.c
+6
-0
fs/hfsplus/super.c
fs/hfsplus/super.c
+1
-0
fs/inotify.c
fs/inotify.c
+1
-0
include/asm-alpha/atomic.h
include/asm-alpha/atomic.h
+10
-4
include/asm-alpha/barrier.h
include/asm-alpha/barrier.h
+34
-0
include/asm-alpha/system.h
include/asm-alpha/system.h
+1
-30
include/asm-arm/arch-s3c2410/regs-clock.h
include/asm-arm/arch-s3c2410/regs-clock.h
+17
-4
include/asm-arm/bitops.h
include/asm-arm/bitops.h
+0
-1
include/linux/hugetlb.h
include/linux/hugetlb.h
+3
-13
include/linux/idr.h
include/linux/idr.h
+1
-0
include/linux/pci_ids.h
include/linux/pci_ids.h
+2
-0
include/net/ax25.h
include/net/ax25.h
+1
-1
include/net/llc_pdu.h
include/net/llc_pdu.h
+3
-1
kernel/exit.c
kernel/exit.c
+1
-0
kernel/posix-cpu-timers.c
kernel/posix-cpu-timers.c
+63
-47
kernel/posix-timers.c
kernel/posix-timers.c
+1
-1
kernel/sched.c
kernel/sched.c
+1
-0
kernel/signal.c
kernel/signal.c
+1
-13
lib/idr.c
lib/idr.c
+13
-0
mm/hugetlb.c
mm/hugetlb.c
+22
-0
mm/memory.c
mm/memory.c
+2
-12
mm/page_alloc.c
mm/page_alloc.c
+2
-0
net/802/tr.c
net/802/tr.c
+3
-2
net/core/neighbour.c
net/core/neighbour.c
+16
-32
net/core/skbuff.c
net/core/skbuff.c
+6
-0
net/core/wireless.c
net/core/wireless.c
+7
-2
net/dccp/ipv4.c
net/dccp/ipv4.c
+2
-0
net/dccp/output.c
net/dccp/output.c
+5
-5
net/dccp/proto.c
net/dccp/proto.c
+0
-2
net/ipv4/ip_output.c
net/ipv4/ip_output.c
+3
-0
net/ipv4/tcp_output.c
net/ipv4/tcp_output.c
+1
-11
net/ipv6/ip6_flowlabel.c
net/ipv6/ip6_flowlabel.c
+1
-1
net/sunrpc/svcsock.c
net/sunrpc/svcsock.c
+1
-1
security/selinux/selinuxfs.c
security/selinux/selinuxfs.c
+3
-1
security/selinux/ss/policydb.c
security/selinux/ss/policydb.c
+4
-2
sound/core/init.c
sound/core/init.c
+4
-2
未找到文件。
Documentation/kernel-parameters.txt
浏览文件 @
4c2cb58c
...
@@ -17,7 +17,7 @@ are specified on the kernel command line with the module name plus
...
@@ -17,7 +17,7 @@ are specified on the kernel command line with the module name plus
usbcore.blinkenlights=1
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 state
s
the
restrictions on the kernel for the said kernel parameter to be valid. 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:
restrictions referred to are that the relevant option is valid if:
...
@@ -71,7 +71,7 @@ restrictions referred to are that the relevant option is valid if:
...
@@ -71,7 +71,7 @@ restrictions referred to are that the relevant option is valid if:
SERIAL Serial support is enabled.
SERIAL Serial support is enabled.
SMP The kernel is an SMP kernel.
SMP The kernel is an SMP kernel.
SPARC Sparc architecture is enabled.
SPARC Sparc architecture is enabled.
SWSUSP Software suspen
sion
is enabled.
SWSUSP Software suspen
d
is enabled.
TS Appropriate touchscreen support is enabled.
TS Appropriate touchscreen support is enabled.
USB USB support is enabled.
USB USB support is enabled.
USBHID USB Human Interface Device support is enabled.
USBHID USB Human Interface Device support is enabled.
...
@@ -106,7 +106,7 @@ running once the system is up.
...
@@ -106,7 +106,7 @@ running once the system is up.
See also Documentation/scsi/ncr53c7xx.txt.
See also Documentation/scsi/ncr53c7xx.txt.
acpi= [HW,ACPI] Advanced Configuration and Power Interface
acpi= [HW,ACPI] Advanced Configuration and Power Interface
Format: { force | off | ht | strict }
Format: { force | off | ht | strict
| noirq
}
force -- enable ACPI if default was off
force -- enable ACPI if default was off
off -- disable ACPI if default was on
off -- disable ACPI if default was on
noirq -- do not use ACPI for IRQ routing
noirq -- do not use ACPI for IRQ routing
...
@@ -123,16 +123,19 @@ running once the system is up.
...
@@ -123,16 +123,19 @@ running once the system is up.
acpi_sci= [HW,ACPI] ACPI System Control Interrupt trigger mode
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
acpi_irq_balance [HW,ACPI]
ACPI will balance active IRQs
default in APIC mode
default in APIC mode
acpi_irq_nobalance [HW,ACPI] ACPI will not move active IRQs (default)
acpi_irq_nobalance [HW,ACPI]
ACPI will not move active IRQs (default)
default in PIC mode
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>...
Format: <irq>,<irq>...
acpi_irq_isa= [HW,ACPI] If irq_balance,
M
ark listed IRQs used by ISA
acpi_irq_isa= [HW,ACPI] If irq_balance,
m
ark listed IRQs used by ISA
Format: <irq>,<irq>...
Format: <irq>,<irq>...
acpi_osi= [HW,ACPI] empty param disables _OSI
acpi_osi= [HW,ACPI] empty param disables _OSI
...
@@ -145,14 +148,14 @@ running once the system is up.
...
@@ -145,14 +148,14 @@ running once the system is up.
acpi_dbg_layer= [HW,ACPI]
acpi_dbg_layer= [HW,ACPI]
Format: <int>
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
1: enable, 0: disable. It is useful for boot time
debugging. After system has booted up, it can be set
debugging. After system has booted up, it can be set
via /proc/acpi/debug_layer.
via /proc/acpi/debug_layer.
acpi_dbg_level= [HW,ACPI]
acpi_dbg_level= [HW,ACPI]
Format: <int>
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
1: enable, 0: disable. It is useful for boot time
debugging. After system has booted up, it can be set
debugging. After system has booted up, it can be set
via /proc/acpi/debug_level.
via /proc/acpi/debug_level.
...
@@ -161,12 +164,13 @@ running once the system is up.
...
@@ -161,12 +164,13 @@ running once the system is up.
acpi_generic_hotkey [HW,ACPI]
acpi_generic_hotkey [HW,ACPI]
Allow consolidated generic hotkey driver to
Allow consolidated generic hotkey driver to
over
-
ride platform specific driver.
override platform specific driver.
See also Documentation/acpi-hotkey.txt.
See also Documentation/acpi-hotkey.txt.
enable_timer_pin_1 [i386,x86-64]
enable_timer_pin_1 [i386,x86-64]
Enable PIN 1 of APIC timer
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.
The kernel tries to set a reasonable default.
disable_timer_pin_1 [i386,x86-64]
disable_timer_pin_1 [i386,x86-64]
...
@@ -205,10 +209,6 @@ running once the system is up.
...
@@ -205,10 +209,6 @@ running once the system is up.
aic79xx= [HW,SCSI]
aic79xx= [HW,SCSI]
See Documentation/scsi/aic79xx.txt.
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
amijoy.map= [HW,JOY] Amiga joystick support
Map of devices attached to JOY0DAT and JOY1DAT
Map of devices attached to JOY0DAT and JOY1DAT
Format: <a>,<b>
Format: <a>,<b>
...
@@ -219,7 +219,8 @@ running once the system is up.
...
@@ -219,7 +219,8 @@ running once the system is up.
connected to one of 16 gameports
connected to one of 16 gameports
Format: <type1>,<type2>,..<type16>
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
Format: noidle
Disable APC CPU standby support. SPARCstation-Fox does
Disable APC CPU standby support. SPARCstation-Fox does
not play well with APC CPU idle - disable it if you have
not play well with APC CPU idle - disable it if you have
...
@@ -251,7 +252,7 @@ running once the system is up.
...
@@ -251,7 +252,7 @@ running once the system is up.
atkbd.reset= [HW] Reset keyboard during initialization
atkbd.reset= [HW] Reset keyboard during initialization
atkbd.set= [HW] Select keyboard code set
atkbd.set= [HW] Select keyboard code set
Format: <int> (2 = AT (default) 3 = PS/2)
Format: <int> (2 = AT (default)
,
3 = PS/2)
atkbd.scroll= [HW] Enable scroll wheel on MS Office and similar
atkbd.scroll= [HW] Enable scroll wheel on MS Office and similar
keyboards
keyboards
...
@@ -259,8 +260,8 @@ running once the system is up.
...
@@ -259,8 +260,8 @@ running once the system is up.
atkbd.softraw= [HW] Choose between synthetic and real raw mode
atkbd.softraw= [HW] Choose between synthetic and real raw mode
Format: <bool> (0 = real, 1 = synthetic (default))
Format: <bool> (0 = real, 1 = synthetic (default))
atkbd.softrepeat=
atkbd.softrepeat=
[HW]
[HW]
Use software keyboard repeat
Use software keyboard repeat
autotest [IA64]
autotest [IA64]
...
@@ -277,11 +278,13 @@ running once the system is up.
...
@@ -277,11 +278,13 @@ running once the system is up.
Format: <io>,<mode>
Format: <io>,<mode>
See header of drivers/net/hamradio/baycom_par.c.
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>]
Format: <io>,<irq>,<mode>[,<baud>]
See header of drivers/net/hamradio/baycom_ser_fdx.c.
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>
Format: <io>,<irq>,<mode>
See header of drivers/net/hamradio/baycom_ser_hdx.c.
See header of drivers/net/hamradio/baycom_ser_hdx.c.
...
@@ -292,7 +295,8 @@ running once the system is up.
...
@@ -292,7 +295,8 @@ running once the system is up.
blkmtd_count=
blkmtd_count=
bttv.card= [HW,V4L] bttv (bt848 + bt878 based grabber cards)
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.pll= See Documentation/video4linux/bttv/Insmod-options
bttv.tuner= and Documentation/video4linux/bttv/CARDLIST
bttv.tuner= and Documentation/video4linux/bttv/CARDLIST
...
@@ -318,15 +322,17 @@ running once the system is up.
...
@@ -318,15 +322,17 @@ running once the system is up.
checkreqprot [SELINUX] Set initial checkreqprot flag value.
checkreqprot [SELINUX] Set initial checkreqprot flag value.
Format: { "0" | "1" }
Format: { "0" | "1" }
See security/selinux/Kconfig help text.
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.
1 -- check protection requested by application.
Default value is set via a kernel config option.
Default value is set via a kernel config option.
Value can be changed at runtime via /selinux/checkreqprot.
Value can be changed at runtime via
/selinux/checkreqprot.
clock= [BUGS=IA-32,
HW] gettimeofday timesource override.
clock= [BUGS=IA-32,
HW] gettimeofday timesource override.
Forces specified timesource (if avaliable) to be used
Forces specified timesource (if avaliable) to be used
when calculating gettimeofday(). If specicified
timesource
when calculating gettimeofday(). If specicified
is not avalible, it defaults to PIT.
timesource is not avalible, it defaults to PIT.
Format: { pit | tsc | cyclone | pmtmr }
Format: { pit | tsc | cyclone | pmtmr }
hpet= [IA-32,HPET] option to disable HPET and use PIT.
hpet= [IA-32,HPET] option to disable HPET and use PIT.
...
@@ -336,12 +342,14 @@ running once the system is up.
...
@@ -336,12 +342,14 @@ running once the system is up.
Format: { auto | [<io>,][<irq>] }
Format: { auto | [<io>,][<irq>] }
com20020= [HW,NET] ARCnet - COM20020 chipset
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)
com90io= [HW,NET] ARCnet - COM90xx chipset (IO-mapped buffers)
Format: <io>[,<irq>]
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>]]
Format: <io>[,<irq>[,<memstart>]]
condev= [HW,S390] console device
condev= [HW,S390] console device
...
@@ -367,7 +375,8 @@ running once the system is up.
...
@@ -367,7 +375,8 @@ running once the system is up.
options are the same as for ttyS, above.
options are the same as for ttyS, above.
cpcihp_generic= [HW,PCI] Generic port I/O CompactPCI driver
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]
cpia_pp= [HW,PPT]
Format: { parport<nr> | auto | none }
Format: { parport<nr> | auto | none }
...
@@ -424,11 +433,11 @@ running once the system is up.
...
@@ -424,11 +433,11 @@ running once the system is up.
dtc3181e= [HW,SCSI]
dtc3181e= [HW,SCSI]
earlyprintk= [IA-32,
X86-64]
earlyprintk= [IA-32,X86-64]
earlyprintk=vga
earlyprintk=vga
earlyprintk=serial[,ttySn[,baudrate]]
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.
takes over.
Only vga or serial at a time, not both.
Only vga or serial at a time, not both.
...
@@ -462,12 +471,13 @@ running once the system is up.
...
@@ -462,12 +471,13 @@ running once the system is up.
arch/i386/kernel/cpu/cpufreq/elanfreq.c.
arch/i386/kernel/cpu/cpufreq/elanfreq.c.
elevator= [IOSCHED]
elevator= [IOSCHED]
Format: {"as"|"cfq"|"deadline"|"noop"}
Format: {"as" | "cfq" | "deadline" | "noop"}
See Documentation/block/as-iosched.txt
See Documentation/block/as-iosched.txt and
and Documentation/block/deadline-iosched.txt for details.
Documentation/block/deadline-iosched.txt for details.
elfcorehdr= [IA-32]
elfcorehdr= [IA-32]
Specifies physical address of start of kernel core
image
Specifies physical address of start of kernel core
elf header.
image
elf header.
See Documentation/kdump.txt for details.
See Documentation/kdump.txt for details.
enforcing [SELINUX] Set initial enforcing status.
enforcing [SELINUX] Set initial enforcing status.
...
@@ -532,6 +542,7 @@ running once the system is up.
...
@@ -532,6 +542,7 @@ running once the system is up.
hashdist= [KNL,NUMA] Large hashes allocated during boot
hashdist= [KNL,NUMA] Large hashes allocated during boot
are distributed across NUMA nodes. Defaults on
are distributed across NUMA nodes. Defaults on
for IA-64, off otherwise.
for IA-64, off otherwise.
Format: 0 | 1 (for off | on)
hcl= [IA-64] SGI's Hardware Graph compatibility layer
hcl= [IA-64] SGI's Hardware Graph compatibility layer
...
@@ -649,7 +660,7 @@ running once the system is up.
...
@@ -649,7 +660,7 @@ running once the system is up.
firmware running.
firmware running.
isapnp= [ISAPNP]
isapnp= [ISAPNP]
Format: <RDP>,
<reset>, <pci_scan>,
<verbosity>
Format: <RDP>,
<reset>,<pci_scan>,
<verbosity>
isolcpus= [KNL,SMP] Isolate CPUs from the general scheduler.
isolcpus= [KNL,SMP] Isolate CPUs from the general scheduler.
Format: <cpu number>,...,<cpu number>
Format: <cpu number>,...,<cpu number>
...
@@ -661,9 +672,9 @@ running once the system is up.
...
@@ -661,9 +672,9 @@ running once the system is up.
"number of CPUs in system - 1".
"number of CPUs in system - 1".
This option is the preferred way to isolate CPUs. The
This option is the preferred way to isolate CPUs. The
alternative -
manually setting the CPU mask of all tasks
alternative -
- manually setting the CPU mask of all
in the system can cause problems and suboptimal loa
d
tasks in the system -- can cause problems an
d
balancer performance.
suboptimal load
balancer performance.
isp16= [HW,CD]
isp16= [HW,CD]
Format: <io>,<irq>,<dma>,<setup>
Format: <io>,<irq>,<dma>,<setup>
...
@@ -675,18 +686,19 @@ running once the system is up.
...
@@ -675,18 +686,19 @@ running once the system is up.
keepinitrd [HW,ARM]
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.
in oops dumps.
l2cr= [PPC]
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
lasi= [HW,SCSI] PARISC LASI driver for the 53c700 chip
Format: addr:<io>,irq:<irq>
Format: addr:<io>,irq:<irq>
llsc*= [IA64]
llsc*= [IA64]
See function print_params() in
See function print_params() in
arch/ia64/sn/kernel/llsc4.c.
arch/ia64/sn/kernel/llsc4.c.
load_ramdisk= [RAM] List of ramdisks to load from floppy
load_ramdisk= [RAM] List of ramdisks to load from floppy
See Documentation/ramdisk.txt.
See Documentation/ramdisk.txt.
...
@@ -713,8 +725,9 @@ running once the system is up.
...
@@ -713,8 +725,9 @@ running once the system is up.
7 (KERN_DEBUG) debug-level messages
7 (KERN_DEBUG) debug-level messages
log_buf_len=n Sets the size of the printk ring buffer, in bytes.
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
Format: { n | nk | nM }
default is set in kernel config.
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=0 [LP] Specify parallel ports to use, e.g,
lp=port[,port...] lp=none,parport0 (lp0 not configured, lp1 uses
lp=port[,port...] lp=none,parport0 (lp0 not configured, lp1 uses
...
@@ -750,18 +763,18 @@ running once the system is up.
...
@@ -750,18 +763,18 @@ running once the system is up.
ltpc= [NET]
ltpc= [NET]
Format: <io>,<irq>,<dma>
Format: <io>,<irq>,<dma>
mac5380= [HW,SCSI]
mac5380= [HW,SCSI]
Format:
Format:
<can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags>
<can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags>
mac53c9x= [HW,SCSI]
mac53c9x= [HW,SCSI]
Format:
Format:
<num_esps>,<disconnect>,<nosync>,<can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags>
<num_esps>,<disconnect>,<nosync>,<can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags>
machvec= [IA64]
machvec= [IA64]
Force the use of a particular machine-vector
Force the use of a particular machine-vector (machvec) in a generic
(machvec) in a generic kernel.
kernel.
Example: machvec=hpzx1_swiotlb
Example: machvec=hpzx1_swiotlb
mad16= [HW,OSS]
mad16= [HW,OSS]
Format:
Format:
<io>,<irq>,<dma>,<dma16>,<mpu_io>,<mpu_irq>,<joystick>
<io>,<irq>,<dma>,<dma16>,<mpu_io>,<mpu_irq>,<joystick>
maui= [HW,OSS]
maui= [HW,OSS]
Format: <io>,<irq>
Format: <io>,<irq>
...
@@ -776,11 +789,11 @@ running once the system is up.
...
@@ -776,11 +789,11 @@ running once the system is up.
max_addr=[KMG] [KNL,BOOT,ia64] All physical memory greater than or
max_addr=[KMG] [KNL,BOOT,ia64] All physical memory greater than or
equal to this physical address is ignored.
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.
Should be between 1 and 2^32-1.
max_report_luns=
max_report_luns=
[SCSI] Maximum number of LUNs received
[SCSI] Maximum number of LUNs received
.
Should be between 1 and 16384.
Should be between 1 and 16384.
mca-pentium [BUGS=IA-32]
mca-pentium [BUGS=IA-32]
...
@@ -851,15 +864,15 @@ running once the system is up.
...
@@ -851,15 +864,15 @@ running once the system is up.
MTD_Partition= [MTD]
MTD_Partition= [MTD]
Format: <name>,<region-number>,<size>,<offset>
Format: <name>,<region-number>,<size>,<offset>
MTD_Region= [MTD]
MTD_Region= [MTD]
Format:
Format:
<name>,<region-number>[,<base>,<size>,<buswidth>,<altbuswidth>]
<name>,<region-number>[,<base>,<size>,<buswidth>,<altbuswidth>]
mtdparts= [MTD]
mtdparts= [MTD]
See drivers/mtd/cmdline.c.
See drivers/mtd/cmdline.c.
mtouchusb.raw_coordinates=
mtouchusb.raw_coordinates=
[HW] Make the MicroTouch USB driver use raw coordinates
('y', default)
[HW] Make the MicroTouch USB driver use raw coordinates
or cooked coordinates ('n')
('y', default)
or cooked coordinates ('n')
n2= [NET] SDL Inc. RISCom/N2 synchronous serial card
n2= [NET] SDL Inc. RISCom/N2 synchronous serial card
...
@@ -880,6 +893,8 @@ running once the system is up.
...
@@ -880,6 +893,8 @@ running once the system is up.
Format: <irq>,<io>,<mem_start>,<mem_end>,<name>
Format: <irq>,<io>,<mem_start>,<mem_end>,<name>
Note that mem_start is often overloaded to mean
Note that mem_start is often overloaded to mean
something different and driver-specific.
something different and driver-specific.
This usage is only documented in each driver source
file if at all.
nfsaddrs= [NFS]
nfsaddrs= [NFS]
See Documentation/nfsroot.txt.
See Documentation/nfsroot.txt.
...
@@ -910,7 +925,7 @@ running once the system is up.
...
@@ -910,7 +925,7 @@ running once the system is up.
noexec [IA-64]
noexec [IA-64]
noexec [IA-32,
X86-64]
noexec [IA-32,X86-64]
noexec=on: enable non-executable mappings (default)
noexec=on: enable non-executable mappings (default)
noexec=off: disable nn-executable mappings
noexec=off: disable nn-executable mappings
...
@@ -948,7 +963,8 @@ running once the system is up.
...
@@ -948,7 +963,8 @@ running once the system is up.
noresidual [PPC] Don't use residual data on PReP machines.
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.
no-scroll [VGA] Disables scrollback.
This is required for the Braillex ib80-piezo Braille
This is required for the Braillex ib80-piezo Braille
...
@@ -972,8 +988,8 @@ running once the system is up.
...
@@ -972,8 +988,8 @@ running once the system is up.
opl3sa= [HW,OSS]
opl3sa= [HW,OSS]
Format: <io>,<irq>,<dma>,<dma2>,<mpu_io>,<mpu_irq>
Format: <io>,<irq>,<dma>,<dma2>,<mpu_io>,<mpu_irq>
opl3sa2= [HW,OSS]
opl3sa2= [HW,OSS]
Format:
Format:
<io>,<irq>,<dma>,<dma2>,<mss_io>,<mpu_io>,<ymode>,<loopback>[,<isapnp>,<multiple]
<io>,<irq>,<dma>,<dma2>,<mss_io>,<mpu_io>,<ymode>,<loopback>[,<isapnp>,<multiple]
oprofile.timer= [HW]
oprofile.timer= [HW]
Use timer interrupt instead of performance counters
Use timer interrupt instead of performance counters
...
@@ -995,33 +1011,30 @@ running once the system is up.
...
@@ -995,33 +1011,30 @@ running once the system is up.
0 for XT, 1 for AT (default is AT).
0 for XT, 1 for AT (default is AT).
Format: <mode>
Format: <mode>
parport=0 [HW,PPT] Specify parallel ports. 0 disables.
parport= [HW,PPT] Specify parallel ports. 0 disables.
parport=auto Use 'auto' to force the driver to use
Format: { 0 | auto | 0xBBB[,IRQ[,DMA]] }
parport=0xBBB[,IRQ[,DMA]] any IRQ/DMA settings detected (the
Use 'auto' to force the driver to use any
default is to ignore detected IRQ/DMA
IRQ/DMA settings detected (the default is to
settings because of possible
ignore detected IRQ/DMA settings because of
conflicts). You can specify the base
possible conflicts). You can specify the base
address, IRQ, and DMA settings; IRQ and
address, IRQ, and DMA settings; IRQ and DMA
DMA should be numbers, or 'auto' (for
should be numbers, or 'auto' (for using detected
using detected settings on that
settings on that particular port), or 'nofifo'
particular port), or 'nofifo' (to avoid
(to avoid using a FIFO even if it is detected).
using a FIFO even if it is detected).
Parallel ports are assigned in the order they
Parallel ports are assigned in the
are specified on the command line, starting
order they are specified on the command
with parport0.
line, starting with parport0.
parport_init_mode= [HW,PPT]
parport_init_mode=
Configure VIA parallel port to operate in
[HW,PPT] Configure VIA parallel port to
a specific mode. This is necessary on Pegasos
operate in specific mode. This is
computer where firmware has no options for setting
necessary on Pegasos computer where
up parallel port mode and sets it to spp.
firmware has no options for setting up
Currently this function knows 686a and 8231 chips.
parallel port mode and sets it to
spp. Currently this function knows
686a and 8231 chips.
Format: [spp|ps2|epp|ecp|ecpepp]
Format: [spp|ps2|epp|ecp|ecpepp]
pas2= [HW,OSS]
pas2= [HW,OSS]
Format:
Format:
<io>,<irq>,<dma>,<dma16>,<sb_io>,<sb_irq>,<sb_dma>,<sb_dma16>
<io>,<irq>,<dma>,<dma16>,<sb_io>,<sb_irq>,<sb_dma>,<sb_dma16>
pas16= [HW,SCSI]
pas16= [HW,SCSI]
See header of drivers/scsi/pas16.c.
See header of drivers/scsi/pas16.c.
...
@@ -1041,55 +1054,58 @@ running once the system is up.
...
@@ -1041,55 +1054,58 @@ running once the system is up.
hardware access methods are allowed. Use this
hardware access methods are allowed. Use this
if you experience crashes upon bootup and you
if you experience crashes upon bootup and you
suspect they are caused by the BIOS.
suspect they are caused by the BIOS.
conf1 [IA-32] Force use of PCI Configuration Mechanism 1.
conf1 [IA-32] Force use of PCI Configuration
conf2 [IA-32] Force use of PCI Configuration Mechanism 2.
Mechanism 1.
conf2 [IA-32] Force use of PCI Configuration
Mechanism 2.
nosort [IA-32] Don't sort PCI devices according to
nosort [IA-32] Don't sort PCI devices according to
order given by the PCI BIOS. This sorting is done
order given by the PCI BIOS. This sorting is
to get a device order compatible with older kernels.
done to get a device order compatible with
older kernels.
biosirq [IA-32] Use PCI BIOS calls to get the interrupt
biosirq [IA-32] Use PCI BIOS calls to get the interrupt
routing table. These calls are known to be buggy
routing table. These calls are known to be buggy
on several machines and they hang the machine when used,
on several machines and they hang the machine
but on other computers it's the only way to get the
when used, but on other computers it's the only
interrupt routing table. Try this option if the kernel
way to get the interrupt routing table. Try
is unable to allocate IRQs or discover secondary PCI
this option if the kernel is unable to allocate
buses on your motherboard.
IRQs or discover secondary PCI buses on your
motherboard.
rom [IA-32] Assign address space to expansion ROMs.
rom [IA-32] Assign address space to expansion ROMs.
Use with caution as certain devices share address
Use with caution as certain devices share
decoders between ROMs and other resources.
address decoders between ROMs and other
irqmask=0xMMMM [IA-32] Set a bit mask of IRQs allowed to be assigned
resources.
automatically to PCI devices. You can make the kernel
irqmask=0xMMMM [IA-32] Set a bit mask of IRQs allowed to be
exclude IRQs of your ISA cards this way.
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
pirqaddr=0xAAAAA [IA-32] Specify the physical address
of the PIRQ table (normally generated
of the PIRQ table (normally generated
by the BIOS) if it is outside the
by the BIOS) if it is outside the
F0000h-100000h range.
F0000h-100000h range.
lastbus=N [IA-32] Scan all buses till bus #N. Can be useful
lastbus=N [IA-32] Scan all buses thru bus #N. Can be
if the kernel is unable to find your secondary buses
useful if the kernel is unable to find your
and you want to tell it explicitly which ones they are.
secondary buses and you want to tell it
explicitly which ones they are.
assign-busses [IA-32] Always assign all PCI bus
assign-busses [IA-32] Always assign all PCI bus
numbers ourselves, overriding
numbers ourselves, overriding
whatever the firmware may have
whatever the firmware may have done.
done.
usepirqmask [IA-32] Honor the possible IRQ mask stored
usepirqmask [IA-32] Honor the possible IRQ mask
in the BIOS $PIR table. This is needed on
stored in the BIOS $PIR table. This is
some systems with broken BIOSes, notably
needed on some systems with broken
some HP Pavilion N5400 and Omnibook XE3
BIOSes, notably some HP Pavilion N5400
notebooks. This will have no effect if ACPI
and Omnibook XE3 notebooks. This will
IRQ routing is enabled.
have no effect if ACPI IRQ routing is
enabled.
noacpi [IA-32] Do not use ACPI for IRQ routing
noacpi [IA-32] Do not use ACPI for IRQ routing
or for PCI scanning.
or for PCI scanning.
routeirq Do IRQ routing for all PCI devices.
routeirq Do IRQ routing for all PCI devices.
This is normally done in pci_enable_device(),
This is normally done in pci_enable_device(),
so this option is a temporary workaround
so this option is a temporary workaround
for broken drivers that don't call it.
for broken drivers that don't call it.
firmware [ARM] Do not re-enumerate the bus but instead
firmware [ARM] Do not re-enumerate the bus but
just use the configuration from the
instead just use the configuration
bootloader. This is currently used on
from the bootloader. This is currently
IXP2000 systems where the bus has to be
used on IXP2000 systems where the
configured a certain way for adjunct CPUs.
bus has to be configured a certain way
for adjunct CPUs.
pcmv= [HW,PCMCIA] BadgePAD 4
pcmv= [HW,PCMCIA] BadgePAD 4
...
@@ -1130,16 +1146,17 @@ running once the system is up.
...
@@ -1130,16 +1146,17 @@ running once the system is up.
Ranges are in pairs (I/O port base and size).
Ranges are in pairs (I/O port base and size).
pnp_reserve_mem=
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).
Ranges are in pairs (memory base and size).
profile= [KNL] Enable kernel profiling via /proc/profile
profile= [KNL] Enable kernel profiling via /proc/profile
{ schedule | <number> }
Format: [schedule,]<number>
(param: schedule - profile schedule points}
Param: "schedule" - profile schedule points.
(param: profile
step/bucket size as a power of 2 for
Param: <number> -
step/bucket size as a power of 2 for
statistical time based profiling
)
statistical time based profiling
.
processor.max_cstate=
[HW,
ACPI]
processor.max_cstate=
[HW,
ACPI]
Limit processor to maximum C-state
Limit processor to maximum C-state
max_cstate=9 overrides any DMI blacklist limit.
max_cstate=9 overrides any DMI blacklist limit.
...
@@ -1148,20 +1165,21 @@ running once the system is up.
...
@@ -1148,20 +1165,21 @@ running once the system is up.
See Documentation/ramdisk.txt.
See Documentation/ramdisk.txt.
psmouse.proto= [HW,MOUSE] Highest PS2 mouse protocol extension to
psmouse.proto= [HW,MOUSE] Highest PS2 mouse protocol extension to
probe for (bare|imps|exps|lifebook|any).
probe for
; one of
(bare|imps|exps|lifebook|any).
psmouse.rate= [HW,MOUSE] Set desired mouse report rate, in reports
psmouse.rate= [HW,MOUSE] Set desired mouse report rate, in reports
per second.
per second.
psmouse.resetafter=
psmouse.resetafter=
[HW,MOUSE]
[HW,MOUSE]
Try to reset the device after so many bad packets
Try to reset the device after so many bad packets
(0 = never).
(0 = never).
psmouse.resolution=
psmouse.resolution=
[HW,MOUSE] Set desired mouse resolution, in dpi.
[HW,MOUSE] Set desired mouse resolution, in dpi.
psmouse.smartscroll=
psmouse.smartscroll=
[HW,MOUSE] Controls Logitech smartscroll autorepeat
,
[HW,MOUSE] Controls Logitech smartscroll autorepeat
.
0 = disabled, 1 = enabled (default).
0 = disabled, 1 = enabled (default).
pss= [HW,OSS] Personal Sound System (ECHO ESC614)
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]
pt. [PARIDE]
See Documentation/paride.txt.
See Documentation/paride.txt.
...
@@ -1176,8 +1194,7 @@ running once the system is up.
...
@@ -1176,8 +1194,7 @@ running once the system is up.
ramdisk= [RAM] Sizes of RAM disks in kilobytes [deprecated]
ramdisk= [RAM] Sizes of RAM disks in kilobytes [deprecated]
See Documentation/ramdisk.txt.
See Documentation/ramdisk.txt.
ramdisk_blocksize=
ramdisk_blocksize= [RAM]
[RAM]
See Documentation/ramdisk.txt.
See Documentation/ramdisk.txt.
ramdisk_size= [RAM] Sizes of RAM disks in kilobytes
ramdisk_size= [RAM] Sizes of RAM disks in kilobytes
...
@@ -1195,7 +1212,8 @@ running once the system is up.
...
@@ -1195,7 +1212,8 @@ running once the system is up.
reserve= [KNL,BUGS] Force the kernel to ignore some iomem area
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]
rhash_entries= [KNL,NET]
Set number of hash buckets for route cache
Set number of hash buckets for route cache
...
@@ -1258,8 +1276,7 @@ running once the system is up.
...
@@ -1258,8 +1276,7 @@ running once the system is up.
serialnumber [BUGS=IA-32]
serialnumber [BUGS=IA-32]
sg_def_reserved_size=
sg_def_reserved_size= [SCSI]
[SCSI]
sgalaxy= [HW,OSS]
sgalaxy= [HW,OSS]
Format: <io>,<irq>,<dma>,<dma2>,<sgbase>
Format: <io>,<irq>,<dma>,<dma2>,<sgbase>
...
@@ -1479,14 +1496,16 @@ running once the system is up.
...
@@ -1479,14 +1496,16 @@ running once the system is up.
tp720= [HW,PS2]
tp720= [HW,PS2]
trix= [HW,OSS] MediaTrix AudioTrix Pro
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.xres= [TS] Horizontal screen resolution.
tsdev.yres= [TS] Vertical screen resolution.
tsdev.yres= [TS] Vertical screen resolution.
turbografx.map[2|3]=
turbografx.map[2|3]= [HW,JOY]
[HW,JOY] TurboGraFX parallel port interface
TurboGraFX parallel port interface
Format: <port#>,<js1>,<js2>,<js3>,<js4>,<js5>,<js6>,<js7>
Format:
<port#>,<js1>,<js2>,<js3>,<js4>,<js5>,<js6>,<js7>
See also Documentation/input/joystick-parport.txt
See also Documentation/input/joystick-parport.txt
u14-34f= [HW,SCSI] UltraStor 14F/34F SCSI host adapter
u14-34f= [HW,SCSI] UltraStor 14F/34F SCSI host adapter
...
@@ -1507,12 +1526,13 @@ running once the system is up.
...
@@ -1507,12 +1526,13 @@ running once the system is up.
See Documentation/fb/modedb.txt.
See Documentation/fb/modedb.txt.
vga= [BOOT,IA-32] Select a particular video mode
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.
Use vga=ask for menu.
This is actually a boot loader parameter; the value is
This is actually a boot loader parameter; the value is
passed to the kernel using a special protocol.
passed to the kernel using a special protocol.
vmalloc=nn[KMG] [KNL,BOOT]
f
orces the vmalloc area to have an exact
vmalloc=nn[KMG] [KNL,BOOT]
F
orces the vmalloc area to have an exact
size of <nn>. This can be used to increase the
size of <nn>. This can be used to increase the
minimum size (128MB on x86). It can also be used to
minimum size (128MB on x86). It can also be used to
decrease the size and leave more room for directly
decrease the size and leave more room for directly
...
@@ -1538,21 +1558,25 @@ running once the system is up.
...
@@ -1538,21 +1558,25 @@ running once the system is up.
xd_geo= See header of drivers/block/xd.c.
xd_geo= See header of drivers/block/xd.c.
xirc2ps_cs= [NET,PCMCIA]
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:
Changelog:
2000-06-?? Mr. Unknown
The last known update (for 2.4.0) - the changelog was not kept before.
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,
Update for 2.5.49, description for most of the options introduced,
references to other documentation (C files, READMEs, ..), added S390,
references to other documentation (C files, READMEs, ..), added S390,
PPC, SPARC, MTD, ALSA and OSS category. Minor corrections and
PPC, SPARC, MTD, ALSA and OSS category. Minor corrections and
reformatting.
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:
TODO:
...
...
arch/arm/mach-integrator/impd1.c
浏览文件 @
4c2cb58c
...
@@ -67,7 +67,7 @@ static void impd1_setvco(struct clk *clk, struct icst525_vco vco)
...
@@ -67,7 +67,7 @@ static void impd1_setvco(struct clk *clk, struct icst525_vco vco)
}
}
writel
(
0
,
impd1
->
base
+
IMPD1_LOCK
);
writel
(
0
,
impd1
->
base
+
IMPD1_LOCK
);
#if DEBUG
#if
def
DEBUG
vco
.
v
=
val
&
0x1ff
;
vco
.
v
=
val
&
0x1ff
;
vco
.
r
=
(
val
>>
9
)
&
0x7f
;
vco
.
r
=
(
val
>>
9
)
&
0x7f
;
vco
.
s
=
(
val
>>
16
)
&
7
;
vco
.
s
=
(
val
>>
16
)
&
7
;
...
@@ -427,17 +427,18 @@ static int impd1_probe(struct lm_device *dev)
...
@@ -427,17 +427,18 @@ static int impd1_probe(struct lm_device *dev)
return
ret
;
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
)
static
void
impd1_remove
(
struct
lm_device
*
dev
)
{
{
struct
impd1_module
*
impd1
=
lm_get_drvdata
(
dev
);
struct
impd1_module
*
impd1
=
lm_get_drvdata
(
dev
);
struct
list_head
*
l
,
*
n
;
int
i
;
int
i
;
list_for_each_safe
(
l
,
n
,
&
dev
->
dev
.
children
)
{
device_for_each_child
(
&
dev
->
dev
,
NULL
,
impd1_remove_one
);
struct
device
*
d
=
list_to_dev
(
l
);
device_unregister
(
d
);
}
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
impd1
->
vcos
);
i
++
)
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
impd1
->
vcos
);
i
++
)
clk_unregister
(
&
impd1
->
vcos
[
i
]);
clk_unregister
(
&
impd1
->
vcos
[
i
]);
...
...
arch/arm/mach-pxa/corgi_lcd.c
浏览文件 @
4c2cb58c
...
@@ -488,6 +488,7 @@ static int is_pxafb_device(struct device * dev, void * data)
...
@@ -488,6 +488,7 @@ static int is_pxafb_device(struct device * dev, void * data)
unsigned
long
spitz_get_hsync_len
(
void
)
unsigned
long
spitz_get_hsync_len
(
void
)
{
{
#ifdef CONFIG_FB_PXA
if
(
!
spitz_pxafb_dev
)
{
if
(
!
spitz_pxafb_dev
)
{
spitz_pxafb_dev
=
bus_find_device
(
&
platform_bus_type
,
NULL
,
NULL
,
is_pxafb_device
);
spitz_pxafb_dev
=
bus_find_device
(
&
platform_bus_type
,
NULL
,
NULL
,
is_pxafb_device
);
if
(
!
spitz_pxafb_dev
)
if
(
!
spitz_pxafb_dev
)
...
@@ -496,6 +497,7 @@ unsigned long spitz_get_hsync_len(void)
...
@@ -496,6 +497,7 @@ unsigned long spitz_get_hsync_len(void)
if
(
!
get_hsync_time
)
if
(
!
get_hsync_time
)
get_hsync_time
=
symbol_get
(
pxafb_get_hsync_time
);
get_hsync_time
=
symbol_get
(
pxafb_get_hsync_time
);
if
(
!
get_hsync_time
)
if
(
!
get_hsync_time
)
#endif
return
0
;
return
0
;
return
pxafb_get_hsync_time
(
spitz_pxafb_dev
);
return
pxafb_get_hsync_time
(
spitz_pxafb_dev
);
...
...
arch/arm/mach-pxa/generic.c
浏览文件 @
4c2cb58c
...
@@ -250,6 +250,25 @@ void __init pxa_set_i2c_info(struct i2c_pxa_platform_data *info)
...
@@ -250,6 +250,25 @@ void __init pxa_set_i2c_info(struct i2c_pxa_platform_data *info)
i2c_device
.
dev
.
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
=
{
static
struct
platform_device
*
devices
[]
__initdata
=
{
&
pxamci_device
,
&
pxamci_device
,
&
udc_device
,
&
udc_device
,
...
@@ -258,6 +277,7 @@ static struct platform_device *devices[] __initdata = {
...
@@ -258,6 +277,7 @@ static struct platform_device *devices[] __initdata = {
&
btuart_device
,
&
btuart_device
,
&
stuart_device
,
&
stuart_device
,
&
i2c_device
,
&
i2c_device
,
&
i2s_device
,
};
};
static
int
__init
pxa_init
(
void
)
static
int
__init
pxa_init
(
void
)
...
...
arch/arm/mach-s3c2410/mach-bast.c
浏览文件 @
4c2cb58c
...
@@ -307,9 +307,9 @@ static void bast_nand_select(struct s3c2410_nand_set *set, int slot)
...
@@ -307,9 +307,9 @@ static void bast_nand_select(struct s3c2410_nand_set *set, int slot)
}
}
static
struct
s3c2410_platform_nand
bast_nand_info
=
{
static
struct
s3c2410_platform_nand
bast_nand_info
=
{
.
tacls
=
4
0
,
.
tacls
=
3
0
,
.
twrph0
=
8
0
,
.
twrph0
=
6
0
,
.
twrph1
=
8
0
,
.
twrph1
=
6
0
,
.
nr_sets
=
ARRAY_SIZE
(
bast_nand_sets
),
.
nr_sets
=
ARRAY_SIZE
(
bast_nand_sets
),
.
sets
=
bast_nand_sets
,
.
sets
=
bast_nand_sets
,
.
select_chip
=
bast_nand_select
,
.
select_chip
=
bast_nand_select
,
...
...
arch/i386/kernel/cpu/cpufreq/powernow-k8.c
浏览文件 @
4c2cb58c
...
@@ -44,7 +44,7 @@
...
@@ -44,7 +44,7 @@
#define PFX "powernow-k8: "
#define PFX "powernow-k8: "
#define BFX PFX "BIOS error: "
#define BFX PFX "BIOS error: "
#define VERSION "version 1.50.
3
"
#define VERSION "version 1.50.
4
"
#include "powernow-k8.h"
#include "powernow-k8.h"
/* serialize freq changes */
/* serialize freq changes */
...
@@ -111,8 +111,8 @@ static int query_current_values_with_pending_wait(struct powernow_k8_data *data)
...
@@ -111,8 +111,8 @@ static int query_current_values_with_pending_wait(struct powernow_k8_data *data)
u32
i
=
0
;
u32
i
=
0
;
do
{
do
{
if
(
i
++
>
0x100
0000
)
{
if
(
i
++
>
1
0000
)
{
printk
(
KERN_ERR
PFX
"detected change pending stuck
\n
"
);
dprintk
(
"detected change pending stuck
\n
"
);
return
1
;
return
1
;
}
}
rdmsr
(
MSR_FIDVID_STATUS
,
lo
,
hi
);
rdmsr
(
MSR_FIDVID_STATUS
,
lo
,
hi
);
...
@@ -159,6 +159,7 @@ static int write_new_fid(struct powernow_k8_data *data, u32 fid)
...
@@ -159,6 +159,7 @@ static int write_new_fid(struct powernow_k8_data *data, u32 fid)
{
{
u32
lo
;
u32
lo
;
u32
savevid
=
data
->
currvid
;
u32
savevid
=
data
->
currvid
;
u32
i
=
0
;
if
((
fid
&
INVALID_FID_MASK
)
||
(
data
->
currvid
&
INVALID_VID_MASK
))
{
if
((
fid
&
INVALID_FID_MASK
)
||
(
data
->
currvid
&
INVALID_VID_MASK
))
{
printk
(
KERN_ERR
PFX
"internal error - overflow on fid write
\n
"
);
printk
(
KERN_ERR
PFX
"internal error - overflow on fid write
\n
"
);
...
@@ -170,10 +171,13 @@ static int write_new_fid(struct powernow_k8_data *data, u32 fid)
...
@@ -170,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
"
,
dprintk
(
"writing fid 0x%x, lo 0x%x, hi 0x%x
\n
"
,
fid
,
lo
,
data
->
plllock
*
PLL_LOCK_CONVERSION
);
fid
,
lo
,
data
->
plllock
*
PLL_LOCK_CONVERSION
);
do
{
wrmsr
(
MSR_FIDVID_CTL
,
lo
,
data
->
plllock
*
PLL_LOCK_CONVERSION
);
wrmsr
(
MSR_FIDVID_CTL
,
lo
,
data
->
plllock
*
PLL_LOCK_CONVERSION
);
if
(
i
++
>
100
)
{
if
(
query_current_values_with_pending_wait
(
data
))
printk
(
KERN_ERR
PFX
"internal error - pending bit very stuck - no further pstate changes possible
\n
"
);
return
1
;
return
1
;
}
}
while
(
query_current_values_with_pending_wait
(
data
));
count_off_irt
(
data
);
count_off_irt
(
data
);
...
@@ -197,6 +201,7 @@ static int write_new_vid(struct powernow_k8_data *data, u32 vid)
...
@@ -197,6 +201,7 @@ static int write_new_vid(struct powernow_k8_data *data, u32 vid)
{
{
u32
lo
;
u32
lo
;
u32
savefid
=
data
->
currfid
;
u32
savefid
=
data
->
currfid
;
int
i
=
0
;
if
((
data
->
currfid
&
INVALID_FID_MASK
)
||
(
vid
&
INVALID_VID_MASK
))
{
if
((
data
->
currfid
&
INVALID_FID_MASK
)
||
(
vid
&
INVALID_VID_MASK
))
{
printk
(
KERN_ERR
PFX
"internal error - overflow on vid write
\n
"
);
printk
(
KERN_ERR
PFX
"internal error - overflow on vid write
\n
"
);
...
@@ -208,10 +213,13 @@ static int write_new_vid(struct powernow_k8_data *data, u32 vid)
...
@@ -208,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
"
,
dprintk
(
"writing vid 0x%x, lo 0x%x, hi 0x%x
\n
"
,
vid
,
lo
,
STOP_GRANT_5NS
);
vid
,
lo
,
STOP_GRANT_5NS
);
do
{
wrmsr
(
MSR_FIDVID_CTL
,
lo
,
STOP_GRANT_5NS
);
wrmsr
(
MSR_FIDVID_CTL
,
lo
,
STOP_GRANT_5NS
);
if
(
i
++
>
100
)
{
if
(
query_current_values_with_pending_wait
(
data
))
printk
(
KERN_ERR
PFX
"internal error - pending bit very stuck - no further pstate changes possible
\n
"
);
return
1
;
return
1
;
}
}
while
(
query_current_values_with_pending_wait
(
data
));
if
(
savefid
!=
data
->
currfid
)
{
if
(
savefid
!=
data
->
currfid
)
{
printk
(
KERN_ERR
PFX
"fid changed on vid trans, old 0x%x new 0x%x
\n
"
,
printk
(
KERN_ERR
PFX
"fid changed on vid trans, old 0x%x new 0x%x
\n
"
,
...
...
arch/ppc64/kernel/iSeries_htab.c
浏览文件 @
4c2cb58c
...
@@ -66,7 +66,7 @@ static long iSeries_hpte_insert(unsigned long hpte_group, unsigned long va,
...
@@ -66,7 +66,7 @@ static long iSeries_hpte_insert(unsigned long hpte_group, unsigned long va,
}
}
if
(
slot
<
0
)
{
/* MSB set means secondary group */
if
(
slot
<
0
)
{
/* MSB set means secondary group */
vflags
|=
HPTE_V_
VALID
;
vflags
|=
HPTE_V_
SECONDARY
;
secondary
=
1
;
secondary
=
1
;
slot
&=
0x7fffffffffffffff
;
slot
&=
0x7fffffffffffffff
;
}
}
...
...
arch/ppc64/kernel/mpic.c
浏览文件 @
4c2cb58c
...
@@ -506,8 +506,8 @@ struct mpic * __init mpic_alloc(unsigned long phys_addr,
...
@@ -506,8 +506,8 @@ struct mpic * __init mpic_alloc(unsigned long phys_addr,
mpic
->
senses_count
=
senses_count
;
mpic
->
senses_count
=
senses_count
;
/* Map the global registers */
/* Map the global registers */
mpic
->
gregs
=
ioremap
(
phys_addr
+
MPIC_GREG_BASE
,
0x
1
000
);
mpic
->
gregs
=
ioremap
(
phys_addr
+
MPIC_GREG_BASE
,
0x
2
000
);
mpic
->
tmregs
=
mpic
->
gregs
+
(
MPIC_TIMER_BASE
>>
2
);
mpic
->
tmregs
=
mpic
->
gregs
+
(
(
MPIC_TIMER_BASE
-
MPIC_GREG_BASE
)
>>
2
);
BUG_ON
(
mpic
->
gregs
==
NULL
);
BUG_ON
(
mpic
->
gregs
==
NULL
);
/* Reset */
/* Reset */
...
...
arch/ppc64/kernel/time.c
浏览文件 @
4c2cb58c
...
@@ -870,7 +870,7 @@ void div128_by_32( unsigned long dividend_high, unsigned long dividend_low,
...
@@ -870,7 +870,7 @@ void div128_by_32( unsigned long dividend_high, unsigned long dividend_low,
rb
=
((
ra
+
b
)
-
(
x
*
divisor
))
<<
32
;
rb
=
((
ra
+
b
)
-
(
x
*
divisor
))
<<
32
;
y
=
(
rb
+
c
)
/
divisor
;
y
=
(
rb
+
c
)
/
divisor
;
rc
=
((
rb
+
b
)
-
(
y
*
divisor
))
<<
32
;
rc
=
((
rb
+
c
)
-
(
y
*
divisor
))
<<
32
;
z
=
(
rc
+
d
)
/
divisor
;
z
=
(
rc
+
d
)
/
divisor
;
...
...
arch/ppc64/mm/init.c
浏览文件 @
4c2cb58c
...
@@ -799,8 +799,7 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long ea,
...
@@ -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
))
if
(
cpus_equal
(
vma
->
vm_mm
->
cpu_vm_mask
,
tmp
))
local
=
1
;
local
=
1
;
__hash_page
(
ea
,
pte_val
(
pte
)
&
(
_PAGE_USER
|
_PAGE_RW
),
vsid
,
ptep
,
__hash_page
(
ea
,
0
,
vsid
,
ptep
,
0x300
,
local
);
0x300
,
local
);
local_irq_restore
(
flags
);
local_irq_restore
(
flags
);
}
}
...
...
arch/um/include/sysdep-i386/thread.h
浏览文件 @
4c2cb58c
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
#include <kern_constants.h>
#include <kern_constants.h>
#define TASK_DEBUGREGS(task) ((unsigned long *) &(((char *) (task))[HOST_TASK_DEBUGREGS]))
#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]))
#define TASK_EXTERN_PID(task) *((int *) &(((char *) (task))[HOST_TASK_EXTERN_PID]))
#endif
#endif
...
...
arch/um/include/sysdep-x86_64/thread.h
浏览文件 @
4c2cb58c
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
#include <kern_constants.h>
#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]))
#define TASK_EXTERN_PID(task) *((int *) &(((char *) (task))[HOST_TASK_EXTERN_PID]))
#endif
#endif
...
...
drivers/char/drm/drm_vm.c
浏览文件 @
4c2cb58c
...
@@ -148,7 +148,8 @@ static __inline__ struct page *drm_do_vm_shm_nopage(struct vm_area_struct *vma,
...
@@ -148,7 +148,8 @@ static __inline__ struct page *drm_do_vm_shm_nopage(struct vm_area_struct *vma,
offset
=
address
-
vma
->
vm_start
;
offset
=
address
-
vma
->
vm_start
;
i
=
(
unsigned
long
)
map
->
handle
+
offset
;
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
)
if
(
!
page
)
return
NOPAGE_OOM
;
return
NOPAGE_OOM
;
get_page
(
page
);
get_page
(
page
);
...
...
drivers/char/drm/mga_drv.h
浏览文件 @
4c2cb58c
...
@@ -227,7 +227,7 @@ static inline u32 _MGA_READ(u32 *addr)
...
@@ -227,7 +227,7 @@ static inline u32 _MGA_READ(u32 *addr)
#define MGA_EMIT_STATE( dev_priv, dirty ) \
#define MGA_EMIT_STATE( dev_priv, dirty ) \
do { \
do { \
if ( (dirty) & ~MGA_UPLOAD_CLIPRECTS ) { \
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 ); \
mga_g400_emit_state( dev_priv ); \
} else { \
} else { \
mga_g200_emit_state( dev_priv ); \
mga_g200_emit_state( dev_priv ); \
...
...
drivers/char/drm/mga_state.c
浏览文件 @
4c2cb58c
...
@@ -53,7 +53,7 @@ static void mga_emit_clip_rect( drm_mga_private_t *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).
/* 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
,
DMA_BLOCK
(
MGA_DWGCTL
,
ctx
->
dwgctl
,
MGA_LEN
+
MGA_EXEC
,
0x80000000
,
MGA_LEN
+
MGA_EXEC
,
0x80000000
,
MGA_DWGCTL
,
ctx
->
dwgctl
,
MGA_DWGCTL
,
ctx
->
dwgctl
,
...
...
drivers/char/drm/radeon_cp.c
浏览文件 @
4c2cb58c
...
@@ -1136,7 +1136,7 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev,
...
@@ -1136,7 +1136,7 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev,
}
else
}
else
#endif
#endif
ring_start
=
(
dev_priv
->
cp_ring
->
offset
ring_start
=
(
dev_priv
->
cp_ring
->
offset
-
dev
->
sg
->
handle
-
(
unsigned
long
)
dev
->
sg
->
virtual
+
dev_priv
->
gart_vm_start
);
+
dev_priv
->
gart_vm_start
);
RADEON_WRITE
(
RADEON_CP_RB_BASE
,
ring_start
);
RADEON_WRITE
(
RADEON_CP_RB_BASE
,
ring_start
);
...
@@ -1164,7 +1164,8 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev,
...
@@ -1164,7 +1164,8 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev,
drm_sg_mem_t
*
entry
=
dev
->
sg
;
drm_sg_mem_t
*
entry
=
dev
->
sg
;
unsigned
long
tmp_ofs
,
page_ofs
;
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
;
page_ofs
=
tmp_ofs
>>
PAGE_SHIFT
;
RADEON_WRITE
(
RADEON_CP_RB_RPTR_ADDR
,
RADEON_WRITE
(
RADEON_CP_RB_RPTR_ADDR
,
...
@@ -1491,7 +1492,7 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
...
@@ -1491,7 +1492,7 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
else
else
#endif
#endif
dev_priv
->
gart_buffers_offset
=
(
dev
->
agp_buffer_map
->
offset
dev_priv
->
gart_buffers_offset
=
(
dev
->
agp_buffer_map
->
offset
-
dev
->
sg
->
handle
-
(
unsigned
long
)
dev
->
sg
->
virtual
+
dev_priv
->
gart_vm_start
);
+
dev_priv
->
gart_vm_start
);
DRM_DEBUG
(
"dev_priv->gart_size %d
\n
"
,
DRM_DEBUG
(
"dev_priv->gart_size %d
\n
"
,
...
...
drivers/infiniband/hw/mthca/mthca_eq.c
浏览文件 @
4c2cb58c
...
@@ -396,20 +396,21 @@ static irqreturn_t mthca_tavor_interrupt(int irq, void *dev_ptr, struct pt_regs
...
@@ -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
);
writel
(
dev
->
eq_table
.
clr_mask
,
dev
->
eq_table
.
clr_int
);
ecr
=
readl
(
dev
->
eq_regs
.
tavor
.
ecr_base
+
4
);
ecr
=
readl
(
dev
->
eq_regs
.
tavor
.
ecr_base
+
4
);
if
(
ecr
)
{
if
(
!
ecr
)
return
IRQ_NONE
;
writel
(
ecr
,
dev
->
eq_regs
.
tavor
.
ecr_base
+
writel
(
ecr
,
dev
->
eq_regs
.
tavor
.
ecr_base
+
MTHCA_ECR_CLR_BASE
-
MTHCA_ECR_BASE
+
4
);
MTHCA_ECR_CLR_BASE
-
MTHCA_ECR_BASE
+
4
);
for
(
i
=
0
;
i
<
MTHCA_NUM_EQ
;
++
i
)
for
(
i
=
0
;
i
<
MTHCA_NUM_EQ
;
++
i
)
if
(
ecr
&
dev
->
eq_table
.
eq
[
i
].
eqn_mask
&&
if
(
ecr
&
dev
->
eq_table
.
eq
[
i
].
eqn_mask
)
{
mthca_eq_int
(
dev
,
&
dev
->
eq_table
.
eq
[
i
]))
{
if
(
mthca_eq_int
(
dev
,
&
dev
->
eq_table
.
eq
[
i
]))
tavor_set_eq_ci
(
dev
,
&
dev
->
eq_table
.
eq
[
i
],
tavor_set_eq_ci
(
dev
,
&
dev
->
eq_table
.
eq
[
i
],
dev
->
eq_table
.
eq
[
i
].
cons_index
);
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
,
static
irqreturn_t
mthca_tavor_msi_x_interrupt
(
int
irq
,
void
*
eq_ptr
,
...
...
drivers/md/md.c
浏览文件 @
4c2cb58c
...
@@ -3568,7 +3568,8 @@ static void md_do_sync(mddev_t *mddev)
...
@@ -3568,7 +3568,8 @@ static void md_do_sync(mddev_t *mddev)
mddev
->
curr_resync
=
2
;
mddev
->
curr_resync
=
2
;
try_again:
try_again:
if
(
signal_pending
(
current
))
{
if
(
signal_pending
(
current
)
||
kthread_should_stop
())
{
flush_signals
(
current
);
flush_signals
(
current
);
set_bit
(
MD_RECOVERY_INTR
,
&
mddev
->
recovery
);
set_bit
(
MD_RECOVERY_INTR
,
&
mddev
->
recovery
);
goto
skip
;
goto
skip
;
...
@@ -3590,8 +3591,9 @@ static void md_do_sync(mddev_t *mddev)
...
@@ -3590,8 +3591,9 @@ static void md_do_sync(mddev_t *mddev)
*/
*/
continue
;
continue
;
prepare_to_wait
(
&
resync_wait
,
&
wq
,
TASK_INTERRUPTIBLE
);
prepare_to_wait
(
&
resync_wait
,
&
wq
,
TASK_INTERRUPTIBLE
);
if
(
!
signal_pending
(
current
)
if
(
!
signal_pending
(
current
)
&&
&&
mddev2
->
curr_resync
>=
mddev
->
curr_resync
)
{
!
kthread_should_stop
()
&&
mddev2
->
curr_resync
>=
mddev
->
curr_resync
)
{
printk
(
KERN_INFO
"md: delaying resync of %s"
printk
(
KERN_INFO
"md: delaying resync of %s"
" until %s has finished resync (they"
" until %s has finished resync (they"
" share one or more physical units)
\n
"
,
" share one or more physical units)
\n
"
,
...
@@ -3697,7 +3699,7 @@ static void md_do_sync(mddev_t *mddev)
...
@@ -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.
* got a signal, exit.
*/
*/
...
...
drivers/media/video/Kconfig
浏览文件 @
4c2cb58c
...
@@ -262,7 +262,6 @@ config VIDEO_SAA7134_DVB
...
@@ -262,7 +262,6 @@ config VIDEO_SAA7134_DVB
depends on VIDEO_SAA7134 && DVB_CORE
depends on VIDEO_SAA7134 && DVB_CORE
select VIDEO_BUF_DVB
select VIDEO_BUF_DVB
select DVB_MT352
select DVB_MT352
select DVB_CX22702
select DVB_TDA1004X
select DVB_TDA1004X
---help---
---help---
This adds support for DVB cards based on the
This adds support for DVB cards based on the
...
...
drivers/message/fusion/mptsas.c
浏览文件 @
4c2cb58c
...
@@ -257,8 +257,8 @@ static void mptsas_print_device_pg0(SasDevicePage0_t *pg0)
...
@@ -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
(
"SAS Address=0x%llX
\n
"
,
le64_to_cpu
(
sas_address
));
printk
(
"Target ID=0x%X
\n
"
,
pg0
->
TargetID
);
printk
(
"Target ID=0x%X
\n
"
,
pg0
->
TargetID
);
printk
(
"Bus=0x%X
\n
"
,
pg0
->
Bus
);
printk
(
"Bus=0x%X
\n
"
,
pg0
->
Bus
);
printk
(
"P
hy
Num=0x%X
\n
"
,
pg0
->
PhyNum
);
printk
(
"P
arent Phy
Num=0x%X
\n
"
,
pg0
->
PhyNum
);
printk
(
"AccessStatus=0x%X
\n
"
,
le16_to_cpu
(
pg0
->
AccessStatus
));
printk
(
"Access
Status=0x%X
\n
"
,
le16_to_cpu
(
pg0
->
AccessStatus
));
printk
(
"Device Info=0x%X
\n
"
,
le32_to_cpu
(
pg0
->
DeviceInfo
));
printk
(
"Device Info=0x%X
\n
"
,
le32_to_cpu
(
pg0
->
DeviceInfo
));
printk
(
"Flags=0x%X
\n
"
,
le16_to_cpu
(
pg0
->
Flags
));
printk
(
"Flags=0x%X
\n
"
,
le16_to_cpu
(
pg0
->
Flags
));
printk
(
"Physical Port=0x%X
\n
"
,
pg0
->
PhysicalPort
);
printk
(
"Physical Port=0x%X
\n
"
,
pg0
->
PhysicalPort
);
...
@@ -270,7 +270,7 @@ static void mptsas_print_expander_pg1(SasExpanderPage1_t *pg1)
...
@@ -270,7 +270,7 @@ static void mptsas_print_expander_pg1(SasExpanderPage1_t *pg1)
printk
(
"---- SAS EXPANDER PAGE 1 ------------
\n
"
);
printk
(
"---- SAS EXPANDER PAGE 1 ------------
\n
"
);
printk
(
"Physical Port=0x%X
\n
"
,
pg1
->
PhysicalPort
);
printk
(
"Physical Port=0x%X
\n
"
,
pg1
->
PhysicalPort
);
printk
(
"PHY Identifier=0x%X
\n
"
,
pg1
->
Phy
);
printk
(
"PHY Identifier=0x%X
\n
"
,
pg1
->
Phy
Identifier
);
printk
(
"Negotiated Link Rate=0x%X
\n
"
,
pg1
->
NegotiatedLinkRate
);
printk
(
"Negotiated Link Rate=0x%X
\n
"
,
pg1
->
NegotiatedLinkRate
);
printk
(
"Programmed Link Rate=0x%X
\n
"
,
pg1
->
ProgrammedLinkRate
);
printk
(
"Programmed Link Rate=0x%X
\n
"
,
pg1
->
ProgrammedLinkRate
);
printk
(
"Hardware Link Rate=0x%X
\n
"
,
pg1
->
HwLinkRate
);
printk
(
"Hardware Link Rate=0x%X
\n
"
,
pg1
->
HwLinkRate
);
...
@@ -604,7 +604,7 @@ mptsas_sas_expander_pg1(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info,
...
@@ -604,7 +604,7 @@ mptsas_sas_expander_pg1(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info,
mptsas_print_expander_pg1
(
buffer
);
mptsas_print_expander_pg1
(
buffer
);
/* save config data */
/* save config data */
phy_info
->
phy_id
=
buffer
->
Phy
;
phy_info
->
phy_id
=
buffer
->
Phy
Identifier
;
phy_info
->
port_id
=
buffer
->
PhysicalPort
;
phy_info
->
port_id
=
buffer
->
PhysicalPort
;
phy_info
->
negotiated_link_rate
=
buffer
->
NegotiatedLinkRate
;
phy_info
->
negotiated_link_rate
=
buffer
->
NegotiatedLinkRate
;
phy_info
->
programmed_link_rate
=
buffer
->
ProgrammedLinkRate
;
phy_info
->
programmed_link_rate
=
buffer
->
ProgrammedLinkRate
;
...
@@ -825,6 +825,8 @@ mptsas_probe_hba_phys(MPT_ADAPTER *ioc, int *index)
...
@@ -825,6 +825,8 @@ mptsas_probe_hba_phys(MPT_ADAPTER *ioc, int *index)
mptsas_sas_device_pg0
(
ioc
,
&
port_info
->
phy_info
[
i
].
identify
,
mptsas_sas_device_pg0
(
ioc
,
&
port_info
->
phy_info
[
i
].
identify
,
(
MPI_SAS_DEVICE_PGAD_FORM_GET_NEXT_HANDLE
<<
(
MPI_SAS_DEVICE_PGAD_FORM_GET_NEXT_HANDLE
<<
MPI_SAS_DEVICE_PGAD_FORM_SHIFT
),
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
;
handle
=
port_info
->
phy_info
[
i
].
identify
.
handle
;
if
(
port_info
->
phy_info
[
i
].
attached
.
handle
)
{
if
(
port_info
->
phy_info
[
i
].
attached
.
handle
)
{
...
@@ -881,6 +883,8 @@ mptsas_probe_expander_phys(MPT_ADAPTER *ioc, u32 *handle, int *index)
...
@@ -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_HANDLE
<<
MPI_SAS_DEVICE_PGAD_FORM_SHIFT
),
MPI_SAS_DEVICE_PGAD_FORM_SHIFT
),
port_info
->
phy_info
[
i
].
identify
.
handle
);
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
)
{
if
(
port_info
->
phy_info
[
i
].
attached
.
handle
)
{
...
...
drivers/pci/quirks.c
浏览文件 @
4c2cb58c
...
@@ -241,7 +241,8 @@ static void __devinit quirk_s3_64M(struct pci_dev *dev)
...
@@ -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_868
,
quirk_s3_64M
);
DECLARE_PCI_FIXUP_HEADER
(
PCI_VENDOR_ID_S3
,
PCI_DEVICE_ID_S3_968
,
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
);
region
&=
~
(
size
-
1
);
if
(
region
)
{
if
(
region
)
{
...
@@ -259,6 +260,7 @@ static void __devinit quirk_io_region(struct pci_dev *dev, unsigned region, unsi
...
@@ -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
);
pcibios_bus_to_resource
(
dev
,
res
,
&
bus_region
);
pci_claim_resource
(
dev
,
nr
);
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)
...
@@ -291,25 +293,98 @@ static void __devinit quirk_ali7101_acpi(struct pci_dev *dev)
u16
region
;
u16
region
;
pci_read_config_word
(
dev
,
0xE0
,
&
region
);
pci_read_config_word
(
dev
,
0xE0
,
&
region
);
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
,
&
region
);
pci_read_config_word
(
dev
,
0xE2
,
&
region
);
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
);
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
* PIIX4 ACPI: Two IO regions pointed to by longwords at
* 0x40 (64 bytes of ACPI registers)
* 0x40 (64 bytes of ACPI registers)
* 0x90 (32 bytes of SMB 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
)
static
void
__devinit
quirk_piix4_acpi
(
struct
pci_dev
*
dev
)
{
{
u32
region
;
u32
region
,
res_a
;
pci_read_config_dword
(
dev
,
0x40
,
&
region
);
pci_read_config_dword
(
dev
,
0x40
,
&
region
);
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
,
&
region
);
pci_read_config_dword
(
dev
,
0x90
,
&
region
);
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
);
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)
...
@@ -323,10 +398,10 @@ static void __devinit quirk_ich4_lpc_acpi(struct pci_dev *dev)
u32
region
;
u32
region
;
pci_read_config_dword
(
dev
,
0x40
,
&
region
);
pci_read_config_dword
(
dev
,
0x40
,
&
region
);
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
,
&
region
);
pci_read_config_dword
(
dev
,
0x58
,
&
region
);
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_82801AA_0
,
quirk_ich4_lpc_acpi
);
DECLARE_PCI_FIXUP_HEADER
(
PCI_VENDOR_ID_INTEL
,
PCI_DEVICE_ID_INTEL_82801AB_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)
...
@@ -352,7 +427,7 @@ static void __devinit quirk_vt82c586_acpi(struct pci_dev *dev)
if
(
rev
&
0x10
)
{
if
(
rev
&
0x10
)
{
pci_read_config_dword
(
dev
,
0x48
,
&
region
);
pci_read_config_dword
(
dev
,
0x48
,
&
region
);
region
&=
PCI_BASE_ADDRESS_IO_MASK
;
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
);
DECLARE_PCI_FIXUP_HEADER
(
PCI_VENDOR_ID_VIA
,
PCI_DEVICE_ID_VIA_82C586_3
,
quirk_vt82c586_acpi
);
...
@@ -372,11 +447,11 @@ static void __devinit quirk_vt82c686_acpi(struct pci_dev *dev)
...
@@ -372,11 +447,11 @@ static void __devinit quirk_vt82c686_acpi(struct pci_dev *dev)
pci_read_config_word
(
dev
,
0x70
,
&
hm
);
pci_read_config_word
(
dev
,
0x70
,
&
hm
);
hm
&=
PCI_BASE_ADDRESS_IO_MASK
;
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
);
pci_read_config_dword
(
dev
,
0x90
,
&
smb
);
smb
&=
PCI_BASE_ADDRESS_IO_MASK
;
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
);
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)
...
@@ -391,11 +466,11 @@ static void __devinit quirk_vt8235_acpi(struct pci_dev *dev)
pci_read_config_word
(
dev
,
0x88
,
&
pm
);
pci_read_config_word
(
dev
,
0x88
,
&
pm
);
pm
&=
PCI_BASE_ADDRESS_IO_MASK
;
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
);
pci_read_config_word
(
dev
,
0xd0
,
&
smb
);
smb
&=
PCI_BASE_ADDRESS_IO_MASK
;
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
);
DECLARE_PCI_FIXUP_HEADER
(
PCI_VENDOR_ID_VIA
,
PCI_DEVICE_ID_VIA_8235
,
quirk_vt8235_acpi
);
...
...
drivers/pci/setup-bus.c
浏览文件 @
4c2cb58c
...
@@ -40,7 +40,7 @@
...
@@ -40,7 +40,7 @@
* FIXME: IO should be max 256 bytes. However, since we may
* FIXME: IO should be max 256 bytes. However, since we may
* have a P2P bridge below a cardbus bridge, we need 4K.
* 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)
#define CARDBUS_MEM_SIZE (32*1024*1024)
static
void
__devinit
static
void
__devinit
...
...
drivers/scsi/NCR5380.c
浏览文件 @
4c2cb58c
...
@@ -91,7 +91,7 @@
...
@@ -91,7 +91,7 @@
#ifndef NDEBUG
#ifndef NDEBUG
#define NDEBUG 0
#define NDEBUG 0
#endif
#endif
#ifndef NDEBUG
#ifndef NDEBUG
_ABORT
#define NDEBUG_ABORT 0
#define NDEBUG_ABORT 0
#endif
#endif
...
...
drivers/scsi/aacraid/aacraid.h
浏览文件 @
4c2cb58c
...
@@ -19,7 +19,7 @@
...
@@ -19,7 +19,7 @@
#define AAC_MAX_LUN (8)
#define AAC_MAX_LUN (8)
#define AAC_MAX_HOSTPHYSMEMPAGES (0xfffff)
#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
* These macros convert from physical channels to virtual channels
...
...
drivers/scsi/qla2xxx/qla_os.c
浏览文件 @
4c2cb58c
...
@@ -1325,6 +1325,8 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
...
@@ -1325,6 +1325,8 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
ha
->
brd_info
=
brd_info
;
ha
->
brd_info
=
brd_info
;
sprintf
(
ha
->
host_str
,
"%s_%ld"
,
ha
->
brd_info
->
drv_name
,
ha
->
host_no
);
sprintf
(
ha
->
host_str
,
"%s_%ld"
,
ha
->
brd_info
->
drv_name
,
ha
->
host_no
);
ha
->
dpc_pid
=
-
1
;
/* Configure PCI I/O space */
/* Configure PCI I/O space */
ret
=
qla2x00_iospace_config
(
ha
);
ret
=
qla2x00_iospace_config
(
ha
);
if
(
ret
)
if
(
ret
)
...
@@ -1448,7 +1450,6 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
...
@@ -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
);
spin_lock_init
(
&
ha
->
mbx_reg_lock
);
ha
->
dpc_pid
=
-
1
;
init_completion
(
&
ha
->
dpc_inited
);
init_completion
(
&
ha
->
dpc_inited
);
init_completion
(
&
ha
->
dpc_exited
);
init_completion
(
&
ha
->
dpc_exited
);
...
...
drivers/scsi/scsi_devinfo.c
浏览文件 @
4c2cb58c
...
@@ -185,6 +185,7 @@ static struct {
...
@@ -185,6 +185,7 @@ static struct {
{
"PIONEER"
,
"CD-ROM DRM-600"
,
NULL
,
BLIST_FORCELUN
|
BLIST_SINGLELUN
},
{
"PIONEER"
,
"CD-ROM DRM-600"
,
NULL
,
BLIST_FORCELUN
|
BLIST_SINGLELUN
},
{
"PIONEER"
,
"CD-ROM DRM-602X"
,
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-604X"
,
NULL
,
BLIST_FORCELUN
|
BLIST_SINGLELUN
},
{
"PIONEER"
,
"CD-ROM DRM-624X"
,
NULL
,
BLIST_FORCELUN
|
BLIST_SINGLELUN
},
{
"REGAL"
,
"CDC-4X"
,
NULL
,
BLIST_MAX5LUN
|
BLIST_SINGLELUN
},
{
"REGAL"
,
"CDC-4X"
,
NULL
,
BLIST_MAX5LUN
|
BLIST_SINGLELUN
},
{
"SanDisk"
,
"ImageMate CF-SD1"
,
NULL
,
BLIST_FORCELUN
},
{
"SanDisk"
,
"ImageMate CF-SD1"
,
NULL
,
BLIST_FORCELUN
},
{
"SEAGATE"
,
"ST34555N"
,
"0930"
,
BLIST_NOTQ
},
/* Chokes on tagged INQUIRY */
{
"SEAGATE"
,
"ST34555N"
,
"0930"
,
BLIST_NOTQ
},
/* Chokes on tagged INQUIRY */
...
...
drivers/scsi/scsi_lib.c
浏览文件 @
4c2cb58c
...
@@ -97,7 +97,6 @@ int scsi_insert_special_req(struct scsi_request *sreq, int at_head)
...
@@ -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_run_queue
(
struct
request_queue
*
q
);
static
void
scsi_release_buffers
(
struct
scsi_cmnd
*
cmd
);
/*
/*
* Function: scsi_unprep_request()
* Function: scsi_unprep_request()
...
@@ -1040,8 +1039,10 @@ static int scsi_init_io(struct scsi_cmnd *cmd)
...
@@ -1040,8 +1039,10 @@ static int scsi_init_io(struct scsi_cmnd *cmd)
* if sg table allocation fails, requeue request later.
* if sg table allocation fails, requeue request later.
*/
*/
sgpnt
=
scsi_alloc_sgtable
(
cmd
,
GFP_ATOMIC
);
sgpnt
=
scsi_alloc_sgtable
(
cmd
,
GFP_ATOMIC
);
if
(
unlikely
(
!
sgpnt
))
if
(
unlikely
(
!
sgpnt
))
{
scsi_unprep_request
(
req
);
return
BLKPREP_DEFER
;
return
BLKPREP_DEFER
;
}
cmd
->
request_buffer
=
(
char
*
)
sgpnt
;
cmd
->
request_buffer
=
(
char
*
)
sgpnt
;
cmd
->
request_bufflen
=
req
->
nr_sectors
<<
9
;
cmd
->
request_bufflen
=
req
->
nr_sectors
<<
9
;
...
@@ -1245,8 +1246,8 @@ static int scsi_prep_fn(struct request_queue *q, struct request *req)
...
@@ -1245,8 +1246,8 @@ static int scsi_prep_fn(struct request_queue *q, struct request *req)
*/
*/
ret
=
scsi_init_io
(
cmd
);
ret
=
scsi_init_io
(
cmd
);
switch
(
ret
)
{
switch
(
ret
)
{
/* For BLKPREP_KILL/DEFER the cmd was released */
case
BLKPREP_KILL
:
case
BLKPREP_KILL
:
/* BLKPREP_KILL return also releases the command */
goto
kill
;
goto
kill
;
case
BLKPREP_DEFER
:
case
BLKPREP_DEFER
:
goto
defer
;
goto
defer
;
...
...
drivers/scsi/scsi_transport_fc.c
浏览文件 @
4c2cb58c
...
@@ -819,12 +819,15 @@ show_fc_private_host_tgtid_bind_type(struct class_device *cdev, char *buf)
...
@@ -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
);
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
static
ssize_t
store_fc_private_host_tgtid_bind_type
(
struct
class_device
*
cdev
,
store_fc_private_host_tgtid_bind_type
(
struct
class_device
*
cdev
,
const
char
*
buf
,
size_t
count
)
const
char
*
buf
,
size_t
count
)
{
{
struct
Scsi_Host
*
shost
=
transport_class_to_shost
(
cdev
);
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
;
enum
fc_tgtid_binding_type
val
;
unsigned
long
flags
;
unsigned
long
flags
;
...
@@ -834,9 +837,13 @@ store_fc_private_host_tgtid_bind_type(struct class_device *cdev,
...
@@ -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 changing bind type, purge all unused consistent bindings */
if
(
val
!=
fc_host_tgtid_bind_type
(
shost
))
{
if
(
val
!=
fc_host_tgtid_bind_type
(
shost
))
{
spin_lock_irqsave
(
shost
->
host_lock
,
flags
);
spin_lock_irqsave
(
shost
->
host_lock
,
flags
);
list_for_each_entry_safe
(
rport
,
next_rport
,
while
(
!
list_empty
(
&
fc_host_rport_bindings
(
shost
)))
{
&
fc_host_rport_bindings
(
shost
),
peers
)
get_list_head_entry
(
rport
,
&
fc_host_rport_bindings
(
shost
),
peers
);
spin_unlock_irqrestore
(
shost
->
host_lock
,
flags
);
fc_rport_terminate
(
rport
);
fc_rport_terminate
(
rport
);
spin_lock_irqsave
(
shost
->
host_lock
,
flags
);
}
spin_unlock_irqrestore
(
shost
->
host_lock
,
flags
);
spin_unlock_irqrestore
(
shost
->
host_lock
,
flags
);
}
}
...
...
drivers/serial/8250_pci.c
浏览文件 @
4c2cb58c
...
@@ -152,6 +152,7 @@ static int __devinit pci_hp_diva_init(struct pci_dev *dev)
...
@@ -152,6 +152,7 @@ static int __devinit pci_hp_diva_init(struct pci_dev *dev)
rc
=
4
;
rc
=
4
;
break
;
break
;
case
PCI_DEVICE_ID_HP_DIVA_POWERBAR
:
case
PCI_DEVICE_ID_HP_DIVA_POWERBAR
:
case
PCI_DEVICE_ID_HP_DIVA_HURRICANE
:
rc
=
1
;
rc
=
1
;
break
;
break
;
}
}
...
@@ -226,8 +227,10 @@ static int __devinit pci_plx9050_init(struct pci_dev *dev)
...
@@ -226,8 +227,10 @@ static int __devinit pci_plx9050_init(struct pci_dev *dev)
}
}
irq_config
=
0x41
;
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
;
irq_config
=
0x43
;
}
if
((
dev
->
vendor
==
PCI_VENDOR_ID_PLX
)
&&
if
((
dev
->
vendor
==
PCI_VENDOR_ID_PLX
)
&&
(
dev
->
device
==
PCI_DEVICE_ID_PLX_ROMULUS
))
{
(
dev
->
device
==
PCI_DEVICE_ID_PLX_ROMULUS
))
{
/*
/*
...
@@ -661,6 +664,15 @@ static struct pci_serial_quirk pci_serial_quirks[] = {
...
@@ -661,6 +664,15 @@ static struct pci_serial_quirk pci_serial_quirks[] = {
/*
/*
* PLX
* 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
,
.
vendor
=
PCI_VENDOR_ID_PLX
,
.
device
=
PCI_DEVICE_ID_PLX_9050
,
.
device
=
PCI_DEVICE_ID_PLX_9050
,
...
@@ -927,6 +939,7 @@ enum pci_board_num_t {
...
@@ -927,6 +939,7 @@ enum pci_board_num_t {
pbn_panacom
,
pbn_panacom
,
pbn_panacom2
,
pbn_panacom2
,
pbn_panacom4
,
pbn_panacom4
,
pbn_exsys_4055
,
pbn_plx_romulus
,
pbn_plx_romulus
,
pbn_oxsemi
,
pbn_oxsemi
,
pbn_intel_i960
,
pbn_intel_i960
,
...
@@ -1292,6 +1305,13 @@ static struct pciserial_board pci_boards[] __devinitdata = {
...
@@ -1292,6 +1305,13 @@ static struct pciserial_board pci_boards[] __devinitdata = {
.
reg_shift
=
7
,
.
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 */
/* I think this entry is broken - the first_offset looks wrong --rmk */
[
pbn_plx_romulus
]
=
{
[
pbn_plx_romulus
]
=
{
.
flags
=
FL_BASE2
,
.
flags
=
FL_BASE2
,
...
@@ -1853,6 +1873,10 @@ static struct pci_device_id serial_pci_tbl[] = {
...
@@ -1853,6 +1873,10 @@ static struct pci_device_id serial_pci_tbl[] = {
PCI_SUBVENDOR_ID_CHASE_PCIRAS
,
PCI_SUBVENDOR_ID_CHASE_PCIRAS
,
PCI_SUBDEVICE_ID_CHASE_PCIRAS8
,
0
,
0
,
PCI_SUBDEVICE_ID_CHASE_PCIRAS8
,
0
,
0
,
pbn_b2_8_460800
},
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
* Megawolf Romulus PCI Serial Card, from Mike Hudson
* (Exoray@isys.ca)
* (Exoray@isys.ca)
...
...
drivers/video/fbsysfs.c
浏览文件 @
4c2cb58c
...
@@ -242,6 +242,13 @@ static ssize_t show_virtual(struct class_device *class_device, char *buf)
...
@@ -242,6 +242,13 @@ static ssize_t show_virtual(struct class_device *class_device, char *buf)
fb_info
->
var
.
yres_virtual
);
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" */
/* Format for cmap is "%02x%c%4x%4x%4x\n" */
/* %02x entry %c transp %4x red %4x blue %4x green \n */
/* %02x entry %c transp %4x red %4x blue %4x green \n */
/* 256 rows at 16 chars equals 4096, the normal page size */
/* 256 rows at 16 chars equals 4096, the normal page size */
...
@@ -432,6 +439,7 @@ static struct class_device_attribute class_device_attrs[] = {
...
@@ -432,6 +439,7 @@ static struct class_device_attribute class_device_attrs[] = {
__ATTR
(
pan
,
S_IRUGO
|
S_IWUSR
,
show_pan
,
store_pan
),
__ATTR
(
pan
,
S_IRUGO
|
S_IWUSR
,
show_pan
,
store_pan
),
__ATTR
(
virtual_size
,
S_IRUGO
|
S_IWUSR
,
show_virtual
,
store_virtual
),
__ATTR
(
virtual_size
,
S_IRUGO
|
S_IWUSR
,
show_virtual
,
store_virtual
),
__ATTR
(
name
,
S_IRUGO
,
show_name
,
NULL
),
__ATTR
(
name
,
S_IRUGO
,
show_name
,
NULL
),
__ATTR
(
stride
,
S_IRUGO
,
show_stride
,
NULL
),
};
};
int
fb_init_class_device
(
struct
fb_info
*
fb_info
)
int
fb_init_class_device
(
struct
fb_info
*
fb_info
)
...
...
fs/aio.c
浏览文件 @
4c2cb58c
...
@@ -1397,6 +1397,9 @@ static ssize_t aio_setup_iocb(struct kiocb *kiocb)
...
@@ -1397,6 +1397,9 @@ static ssize_t aio_setup_iocb(struct kiocb *kiocb)
if
(
unlikely
(
!
access_ok
(
VERIFY_WRITE
,
kiocb
->
ki_buf
,
if
(
unlikely
(
!
access_ok
(
VERIFY_WRITE
,
kiocb
->
ki_buf
,
kiocb
->
ki_left
)))
kiocb
->
ki_left
)))
break
;
break
;
ret
=
security_file_permission
(
file
,
MAY_READ
);
if
(
unlikely
(
ret
))
break
;
ret
=
-
EINVAL
;
ret
=
-
EINVAL
;
if
(
file
->
f_op
->
aio_read
)
if
(
file
->
f_op
->
aio_read
)
kiocb
->
ki_retry
=
aio_pread
;
kiocb
->
ki_retry
=
aio_pread
;
...
@@ -1409,6 +1412,9 @@ static ssize_t aio_setup_iocb(struct kiocb *kiocb)
...
@@ -1409,6 +1412,9 @@ static ssize_t aio_setup_iocb(struct kiocb *kiocb)
if
(
unlikely
(
!
access_ok
(
VERIFY_READ
,
kiocb
->
ki_buf
,
if
(
unlikely
(
!
access_ok
(
VERIFY_READ
,
kiocb
->
ki_buf
,
kiocb
->
ki_left
)))
kiocb
->
ki_left
)))
break
;
break
;
ret
=
security_file_permission
(
file
,
MAY_WRITE
);
if
(
unlikely
(
ret
))
break
;
ret
=
-
EINVAL
;
ret
=
-
EINVAL
;
if
(
file
->
f_op
->
aio_write
)
if
(
file
->
f_op
->
aio_write
)
kiocb
->
ki_retry
=
aio_pwrite
;
kiocb
->
ki_retry
=
aio_pwrite
;
...
...
fs/hfsplus/super.c
浏览文件 @
4c2cb58c
...
@@ -50,6 +50,7 @@ static void hfsplus_read_inode(struct inode *inode)
...
@@ -50,6 +50,7 @@ static void hfsplus_read_inode(struct inode *inode)
init_MUTEX
(
&
HFSPLUS_I
(
inode
).
extents_lock
);
init_MUTEX
(
&
HFSPLUS_I
(
inode
).
extents_lock
);
HFSPLUS_I
(
inode
).
flags
=
0
;
HFSPLUS_I
(
inode
).
flags
=
0
;
HFSPLUS_I
(
inode
).
rsrc_inode
=
NULL
;
HFSPLUS_I
(
inode
).
rsrc_inode
=
NULL
;
atomic_set
(
&
HFSPLUS_I
(
inode
).
opencnt
,
0
);
if
(
inode
->
i_ino
>=
HFSPLUS_FIRSTUSER_CNID
)
{
if
(
inode
->
i_ino
>=
HFSPLUS_FIRSTUSER_CNID
)
{
read_inode:
read_inode:
...
...
fs/inotify.c
浏览文件 @
4c2cb58c
...
@@ -176,6 +176,7 @@ static inline void put_inotify_dev(struct inotify_device *dev)
...
@@ -176,6 +176,7 @@ static inline void put_inotify_dev(struct inotify_device *dev)
if
(
atomic_dec_and_test
(
&
dev
->
count
))
{
if
(
atomic_dec_and_test
(
&
dev
->
count
))
{
atomic_dec
(
&
dev
->
user
->
inotify_devs
);
atomic_dec
(
&
dev
->
user
->
inotify_devs
);
free_uid
(
dev
->
user
);
free_uid
(
dev
->
user
);
idr_destroy
(
&
dev
->
idr
);
kfree
(
dev
);
kfree
(
dev
);
}
}
}
}
...
...
include/asm-alpha/atomic.h
浏览文件 @
4c2cb58c
#ifndef _ALPHA_ATOMIC_H
#ifndef _ALPHA_ATOMIC_H
#define _ALPHA_ATOMIC_H
#define _ALPHA_ATOMIC_H
#include <asm/barrier.h>
/*
/*
* Atomic operations that C can't guarantee us. Useful for
* Atomic operations that C can't guarantee us. Useful for
* resource counting etc...
* resource counting etc...
...
@@ -100,18 +102,19 @@ static __inline__ void atomic64_sub(long i, atomic64_t * v)
...
@@ -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
)
static
__inline__
long
atomic_add_return
(
int
i
,
atomic_t
*
v
)
{
{
long
temp
,
result
;
long
temp
,
result
;
smp_mb
();
__asm__
__volatile__
(
__asm__
__volatile__
(
"1: ldl_l %0,%1
\n
"
"1: ldl_l %0,%1
\n
"
" addl %0,%3,%2
\n
"
" addl %0,%3,%2
\n
"
" addl %0,%3,%0
\n
"
" addl %0,%3,%0
\n
"
" stl_c %0,%1
\n
"
" stl_c %0,%1
\n
"
" beq %0,2f
\n
"
" beq %0,2f
\n
"
" mb
\n
"
".subsection 2
\n
"
".subsection 2
\n
"
"2: br 1b
\n
"
"2: br 1b
\n
"
".previous"
".previous"
:
"=&r"
(
temp
),
"=m"
(
v
->
counter
),
"=&r"
(
result
)
:
"=&r"
(
temp
),
"=m"
(
v
->
counter
),
"=&r"
(
result
)
:
"Ir"
(
i
),
"m"
(
v
->
counter
)
:
"memory"
);
:
"Ir"
(
i
),
"m"
(
v
->
counter
)
:
"memory"
);
smp_mb
();
return
result
;
return
result
;
}
}
...
@@ -120,54 +123,57 @@ static __inline__ long atomic_add_return(int i, atomic_t * v)
...
@@ -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
)
static
__inline__
long
atomic64_add_return
(
long
i
,
atomic64_t
*
v
)
{
{
long
temp
,
result
;
long
temp
,
result
;
smp_mb
();
__asm__
__volatile__
(
__asm__
__volatile__
(
"1: ldq_l %0,%1
\n
"
"1: ldq_l %0,%1
\n
"
" addq %0,%3,%2
\n
"
" addq %0,%3,%2
\n
"
" addq %0,%3,%0
\n
"
" addq %0,%3,%0
\n
"
" stq_c %0,%1
\n
"
" stq_c %0,%1
\n
"
" beq %0,2f
\n
"
" beq %0,2f
\n
"
" mb
\n
"
".subsection 2
\n
"
".subsection 2
\n
"
"2: br 1b
\n
"
"2: br 1b
\n
"
".previous"
".previous"
:
"=&r"
(
temp
),
"=m"
(
v
->
counter
),
"=&r"
(
result
)
:
"=&r"
(
temp
),
"=m"
(
v
->
counter
),
"=&r"
(
result
)
:
"Ir"
(
i
),
"m"
(
v
->
counter
)
:
"memory"
);
:
"Ir"
(
i
),
"m"
(
v
->
counter
)
:
"memory"
);
smp_mb
();
return
result
;
return
result
;
}
}
static
__inline__
long
atomic_sub_return
(
int
i
,
atomic_t
*
v
)
static
__inline__
long
atomic_sub_return
(
int
i
,
atomic_t
*
v
)
{
{
long
temp
,
result
;
long
temp
,
result
;
smp_mb
();
__asm__
__volatile__
(
__asm__
__volatile__
(
"1: ldl_l %0,%1
\n
"
"1: ldl_l %0,%1
\n
"
" subl %0,%3,%2
\n
"
" subl %0,%3,%2
\n
"
" subl %0,%3,%0
\n
"
" subl %0,%3,%0
\n
"
" stl_c %0,%1
\n
"
" stl_c %0,%1
\n
"
" beq %0,2f
\n
"
" beq %0,2f
\n
"
" mb
\n
"
".subsection 2
\n
"
".subsection 2
\n
"
"2: br 1b
\n
"
"2: br 1b
\n
"
".previous"
".previous"
:
"=&r"
(
temp
),
"=m"
(
v
->
counter
),
"=&r"
(
result
)
:
"=&r"
(
temp
),
"=m"
(
v
->
counter
),
"=&r"
(
result
)
:
"Ir"
(
i
),
"m"
(
v
->
counter
)
:
"memory"
);
:
"Ir"
(
i
),
"m"
(
v
->
counter
)
:
"memory"
);
smp_mb
();
return
result
;
return
result
;
}
}
static
__inline__
long
atomic64_sub_return
(
long
i
,
atomic64_t
*
v
)
static
__inline__
long
atomic64_sub_return
(
long
i
,
atomic64_t
*
v
)
{
{
long
temp
,
result
;
long
temp
,
result
;
smp_mb
();
__asm__
__volatile__
(
__asm__
__volatile__
(
"1: ldq_l %0,%1
\n
"
"1: ldq_l %0,%1
\n
"
" subq %0,%3,%2
\n
"
" subq %0,%3,%2
\n
"
" subq %0,%3,%0
\n
"
" subq %0,%3,%0
\n
"
" stq_c %0,%1
\n
"
" stq_c %0,%1
\n
"
" beq %0,2f
\n
"
" beq %0,2f
\n
"
" mb
\n
"
".subsection 2
\n
"
".subsection 2
\n
"
"2: br 1b
\n
"
"2: br 1b
\n
"
".previous"
".previous"
:
"=&r"
(
temp
),
"=m"
(
v
->
counter
),
"=&r"
(
result
)
:
"=&r"
(
temp
),
"=m"
(
v
->
counter
),
"=&r"
(
result
)
:
"Ir"
(
i
),
"m"
(
v
->
counter
)
:
"memory"
);
:
"Ir"
(
i
),
"m"
(
v
->
counter
)
:
"memory"
);
smp_mb
();
return
result
;
return
result
;
}
}
...
...
include/asm-alpha/barrier.h
0 → 100644
浏览文件 @
4c2cb58c
#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 */
include/asm-alpha/system.h
浏览文件 @
4c2cb58c
...
@@ -4,6 +4,7 @@
...
@@ -4,6 +4,7 @@
#include <linux/config.h>
#include <linux/config.h>
#include <asm/pal.h>
#include <asm/pal.h>
#include <asm/page.h>
#include <asm/page.h>
#include <asm/barrier.h>
/*
/*
* System defines.. Note that this is included both from .c and .S
* System defines.. Note that this is included both from .c and .S
...
@@ -139,36 +140,6 @@ extern void halt(void) __attribute__((noreturn));
...
@@ -139,36 +140,6 @@ extern void halt(void) __attribute__((noreturn));
struct
task_struct
;
struct
task_struct
;
extern
struct
task_struct
*
alpha_switch_to
(
unsigned
long
,
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() \
#define imb() \
__asm__ __volatile__ ("call_pal %0 #imb" : : "i" (PAL_imb) : "memory")
__asm__ __volatile__ ("call_pal %0 #imb" : : "i" (PAL_imb) : "memory")
...
...
include/asm-arm/arch-s3c2410/regs-clock.h
浏览文件 @
4c2cb58c
...
@@ -18,7 +18,9 @@
...
@@ -18,7 +18,9 @@
* 10-Feb-2005 Ben Dooks Fixed CAMDIVN address (Guillaume Gourat)
* 10-Feb-2005 Ben Dooks Fixed CAMDIVN address (Guillaume Gourat)
* 10-Mar-2005 Lucas Villa Real Changed S3C2410_VA to S3C24XX_VA
* 10-Mar-2005 Lucas Villa Real Changed S3C2410_VA to S3C24XX_VA
* 27-Aug-2005 Ben Dooks Add clock-slow info
* 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
#ifndef __ASM_ARM_REGS_CLOCK
#define __ASM_ARM_REGS_CLOCK "$Id: clock.h,v 1.4 2003/04/30 14:50:51 ben Exp $"
#define __ASM_ARM_REGS_CLOCK "$Id: clock.h,v 1.4 2003/04/30 14:50:51 ben Exp $"
...
@@ -66,11 +68,16 @@
...
@@ -66,11 +68,16 @@
#define S3C2410_DCLKCON_DCLK0_UCLK (1<<1)
#define S3C2410_DCLKCON_DCLK0_UCLK (1<<1)
#define S3C2410_DCLKCON_DCLK0_DIV(x) (((x) - 1 )<<4)
#define S3C2410_DCLKCON_DCLK0_DIV(x) (((x) - 1 )<<4)
#define S3C2410_DCLKCON_DCLK0_CMP(x) (((x) - 1 )<<8)
#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_DCLK1EN (1<<16)
#define S3C2410_DCLKCON_DCLK1_PCLK (0<<17)
#define S3C2410_DCLKCON_DCLK1_PCLK (0<<17)
#define S3C2410_DCLKCON_DCLK1_UCLK (1<<17)
#define S3C2410_DCLKCON_DCLK1_UCLK (1<<17)
#define S3C2410_DCLKCON_DCLK1_DIV(x) (((x) - 1) <<20)
#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_PDIVN (1<<0)
#define S3C2410_CLKDIVN_HDIVN (1<<1)
#define S3C2410_CLKDIVN_HDIVN (1<<1)
...
@@ -83,10 +90,13 @@
...
@@ -83,10 +90,13 @@
#ifndef __ASSEMBLY__
#ifndef __ASSEMBLY__
#include <asm/div64.h>
static
inline
unsigned
int
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
;
mdiv
=
pllval
>>
S3C2410_PLLCON_MDIVSHIFT
;
pdiv
=
pllval
>>
S3C2410_PLLCON_PDIVSHIFT
;
pdiv
=
pllval
>>
S3C2410_PLLCON_PDIVSHIFT
;
...
@@ -96,7 +106,10 @@ s3c2410_get_pll(int pllval, int baseclk)
...
@@ -96,7 +106,10 @@ s3c2410_get_pll(int pllval, int baseclk)
pdiv
&=
S3C2410_PLLCON_PDIVMASK
;
pdiv
&=
S3C2410_PLLCON_PDIVMASK
;
sdiv
&=
S3C2410_PLLCON_SDIVMASK
;
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__ */
#endif
/* __ASSEMBLY__ */
...
...
include/asm-arm/bitops.h
浏览文件 @
4c2cb58c
...
@@ -347,7 +347,6 @@ static inline unsigned long __ffs(unsigned long word)
...
@@ -347,7 +347,6 @@ static inline unsigned long __ffs(unsigned long word)
* the clz instruction for much better code efficiency.
* the clz instruction for much better code efficiency.
*/
*/
static
__inline__
int
generic_fls
(
int
x
);
#define fls(x) \
#define fls(x) \
( __builtin_constant_p(x) ? generic_fls(x) : \
( __builtin_constant_p(x) ? generic_fls(x) : \
({ int __r; asm("clz\t%0, %1" : "=r"(__r) : "r"(x) : "cc"); 32-__r; }) )
({ int __r; asm("clz\t%0, %1" : "=r"(__r) : "r"(x) : "cc"); 32-__r; }) )
...
...
include/linux/hugetlb.h
浏览文件 @
4c2cb58c
...
@@ -25,6 +25,8 @@ int is_hugepage_mem_enough(size_t);
...
@@ -25,6 +25,8 @@ int is_hugepage_mem_enough(size_t);
unsigned
long
hugetlb_total_pages
(
void
);
unsigned
long
hugetlb_total_pages
(
void
);
struct
page
*
alloc_huge_page
(
void
);
struct
page
*
alloc_huge_page
(
void
);
void
free_huge_page
(
struct
page
*
);
void
free_huge_page
(
struct
page
*
);
int
hugetlb_fault
(
struct
mm_struct
*
mm
,
struct
vm_area_struct
*
vma
,
unsigned
long
address
,
int
write_access
);
extern
unsigned
long
max_huge_pages
;
extern
unsigned
long
max_huge_pages
;
extern
const
unsigned
long
hugetlb_zero
,
hugetlb_infinity
;
extern
const
unsigned
long
hugetlb_zero
,
hugetlb_infinity
;
...
@@ -99,6 +101,7 @@ static inline unsigned long hugetlb_total_pages(void)
...
@@ -99,6 +101,7 @@ static inline unsigned long hugetlb_total_pages(void)
do { } while (0)
do { } while (0)
#define alloc_huge_page() ({ NULL; })
#define alloc_huge_page() ({ NULL; })
#define free_huge_page(p) ({ (void)(p); BUG(); })
#define free_huge_page(p) ({ (void)(p); BUG(); })
#define hugetlb_fault(mm, vma, addr, write) ({ BUG(); 0; })
#ifndef HPAGE_MASK
#ifndef HPAGE_MASK
#define HPAGE_MASK 0
/* Keep the compiler happy */
#define HPAGE_MASK 0
/* Keep the compiler happy */
...
@@ -155,24 +158,11 @@ static inline void set_file_hugepages(struct file *file)
...
@@ -155,24 +158,11 @@ static inline void set_file_hugepages(struct file *file)
{
{
file
->
f_op
=
&
hugetlbfs_file_operations
;
file
->
f_op
=
&
hugetlbfs_file_operations
;
}
}
static
inline
int
valid_hugetlb_file_off
(
struct
vm_area_struct
*
vma
,
unsigned
long
address
)
{
struct
inode
*
inode
=
vma
->
vm_file
->
f_dentry
->
d_inode
;
loff_t
file_off
=
address
-
vma
->
vm_start
;
file_off
+=
(
vma
->
vm_pgoff
<<
PAGE_SHIFT
);
return
(
file_off
<
inode
->
i_size
);
}
#else
/* !CONFIG_HUGETLBFS */
#else
/* !CONFIG_HUGETLBFS */
#define is_file_hugepages(file) 0
#define is_file_hugepages(file) 0
#define set_file_hugepages(file) BUG()
#define set_file_hugepages(file) BUG()
#define hugetlb_zero_setup(size) ERR_PTR(-ENOSYS)
#define hugetlb_zero_setup(size) ERR_PTR(-ENOSYS)
#define valid_hugetlb_file_off(vma, address) 0
#endif
/* !CONFIG_HUGETLBFS */
#endif
/* !CONFIG_HUGETLBFS */
...
...
include/linux/idr.h
浏览文件 @
4c2cb58c
...
@@ -75,4 +75,5 @@ int idr_pre_get(struct idr *idp, unsigned gfp_mask);
...
@@ -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
(
struct
idr
*
idp
,
void
*
ptr
,
int
*
id
);
int
idr_get_new_above
(
struct
idr
*
idp
,
void
*
ptr
,
int
starting_id
,
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_remove
(
struct
idr
*
idp
,
int
id
);
void
idr_destroy
(
struct
idr
*
idp
);
void
idr_init
(
struct
idr
*
idp
);
void
idr_init
(
struct
idr
*
idp
);
include/linux/pci_ids.h
浏览文件 @
4c2cb58c
...
@@ -723,6 +723,7 @@
...
@@ -723,6 +723,7 @@
#define PCI_DEVICE_ID_HP_DIVA_EVEREST 0x1282
#define PCI_DEVICE_ID_HP_DIVA_EVEREST 0x1282
#define PCI_DEVICE_ID_HP_DIVA_AUX 0x1290
#define PCI_DEVICE_ID_HP_DIVA_AUX 0x1290
#define PCI_DEVICE_ID_HP_DIVA_RMP3 0x1301
#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_CISS 0x3210
#define PCI_DEVICE_ID_HP_CISSA 0x3220
#define PCI_DEVICE_ID_HP_CISSA 0x3220
#define PCI_DEVICE_ID_HP_CISSB 0x3222
#define PCI_DEVICE_ID_HP_CISSB 0x3222
...
@@ -2696,6 +2697,7 @@
...
@@ -2696,6 +2697,7 @@
#define PCI_SUBVENDOR_ID_EXSYS 0xd84d
#define PCI_SUBVENDOR_ID_EXSYS 0xd84d
#define PCI_SUBDEVICE_ID_EXSYS_4014 0x4014
#define PCI_SUBDEVICE_ID_EXSYS_4014 0x4014
#define PCI_SUBDEVICE_ID_EXSYS_4055 0x4055
#define PCI_VENDOR_ID_TIGERJET 0xe159
#define PCI_VENDOR_ID_TIGERJET 0xe159
#define PCI_DEVICE_ID_TIGERJET_300 0x0001
#define PCI_DEVICE_ID_TIGERJET_300 0x0001
...
...
include/net/ax25.h
浏览文件 @
4c2cb58c
...
@@ -171,7 +171,7 @@ typedef struct {
...
@@ -171,7 +171,7 @@ typedef struct {
ax25_address
calls
[
AX25_MAX_DIGIS
];
ax25_address
calls
[
AX25_MAX_DIGIS
];
unsigned
char
repeated
[
AX25_MAX_DIGIS
];
unsigned
char
repeated
[
AX25_MAX_DIGIS
];
unsigned
char
ndigi
;
unsigned
char
ndigi
;
char
lastrepeat
;
signed
char
lastrepeat
;
}
ax25_digi
;
}
ax25_digi
;
typedef
struct
ax25_route
{
typedef
struct
ax25_route
{
...
...
include/net/llc_pdu.h
浏览文件 @
4c2cb58c
...
@@ -254,8 +254,10 @@ static inline void llc_pdu_decode_sa(struct sk_buff *skb, u8 *sa)
...
@@ -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
))
if
(
skb
->
protocol
==
ntohs
(
ETH_P_802_2
))
memcpy
(
sa
,
eth_hdr
(
skb
)
->
h_source
,
ETH_ALEN
);
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
);
memcpy
(
sa
,
tr_hdr
(
skb
)
->
saddr
,
ETH_ALEN
);
*
sa
&=
0x7F
;
}
}
}
/**
/**
...
...
kernel/exit.c
浏览文件 @
4c2cb58c
...
@@ -843,6 +843,7 @@ fastcall NORET_TYPE void do_exit(long code)
...
@@ -843,6 +843,7 @@ fastcall NORET_TYPE void do_exit(long code)
group_dead
=
atomic_dec_and_test
(
&
tsk
->
signal
->
live
);
group_dead
=
atomic_dec_and_test
(
&
tsk
->
signal
->
live
);
if
(
group_dead
)
{
if
(
group_dead
)
{
del_timer_sync
(
&
tsk
->
signal
->
real_timer
);
del_timer_sync
(
&
tsk
->
signal
->
real_timer
);
exit_itimers
(
tsk
->
signal
);
acct_process
(
code
);
acct_process
(
code
);
}
}
exit_mm
(
tsk
);
exit_mm
(
tsk
);
...
...
kernel/posix-cpu-timers.c
浏览文件 @
4c2cb58c
...
@@ -91,7 +91,7 @@ static inline union cpu_time_count cpu_time_sub(clockid_t which_clock,
...
@@ -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,
* Update expiry time from increment, and increase overrun count,
* given the current clock sample.
* 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
)
union
cpu_time_count
now
)
{
{
int
i
;
int
i
;
...
@@ -110,7 +110,7 @@ static inline void bump_cpu_timer(struct k_itimer *timer,
...
@@ -110,7 +110,7 @@ static inline void bump_cpu_timer(struct k_itimer *timer,
for
(
i
=
0
;
incr
<
delta
-
incr
;
i
++
)
for
(
i
=
0
;
incr
<
delta
-
incr
;
i
++
)
incr
=
incr
<<
1
;
incr
=
incr
<<
1
;
for
(;
i
>=
0
;
incr
>>=
1
,
i
--
)
{
for
(;
i
>=
0
;
incr
>>=
1
,
i
--
)
{
if
(
delta
<
=
incr
)
if
(
delta
<
incr
)
continue
;
continue
;
timer
->
it
.
cpu
.
expires
.
sched
+=
incr
;
timer
->
it
.
cpu
.
expires
.
sched
+=
incr
;
timer
->
it_overrun
+=
1
<<
i
;
timer
->
it_overrun
+=
1
<<
i
;
...
@@ -128,7 +128,7 @@ static inline void bump_cpu_timer(struct k_itimer *timer,
...
@@ -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
++
)
for
(
i
=
0
;
cputime_lt
(
incr
,
cputime_sub
(
delta
,
incr
));
i
++
)
incr
=
cputime_add
(
incr
,
incr
);
incr
=
cputime_add
(
incr
,
incr
);
for
(;
i
>=
0
;
incr
=
cputime_halve
(
incr
),
i
--
)
{
for
(;
i
>=
0
;
incr
=
cputime_halve
(
incr
),
i
--
)
{
if
(
cputime_l
e
(
delta
,
incr
))
if
(
cputime_l
t
(
delta
,
incr
))
continue
;
continue
;
timer
->
it
.
cpu
.
expires
.
cpu
=
timer
->
it
.
cpu
.
expires
.
cpu
=
cputime_add
(
timer
->
it
.
cpu
.
expires
.
cpu
,
incr
);
cputime_add
(
timer
->
it
.
cpu
.
expires
.
cpu
,
incr
);
...
@@ -380,28 +380,31 @@ int posix_cpu_timer_create(struct k_itimer *new_timer)
...
@@ -380,28 +380,31 @@ int posix_cpu_timer_create(struct k_itimer *new_timer)
int
posix_cpu_timer_del
(
struct
k_itimer
*
timer
)
int
posix_cpu_timer_del
(
struct
k_itimer
*
timer
)
{
{
struct
task_struct
*
p
=
timer
->
it
.
cpu
.
task
;
struct
task_struct
*
p
=
timer
->
it
.
cpu
.
task
;
int
ret
=
0
;
if
(
timer
->
it
.
cpu
.
firing
)
if
(
likely
(
p
!=
NULL
))
{
return
TIMER_RETRY
;
read_lock
(
&
tasklist_lock
);
if
(
unlikely
(
p
->
signal
==
NULL
))
{
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
* We raced with the reaping of the task.
* take tasklist_lock and check for the task being reaped.
* The deletion should have cleared us off the list.
* 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.
*/
*/
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
);
list_del
(
&
timer
->
it
.
cpu
.
entry
);
spin_unlock
(
&
p
->
sighand
->
siglock
);
}
read_unlock
(
&
tasklist_lock
);
if
(
!
ret
)
put_task_struct
(
p
);
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,
...
@@ -418,8 +421,6 @@ static void cleanup_timers(struct list_head *head,
cputime_t
ptime
=
cputime_add
(
utime
,
stime
);
cputime_t
ptime
=
cputime_add
(
utime
,
stime
);
list_for_each_entry_safe
(
timer
,
next
,
head
,
entry
)
{
list_for_each_entry_safe
(
timer
,
next
,
head
,
entry
)
{
put_task_struct
(
timer
->
task
);
timer
->
task
=
NULL
;
list_del_init
(
&
timer
->
entry
);
list_del_init
(
&
timer
->
entry
);
if
(
cputime_lt
(
timer
->
expires
.
cpu
,
ptime
))
{
if
(
cputime_lt
(
timer
->
expires
.
cpu
,
ptime
))
{
timer
->
expires
.
cpu
=
cputime_zero
;
timer
->
expires
.
cpu
=
cputime_zero
;
...
@@ -431,8 +432,6 @@ static void cleanup_timers(struct list_head *head,
...
@@ -431,8 +432,6 @@ static void cleanup_timers(struct list_head *head,
++
head
;
++
head
;
list_for_each_entry_safe
(
timer
,
next
,
head
,
entry
)
{
list_for_each_entry_safe
(
timer
,
next
,
head
,
entry
)
{
put_task_struct
(
timer
->
task
);
timer
->
task
=
NULL
;
list_del_init
(
&
timer
->
entry
);
list_del_init
(
&
timer
->
entry
);
if
(
cputime_lt
(
timer
->
expires
.
cpu
,
utime
))
{
if
(
cputime_lt
(
timer
->
expires
.
cpu
,
utime
))
{
timer
->
expires
.
cpu
=
cputime_zero
;
timer
->
expires
.
cpu
=
cputime_zero
;
...
@@ -444,8 +443,6 @@ static void cleanup_timers(struct list_head *head,
...
@@ -444,8 +443,6 @@ static void cleanup_timers(struct list_head *head,
++
head
;
++
head
;
list_for_each_entry_safe
(
timer
,
next
,
head
,
entry
)
{
list_for_each_entry_safe
(
timer
,
next
,
head
,
entry
)
{
put_task_struct
(
timer
->
task
);
timer
->
task
=
NULL
;
list_del_init
(
&
timer
->
entry
);
list_del_init
(
&
timer
->
entry
);
if
(
timer
->
expires
.
sched
<
sched_time
)
{
if
(
timer
->
expires
.
sched
<
sched_time
)
{
timer
->
expires
.
sched
=
0
;
timer
->
expires
.
sched
=
0
;
...
@@ -489,6 +486,9 @@ static void process_timer_rebalance(struct task_struct *p,
...
@@ -489,6 +486,9 @@ static void process_timer_rebalance(struct task_struct *p,
struct
task_struct
*
t
=
p
;
struct
task_struct
*
t
=
p
;
unsigned
int
nthreads
=
atomic_read
(
&
p
->
signal
->
live
);
unsigned
int
nthreads
=
atomic_read
(
&
p
->
signal
->
live
);
if
(
!
nthreads
)
return
;
switch
(
clock_idx
)
{
switch
(
clock_idx
)
{
default:
default:
BUG
();
BUG
();
...
@@ -497,7 +497,7 @@ static void process_timer_rebalance(struct task_struct *p,
...
@@ -497,7 +497,7 @@ static void process_timer_rebalance(struct task_struct *p,
left
=
cputime_div
(
cputime_sub
(
expires
.
cpu
,
val
.
cpu
),
left
=
cputime_div
(
cputime_sub
(
expires
.
cpu
,
val
.
cpu
),
nthreads
);
nthreads
);
do
{
do
{
if
(
!
unlikely
(
t
->
exit_state
))
{
if
(
!
unlikely
(
t
->
flags
&
PF_EXITING
))
{
ticks
=
cputime_add
(
prof_ticks
(
t
),
left
);
ticks
=
cputime_add
(
prof_ticks
(
t
),
left
);
if
(
cputime_eq
(
t
->
it_prof_expires
,
if
(
cputime_eq
(
t
->
it_prof_expires
,
cputime_zero
)
||
cputime_zero
)
||
...
@@ -512,7 +512,7 @@ static void process_timer_rebalance(struct task_struct *p,
...
@@ -512,7 +512,7 @@ static void process_timer_rebalance(struct task_struct *p,
left
=
cputime_div
(
cputime_sub
(
expires
.
cpu
,
val
.
cpu
),
left
=
cputime_div
(
cputime_sub
(
expires
.
cpu
,
val
.
cpu
),
nthreads
);
nthreads
);
do
{
do
{
if
(
!
unlikely
(
t
->
exit_state
))
{
if
(
!
unlikely
(
t
->
flags
&
PF_EXITING
))
{
ticks
=
cputime_add
(
virt_ticks
(
t
),
left
);
ticks
=
cputime_add
(
virt_ticks
(
t
),
left
);
if
(
cputime_eq
(
t
->
it_virt_expires
,
if
(
cputime_eq
(
t
->
it_virt_expires
,
cputime_zero
)
||
cputime_zero
)
||
...
@@ -527,7 +527,7 @@ static void process_timer_rebalance(struct task_struct *p,
...
@@ -527,7 +527,7 @@ static void process_timer_rebalance(struct task_struct *p,
nsleft
=
expires
.
sched
-
val
.
sched
;
nsleft
=
expires
.
sched
-
val
.
sched
;
do_div
(
nsleft
,
nthreads
);
do_div
(
nsleft
,
nthreads
);
do
{
do
{
if
(
!
unlikely
(
t
->
exit_state
))
{
if
(
!
unlikely
(
t
->
flags
&
PF_EXITING
))
{
ns
=
t
->
sched_time
+
nsleft
;
ns
=
t
->
sched_time
+
nsleft
;
if
(
t
->
it_sched_expires
==
0
||
if
(
t
->
it_sched_expires
==
0
||
t
->
it_sched_expires
>
ns
)
{
t
->
it_sched_expires
>
ns
)
{
...
@@ -566,6 +566,9 @@ static void arm_timer(struct k_itimer *timer, union cpu_time_count now)
...
@@ -566,6 +566,9 @@ static void arm_timer(struct k_itimer *timer, union cpu_time_count now)
struct
cpu_timer_list
*
next
;
struct
cpu_timer_list
*
next
;
unsigned
long
i
;
unsigned
long
i
;
if
(
CPUCLOCK_PERTHREAD
(
timer
->
it_clock
)
&&
(
p
->
flags
&
PF_EXITING
))
return
;
head
=
(
CPUCLOCK_PERTHREAD
(
timer
->
it_clock
)
?
head
=
(
CPUCLOCK_PERTHREAD
(
timer
->
it_clock
)
?
p
->
cpu_timers
:
p
->
signal
->
cpu_timers
);
p
->
cpu_timers
:
p
->
signal
->
cpu_timers
);
head
+=
CPUCLOCK_WHICH
(
timer
->
it_clock
);
head
+=
CPUCLOCK_WHICH
(
timer
->
it_clock
);
...
@@ -576,17 +579,15 @@ static void arm_timer(struct k_itimer *timer, union cpu_time_count now)
...
@@ -576,17 +579,15 @@ static void arm_timer(struct k_itimer *timer, union cpu_time_count now)
listpos
=
head
;
listpos
=
head
;
if
(
CPUCLOCK_WHICH
(
timer
->
it_clock
)
==
CPUCLOCK_SCHED
)
{
if
(
CPUCLOCK_WHICH
(
timer
->
it_clock
)
==
CPUCLOCK_SCHED
)
{
list_for_each_entry
(
next
,
head
,
entry
)
{
list_for_each_entry
(
next
,
head
,
entry
)
{
if
(
next
->
expires
.
sched
>
nt
->
expires
.
sched
)
{
if
(
next
->
expires
.
sched
>
nt
->
expires
.
sched
)
listpos
=
&
next
->
entry
;
break
;
break
;
}
listpos
=
&
next
->
entry
;
}
}
}
else
{
}
else
{
list_for_each_entry
(
next
,
head
,
entry
)
{
list_for_each_entry
(
next
,
head
,
entry
)
{
if
(
cputime_gt
(
next
->
expires
.
cpu
,
nt
->
expires
.
cpu
))
{
if
(
cputime_gt
(
next
->
expires
.
cpu
,
nt
->
expires
.
cpu
))
listpos
=
&
next
->
entry
;
break
;
break
;
}
listpos
=
&
next
->
entry
;
}
}
}
}
list_add
(
&
nt
->
entry
,
listpos
);
list_add
(
&
nt
->
entry
,
listpos
);
...
@@ -730,8 +731,14 @@ int posix_cpu_timer_set(struct k_itimer *timer, int flags,
...
@@ -730,8 +731,14 @@ int posix_cpu_timer_set(struct k_itimer *timer, int flags,
* Disarm any old timer after extracting its expiry time.
* Disarm any old timer after extracting its expiry time.
*/
*/
BUG_ON
(
!
irqs_disabled
());
BUG_ON
(
!
irqs_disabled
());
ret
=
0
;
spin_lock
(
&
p
->
sighand
->
siglock
);
spin_lock
(
&
p
->
sighand
->
siglock
);
old_expires
=
timer
->
it
.
cpu
.
expires
;
old_expires
=
timer
->
it
.
cpu
.
expires
;
if
(
unlikely
(
timer
->
it
.
cpu
.
firing
))
{
timer
->
it
.
cpu
.
firing
=
-
1
;
ret
=
TIMER_RETRY
;
}
else
list_del_init
(
&
timer
->
it
.
cpu
.
entry
);
list_del_init
(
&
timer
->
it
.
cpu
.
entry
);
spin_unlock
(
&
p
->
sighand
->
siglock
);
spin_unlock
(
&
p
->
sighand
->
siglock
);
...
@@ -780,7 +787,7 @@ int posix_cpu_timer_set(struct k_itimer *timer, int flags,
...
@@ -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.
* We are colliding with the timer actually firing.
* Punt after filling in the timer's old value, and
* Punt after filling in the timer's old value, and
...
@@ -788,8 +795,6 @@ int posix_cpu_timer_set(struct k_itimer *timer, int flags,
...
@@ -788,8 +795,6 @@ int posix_cpu_timer_set(struct k_itimer *timer, int flags,
* it as an overrun (thanks to bump_cpu_timer above).
* it as an overrun (thanks to bump_cpu_timer above).
*/
*/
read_unlock
(
&
tasklist_lock
);
read_unlock
(
&
tasklist_lock
);
timer
->
it
.
cpu
.
firing
=
-
1
;
ret
=
TIMER_RETRY
;
goto
out
;
goto
out
;
}
}
...
@@ -955,14 +960,16 @@ void posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec *itp)
...
@@ -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
,
static
void
check_thread_timers
(
struct
task_struct
*
tsk
,
struct
list_head
*
firing
)
struct
list_head
*
firing
)
{
{
int
maxfire
;
struct
list_head
*
timers
=
tsk
->
cpu_timers
;
struct
list_head
*
timers
=
tsk
->
cpu_timers
;
maxfire
=
20
;
tsk
->
it_prof_expires
=
cputime_zero
;
tsk
->
it_prof_expires
=
cputime_zero
;
while
(
!
list_empty
(
timers
))
{
while
(
!
list_empty
(
timers
))
{
struct
cpu_timer_list
*
t
=
list_entry
(
timers
->
next
,
struct
cpu_timer_list
*
t
=
list_entry
(
timers
->
next
,
struct
cpu_timer_list
,
struct
cpu_timer_list
,
entry
);
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
;
tsk
->
it_prof_expires
=
t
->
expires
.
cpu
;
break
;
break
;
}
}
...
@@ -971,12 +978,13 @@ static void check_thread_timers(struct task_struct *tsk,
...
@@ -971,12 +978,13 @@ static void check_thread_timers(struct task_struct *tsk,
}
}
++
timers
;
++
timers
;
maxfire
=
20
;
tsk
->
it_virt_expires
=
cputime_zero
;
tsk
->
it_virt_expires
=
cputime_zero
;
while
(
!
list_empty
(
timers
))
{
while
(
!
list_empty
(
timers
))
{
struct
cpu_timer_list
*
t
=
list_entry
(
timers
->
next
,
struct
cpu_timer_list
*
t
=
list_entry
(
timers
->
next
,
struct
cpu_timer_list
,
struct
cpu_timer_list
,
entry
);
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
;
tsk
->
it_virt_expires
=
t
->
expires
.
cpu
;
break
;
break
;
}
}
...
@@ -985,12 +993,13 @@ static void check_thread_timers(struct task_struct *tsk,
...
@@ -985,12 +993,13 @@ static void check_thread_timers(struct task_struct *tsk,
}
}
++
timers
;
++
timers
;
maxfire
=
20
;
tsk
->
it_sched_expires
=
0
;
tsk
->
it_sched_expires
=
0
;
while
(
!
list_empty
(
timers
))
{
while
(
!
list_empty
(
timers
))
{
struct
cpu_timer_list
*
t
=
list_entry
(
timers
->
next
,
struct
cpu_timer_list
*
t
=
list_entry
(
timers
->
next
,
struct
cpu_timer_list
,
struct
cpu_timer_list
,
entry
);
entry
);
if
(
tsk
->
sched_time
<
t
->
expires
.
sched
)
{
if
(
!--
maxfire
||
tsk
->
sched_time
<
t
->
expires
.
sched
)
{
tsk
->
it_sched_expires
=
t
->
expires
.
sched
;
tsk
->
it_sched_expires
=
t
->
expires
.
sched
;
break
;
break
;
}
}
...
@@ -1007,6 +1016,7 @@ static void check_thread_timers(struct task_struct *tsk,
...
@@ -1007,6 +1016,7 @@ static void check_thread_timers(struct task_struct *tsk,
static
void
check_process_timers
(
struct
task_struct
*
tsk
,
static
void
check_process_timers
(
struct
task_struct
*
tsk
,
struct
list_head
*
firing
)
struct
list_head
*
firing
)
{
{
int
maxfire
;
struct
signal_struct
*
const
sig
=
tsk
->
signal
;
struct
signal_struct
*
const
sig
=
tsk
->
signal
;
cputime_t
utime
,
stime
,
ptime
,
virt_expires
,
prof_expires
;
cputime_t
utime
,
stime
,
ptime
,
virt_expires
,
prof_expires
;
unsigned
long
long
sched_time
,
sched_expires
;
unsigned
long
long
sched_time
,
sched_expires
;
...
@@ -1039,12 +1049,13 @@ static void check_process_timers(struct task_struct *tsk,
...
@@ -1039,12 +1049,13 @@ static void check_process_timers(struct task_struct *tsk,
}
while
(
t
!=
tsk
);
}
while
(
t
!=
tsk
);
ptime
=
cputime_add
(
utime
,
stime
);
ptime
=
cputime_add
(
utime
,
stime
);
maxfire
=
20
;
prof_expires
=
cputime_zero
;
prof_expires
=
cputime_zero
;
while
(
!
list_empty
(
timers
))
{
while
(
!
list_empty
(
timers
))
{
struct
cpu_timer_list
*
t
=
list_entry
(
timers
->
next
,
struct
cpu_timer_list
*
t
=
list_entry
(
timers
->
next
,
struct
cpu_timer_list
,
struct
cpu_timer_list
,
entry
);
entry
);
if
(
cputime_lt
(
ptime
,
t
->
expires
.
cpu
))
{
if
(
!--
maxfire
||
cputime_lt
(
ptime
,
t
->
expires
.
cpu
))
{
prof_expires
=
t
->
expires
.
cpu
;
prof_expires
=
t
->
expires
.
cpu
;
break
;
break
;
}
}
...
@@ -1053,12 +1064,13 @@ static void check_process_timers(struct task_struct *tsk,
...
@@ -1053,12 +1064,13 @@ static void check_process_timers(struct task_struct *tsk,
}
}
++
timers
;
++
timers
;
maxfire
=
20
;
virt_expires
=
cputime_zero
;
virt_expires
=
cputime_zero
;
while
(
!
list_empty
(
timers
))
{
while
(
!
list_empty
(
timers
))
{
struct
cpu_timer_list
*
t
=
list_entry
(
timers
->
next
,
struct
cpu_timer_list
*
t
=
list_entry
(
timers
->
next
,
struct
cpu_timer_list
,
struct
cpu_timer_list
,
entry
);
entry
);
if
(
cputime_lt
(
utime
,
t
->
expires
.
cpu
))
{
if
(
!--
maxfire
||
cputime_lt
(
utime
,
t
->
expires
.
cpu
))
{
virt_expires
=
t
->
expires
.
cpu
;
virt_expires
=
t
->
expires
.
cpu
;
break
;
break
;
}
}
...
@@ -1067,12 +1079,13 @@ static void check_process_timers(struct task_struct *tsk,
...
@@ -1067,12 +1079,13 @@ static void check_process_timers(struct task_struct *tsk,
}
}
++
timers
;
++
timers
;
maxfire
=
20
;
sched_expires
=
0
;
sched_expires
=
0
;
while
(
!
list_empty
(
timers
))
{
while
(
!
list_empty
(
timers
))
{
struct
cpu_timer_list
*
t
=
list_entry
(
timers
->
next
,
struct
cpu_timer_list
*
t
=
list_entry
(
timers
->
next
,
struct
cpu_timer_list
,
struct
cpu_timer_list
,
entry
);
entry
);
if
(
sched_time
<
t
->
expires
.
sched
)
{
if
(
!--
maxfire
||
sched_time
<
t
->
expires
.
sched
)
{
sched_expires
=
t
->
expires
.
sched
;
sched_expires
=
t
->
expires
.
sched
;
break
;
break
;
}
}
...
@@ -1155,6 +1168,9 @@ static void check_process_timers(struct task_struct *tsk,
...
@@ -1155,6 +1168,9 @@ static void check_process_timers(struct task_struct *tsk,
unsigned
long
long
sched_left
,
sched
;
unsigned
long
long
sched_left
,
sched
;
const
unsigned
int
nthreads
=
atomic_read
(
&
sig
->
live
);
const
unsigned
int
nthreads
=
atomic_read
(
&
sig
->
live
);
if
(
!
nthreads
)
return
;
prof_left
=
cputime_sub
(
prof_expires
,
utime
);
prof_left
=
cputime_sub
(
prof_expires
,
utime
);
prof_left
=
cputime_sub
(
prof_left
,
stime
);
prof_left
=
cputime_sub
(
prof_left
,
stime
);
prof_left
=
cputime_div
(
prof_left
,
nthreads
);
prof_left
=
cputime_div
(
prof_left
,
nthreads
);
...
@@ -1191,7 +1207,7 @@ static void check_process_timers(struct task_struct *tsk,
...
@@ -1191,7 +1207,7 @@ static void check_process_timers(struct task_struct *tsk,
do
{
do
{
t
=
next_thread
(
t
);
t
=
next_thread
(
t
);
}
while
(
unlikely
(
t
->
exit_state
));
}
while
(
unlikely
(
t
->
flags
&
PF_EXITING
));
}
while
(
t
!=
tsk
);
}
while
(
t
!=
tsk
);
}
}
}
}
...
...
kernel/posix-timers.c
浏览文件 @
4c2cb58c
...
@@ -1157,7 +1157,7 @@ static inline void itimer_delete(struct k_itimer *timer)
...
@@ -1157,7 +1157,7 @@ static inline void itimer_delete(struct k_itimer *timer)
}
}
/*
/*
* 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.
* references to the shared signal_struct.
*/
*/
void
exit_itimers
(
struct
signal_struct
*
sig
)
void
exit_itimers
(
struct
signal_struct
*
sig
)
...
...
kernel/sched.c
浏览文件 @
4c2cb58c
...
@@ -3879,6 +3879,7 @@ EXPORT_SYMBOL(cpu_present_map);
...
@@ -3879,6 +3879,7 @@ EXPORT_SYMBOL(cpu_present_map);
#ifndef CONFIG_SMP
#ifndef CONFIG_SMP
cpumask_t
cpu_online_map
=
CPU_MASK_ALL
;
cpumask_t
cpu_online_map
=
CPU_MASK_ALL
;
EXPORT_SYMBOL_GPL
(
cpu_online_map
);
cpumask_t
cpu_possible_map
=
CPU_MASK_ALL
;
cpumask_t
cpu_possible_map
=
CPU_MASK_ALL
;
#endif
#endif
...
...
kernel/signal.c
浏览文件 @
4c2cb58c
...
@@ -397,20 +397,8 @@ void __exit_signal(struct task_struct *tsk)
...
@@ -397,20 +397,8 @@ void __exit_signal(struct task_struct *tsk)
flush_sigqueue
(
&
tsk
->
pending
);
flush_sigqueue
(
&
tsk
->
pending
);
if
(
sig
)
{
if
(
sig
)
{
/*
/*
* We are cleaning up the signal_struct here. We delayed
* We are cleaning up the signal_struct here.
* 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.
*/
exit_itimers
(
sig
);
exit_thread_group_keys
(
sig
);
exit_thread_group_keys
(
sig
);
kmem_cache_free
(
signal_cachep
,
sig
);
kmem_cache_free
(
signal_cachep
,
sig
);
}
}
...
...
lib/idr.c
浏览文件 @
4c2cb58c
...
@@ -345,6 +345,19 @@ void idr_remove(struct idr *idp, int id)
...
@@ -345,6 +345,19 @@ void idr_remove(struct idr *idp, int id)
}
}
EXPORT_SYMBOL
(
idr_remove
);
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
* idr_find - return pointer for given id
* @idp: idr handle
* @idp: idr handle
...
...
mm/hugetlb.c
浏览文件 @
4c2cb58c
...
@@ -394,6 +394,28 @@ int hugetlb_prefault(struct address_space *mapping, struct vm_area_struct *vma)
...
@@ -394,6 +394,28 @@ int hugetlb_prefault(struct address_space *mapping, struct vm_area_struct *vma)
return
ret
;
return
ret
;
}
}
/*
* On ia64 at least, it is possible to receive a hugetlb fault from a
* stale zero entry left in the TLB from earlier hardware prefetching.
* Low-level arch code should already have flushed the stale entry as
* part of its fault handling, but we do need to accept this minor fault
* and return successfully. Whereas the "normal" case is that this is
* an access to a hugetlb page which has been truncated off since mmap.
*/
int
hugetlb_fault
(
struct
mm_struct
*
mm
,
struct
vm_area_struct
*
vma
,
unsigned
long
address
,
int
write_access
)
{
int
ret
=
VM_FAULT_SIGBUS
;
pte_t
*
pte
;
spin_lock
(
&
mm
->
page_table_lock
);
pte
=
huge_pte_offset
(
mm
,
address
);
if
(
pte
&&
!
pte_none
(
*
pte
))
ret
=
VM_FAULT_MINOR
;
spin_unlock
(
&
mm
->
page_table_lock
);
return
ret
;
}
int
follow_hugetlb_page
(
struct
mm_struct
*
mm
,
struct
vm_area_struct
*
vma
,
int
follow_hugetlb_page
(
struct
mm_struct
*
mm
,
struct
vm_area_struct
*
vma
,
struct
page
**
pages
,
struct
vm_area_struct
**
vmas
,
struct
page
**
pages
,
struct
vm_area_struct
**
vmas
,
unsigned
long
*
position
,
int
*
length
,
int
i
)
unsigned
long
*
position
,
int
*
length
,
int
i
)
...
...
mm/memory.c
浏览文件 @
4c2cb58c
...
@@ -2045,18 +2045,8 @@ int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct * vma,
...
@@ -2045,18 +2045,8 @@ int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct * vma,
inc_page_state
(
pgfault
);
inc_page_state
(
pgfault
);
if
(
unlikely
(
is_vm_hugetlb_page
(
vma
)))
{
if
(
unlikely
(
is_vm_hugetlb_page
(
vma
)))
if
(
valid_hugetlb_file_off
(
vma
,
address
))
return
hugetlb_fault
(
mm
,
vma
,
address
,
write_access
);
/* We get here only if there was a stale(zero) TLB entry
* (because of HW prefetching).
* Low-level arch code (if needed) should have already
* purged the stale entry as part of this fault handling.
* Here we just return.
*/
return
VM_FAULT_MINOR
;
else
return
VM_FAULT_SIGBUS
;
/* mapping truncation does this. */
}
/*
/*
* We need the page table lock to synchronize with kswapd
* We need the page table lock to synchronize with kswapd
...
...
mm/page_alloc.c
浏览文件 @
4c2cb58c
...
@@ -1750,6 +1750,8 @@ inline void setup_pageset(struct per_cpu_pageset *p, unsigned long batch)
...
@@ -1750,6 +1750,8 @@ inline void setup_pageset(struct per_cpu_pageset *p, unsigned long batch)
{
{
struct
per_cpu_pages
*
pcp
;
struct
per_cpu_pages
*
pcp
;
memset
(
p
,
0
,
sizeof
(
*
p
));
pcp
=
&
p
->
pcp
[
0
];
/* hot */
pcp
=
&
p
->
pcp
[
0
];
/* hot */
pcp
->
count
=
0
;
pcp
->
count
=
0
;
pcp
->
low
=
2
*
batch
;
pcp
->
low
=
2
*
batch
;
...
...
net/802/tr.c
浏览文件 @
4c2cb58c
...
@@ -340,9 +340,10 @@ static void tr_add_rif_info(struct trh_hdr *trh, struct net_device *dev)
...
@@ -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
int
hash
,
rii_p
=
0
;
unsigned
long
flags
;
unsigned
long
flags
;
struct
rif_cache
*
entry
;
struct
rif_cache
*
entry
;
unsigned
char
saddr0
;
spin_lock_irqsave
(
&
rif_lock
,
flags
);
spin_lock_irqsave
(
&
rif_lock
,
flags
);
saddr0
=
trh
->
saddr
[
0
];
/*
/*
* Firstly see if the entry exists
* Firstly see if the entry exists
...
@@ -395,7 +396,6 @@ printk("adding rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n",
...
@@ -395,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
);
entry
->
rcf
=
trh
->
rcf
&
htons
((
unsigned
short
)
~
TR_RCF_BROADCAST_MASK
);
memcpy
(
&
(
entry
->
rseg
[
0
]),
&
(
trh
->
rseg
[
0
]),
8
*
sizeof
(
unsigned
short
));
memcpy
(
&
(
entry
->
rseg
[
0
]),
&
(
trh
->
rseg
[
0
]),
8
*
sizeof
(
unsigned
short
));
entry
->
local_ring
=
0
;
entry
->
local_ring
=
0
;
trh
->
saddr
[
0
]
|=
TR_RII
;
/* put the routing indicator back for tcpdump */
}
}
else
else
{
{
...
@@ -422,6 +422,7 @@ printk("updating rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n",
...
@@ -422,6 +422,7 @@ printk("updating rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n",
}
}
entry
->
last_used
=
jiffies
;
entry
->
last_used
=
jiffies
;
}
}
trh
->
saddr
[
0
]
=
saddr0
;
/* put the routing indicator back for tcpdump */
spin_unlock_irqrestore
(
&
rif_lock
,
flags
);
spin_unlock_irqrestore
(
&
rif_lock
,
flags
);
}
}
...
...
net/core/neighbour.c
浏览文件 @
4c2cb58c
...
@@ -175,39 +175,10 @@ static void pneigh_queue_purge(struct sk_buff_head *list)
...
@@ -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
;
int
i
;
write_lock_bh
(
&
tbl
->
lock
);
for
(
i
=
0
;
i
<=
tbl
->
hash_mask
;
i
++
)
{
for
(
i
=
0
;
i
<=
tbl
->
hash_mask
;
i
++
)
{
struct
neighbour
*
n
,
**
np
=
&
tbl
->
hash_buckets
[
i
];
struct
neighbour
*
n
,
**
np
=
&
tbl
->
hash_buckets
[
i
];
...
@@ -243,7 +214,19 @@ int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev)
...
@@ -243,7 +214,19 @@ int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev)
neigh_release
(
n
);
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
);
pneigh_ifdown
(
tbl
,
dev
);
write_unlock_bh
(
&
tbl
->
lock
);
write_unlock_bh
(
&
tbl
->
lock
);
...
@@ -732,6 +715,7 @@ static inline void neigh_add_timer(struct neighbour *n, unsigned long when)
...
@@ -732,6 +715,7 @@ static inline void neigh_add_timer(struct neighbour *n, unsigned long when)
if
(
unlikely
(
mod_timer
(
&
n
->
timer
,
when
)))
{
if
(
unlikely
(
mod_timer
(
&
n
->
timer
,
when
)))
{
printk
(
"NEIGH: BUG, double timer add, state is %x
\n
"
,
printk
(
"NEIGH: BUG, double timer add, state is %x
\n
"
,
n
->
nud_state
);
n
->
nud_state
);
dump_stack
();
}
}
}
}
...
@@ -815,10 +799,10 @@ static void neigh_timer_handler(unsigned long arg)
...
@@ -815,10 +799,10 @@ static void neigh_timer_handler(unsigned long arg)
}
}
if
(
neigh
->
nud_state
&
NUD_IN_TIMER
)
{
if
(
neigh
->
nud_state
&
NUD_IN_TIMER
)
{
neigh_hold
(
neigh
);
if
(
time_before
(
next
,
jiffies
+
HZ
/
2
))
if
(
time_before
(
next
,
jiffies
+
HZ
/
2
))
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
))
{
if
(
neigh
->
nud_state
&
(
NUD_INCOMPLETE
|
NUD_PROBE
))
{
struct
sk_buff
*
skb
=
skb_peek
(
&
neigh
->
arp_queue
);
struct
sk_buff
*
skb
=
skb_peek
(
&
neigh
->
arp_queue
);
...
...
net/core/skbuff.c
浏览文件 @
4c2cb58c
...
@@ -410,6 +410,9 @@ struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask)
...
@@ -410,6 +410,9 @@ struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask)
C
(
nfct
);
C
(
nfct
);
nf_conntrack_get
(
skb
->
nfct
);
nf_conntrack_get
(
skb
->
nfct
);
C
(
nfctinfo
);
C
(
nfctinfo
);
#if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE)
C
(
ipvs_property
);
#endif
#ifdef CONFIG_BRIDGE_NETFILTER
#ifdef CONFIG_BRIDGE_NETFILTER
C
(
nf_bridge
);
C
(
nf_bridge
);
nf_bridge_get
(
skb
->
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)
...
@@ -467,6 +470,9 @@ static void copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
new
->
nfct
=
old
->
nfct
;
new
->
nfct
=
old
->
nfct
;
nf_conntrack_get
(
old
->
nfct
);
nf_conntrack_get
(
old
->
nfct
);
new
->
nfctinfo
=
old
->
nfctinfo
;
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
#ifdef CONFIG_BRIDGE_NETFILTER
new
->
nf_bridge
=
old
->
nf_bridge
;
new
->
nf_bridge
=
old
->
nf_bridge
;
nf_bridge_get
(
old
->
nf_bridge
);
nf_bridge_get
(
old
->
nf_bridge
);
...
...
net/core/wireless.c
浏览文件 @
4c2cb58c
...
@@ -455,10 +455,15 @@ static inline struct iw_statistics *get_wireless_stats(struct net_device *dev)
...
@@ -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 */
/* Old location, field to be removed in next WE */
if
(
dev
->
get_wireless_stats
)
{
if
(
dev
->
get_wireless_stats
)
{
static
int
printed_message
;
if
(
!
printed_message
++
)
printk
(
KERN_DEBUG
"%s (WE) : Driver using old /proc/net/wireless support, please fix driver !
\n
"
,
printk
(
KERN_DEBUG
"%s (WE) : Driver using old /proc/net/wireless support, please fix driver !
\n
"
,
dev
->
name
);
dev
->
name
);
return
dev
->
get_wireless_stats
(
dev
);
return
dev
->
get_wireless_stats
(
dev
);
}
}
/* Not found */
/* Not found */
return
(
struct
iw_statistics
*
)
NULL
;
return
(
struct
iw_statistics
*
)
NULL
;
}
}
...
...
net/dccp/ipv4.c
浏览文件 @
4c2cb58c
...
@@ -463,6 +463,7 @@ static int dccp_v4_send_response(struct sock *sk, struct request_sock *req,
...
@@ -463,6 +463,7 @@ static int dccp_v4_send_response(struct sock *sk, struct request_sock *req,
if
(
skb
!=
NULL
)
{
if
(
skb
!=
NULL
)
{
const
struct
inet_request_sock
*
ireq
=
inet_rsk
(
req
);
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
,
err
=
ip_build_and_send_pkt
(
skb
,
sk
,
ireq
->
loc_addr
,
ireq
->
rmt_addr
,
ireq
->
rmt_addr
,
ireq
->
opt
);
ireq
->
opt
);
...
@@ -647,6 +648,7 @@ int dccp_v4_send_reset(struct sock *sk, enum dccp_reset_codes code)
...
@@ -647,6 +648,7 @@ int dccp_v4_send_reset(struct sock *sk, enum dccp_reset_codes code)
if
(
skb
!=
NULL
)
{
if
(
skb
!=
NULL
)
{
const
struct
inet_sock
*
inet
=
inet_sk
(
sk
);
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
,
err
=
ip_build_and_send_pkt
(
skb
,
sk
,
inet
->
saddr
,
inet
->
daddr
,
NULL
);
inet
->
saddr
,
inet
->
daddr
,
NULL
);
if
(
err
==
NET_XMIT_CN
)
if
(
err
==
NET_XMIT_CN
)
...
...
net/dccp/output.c
浏览文件 @
4c2cb58c
...
@@ -62,10 +62,8 @@ int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)
...
@@ -62,10 +62,8 @@ int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)
skb
->
h
.
raw
=
skb_push
(
skb
,
dccp_header_size
);
skb
->
h
.
raw
=
skb_push
(
skb
,
dccp_header_size
);
dh
=
dccp_hdr
(
skb
);
dh
=
dccp_hdr
(
skb
);
/*
* Data packets are not cloned as they are never retransmitted
if
(
!
skb
->
sk
)
*/
if
(
skb_cloned
(
skb
))
skb_set_owner_w
(
skb
,
sk
);
skb_set_owner_w
(
skb
,
sk
);
/* Build DCCP header and checksum it. */
/* Build DCCP header and checksum it. */
...
@@ -102,6 +100,7 @@ int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)
...
@@ -102,6 +100,7 @@ int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)
DCCP_INC_STATS
(
DCCP_MIB_OUTSEGS
);
DCCP_INC_STATS
(
DCCP_MIB_OUTSEGS
);
memset
(
&
(
IPCB
(
skb
)
->
opt
),
0
,
sizeof
(
IPCB
(
skb
)
->
opt
));
err
=
ip_queue_xmit
(
skb
,
0
);
err
=
ip_queue_xmit
(
skb
,
0
);
if
(
err
<=
0
)
if
(
err
<=
0
)
return
err
;
return
err
;
...
@@ -243,7 +242,8 @@ int dccp_write_xmit(struct sock *sk, struct sk_buff *skb, long *timeo)
...
@@ -243,7 +242,8 @@ int dccp_write_xmit(struct sock *sk, struct sk_buff *skb, long *timeo)
err
=
dccp_transmit_skb
(
sk
,
skb
);
err
=
dccp_transmit_skb
(
sk
,
skb
);
ccid_hc_tx_packet_sent
(
dp
->
dccps_hc_tx_ccid
,
sk
,
0
,
len
);
ccid_hc_tx_packet_sent
(
dp
->
dccps_hc_tx_ccid
,
sk
,
0
,
len
);
}
}
else
kfree_skb
(
skb
);
return
err
;
return
err
;
}
}
...
...
net/dccp/proto.c
浏览文件 @
4c2cb58c
...
@@ -402,8 +402,6 @@ int dccp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
...
@@ -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
* This bug was _quickly_ found & fixed by just looking at an OSTRA
* generated callgraph 8) -acme
* generated callgraph 8) -acme
*/
*/
if
(
rc
!=
0
)
goto
out_discard
;
out_release:
out_release:
release_sock
(
sk
);
release_sock
(
sk
);
return
rc
?
:
len
;
return
rc
?
:
len
;
...
...
net/ipv4/ip_output.c
浏览文件 @
4c2cb58c
...
@@ -391,6 +391,9 @@ static void ip_copy_metadata(struct sk_buff *to, struct sk_buff *from)
...
@@ -391,6 +391,9 @@ static void ip_copy_metadata(struct sk_buff *to, struct sk_buff *from)
to
->
nfct
=
from
->
nfct
;
to
->
nfct
=
from
->
nfct
;
nf_conntrack_get
(
to
->
nfct
);
nf_conntrack_get
(
to
->
nfct
);
to
->
nfctinfo
=
from
->
nfctinfo
;
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
#ifdef CONFIG_BRIDGE_NETFILTER
nf_bridge_put
(
to
->
nf_bridge
);
nf_bridge_put
(
to
->
nf_bridge
);
to
->
nf_bridge
=
from
->
nf_bridge
;
to
->
nf_bridge
=
from
->
nf_bridge
;
...
...
net/ipv4/tcp_output.c
浏览文件 @
4c2cb58c
...
@@ -435,17 +435,7 @@ int tcp_fragment(struct sock *sk, struct sk_buff *skb, u32 len, unsigned int mss
...
@@ -435,17 +435,7 @@ int tcp_fragment(struct sock *sk, struct sk_buff *skb, u32 len, unsigned int mss
int
nsize
,
old_factor
;
int
nsize
,
old_factor
;
u16
flags
;
u16
flags
;
if
(
unlikely
(
len
>=
skb
->
len
))
{
BUG_ON
(
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
;
}
nsize
=
skb_headlen
(
skb
)
-
len
;
nsize
=
skb_headlen
(
skb
)
-
len
;
if
(
nsize
<
0
)
if
(
nsize
<
0
)
nsize
=
0
;
nsize
=
0
;
...
...
net/ipv6/ip6_flowlabel.c
浏览文件 @
4c2cb58c
...
@@ -483,7 +483,7 @@ int ipv6_flowlabel_opt(struct sock *sk, char __user *optval, int optlen)
...
@@ -483,7 +483,7 @@ int ipv6_flowlabel_opt(struct sock *sk, char __user *optval, int optlen)
goto
done
;
goto
done
;
}
}
fl1
=
sfl
->
fl
;
fl1
=
sfl
->
fl
;
atomic_inc
(
&
fl
->
users
);
atomic_inc
(
&
fl
1
->
users
);
break
;
break
;
}
}
}
}
...
...
net/sunrpc/svcsock.c
浏览文件 @
4c2cb58c
...
@@ -584,7 +584,7 @@ svc_udp_recvfrom(struct svc_rqst *rqstp)
...
@@ -584,7 +584,7 @@ svc_udp_recvfrom(struct svc_rqst *rqstp)
struct
timeval
tv
;
struct
timeval
tv
;
tv
.
tv_sec
=
xtime
.
tv_sec
;
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
);
skb_set_timestamp
(
skb
,
&
tv
);
/* Don't enable netstamp, sunrpc doesn't
/* Don't enable netstamp, sunrpc doesn't
need that much accuracy */
need that much accuracy */
...
...
security/selinux/selinuxfs.c
浏览文件 @
4c2cb58c
...
@@ -879,7 +879,7 @@ static ssize_t sel_commit_bools_write(struct file *filep,
...
@@ -879,7 +879,7 @@ static ssize_t sel_commit_bools_write(struct file *filep,
if
(
sscanf
(
page
,
"%d"
,
&
new_value
)
!=
1
)
if
(
sscanf
(
page
,
"%d"
,
&
new_value
)
!=
1
)
goto
out
;
goto
out
;
if
(
new_value
)
{
if
(
new_value
&&
bool_pending_values
)
{
security_set_bools
(
bool_num
,
bool_pending_values
);
security_set_bools
(
bool_num
,
bool_pending_values
);
}
}
...
@@ -952,6 +952,7 @@ static int sel_make_bools(void)
...
@@ -952,6 +952,7 @@ static int sel_make_bools(void)
/* remove any existing files */
/* remove any existing files */
kfree
(
bool_pending_values
);
kfree
(
bool_pending_values
);
bool_pending_values
=
NULL
;
sel_remove_bools
(
dir
);
sel_remove_bools
(
dir
);
...
@@ -1002,6 +1003,7 @@ static int sel_make_bools(void)
...
@@ -1002,6 +1003,7 @@ static int sel_make_bools(void)
}
}
return
ret
;
return
ret
;
err:
err:
kfree
(
values
);
d_genocide
(
dir
);
d_genocide
(
dir
);
ret
=
-
ENOMEM
;
ret
=
-
ENOMEM
;
goto
out
;
goto
out
;
...
...
security/selinux/ss/policydb.c
浏览文件 @
4c2cb58c
...
@@ -650,8 +650,10 @@ void policydb_destroy(struct policydb *p)
...
@@ -650,8 +650,10 @@ void policydb_destroy(struct policydb *p)
}
}
if
(
lrt
)
kfree
(
lrt
);
if
(
lrt
)
kfree
(
lrt
);
if
(
p
->
type_attr_map
)
{
for
(
i
=
0
;
i
<
p
->
p_types
.
nprim
;
i
++
)
for
(
i
=
0
;
i
<
p
->
p_types
.
nprim
;
i
++
)
ebitmap_destroy
(
&
p
->
type_attr_map
[
i
]);
ebitmap_destroy
(
&
p
->
type_attr_map
[
i
]);
}
kfree
(
p
->
type_attr_map
);
kfree
(
p
->
type_attr_map
);
return
;
return
;
...
...
sound/core/init.c
浏览文件 @
4c2cb58c
...
@@ -828,6 +828,7 @@ static int snd_generic_suspend(struct device *dev, pm_message_t state, u32 level
...
@@ -828,6 +828,7 @@ static int snd_generic_suspend(struct device *dev, pm_message_t state, u32 level
card
=
get_snd_generic_card
(
dev
);
card
=
get_snd_generic_card
(
dev
);
if
(
card
->
power_state
==
SNDRV_CTL_POWER_D3hot
)
if
(
card
->
power_state
==
SNDRV_CTL_POWER_D3hot
)
return
0
;
return
0
;
if
(
card
->
pm_suspend
)
card
->
pm_suspend
(
card
,
PMSG_SUSPEND
);
card
->
pm_suspend
(
card
,
PMSG_SUSPEND
);
snd_power_change_state
(
card
,
SNDRV_CTL_POWER_D3hot
);
snd_power_change_state
(
card
,
SNDRV_CTL_POWER_D3hot
);
return
0
;
return
0
;
...
@@ -843,6 +844,7 @@ static int snd_generic_resume(struct device *dev, u32 level)
...
@@ -843,6 +844,7 @@ static int snd_generic_resume(struct device *dev, u32 level)
card
=
get_snd_generic_card
(
dev
);
card
=
get_snd_generic_card
(
dev
);
if
(
card
->
power_state
==
SNDRV_CTL_POWER_D0
)
if
(
card
->
power_state
==
SNDRV_CTL_POWER_D0
)
return
0
;
return
0
;
if
(
card
->
pm_suspend
)
card
->
pm_resume
(
card
);
card
->
pm_resume
(
card
);
snd_power_change_state
(
card
,
SNDRV_CTL_POWER_D0
);
snd_power_change_state
(
card
,
SNDRV_CTL_POWER_D0
);
return
0
;
return
0
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录