Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
OpenBMC Firmware
talos-obmc-linux
Commits
572e432e
Commit
572e432e
authored
18 years ago
by
Jeff Garzik
Browse files
Options
Download
Plain Diff
Merge branch 'master' into upstream
parents
d11ea48a
e3f2ddea
Changes
82
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
229 additions
and
130 deletions
+229
-130
Documentation/feature-removal-schedule.txt
Documentation/feature-removal-schedule.txt
+16
-0
Documentation/x86_64/boot-options.txt
Documentation/x86_64/boot-options.txt
+7
-0
arch/i386/kernel/process.c
arch/i386/kernel/process.c
+2
-2
arch/i386/kernel/time.c
arch/i386/kernel/time.c
+1
-1
arch/i386/kernel/traps.c
arch/i386/kernel/traps.c
+14
-3
arch/s390/defconfig
arch/s390/defconfig
+35
-9
arch/sparc/kernel/time.c
arch/sparc/kernel/time.c
+42
-32
arch/sparc64/mm/fault.c
arch/sparc64/mm/fault.c
+3
-0
arch/x86_64/ia32/ia32entry.S
arch/x86_64/ia32/ia32entry.S
+1
-1
arch/x86_64/kernel/time.c
arch/x86_64/kernel/time.c
+1
-1
arch/x86_64/kernel/traps.c
arch/x86_64/kernel/traps.c
+16
-6
block/blktrace.c
block/blktrace.c
+1
-1
block/cfq-iosched.c
block/cfq-iosched.c
+1
-1
drivers/block/cciss.c
drivers/block/cciss.c
+45
-41
drivers/bluetooth/hci_usb.c
drivers/bluetooth/hci_usb.c
+20
-5
drivers/cpufreq/cpufreq.c
drivers/cpufreq/cpufreq.c
+18
-22
drivers/cpufreq/cpufreq_conservative.c
drivers/cpufreq/cpufreq_conservative.c
+0
-2
drivers/cpufreq/cpufreq_ondemand.c
drivers/cpufreq/cpufreq_ondemand.c
+2
-2
drivers/cpufreq/cpufreq_userspace.c
drivers/cpufreq/cpufreq_userspace.c
+3
-0
drivers/ide/ide-disk.c
drivers/ide/ide-disk.c
+1
-1
No files found.
Documentation/feature-removal-schedule.txt
View file @
572e432e
...
...
@@ -258,3 +258,19 @@ Why: These drivers never compiled since they were added to the kernel
Who: Jean Delvare <khali@linux-fr.org>
---------------------------
What: Bridge netfilter deferred IPv4/IPv6 output hook calling
When: January 2007
Why: The deferred output hooks are a layering violation causing unusual
and broken behaviour on bridge devices. Examples of things they
break include QoS classifation using the MARK or CLASSIFY targets,
the IPsec policy match and connection tracking with VLANs on a
bridge. Their only use is to enable bridge output port filtering
within iptables with the physdev match, which can also be done by
combining iptables and ebtables using netfilter marks. Until it
will get removed the hook deferral is disabled by default and is
only enabled when needed.
Who: Patrick McHardy <kaber@trash.net>
---------------------------
This diff is collapsed.
Click to expand it.
Documentation/x86_64/boot-options.txt
View file @
572e432e
...
...
@@ -238,6 +238,13 @@ Debugging
pagefaulttrace Dump all page faults. Only useful for extreme debugging
and will create a lot of output.
call_trace=[old|both|newfallback|new]
old: use old inexact backtracer
new: use new exact dwarf2 unwinder
both: print entries from both
newfallback: use new unwinder but fall back to old if it gets
stuck (default)
Misc
noreplacement Don't replace instructions with more appropriate ones
...
...
This diff is collapsed.
Click to expand it.
arch/i386/kernel/process.c
View file @
572e432e
...
...
@@ -690,8 +690,8 @@ struct task_struct fastcall * __switch_to(struct task_struct *prev_p, struct tas
/*
* Now maybe handle debug registers and/or IO bitmaps
*/
if
(
unlikely
((
task_thread_info
(
next_p
)
->
flags
&
_TIF_WORK_CTXSW
)
)
||
test_tsk_thread_flag
(
prev_p
,
TIF_IO_BITMAP
))
if
(
unlikely
((
task_thread_info
(
next_p
)
->
flags
&
_TIF_WORK_CTXSW
)
||
test_tsk_thread_flag
(
prev_p
,
TIF_IO_BITMAP
))
)
__switch_to_xtra
(
next_p
,
tss
);
disable_tsc
(
prev_p
,
next_p
);
...
...
This diff is collapsed.
Click to expand it.
arch/i386/kernel/time.c
View file @
572e432e
...
...
@@ -135,7 +135,7 @@ unsigned long profile_pc(struct pt_regs *regs)
{
unsigned
long
pc
=
instruction_pointer
(
regs
);
if
(
in_lock_functions
(
pc
))
if
(
!
user_mode_vm
(
regs
)
&&
in_lock_functions
(
pc
))
return
*
(
unsigned
long
*
)(
regs
->
ebp
+
4
);
return
pc
;
...
...
This diff is collapsed.
Click to expand it.
arch/i386/kernel/traps.c
View file @
572e432e
...
...
@@ -187,10 +187,21 @@ static void show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs,
if
(
unwind_init_blocked
(
&
info
,
task
)
==
0
)
unw_ret
=
show_trace_unwind
(
&
info
,
log_lvl
);
}
if
(
unw_ret
>
0
)
{
if
(
call_trace
>
0
)
if
(
unw_ret
>
0
&&
!
arch_unw_user_mode
(
&
info
))
{
#ifdef CONFIG_STACK_UNWIND
print_symbol
(
"DWARF2 unwinder stuck at %s
\n
"
,
UNW_PC
(
info
.
regs
));
if
(
call_trace
==
1
)
{
printk
(
"Leftover inexact backtrace:
\n
"
);
if
(
UNW_SP
(
info
.
regs
))
stack
=
(
void
*
)
UNW_SP
(
info
.
regs
);
}
else
if
(
call_trace
>
1
)
return
;
printk
(
"%sLegacy call trace:
\n
"
,
log_lvl
);
else
printk
(
"Full inexact backtrace again:
\n
"
);
#else
printk
(
"Inexact backtrace:
\n
"
);
#endif
}
}
...
...
This diff is collapsed.
Click to expand it.
arch/s390/defconfig
View file @
572e432e
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.1
7
-rc
1
#
Mon Apr 3 14:34:15
2006
# Linux kernel version: 2.6.1
8
-rc
2
#
Thu Jul 27 13:51:07
2006
#
CONFIG_MMU=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_S390=y
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
# Code maturity level options
...
...
@@ -25,6 +28,7 @@ CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
CONFIG_SYSCTL=y
CONFIG_AUDIT=y
# CONFIG_AUDITSYSCALL is not set
...
...
@@ -43,10 +47,12 @@ CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y
CONFIG_RT_MUTEXES=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SHMEM=y
CONFIG_SLAB=y
CONFIG_VM_EVENT_COUNTERS=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
# CONFIG_SLOB is not set
...
...
@@ -94,7 +100,6 @@ CONFIG_HOTPLUG_CPU=y
CONFIG_DEFAULT_MIGRATION_COST=1000000
CONFIG_COMPAT=y
CONFIG_SYSVIPC_COMPAT=y
CONFIG_BINFMT_ELF32=y
#
# Code generation options
...
...
@@ -115,6 +120,7 @@ CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4
CONFIG_RESOURCES_64BIT=y
#
# I/O subsystem configuration
...
...
@@ -142,6 +148,7 @@ CONFIG_VIRT_CPU_ACCOUNTING=y
# CONFIG_APPLDATA_BASE is not set
CONFIG_NO_IDLE_HZ=y
CONFIG_NO_IDLE_HZ_INIT=y
CONFIG_S390_HYPFS_FS=y
CONFIG_KEXEC=y
#
...
...
@@ -174,6 +181,8 @@ CONFIG_IP_FIB_HASH=y
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_XFRM_TUNNEL is not set
# CONFIG_INET_TUNNEL is not set
CONFIG_INET_XFRM_MODE_TRANSPORT=y
CONFIG_INET_XFRM_MODE_TUNNEL=y
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
# CONFIG_TCP_CONG_ADVANCED is not set
...
...
@@ -186,7 +195,10 @@ CONFIG_IPV6=y
# CONFIG_INET6_IPCOMP is not set
# CONFIG_INET6_XFRM_TUNNEL is not set
# CONFIG_INET6_TUNNEL is not set
CONFIG_INET6_XFRM_MODE_TRANSPORT=y
CONFIG_INET6_XFRM_MODE_TUNNEL=y
# CONFIG_IPV6_TUNNEL is not set
# CONFIG_NETWORK_SECMARK is not set
# CONFIG_NETFILTER is not set
#
...
...
@@ -263,6 +275,7 @@ CONFIG_NET_ESTIMATOR=y
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_NET_TCPPROBE is not set
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
...
...
@@ -276,6 +289,7 @@ CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
# CONFIG_FW_LOADER is not set
# CONFIG_DEBUG_DRIVER is not set
CONFIG_SYS_HYPERVISOR=y
#
# Connector - unified userspace <-> kernelspace linker
...
...
@@ -334,6 +348,7 @@ CONFIG_BLK_DEV_NBD=m
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
CONFIG_BLK_DEV_INITRD=y
# CONFIG_CDROM_PKTCDVD is not set
...
...
@@ -359,9 +374,7 @@ CONFIG_MD_LINEAR=m
CONFIG_MD_RAID0=m
CONFIG_MD_RAID1=m
# CONFIG_MD_RAID10 is not set
CONFIG_MD_RAID5=m
# CONFIG_MD_RAID5_RESHAPE is not set
# CONFIG_MD_RAID6 is not set
# CONFIG_MD_RAID456 is not set
CONFIG_MD_MULTIPATH=m
# CONFIG_MD_FAULTY is not set
CONFIG_BLK_DEV_DM=y
...
...
@@ -419,7 +432,8 @@ CONFIG_S390_TAPE_34XX=m
#
# Cryptographic devices
#
CONFIG_Z90CRYPT=m
CONFIG_ZCRYPT=m
# CONFIG_ZCRYPT_MONOLITHIC is not set
#
# Network device support
...
...
@@ -509,6 +523,7 @@ CONFIG_FS_MBCACHE=y
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
...
...
@@ -614,26 +629,36 @@ CONFIG_MSDOS_PARTITION=y
# Instrumentation Support
#
# CONFIG_PROFILING is not set
# CONFIG_STATISTICS is not set
CONFIG_STATISTICS=y
CONFIG_KPROBES=y
#
# Kernel hacking
#
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
# CONFIG_PRINTK_TIME is not set
CONFIG_MAGIC_SYSRQ=y
# CONFIG_UNUSED_SYMBOLS is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_LOG_BUF_SHIFT=17
# CONFIG_DETECT_SOFTLOCKUP is not set
# CONFIG_SCHEDSTATS is not set
# CONFIG_DEBUG_SLAB is not set
CONFIG_DEBUG_PREEMPT=y
CONFIG_DEBUG_MUTEXES=y
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_RT_MUTEX_TESTER is not set
CONFIG_DEBUG_SPINLOCK=y
CONFIG_DEBUG_MUTEXES=y
# CONFIG_DEBUG_RWSEMS is not set
# CONFIG_DEBUG_LOCK_ALLOC is not set
# CONFIG_PROVE_LOCKING is not set
CONFIG_DEBUG_SPINLOCK_SLEEP=y
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_DEBUG_KOBJECT is not set
# CONFIG_DEBUG_INFO is not set
CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_VM is not set
# CONFIG_FRAME_POINTER is not set
# CONFIG_UNWIND_INFO is not set
CONFIG_FORCED_INLINING=y
# CONFIG_RCU_TORTURE_TEST is not set
...
...
@@ -688,3 +713,4 @@ CONFIG_CRYPTO=y
# CONFIG_CRC16 is not set
CONFIG_CRC32=m
# CONFIG_LIBCRC32C is not set
CONFIG_PLIST=y
This diff is collapsed.
Click to expand it.
arch/sparc/kernel/time.c
View file @
572e432e
...
...
@@ -225,6 +225,32 @@ static __inline__ int has_low_battery(void)
return
(
data1
==
data2
);
/* Was the write blocked? */
}
static
void
__init
mostek_set_system_time
(
void
)
{
unsigned
int
year
,
mon
,
day
,
hour
,
min
,
sec
;
struct
mostek48t02
*
mregs
;
mregs
=
(
struct
mostek48t02
*
)
mstk48t02_regs
;
if
(
!
mregs
)
{
prom_printf
(
"Something wrong, clock regs not mapped yet.
\n
"
);
prom_halt
();
}
spin_lock_irq
(
&
mostek_lock
);
mregs
->
creg
|=
MSTK_CREG_READ
;
sec
=
MSTK_REG_SEC
(
mregs
);
min
=
MSTK_REG_MIN
(
mregs
);
hour
=
MSTK_REG_HOUR
(
mregs
);
day
=
MSTK_REG_DOM
(
mregs
);
mon
=
MSTK_REG_MONTH
(
mregs
);
year
=
MSTK_CVT_YEAR
(
MSTK_REG_YEAR
(
mregs
)
);
xtime
.
tv_sec
=
mktime
(
year
,
mon
,
day
,
hour
,
min
,
sec
);
xtime
.
tv_nsec
=
(
INITIAL_JIFFIES
%
HZ
)
*
(
NSEC_PER_SEC
/
HZ
);
set_normalized_timespec
(
&
wall_to_monotonic
,
-
xtime
.
tv_sec
,
-
xtime
.
tv_nsec
);
mregs
->
creg
&=
~
MSTK_CREG_READ
;
spin_unlock_irq
(
&
mostek_lock
);
}
/* Probe for the real time clock chip on Sun4 */
static
__inline__
void
sun4_clock_probe
(
void
)
{
...
...
@@ -273,6 +299,7 @@ static __inline__ void sun4_clock_probe(void)
#endif
}
#ifndef CONFIG_SUN4
static
int
__devinit
clock_probe
(
struct
of_device
*
op
,
const
struct
of_device_id
*
match
)
{
struct
device_node
*
dp
=
op
->
node
;
...
...
@@ -307,6 +334,8 @@ static int __devinit clock_probe(struct of_device *op, const struct of_device_id
if
(
mostek_read
(
mstk48t02_regs
+
MOSTEK_SEC
)
&
MSTK_STOP
)
kick_start_clock
();
mostek_set_system_time
();
return
0
;
}
...
...
@@ -325,56 +354,37 @@ static struct of_platform_driver clock_driver = {
/* Probe for the mostek real time clock chip. */
static
void
clock_init
(
void
)
static
int
__init
clock_init
(
void
)
{
of_register_driver
(
&
clock_driver
,
&
of_bus_type
);
return
of_register_driver
(
&
clock_driver
,
&
of_bus_type
);
}
/* Must be after subsys_initcall() so that busses are probed. Must
* be before device_initcall() because things like the RTC driver
* need to see the clock registers.
*/
fs_initcall
(
clock_init
);
#endif
/* !CONFIG_SUN4 */
void
__init
sbus_time_init
(
void
)
{
unsigned
int
year
,
mon
,
day
,
hour
,
min
,
sec
;
struct
mostek48t02
*
mregs
;
#ifdef CONFIG_SUN4
int
temp
;
struct
intersil
*
iregs
;
#endif
BTFIXUPSET_CALL
(
bus_do_settimeofday
,
sbus_do_settimeofday
,
BTFIXUPCALL_NORM
);
btfixup
();
if
(
ARCH_SUN4
)
sun4_clock_probe
();
else
clock_init
();
sparc_init_timers
(
timer_interrupt
);
#ifdef CONFIG_SUN4
if
(
idprom
->
id_machtype
==
(
SM_SUN4
|
SM_4_330
))
{
#endif
mregs
=
(
struct
mostek48t02
*
)
mstk48t02_regs
;
if
(
!
mregs
)
{
prom_printf
(
"Something wrong, clock regs not mapped yet.
\n
"
);
prom_halt
();
}
spin_lock_irq
(
&
mostek_lock
);
mregs
->
creg
|=
MSTK_CREG_READ
;
sec
=
MSTK_REG_SEC
(
mregs
);
min
=
MSTK_REG_MIN
(
mregs
);
hour
=
MSTK_REG_HOUR
(
mregs
);
day
=
MSTK_REG_DOM
(
mregs
);
mon
=
MSTK_REG_MONTH
(
mregs
);
year
=
MSTK_CVT_YEAR
(
MSTK_REG_YEAR
(
mregs
)
);
xtime
.
tv_sec
=
mktime
(
year
,
mon
,
day
,
hour
,
min
,
sec
);
xtime
.
tv_nsec
=
(
INITIAL_JIFFIES
%
HZ
)
*
(
NSEC_PER_SEC
/
HZ
);
set_normalized_timespec
(
&
wall_to_monotonic
,
-
xtime
.
tv_sec
,
-
xtime
.
tv_nsec
);
mregs
->
creg
&=
~
MSTK_CREG_READ
;
spin_unlock_irq
(
&
mostek_lock
);
#ifdef CONFIG_SUN4
mostek_set_system_time
();
}
else
if
(
idprom
->
id_machtype
==
(
SM_SUN4
|
SM_4_260
)
)
{
/* initialise the intersil on sun4 */
unsigned
int
year
,
mon
,
day
,
hour
,
min
,
sec
;
int
temp
;
struct
intersil
*
iregs
;
iregs
=
intersil_clock
;
if
(
!
iregs
)
{
...
...
This diff is collapsed.
Click to expand it.
arch/sparc64/mm/fault.c
View file @
572e432e
...
...
@@ -19,6 +19,7 @@
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/kprobes.h>
#include <linux/kallsyms.h>
#include <asm/page.h>
#include <asm/pgtable.h>
...
...
@@ -132,6 +133,8 @@ static void bad_kernel_pc(struct pt_regs *regs, unsigned long vaddr)
printk
(
KERN_CRIT
"OOPS: Bogus kernel PC [%016lx] in fault handler
\n
"
,
regs
->
tpc
);
printk
(
KERN_CRIT
"OOPS: RPC [%016lx]
\n
"
,
regs
->
u_regs
[
15
]);
print_symbol
(
"RPC: <%s>
\n
"
,
regs
->
u_regs
[
15
]);
printk
(
KERN_CRIT
"OOPS: Fault was to vaddr[%lx]
\n
"
,
vaddr
);
__asm__
(
"mov %%sp, %0"
:
"=r"
(
ksp
));
show_stack
(
current
,
ksp
);
...
...
This diff is collapsed.
Click to expand it.
arch/x86_64/ia32/ia32entry.S
View file @
572e432e
...
...
@@ -103,7 +103,7 @@ ENTRY(ia32_sysenter_target)
pushq
%
rax
CFI_ADJUST_CFA_OFFSET
8
cld
SAVE_ARGS
0
,
0
,
1
SAVE_ARGS
0
,
0
,
0
/
*
no
need
to
do
an
access_ok
check
here
because
rbp
has
been
32
bit
zero
extended
*/
1
:
movl
(%
rbp
),%
r9d
...
...
This diff is collapsed.
Click to expand it.
arch/x86_64/kernel/time.c
View file @
572e432e
...
...
@@ -193,7 +193,7 @@ unsigned long profile_pc(struct pt_regs *regs)
is just accounted to the spinlock function.
Better would be to write these functions in assembler again
and check exactly. */
if
(
in_lock_functions
(
pc
))
{
if
(
!
user_mode
(
regs
)
&&
in_lock_functions
(
pc
))
{
char
*
v
=
*
(
char
**
)
regs
->
rsp
;
if
((
v
>=
_stext
&&
v
<=
_etext
)
||
(
v
>=
_sinittext
&&
v
<=
_einittext
)
||
...
...
This diff is collapsed.
Click to expand it.
arch/x86_64/kernel/traps.c
View file @
572e432e
...
...
@@ -254,7 +254,6 @@ void show_trace(struct task_struct *tsk, struct pt_regs *regs, unsigned long * s
{
const
unsigned
cpu
=
safe_smp_processor_id
();
unsigned
long
*
irqstack_end
=
(
unsigned
long
*
)
cpu_pda
(
cpu
)
->
irqstackptr
;
int
i
=
11
;
unsigned
used
=
0
;
printk
(
"
\n
Call Trace:
\n
"
);
...
...
@@ -275,11 +274,20 @@ void show_trace(struct task_struct *tsk, struct pt_regs *regs, unsigned long * s
if
(
unwind_init_blocked
(
&
info
,
tsk
)
==
0
)
unw_ret
=
show_trace_unwind
(
&
info
,
NULL
);
}
if
(
unw_ret
>
0
)
{
if
(
call_trace
>
0
)
if
(
unw_ret
>
0
&&
!
arch_unw_user_mode
(
&
info
))
{
#ifdef CONFIG_STACK_UNWIND
unsigned
long
rip
=
info
.
regs
.
rip
;
print_symbol
(
"DWARF2 unwinder stuck at %s
\n
"
,
rip
);
if
(
call_trace
==
1
)
{
printk
(
"Leftover inexact backtrace:
\n
"
);
stack
=
(
unsigned
long
*
)
info
.
regs
.
rsp
;
}
else
if
(
call_trace
>
1
)
return
;
printk
(
"Legacy call trace:"
);
i
=
18
;
else
printk
(
"Full inexact backtrace again:
\n
"
);
#else
printk
(
"Inexact backtrace:
\n
"
);
#endif
}
}
...
...
@@ -1118,8 +1126,10 @@ static int __init call_trace_setup(char *s)
call_trace
=
-
1
;
else
if
(
strcmp
(
s
,
"both"
)
==
0
)
call_trace
=
0
;
else
if
(
strcmp
(
s
,
"new"
)
==
0
)
else
if
(
strcmp
(
s
,
"new
fallback
"
)
==
0
)
call_trace
=
1
;
else
if
(
strcmp
(
s
,
"new"
)
==
0
)
call_trace
=
2
;
return
1
;
}
__setup
(
"call_trace="
,
call_trace_setup
);
This diff is collapsed.
Click to expand it.
block/blktrace.c
View file @
572e432e
...
...
@@ -80,7 +80,7 @@ static u32 bio_act[5] __read_mostly = { 0, BLK_TC_ACT(BLK_TC_BARRIER), BLK_TC_AC
#define trace_sync_bit(rw) \
(((rw) & (1 << BIO_RW_SYNC)) >> (BIO_RW_SYNC - 1))
#define trace_ahead_bit(rw) \
(((rw) & (1 << BIO_RW_AHEAD)) << (BIO_RW_AHEAD
- 0
))
(((rw) & (1 << BIO_RW_AHEAD)) << (
2 -
BIO_RW_AHEAD))
/*
* The worker for the various blk_add_trace*() types. Fills out a
...
...
This diff is collapsed.
Click to expand it.
block/cfq-iosched.c
View file @
572e432e
...
...
@@ -936,7 +936,7 @@ static int cfq_arm_slice_timer(struct cfq_data *cfqd, struct cfq_queue *cfqq)
* seeks. so allow a little bit of time for him to submit a new rq
*/
if
(
sample_valid
(
cic
->
seek_samples
)
&&
CIC_SEEKY
(
cic
))
sl
=
2
;
sl
=
min
(
sl
,
msecs_to_jiffies
(
2
))
;
mod_timer
(
&
cfqd
->
idle_slice_timer
,
jiffies
+
sl
);
return
1
;
...
...
This diff is collapsed.
Click to expand it.
drivers/block/cciss.c
View file @
572e432e
...
...
@@ -1233,6 +1233,50 @@ static inline void complete_buffers(struct bio *bio, int status)
}
}
static
void
cciss_check_queues
(
ctlr_info_t
*
h
)
{
int
start_queue
=
h
->
next_to_run
;
int
i
;
/* check to see if we have maxed out the number of commands that can
* be placed on the queue. If so then exit. We do this check here
* in case the interrupt we serviced was from an ioctl and did not
* free any new commands.
*/
if
((
find_first_zero_bit
(
h
->
cmd_pool_bits
,
NR_CMDS
))
==
NR_CMDS
)
return
;
/* We have room on the queue for more commands. Now we need to queue
* them up. We will also keep track of the next queue to run so
* that every queue gets a chance to be started first.
*/
for
(
i
=
0
;
i
<
h
->
highest_lun
+
1
;
i
++
)
{
int
curr_queue
=
(
start_queue
+
i
)
%
(
h
->
highest_lun
+
1
);
/* make sure the disk has been added and the drive is real
* because this can be called from the middle of init_one.
*/
if
(
!
(
h
->
drv
[
curr_queue
].
queue
)
||
!
(
h
->
drv
[
curr_queue
].
heads
))
continue
;
blk_start_queue
(
h
->
gendisk
[
curr_queue
]
->
queue
);
/* check to see if we have maxed out the number of commands
* that can be placed on the queue.
*/
if
((
find_first_zero_bit
(
h
->
cmd_pool_bits
,
NR_CMDS
))
==
NR_CMDS
)
{
if
(
curr_queue
==
start_queue
)
{
h
->
next_to_run
=
(
start_queue
+
1
)
%
(
h
->
highest_lun
+
1
);
break
;
}
else
{
h
->
next_to_run
=
curr_queue
;
break
;
}
}
else
{
curr_queue
=
(
curr_queue
+
1
)
%
(
h
->
highest_lun
+
1
);
}
}
}
static
void
cciss_softirq_done
(
struct
request
*
rq
)
{
CommandList_struct
*
cmd
=
rq
->
completion_data
;
...
...
@@ -1264,6 +1308,7 @@ static void cciss_softirq_done(struct request *rq)
spin_lock_irqsave
(
&
h
->
lock
,
flags
);
end_that_request_last
(
rq
,
rq
->
errors
);
cmd_free
(
h
,
cmd
,
1
);
cciss_check_queues
(
h
);
spin_unlock_irqrestore
(
&
h
->
lock
,
flags
);
}
...
...
@@ -2528,8 +2573,6 @@ static irqreturn_t do_cciss_intr(int irq, void *dev_id, struct pt_regs *regs)
CommandList_struct
*
c
;
unsigned
long
flags
;
__u32
a
,
a1
,
a2
;
int
j
;
int
start_queue
=
h
->
next_to_run
;
if
(
interrupt_not_for_us
(
h
))
return
IRQ_NONE
;
...
...
@@ -2588,45 +2631,6 @@ static irqreturn_t do_cciss_intr(int irq, void *dev_id, struct pt_regs *regs)
}
}
/* check to see if we have maxed out the number of commands that can
* be placed on the queue. If so then exit. We do this check here
* in case the interrupt we serviced was from an ioctl and did not
* free any new commands.
*/
if
((
find_first_zero_bit
(
h
->
cmd_pool_bits
,
NR_CMDS
))
==
NR_CMDS
)
goto
cleanup
;
/* We have room on the queue for more commands. Now we need to queue
* them up. We will also keep track of the next queue to run so
* that every queue gets a chance to be started first.
*/
for
(
j
=
0
;
j
<
h
->
highest_lun
+
1
;
j
++
)
{
int
curr_queue
=
(
start_queue
+
j
)
%
(
h
->
highest_lun
+
1
);
/* make sure the disk has been added and the drive is real
* because this can be called from the middle of init_one.
*/
if
(
!
(
h
->
drv
[
curr_queue
].
queue
)
||
!
(
h
->
drv
[
curr_queue
].
heads
))
continue
;
blk_start_queue
(
h
->
gendisk
[
curr_queue
]
->
queue
);
/* check to see if we have maxed out the number of commands
* that can be placed on the queue.
*/
if
((
find_first_zero_bit
(
h
->
cmd_pool_bits
,
NR_CMDS
))
==
NR_CMDS
)
{
if
(
curr_queue
==
start_queue
)
{
h
->
next_to_run
=
(
start_queue
+
1
)
%
(
h
->
highest_lun
+
1
);
goto
cleanup
;
}
else
{
h
->
next_to_run
=
curr_queue
;
goto
cleanup
;
}
}
else
{
curr_queue
=
(
curr_queue
+
1
)
%
(
h
->
highest_lun
+
1
);
}
}
cleanup:
spin_unlock_irqrestore
(
CCISS_LOCK
(
h
->
ctlr
),
flags
);
return
IRQ_HANDLED
;
}
...
...
This diff is collapsed.
Click to expand it.
drivers/bluetooth/hci_usb.c
View file @
572e432e
...
...
@@ -67,6 +67,8 @@ static int ignore = 0;
static
int
ignore_dga
=
0
;
static
int
ignore_csr
=
0
;
static
int
ignore_sniffer
=
0
;
static
int
disable_scofix
=
0
;
static
int
force_scofix
=
0
;
static
int
reset
=
0
;
#ifdef CONFIG_BT_HCIUSB_SCO
...
...
@@ -107,9 +109,12 @@ static struct usb_device_id blacklist_ids[] = {
{
USB_DEVICE
(
0x0a5c
,
0x2033
),
.
driver_info
=
HCI_IGNORE
},
/* Broadcom BCM2035 */
{
USB_DEVICE
(
0x0a5c
,
0x200a
),
.
driver_info
=
HCI_RESET
|
HCI_
B
RO
KEN_ISOC
},
{
USB_DEVICE
(
0x0a5c
,
0x200a
),
.
driver_info
=
HCI_RESET
|
HCI_
W
RO
NG_SCO_MTU
},
{
USB_DEVICE
(
0x0a5c
,
0x2009
),
.
driver_info
=
HCI_BCM92035
},
/* IBM/Lenovo ThinkPad with Broadcom chip */
{
USB_DEVICE
(
0x0a5c
,
0x201e
),
.
driver_info
=
HCI_WRONG_SCO_MTU
},
/* Microsoft Wireless Transceiver for Bluetooth 2.0 */
{
USB_DEVICE
(
0x045e
,
0x009c
),
.
driver_info
=
HCI_RESET
},
...
...
@@ -119,11 +124,13 @@ static struct usb_device_id blacklist_ids[] = {
/* ISSC Bluetooth Adapter v3.1 */
{
USB_DEVICE
(
0x1131
,
0x1001
),
.
driver_info
=
HCI_RESET
},
/* RTX Telecom based adapter with buggy SCO support */
/* RTX Telecom based adapter
s
with buggy SCO support */
{
USB_DEVICE
(
0x0400
,
0x0807
),
.
driver_info
=
HCI_BROKEN_ISOC
},
{
USB_DEVICE
(
0x0400
,
0x080a
),
.
driver_info
=
HCI_BROKEN_ISOC
},
/* Belkin F8T012 */
/* Belkin F8T012
and F8T013 devices
*/
{
USB_DEVICE
(
0x050d
,
0x0012
),
.
driver_info
=
HCI_WRONG_SCO_MTU
},
{
USB_DEVICE
(
0x050d
,
0x0013
),
.
driver_info
=
HCI_WRONG_SCO_MTU
},
/* Digianswer devices */
{
USB_DEVICE
(
0x08fd
,
0x0001
),
.
driver_info
=
HCI_DIGIANSWER
},
...
...
@@ -990,8 +997,10 @@ static int hci_usb_probe(struct usb_interface *intf, const struct usb_device_id
if
(
reset
||
id
->
driver_info
&
HCI_RESET
)
set_bit
(
HCI_QUIRK_RESET_ON_INIT
,
&
hdev
->
quirks
);
if
(
id
->
driver_info
&
HCI_WRONG_SCO_MTU
)
set_bit
(
HCI_QUIRK_FIXUP_BUFFER_SIZE
,
&
hdev
->
quirks
);
if
(
force_scofix
||
id
->
driver_info
&
HCI_WRONG_SCO_MTU
)
{
if
(
!
disable_scofix
)
set_bit
(
HCI_QUIRK_FIXUP_BUFFER_SIZE
,
&
hdev
->
quirks
);
}
if
(
id
->
driver_info
&
HCI_SNIFFER
)
{
if
(
le16_to_cpu
(
udev
->
descriptor
.
bcdDevice
)
>
0x997
)
...
...
@@ -1161,6 +1170,12 @@ MODULE_PARM_DESC(ignore_csr, "Ignore devices with id 0a12:0001");
module_param
(
ignore_sniffer
,
bool
,
0644
);
MODULE_PARM_DESC
(
ignore_sniffer
,
"Ignore devices with id 0a12:0002"
);
module_param
(
disable_scofix
,
bool
,
0644
);
MODULE_PARM_DESC
(
disable_scofix
,
"Disable fixup of wrong SCO buffer size"
);
module_param
(
force_scofix
,
bool
,
0644
);
MODULE_PARM_DESC
(
force_scofix
,
"Force fixup of wrong SCO buffers size"
);
module_param
(
reset
,
bool
,
0644
);
MODULE_PARM_DESC
(
reset
,
"Send HCI reset command on initialization"
);
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/cpufreq.c
View file @
572e432e
...
...
@@ -364,10 +364,12 @@ static ssize_t store_##file_name \
if (ret != 1) \
return -EINVAL; \
\
lock_cpu_hotplug(); \
mutex_lock(&policy->lock); \
ret = __cpufreq_set_policy(policy, &new_policy); \
policy->user_policy.object = policy->object; \
mutex_unlock(&policy->lock); \
unlock_cpu_hotplug(); \
\
return ret ? ret : count; \
}
...
...
@@ -1197,20 +1199,18 @@ EXPORT_SYMBOL(cpufreq_unregister_notifier);
*********************************************************************/
/* Must be called with lock_cpu_hotplug held */
int
__cpufreq_driver_target
(
struct
cpufreq_policy
*
policy
,
unsigned
int
target_freq
,
unsigned
int
relation
)
{
int
retval
=
-
EINVAL
;
lock_cpu_hotplug
();
dprintk
(
"target for CPU %u: %u kHz, relation %u
\n
"
,
policy
->
cpu
,
target_freq
,
relation
);
if
(
cpu_online
(
policy
->
cpu
)
&&
cpufreq_driver
->
target
)
retval
=
cpufreq_driver
->
target
(
policy
,
target_freq
,
relation
);
unlock_cpu_hotplug
();
return
retval
;
}
EXPORT_SYMBOL_GPL
(
__cpufreq_driver_target
);
...
...
@@ -1225,17 +1225,23 @@ int cpufreq_driver_target(struct cpufreq_policy *policy,
if
(
!
policy
)
return
-
EINVAL
;
lock_cpu_hotplug
();
mutex_lock
(
&
policy
->
lock
);
ret
=
__cpufreq_driver_target
(
policy
,
target_freq
,
relation
);
mutex_unlock
(
&
policy
->
lock
);
unlock_cpu_hotplug
();
cpufreq_cpu_put
(
policy
);
return
ret
;
}
EXPORT_SYMBOL_GPL
(
cpufreq_driver_target
);
/*
* Locking: Must be called with the lock_cpu_hotplug() lock held
* when "event" is CPUFREQ_GOV_LIMITS
*/
static
int
__cpufreq_governor
(
struct
cpufreq_policy
*
policy
,
unsigned
int
event
)
{
...
...
@@ -1257,24 +1263,6 @@ static int __cpufreq_governor(struct cpufreq_policy *policy, unsigned int event)
}
int
cpufreq_governor
(
unsigned
int
cpu
,
unsigned
int
event
)
{
int
ret
=
0
;
struct
cpufreq_policy
*
policy
=
cpufreq_cpu_get
(
cpu
);
if
(
!
policy
)
return
-
EINVAL
;
mutex_lock
(
&
policy
->
lock
);
ret
=
__cpufreq_governor
(
policy
,
event
);
mutex_unlock
(
&
policy
->
lock
);
cpufreq_cpu_put
(
policy
);
return
ret
;
}
EXPORT_SYMBOL_GPL
(
cpufreq_governor
);
int
cpufreq_register_governor
(
struct
cpufreq_governor
*
governor
)
{
struct
cpufreq_governor
*
t
;
...
...
@@ -1342,6 +1330,9 @@ int cpufreq_get_policy(struct cpufreq_policy *policy, unsigned int cpu)
EXPORT_SYMBOL
(
cpufreq_get_policy
);
/*
* Locking: Must be called with the lock_cpu_hotplug() lock held
*/
static
int
__cpufreq_set_policy
(
struct
cpufreq_policy
*
data
,
struct
cpufreq_policy
*
policy
)
{
int
ret
=
0
;
...
...
@@ -1436,6 +1427,8 @@ int cpufreq_set_policy(struct cpufreq_policy *policy)
if
(
!
data
)
return
-
EINVAL
;
lock_cpu_hotplug
();
/* lock this CPU */
mutex_lock
(
&
data
->
lock
);
...
...
@@ -1446,6 +1439,8 @@ int cpufreq_set_policy(struct cpufreq_policy *policy)
data
->
user_policy
.
governor
=
data
->
governor
;
mutex_unlock
(
&
data
->
lock
);
unlock_cpu_hotplug
();
cpufreq_cpu_put
(
data
);
return
ret
;
...
...
@@ -1469,6 +1464,7 @@ int cpufreq_update_policy(unsigned int cpu)
if
(
!
data
)
return
-
ENODEV
;
lock_cpu_hotplug
();
mutex_lock
(
&
data
->
lock
);
dprintk
(
"updating policy for CPU %u
\n
"
,
cpu
);
...
...
@@ -1494,7 +1490,7 @@ int cpufreq_update_policy(unsigned int cpu)
ret
=
__cpufreq_set_policy
(
data
,
&
policy
);
mutex_unlock
(
&
data
->
lock
);
unlock_cpu_hotplug
();
cpufreq_cpu_put
(
data
);
return
ret
;
}
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/cpufreq_conservative.c
View file @
572e432e
...
...
@@ -525,7 +525,6 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
break
;
case
CPUFREQ_GOV_LIMITS
:
lock_cpu_hotplug
();
mutex_lock
(
&
dbs_mutex
);
if
(
policy
->
max
<
this_dbs_info
->
cur_policy
->
cur
)
__cpufreq_driver_target
(
...
...
@@ -536,7 +535,6 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
this_dbs_info
->
cur_policy
,
policy
->
min
,
CPUFREQ_RELATION_L
);
mutex_unlock
(
&
dbs_mutex
);
unlock_cpu_hotplug
();
break
;
}
return
0
;
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/cpufreq_ondemand.c
View file @
572e432e
...
...
@@ -309,7 +309,9 @@ static void do_dbs_timer(void *data)
if
(
!
dbs_info
->
enable
)
return
;
lock_cpu_hotplug
();
dbs_check_cpu
(
dbs_info
);
unlock_cpu_hotplug
();
queue_delayed_work_on
(
cpu
,
kondemand_wq
,
&
dbs_info
->
work
,
usecs_to_jiffies
(
dbs_tuners_ins
.
sampling_rate
));
}
...
...
@@ -412,7 +414,6 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
break
;
case
CPUFREQ_GOV_LIMITS
:
lock_cpu_hotplug
();
mutex_lock
(
&
dbs_mutex
);
if
(
policy
->
max
<
this_dbs_info
->
cur_policy
->
cur
)
__cpufreq_driver_target
(
this_dbs_info
->
cur_policy
,
...
...
@@ -423,7 +424,6 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
policy
->
min
,
CPUFREQ_RELATION_L
);
mutex_unlock
(
&
dbs_mutex
);
unlock_cpu_hotplug
();
break
;
}
return
0
;
...
...
This diff is collapsed.
Click to expand it.
drivers/cpufreq/cpufreq_userspace.c
View file @
572e432e
...
...
@@ -18,6 +18,7 @@
#include <linux/spinlock.h>
#include <linux/interrupt.h>
#include <linux/cpufreq.h>
#include <linux/cpu.h>
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/sysfs.h>
...
...
@@ -70,6 +71,7 @@ static int cpufreq_set(unsigned int freq, struct cpufreq_policy *policy)
dprintk
(
"cpufreq_set for cpu %u, freq %u kHz
\n
"
,
policy
->
cpu
,
freq
);
lock_cpu_hotplug
();
mutex_lock
(
&
userspace_mutex
);
if
(
!
cpu_is_managed
[
policy
->
cpu
])
goto
err
;
...
...
@@ -92,6 +94,7 @@ static int cpufreq_set(unsigned int freq, struct cpufreq_policy *policy)
err:
mutex_unlock
(
&
userspace_mutex
);
unlock_cpu_hotplug
();
return
ret
;
}
...
...
This diff is collapsed.
Click to expand it.
drivers/ide/ide-disk.c
View file @
572e432e
...
...
@@ -776,7 +776,7 @@ static void update_ordered(ide_drive_t *drive)
* not available so we don't need to recheck that.
*/
capacity
=
idedisk_capacity
(
drive
);
barrier
=
ide_id_has_flush_cache
(
id
)
&&
barrier
=
ide_id_has_flush_cache
(
id
)
&&
!
drive
->
noflush
&&
(
drive
->
addressing
==
0
||
capacity
<=
(
1ULL
<<
28
)
||
ide_id_has_flush_cache_ext
(
id
));
...
...
This diff is collapsed.
Click to expand it.
Prev
1
2
3
4
5
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment