Linux 2.6.38.8
Subsystems (79)
I'm announcing the release of the 2.6.38.8 kernel.
All users of the 2.6.38 kernel series must upgrade.
This is the LAST .38 stable kernel release, please move to the .39-stable tree at this point in time.
The updated 2.6.38.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.38.y.git
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.38.y.git;a=summarythanks,
greg k-h
------------
Documentation/i2c/writing-clients | 2 Documentation/usb/linux-cdc-acm.inf | 4 - Documentation/usb/linux.inf | 6 - Makefile | 4 - arch/arm/mm/cache-v6.S | 1 arch/arm/mm/cache-v7.S | 2 arch/parisc/include/asm/unistd.h | 5 + arch/parisc/kernel/sys_parisc32.c | 8 ++ arch/parisc/kernel/syscall_table.S | 3 arch/powerpc/kernel/crash.c | 2 arch/powerpc/kernel/misc_64.S | 13 ++- arch/powerpc/kernel/paca.c | 2 arch/powerpc/kernel/setup-common.c | 3 arch/powerpc/oprofile/op_model_power4.c | 24 ++++++ arch/sh/kernel/cpu/Makefile | 4 - arch/x86/include/asm/cpufeature.h | 2 arch/x86/include/asm/uaccess.h | 2 arch/x86/kernel/apic/io_apic.c | 4 - arch/x86/kernel/cpu/amd.c | 16 ++-- arch/x86/kernel/cpu/common.c | 3 arch/x86/kernel/cpu/cpufreq/pcc-cpufreq.c | 4 - arch/x86/lib/copy_user_64.S | 4 - arch/x86/oprofile/op_model_amd.c | 95 ++++++++++++++----------- arch/x86/xen/mmu.c | 2 block/blk-settings.c | 3 block/blk-sysfs.c | 3 block/blk.h | 3 block/genhd.c | 2 drivers/ata/pata_cmd64x.c | 42 ++++++++++- drivers/block/brd.c | 11 +- drivers/block/loop.c | 11 +- drivers/block/paride/pcd.c | 19 +++-- drivers/block/paride/pd.c | 7 + drivers/block/paride/pf.c | 10 +- drivers/cdrom/gdrom.c | 16 ++-- drivers/cdrom/viocd.c | 20 +++-- drivers/char/i8k.c | 4 - drivers/cpufreq/cpufreq.c | 20 ++++- drivers/cpufreq/cpufreq_stats.c | 21 ++++- drivers/cpuidle/governors/menu.c | 4 - drivers/gpu/drm/drm_irq.c | 23 ++++++ drivers/gpu/drm/i915/intel_ringbuffer.c | 29 +++++++ drivers/gpu/drm/radeon/evergreen.c | 6 + drivers/gpu/drm/radeon/evergreend.h | 2 drivers/gpu/drm/radeon/radeon_asic.c | 4 + drivers/hid/hid-magicmouse.c | 10 ++ drivers/ide/ide-cd.c | 12 +-- drivers/ide/ide-cd.h | 3 drivers/ide/ide-cd_ioctl.c | 8 +- drivers/ide/ide-gd.c | 14 ++- drivers/md/bitmap.c | 10 +- drivers/md/dm-table.c | 17 ++++ drivers/md/md.c | 11 ++ drivers/media/video/cx88/cx88-blackbird.c | 5 - drivers/media/video/cx88/cx88-dvb.c | 2 drivers/media/video/cx88/cx88-mpeg.c | 20 ++--- drivers/media/video/cx88/cx88.h | 7 + drivers/mtd/mtdconcat.c | 4 - drivers/mtd/nand/nand_base.c | 2 drivers/net/bonding/bond_3ad.c | 7 + drivers/net/bonding/bond_alb.c | 4 - drivers/net/bonding/bond_main.c | 16 ++-- drivers/net/bonding/bond_sysfs.c | 6 - drivers/net/macvlan.c | 4 - drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | 14 +++ drivers/net/wireless/ath/ath9k/calib.c | 13 +++ drivers/net/wireless/iwlwifi/iwl-core.c | 10 ++ drivers/net/wireless/iwlwifi/iwl-dev.h | 19 ++--- drivers/net/wireless/p54/p54usb.c | 1 drivers/pci/quirks.c | 10 ++ drivers/platform/x86/intel_ips.c | 2 drivers/scsi/bnx2i/bnx2i_hwi.c | 1 drivers/scsi/bnx2i/bnx2i_init.c | 2 drivers/scsi/bnx2i/bnx2i_iscsi.c | 5 + drivers/scsi/mpt2sas/mpt2sas_scsih.c | 94 +++++++++++++++++------- drivers/scsi/qla2xxx/qla_attr.c | 5 - drivers/scsi/qla2xxx/qla_os.c | 32 +++++--- drivers/scsi/sr.c | 2 drivers/scsi/ultrastor.c | 2 drivers/sh/clk/cpg.c | 2 drivers/staging/rtl8712/rtl871x_ioctl_set.c | 5 + drivers/staging/usbip/usbip_common.c | 2 drivers/target/target_core_device.c | 4 - drivers/target/target_core_tmr.c | 7 + drivers/target/target_core_transport.c | 46 ++++++++---- drivers/usb/class/cdc-acm.c | 13 ++- drivers/usb/class/cdc-acm.h | 1 drivers/usb/core/hcd.c | 5 - drivers/usb/gadget/at91_udc.c | 2 drivers/usb/gadget/f_rndis.c | 3 drivers/usb/host/ehci-hcd.c | 4 - drivers/usb/host/ehci-sched.c | 8 +- drivers/usb/host/isp116x-hcd.c | 1 drivers/usb/host/ohci-hcd.c | 4 - drivers/usb/host/ohci-pci.c | 12 ++- drivers/usb/host/oxu210hp-hcd.c | 6 + drivers/usb/host/xhci-mem.c | 11 +- drivers/usb/host/xhci-ring.c | 18 ++-- drivers/usb/host/xhci.c | 11 ++ drivers/usb/serial/cp210x.c | 4 + drivers/usb/serial/ftdi_sio.c | 1 drivers/usb/serial/ftdi_sio_ids.h | 5 + drivers/usb/serial/garmin_gps.c | 20 +++-- drivers/usb/serial/moto_modem.c | 1 drivers/usb/serial/option.c | 10 ++ fs/block_dev.c | 45 +++++++---- fs/cifs/connect.c | 31 +++++--- fs/ecryptfs/keystore.c | 46 +++++------- fs/ext3/namei.c | 13 ++- fs/ext4/ext4.h | 4 - fs/ext4/mballoc.c | 2 fs/ext4/super.c | 41 +++------- fs/jbd/commit.c | 9 +- fs/jbd/journal.c | 16 +++- fs/nfs/nfs4proc.c | 9 +- fs/nfs/nfs4state.c | 6 + fs/partitions/ldm.c | 5 + fs/ubifs/sb.c | 3 fs/ubifs/super.c | 1 include/linux/blkdev.h | 7 + include/linux/genhd.h | 1 include/linux/pci_ids.h | 2 include/linux/pm_qos_params.h | 4 + include/linux/seqlock.h | 4 - include/target/target_core_base.h | 1 include/target/target_core_transport.h | 1 init/main.c | 2 kernel/pm_qos_params.c | 37 ++++++--- kernel/trace/ftrace.c | 12 +-- lib/locking-selftest.c | 2 mm/kmemleak.c | 7 + mm/page_alloc.c | 2 mm/shmem.c | 2 mm/vmscan.c | 11 ++ net/8021q/vlan.c | 3 net/8021q/vlan_dev.c | 3 net/atm/atm_sysfs.c | 10 ++ net/bridge/br_input.c | 2 net/bridge/br_netfilter.c | 2 net/core/dev.c | 2 net/core/skbuff.c | 3 net/ieee802154/Makefile | 2 net/ipv4/igmp.c | 10 +- net/ipv4/inet_connection_sock.c | 5 - net/ipv4/inetpeer.c | 13 +-- net/ipv4/sysctl_net_ipv4.c | 3 net/ipv4/tcp_output.c | 3 net/ipv6/inet6_connection_sock.c | 2 net/ipv6/route.c | 1 net/ipv6/udp.c | 2 net/irda/af_irda.c | 3 net/mac80211/cfg.c | 12 +-- net/sched/sch_sfq.c | 22 +---- net/sctp/associola.c | 16 ++++ net/sctp/bind_addr.c | 10 +- net/socket.c | 6 + net/sunrpc/xprtsock.c | 16 +++- net/wireless/nl80211.c | 8 -- security/apparmor/lsm.c | 3 sound/pci/hda/hda_intel.c | 9 ++ sound/pci/hda/patch_analog.c | 3 sound/pci/hda/patch_conexant.c | 1 sound/pci/hda/patch_sigmatel.c | 2 sound/soc/codecs/wm_hubs.c | 24 +++--- 164 files changed, 1065 insertions(+), 517 deletions(-)
Adrian Wilkins (1):
ALSA: hda - Fix input-src parse in patch_analog.c
Alan Stern (2):
OHCI: fix regression caused by nVidia shutdown workaround
USB: remove remaining usages of hcd->state from usbcore and fix regression
Alex Deucher (1):
drm/radeon/evergreen/btc/fusion: setup hdp to invalidate and flush when asked
Andrew Barry (1):
mm/page_alloc.c: prevent unending loop in __alloc_pages_slowpath()
Anton Blanchard (1):
net: recvmmsg: Strip MSG_WAITFORONE when calling recvmsg
Artem Bityutskiy (2):
mtd: return badblockbits back
UBIFS: fix a rare memory leak in ro to rw remounting path
Arun Easi (2):
qla2xxx: Fix hang during driver unload when vport is active.
qla2xxx: Fix vport delete hang when logins are outstanding.
Benedek László (1):
USB: serial: ftdi_sio: adding support for TavIR STK500
Boqun Feng (1):
drm/i915: fix user irq miss in BSD ring on g4x
Boris Ostrovsky (1):
x86, amd: Do not enable ARAT feature on AMD processors below family 0x12
Catalin Marinas (2):
kmemleak: Do not return a pointer to an object that kmemleak did not get
kmemleak: Initialise kmemleak after debug_objects_mem_init()
Christian Lamparter (1):
p54usb: add zoom 4410 usbid
Christopher James Halse Rogers (1):
drm: Send pending vblank events before disabling vblank.
Craig Shelley (1):
USB: CP210x Add 4 Device IDs for AC-Services Devices
Dan Williams (1):
atm: expose ATM device index in sysfs
Daniel J Blueman (1):
x86, ioapic: Fix potential resume deadlock
Dave Airlie (1):
drm/radeon/kms: add wait idle ioctl for eg->cayman
Dave Jones (1):
irda: fix locking unbalance in irda_sendmsg
David Chang (1):
staging: usbip: fix wrong endian conversion
David Henningsson (2):
ALSA: HDA: Use one dmic only for Dell Studio 1558
ALSA: HDA: Add quirk for Lenovo U350
David S. Miller (3):
ieee802154: Remove hacked CFLAGS in net/ieee802154/Makefile Revert "bridge: Forward reserved group addresses if !STP" Revert "tcp: disallow bind() to reuse addr/port"
Eddie Wai (2):
bnx2i: Fixed packet error created when the sq_size is set to 16
bnx2i: Updated the connection shutdown/cleanup timeout
Elizabeth Jennifer Myers (1):
USB: moto_modem: Add USB identifier for the Motorola VE240.
Eric B Munson (1):
powerpc/oprofile: Handle events that raise an exception without overflowing
Eric Dumazet (7):
inetpeer: reduce stack usage
macvlan: fix panic if lowerdev in a bond
net: use hlist_del_rcu() in dev_change_name()
vlan: fix GVRP at dismantle time MIME-Version: 1.0
net: add skb_dst_force() in sock_queue_err_skb()
sch_sfq: avoid giving spurious NET_XMIT_CN signals
sch_sfq: fix peek() implementation
Erik Slagter (1):
USB: cdc_acm: Fix oops when Droids MuIn LCD is connected
Felipe Balbi (1):
usb: gadget: rndis: don't test against req->length
Felix Radensky (1):
mtd: mtdconcat: fix NAND OOB write
Fenghua Yu (1):
x86, cpufeature: Fix cpuid leaf 7 feature detection
Frederic Weisbecker (1):
rcu: Fix unpaired rcu_irq_enter() from locking selftests
Greg Kroah-Hartman (1):
Linux 2.6.38.8
Hemant Pedanekar (1):
PCI: Add quirk for setting valid class for TI816X Endpoint
Hermann Kneissel (1):
USB: gamin_gps: Fix for data transfer problems in native mode
Hugh Dickins (1):
tmpfs: fix race between truncate and writepage
Ilpo Järvinen (1):
tcp: len check is unnecessarily devastating, change to WARN_ON
Jacek Luczak (1):
SCTP: fix race between sctp_bind_addr_free() and sctp_bind_addr_conflict()
Jacob Shin (1):
CPU hotplug, re-create sysfs directory and symlinks
James Bottomley (4):
block: add proper state guards to __elv_next_request wire up fanotify syscalls
wire up clock_adjtime syscall
pata_cm64x: fix boot crash on parisc
Jan Kara (2):
ext3: Fix fs corruption when make_indexed_dir() fails
jbd: Fix forever sleeping process in do_get_write_access()
Jean-Christophe PLAGNIOL-VILLARD (1):
usb/gadget: at91sam9g20 fix end point max packet size
Jeff Chua (1):
staging: r8712u: Fix driver to support ad-hoc mode
Jesse Barnes (1):
ips: use interruptible waits in ips-monitor
Jiri Bohac (1):
bonding: 802.3ad - fix agg_device_up
Jiri Kosina (1):
HID: magicmouse: ignore 'ivalid report id' while switching modes
Jiri Olsa (1):
x86, 64-bit: Fix copy_[to/from]_user() checks for the userspace address limit
Joakim Tjernlund (1):
net: Do not wrap sysctl igmp_max_memberships in IP_MULTICAST
Johannes Berg (3):
iwlagn: fix iwl_is_any_associated
iwlwifi: fix bugs in change_interface
mac80211: fix a few RCU issues
Johannes Weiner (1):
mm: vmscan: correct use of pgdat_balanced in sleeping_prematurely
Jonathan Nieder (3):
cx88: protect per-device driver list with device lock
cx88: fix locking of sub-driver operations
cx88: hold device lock during sub-driver initialization
Jouni Malinen (1):
nl80211: Fix set_key regression with some drivers
Kashyap, Desai (1):
mpt2sas: move even handling of MPT2SAS_TURN_ON_FAULT_LED into process context
Kees Cook (2):
x86, cpufeature: Update CPU feature RDRND to RDRAND
AppArmor: fix oops in apparmor_setprocattr
Kevin Cernekee (1):
kbuild: Fix GNU make v3.80 compatibility
Kuninori Morimoto (2):
sh: clkfwk: fixup clk_rate_table_build parameter in div6 clock
sh: fixup fpu.o compile order
Luca Tettamanti (1):
i8k: Avoid lahf in 64-bit code
Luis R. Rodriguez (2):
ath9k_hw: fix power for the HT40 duplicate frames
ath9k_hw: fix dual band assumption for XB113
Lukas Czerner (2):
ext4: fix possible use-after-free in ext4_remove_li_request()
ext4: Use schedule_timeout_interruptible() for waiting in lazyinit thread
Marcin Gałczyński (1):
USB: option: add support for Huawei E353 device
Marius B. Kotsbak (1):
Bind only modem AT command endpoint to option module.
Mark Brown (2):
ASoC: Ensure output PGA is enabled for line outputs in wm_hubs
ASoC: Add some missing volume update bit sets for wm_hubs devices
Martin K. Petersen (1):
block: Fix discard topology stacking and reporting
Michal Nazarewicz (1):
USB: gadget: g_multi: fixed vendor and product ID in inf files
Milan Broz (1):
dm table: reject devices without request fns
Milton Miller (3):
powerpc/kdump64: Don't reference freed memory as pacas powerpc/kexec: Fix memory corruption from unallocated slaves
seqlock: Don't smp_rmb in seqlock reader spin loop
Minchan Kim (1):
mm: vmscan: correctly check if reclaimer should schedule during shrink_slab
Naga Chumbalkar (1):
Fix _OSC UUID in pcc-cpufreq
Namhyung Kim (4):
loop: limit 'max_part' module param to DISK_MAX_PARTS
loop: handle on-demand devices correctly
brd: limit 'max_part' module param to DISK_MAX_PARTS
brd: handle on-demand devices correctly
Neil Horman (1):
bonding: prevent deadlock on slave store with alb mode (v3)
NeilBrown (2):
md: Fix race when creating a new md device. md/bitmap: fix saving of events_cleared and other state.
Nicholas Bellinger (4):
target: Fix multi task->task_sg[] chaining logic bug
target: Fix interrupt context bug with stats_lock and core_tmr_alloc_req
target: Fix bug with task_sg chained transport_free_dev_tasks release
target: Fix task->task_execute_queue=1 clear bug + LUN_RESET OOPs
Rajkumar Manoharan (1):
ath9k_hw: do noise floor calibration only on required chains
Robert Richter (1):
oprofile, x86: Enable preemption during pci device setup in IBS init
Roedel, Joerg (1):
x86, amd: Use _safe() msr access for GartTlbWlk disable code
Ryan Grimm (1):
powerpc: Set nr_cpu_ids early and use it to free PACAs
Samuel Thibault (1):
Fix Ultrastor asm snippet
Sarah Sharp (4):
xhci: Fix bug in control transfer cancellation.
xhci: Fix full speed bInterval encoding.
xhci: Fix memory leak in ring cache deallocation.
xhci: Fix memory leak bug when dropping endpoints
Saurav Kashyap (1):
qla2xxx: Fix virtual port failing to login after chip reset.
Senthil Balasubramanian (1):
ath9k_hw: Fix STA connection issues with AR9380 (XB113).
Shan Wei (1):
ipv6: udp: fix the wrong headroom check
Stephen Hemminger (1):
bridge: fix forwarding of IPv6
Steve French (1):
When mandatory encryption on share, fail mount
Steven Rostedt (1):
ftrace: Only update the function code on write to filter files
Takashi Iwai (1):
ALSA: hda - Use LPIB for ATI/AMD chipsets as default
Ted Ts'o (1):
jbd: fix fsync() tid wraparound bug
Tejun Heo (7):
block: rescan partitions on invalidated devices on -ENOMEDIA too
block: move bd_set_size() above rescan_partitions() in __blkdev_get()
paride: Convert to bdops->check_events()
gdrom,viocd: Convert to bdops->check_events()
ide: Convert to bdops->check_events()
block: don't block events on excl write for non-optical devices
block: always allocate genhd->ev if check_events is implementedTero Kristo (1):
cpuidle: menu: fixed wrapping timers at 4.294 seconds
Thomas Egerer (1):
ipv6: Remove hoplimit initialization to -1
Tian, Kevin (1):
xen mmu: fix a race window causing leave_mm BUG()
Tim Chen (1):
idle governor: Avoid lock acquisition to read pm_qos before entering idle
Timo Warns (1):
Fix for buffer overflow in ldm_frag_add not sufficient
Trond Myklebust (3):
SUNRPC: Deal with the lack of a SYN_SENT sk->sk_state_change callback...
NFSv4: Handle expired stateids when the lease is still valid NFSv4.1: Fix the handling of NFS4ERR_SEQ_MISORDERED errors
Tyler Hicks (1):
eCryptfs: Allow 2 scatterlist entries for encrypted filenames
Veaceslav Falico (1):
igmp: call ip_mc_clear_src() only when we have no users of ip_mc_list
Vikram Narayanan (1):
i2c/writing-clients: Fix foo_driver.id_table
Wei Yongjun (1):
sctp: fix memory leak of the ASCONF queue when free asoc
Will Deacon (1):
ARM: 6941/1: cache: ensure MVA is cacheline aligned in flush_kern_dcache_area
Yang Ruirui (1):
ext4: release page cache in ext4_mb_load_buddy error path
steven finney (1):
Fix memory leak in cpufreq_stat
Documentation/i2c/writing-clients +1 -1
@@ -38,7 +38,7 @@ static struct i2c_driver foo_driver = { .name = "foo", }, - .id_table = foo_ids, + .id_table = foo_idtable, .probe = foo_probe, .remove = foo_remove, /* if device autodetection is needed: */
Documentation/usb/linux-cdc-acm.inf +2 -2
@@ -90,10 +90,10 @@ ServiceBinary=%12%\USBSER.sys [SourceDisksFiles] [SourceDisksNames] [DeviceList] -%DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_0525&PID_A4AB&MI_02 +%DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_1D6B&PID_0104&MI_02 [DeviceList.NTamd64] -%DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_0525&PID_A4AB&MI_02 +%DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_1D6B&PID_0104&MI_02 ;------------------------------------------------------------------------------
Documentation/usb/linux.inf +3 -3
@@ -18,15 +18,15 @@ DriverVer = 06/21/2006,6.0.6000.16384 ; Decoration for x86 architecture [LinuxDevices.NTx86] -%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_0525&PID_a4ab&MI_00 +%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_1d6b&PID_0104&MI_00 ; Decoration for x64 architecture [LinuxDevices.NTamd64] -%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_0525&PID_a4ab&MI_00 +%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_1d6b&PID_0104&MI_00 ; Decoration for ia64 architecture [LinuxDevices.NTia64] -%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_0525&PID_a4ab&MI_00 +%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_1d6b&PID_0104&MI_00 ;@@@ This is the common setting for setup [ControlFlags]
Makefile +2 -2
@@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 38 -EXTRAVERSION = .7 +EXTRAVERSION = .8 NAME = Flesh-Eating Bats with Fangs # *DOCUMENTATION*
@@ -1368,7 +1368,7 @@ endif # KBUILD_EXTMOD clean: $(clean-dirs) $(call cmd,rmdirs) $(call cmd,rmfiles) - @find $(or $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \ + @find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \ \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \ -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \ -o -name '*.symtypes' -o -name 'modules.order' \
arch/arm/mm/cache-v6.S +1 -0
@@ -176,6 +176,7 @@ ENDPROC(v6_coherent_kern_range) */ ENTRY(v6_flush_kern_dcache_area) add r1, r0, r1 + bic r0, r0, #D_CACHE_LINE_SIZE - 1 1: #ifdef HARVARD_CACHE mcr p15, 0, r0, c7, c14, 1 @ clean & invalidate D line
arch/arm/mm/cache-v7.S +2 -0
@@ -221,6 +221,8 @@ ENDPROC(v7_coherent_user_range) ENTRY(v7_flush_kern_dcache_area) dcache_line_size r2, r3 add r1, r0, r1 + sub r3, r2, #1 + bic r0, r0, r3 1: mcr p15, 0, r0, c7, c14, 1 @ clean & invalidate D line / unified line add r0, r0, r2
arch/parisc/include/asm/unistd.h +4 -1
@@ -814,8 +814,11 @@#define __NR_recvmmsg (__NR_Linux + 319)#define __NR_accept4 (__NR_Linux + 320)#define __NR_prlimit64 (__NR_Linux + 321) +#define __NR_fanotify_init (__NR_Linux + 322) +#define __NR_fanotify_mark (__NR_Linux + 323) +#define __NR_clock_adjtime (__NR_Linux + 324) -#define __NR_Linux_syscalls (__NR_prlimit64 + 1) +#define __NR_Linux_syscalls (__NR_clock_adjtime + 1)#define __IGNORE_select/* newselect */
arch/parisc/kernel/sys_parisc32.c +8 -0
@@ -228,3 +228,11 @@ asmlinkage long compat_sys_fallocate(int fd, int mode, u32 offhi, u32 offlo,return sys_fallocate (fd, mode, ((loff_t )offhi <<32 ) | offlo, ((loff_t )lenhi <<32 ) | lenlo); } + +asmlinkage long compat_sys_fanotify_mark (int fan_fd,int flags,u32 mask_hi, +u32 mask_lo,int fd, +const char __user *pathname) +{ +return sys_fanotify_mark (fan_fd, flags, ((u64 )mask_hi <<32 ) | mask_lo, + fd, pathname); +}
arch/parisc/kernel/syscall_table.S +3 -0
@@ -420,6 +420,9 @@ ENTRY_COMP(recvmmsg) ENTRY_SAME(accept4) /* 320 */ ENTRY_SAME(prlimit64) + ENTRY_SAME(fanotify_init) + ENTRY_COMP(fanotify_mark) + ENTRY_COMP(clock_adjtime) /* Nothing yet */
arch/powerpc/kernel/crash.c +1 -1
@@ -170,7 +170,7 @@ static void crash_kexec_wait_realmode(int cpu)int i; msecs =10000 ; -for (i=0 ; i <NR_CPUS && msecs >0 ; i++) { +for (i=0 ; i < nr_cpu_ids && msecs >0 ; i++) {if (i == cpu)continue ;
arch/powerpc/kernel/misc_64.S +8 -5
@@ -462,7 +462,8 @@ _GLOBAL(disable_kernel_fp) * wait for the flag to change, indicating this kernel is going away but * the slave code for the next one is at addresses 0 to 100. * - * This is used by all slaves. + * This is used by all slaves, even those that did not find a matching + * paca in the secondary startup code. * * Physical (hardware) cpu id should be in r3. */
@@ -471,10 +472,6 @@ _GLOBAL(kexec_wait) 1: mflr r5 addi r5,r5,kexec_flag-1b - li r4,KEXEC_STATE_REAL_MODE - stb r4,PACAKEXECSTATE(r13) - SYNC - 99: HMT_LOW #ifdef CONFIG_KEXEC /* use no memory without kexec */ lwz r4,0(r5)
@@ -499,11 +496,17 @@ kexec_flag: * * get phys id from paca * switch to real mode + * mark the paca as no longer used * join other cpus in kexec_wait(phys_id) */ _GLOBAL(kexec_smp_wait) lhz r3,PACAHWCPUID(r13) bl real_mode + + li r4,KEXEC_STATE_REAL_MODE + stb r4,PACAKEXECSTATE(r13) + SYNC + b .kexec_wait /*
arch/powerpc/kernel/paca.c +1 -1
@@ -203,7 +203,7 @@ void __init free_unused_pacas(void) {int new_size; - new_size =PAGE_ALIGN (sizeof (struct paca_struct ) *num_possible_cpus ()); + new_size =PAGE_ALIGN (sizeof (struct paca_struct ) * nr_cpu_ids);if (new_size >= paca_size)return ;
arch/powerpc/kernel/setup-common.c +3 -0
@@ -509,6 +509,9 @@ void __init smp_setup_cpu_maps(void)*/ cpu_init_thread_core_maps (nthreads); +/* Now that possible cpus are set, set nr_cpu_ids for later use */ + nr_cpu_ids =find_last_bit (cpumask_bits (cpu_possible_mask),NR_CPUS ) +1 ; + free_unused_pacas(); }#endif /* CONFIG_SMP */
arch/powerpc/oprofile/op_model_power4.c +23 -1
@@ -261,6 +261,28 @@ static int get_kernel(unsigned long pc, unsigned long mmcra)return is_kernel; } +static bool pmc_overflow (unsigned long val) +{ +if ((int )val <0 ) +return true; + +/* +* Events on POWER7 can roll back if a speculative event doesn't +* eventually complete. Unfortunately in some rare cases they will +* raise a performance monitor exception. We need to catch this to +* ensure we reset the PMC. In all cases the PMC will be 256 or less +* cycles from overflow. +* +* We only do this if the first pass fails to find any overflowing +* PMCs because a user might set a period of less than 256 and we +* don't want to mistakenly reset them. +*/ +if (__is_processor (PV_POWER7 ) && ((0x80000000 - val) <=256 )) +return true; + +return false; +} +static void power4_handle_interrupt (struct pt_regs *regs,struct op_counter_config *ctr) {
@@ -281,7 +303,7 @@ static void power4_handle_interrupt(struct pt_regs *regs,for (i =0 ; i < cur_cpu_spec->num_pmcs; ++i) { val =classic_ctr_read (i); -if (val <0 ) { +if (pmc_overflow (val)) {if (oprofile_running && ctr[i].enabled) {oprofile_add_ext_sample (pc, regs, i, is_kernel);classic_ctr_write (i, reset_value[i]);
arch/sh/kernel/cpu/Makefile +1 -3
@@ -17,7 +17,5 @@ obj-$(CONFIG_ARCH_SHMOBILE) += shmobile/ obj-$(CONFIG_SH_ADC) += adc.o obj-$(CONFIG_SH_CLK_CPG_LEGACY) += clock-cpg.o -obj-$(CONFIG_SH_FPU) += fpu.o -obj-$(CONFIG_SH_FPU_EMU) += fpu.o -obj-y += irq/ init.o clock.o hwblk.o proc.o +obj-y += irq/ init.o clock.o fpu.o hwblk.o proc.o
arch/x86/include/asm/cpufeature.h +1 -1
@@ -125,7 +125,7 @@#define X86_FEATURE_OSXSAVE (4*32+27)/* "" XSAVE enabled in the OS */ #define X86_FEATURE_AVX (4*32+28)/* Advanced Vector Extensions */ #define X86_FEATURE_F16C (4*32+29)/* 16-bit fp conversions */ -#define X86_FEATURE_RDRND (4*32+30)/* The RDRAND instruction */ +#define X86_FEATURE_RDRAND (4*32+30)/* The RDRAND instruction */ #define X86_FEATURE_HYPERVISOR (4*32+31)/* Running on a hypervisor */ /* VIA/Cyrix/Centaur-defined CPU features, CPUID level 0xC0000001, word 5 */
arch/x86/include/asm/uaccess.h +1 -1
@@ -42,7 +42,7 @@* Returns 0 if the range is valid, nonzero otherwise. * * This is equivalent to the following test: -* (u33)addr + (u33)size >= (u33)current->addr_limit.seg (u65 for x86_64) +* (u33)addr + (u33)size > (u33)current->addr_limit.seg (u65 for x86_64) * * This needs 33-bit (65-bit for x86_64) arithmetic. We have a carry... */
arch/x86/kernel/apic/io_apic.c +2 -2
@@ -615,14 +615,14 @@ struct IO_APIC_route_entry **alloc_ioapic_entries(void)struct IO_APIC_route_entry **ioapic_entries; ioapic_entries =kzalloc (sizeof (*ioapic_entries) * nr_ioapics, -GFP_KERNEL ); +GFP_ATOMIC );if (!ioapic_entries)return 0 ;for (apic =0 ; apic < nr_ioapics; apic++) { ioapic_entries[apic] =kzalloc (sizeof (struct IO_APIC_route_entry ) * - nr_ioapic_registers[apic],GFP_KERNEL ); + nr_ioapic_registers[apic],GFP_ATOMIC );if (!ioapic_entries[apic]) goto nomem; }
arch/x86/kernel/cpu/amd.c +11 -5
@@ -595,8 +595,11 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c) }#endif -/* As a rule processors have APIC timer running in deep C states */ -if (c->x86 >0xf && !cpu_has_amd_erratum (amd_erratum_400)) +/* +* Family 0x12 and above processors have APIC timer +* running in deep C states. +*/ +if (c->x86 >0x11 )set_cpu_cap (c,X86_FEATURE_ARAT );/*
@@ -612,10 +615,13 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)* Fixes: https://bugzilla.kernel.org/show_bug.cgi?id=33012 */ u64 mask; +int err; -rdmsrl (MSR_AMD64_MCx_MASK (4 ), mask); - mask |= (1 <<10 ); -wrmsrl (MSR_AMD64_MCx_MASK (4 ), mask); + err =rdmsrl_safe (MSR_AMD64_MCx_MASK (4 ), &mask); +if (err ==0 ) { + mask |= (1 <<10 ); +checking_wrmsrl (MSR_AMD64_MCx_MASK (4 ), mask); + } } }
arch/x86/kernel/cpu/common.c +1 -2
@@ -565,8 +565,7 @@ void __cpuinit get_cpu_cap(struct cpuinfo_x86 *c)cpuid_count (0x00000007 ,0 , &eax, &ebx, &ecx, &edx); -if (eax >0 ) - c->x86_capability[9 ] = ebx; + c->x86_capability[9 ] = ebx; }/* AMD-defined flags: level 0x80000001 */
arch/x86/kernel/cpu/cpufreq/pcc-cpufreq.c +2 -2
@@ -39,7 +39,7 @@#include <acpi/processor.h> -#define PCC_VERSION "1.00.00" +#define PCC_VERSION "1.10.00"#define POLL_LOOPS 300#define CMD_COMPLETE 0x1
@@ -102,7 +102,7 @@ static struct acpi_generic_address doorbell;static u64 doorbell_preserve;static u64 doorbell_write; -static u8 OSC_UUID [16 ] = {0x63 ,0x9B ,0x2C ,0x9F ,0x70 ,0x91 ,0x49 ,0x1f , +static u8 OSC_UUID [16 ] = {0x9F ,0x2C ,0x9B ,0x63 ,0x91 ,0x70 ,0x1f ,0x49 ,0xBB ,0x4F ,0xA5 ,0x98 ,0x2F ,0xA1 ,0xB5 ,0x46 };struct pcc_cpu {
arch/x86/lib/copy_user_64.S +2 -2
@@ -72,7 +72,7 @@ ENTRY(_copy_to_user) addq %rdx,%rcx jc bad_to_user cmpq TI_addr_limit(%rax),%rcx - jae bad_to_user + ja bad_to_user ALTERNATIVE_JUMP X86_FEATURE_REP_GOOD,copy_user_generic_unrolled,copy_user_generic_string CFI_ENDPROC ENDPROC(_copy_to_user)
@@ -85,7 +85,7 @@ ENTRY(_copy_from_user) addq %rdx,%rcx jc bad_from_user cmpq TI_addr_limit(%rax),%rcx - jae bad_from_user + ja bad_from_user ALTERNATIVE_JUMP X86_FEATURE_REP_GOOD,copy_user_generic_unrolled,copy_user_generic_string CFI_ENDPROC ENDPROC(_copy_from_user)
arch/x86/oprofile/op_model_amd.c +54 -41
153 lines not on this page · raw message
arch/x86/xen/mmu.c +1 -1
@@ -1138,7 +1138,7 @@ static void drop_other_mm_ref(void *info) active_mm =percpu_read (cpu_tlbstate.active_mm); -if (active_mm == mm) +if (active_mm == mm &&percpu_read (cpu_tlbstate.state) !=TLBSTATE_OK )leave_mm (smp_processor_id ());/* If this cpu still has a stale cr3 reference, then make sure
block/blk-settings.c +2 -1
@@ -120,7 +120,7 @@ void blk_set_default_limits(struct queue_limits *lim) lim->discard_granularity =0 ; lim->discard_alignment =0 ; lim->discard_misaligned =0 ; - lim->discard_zeroes_data =-1 ; + lim->discard_zeroes_data =1 ; lim->logical_block_size = lim->physical_block_size = lim->io_min =512 ; lim->bounce_pfn = (unsigned long )(BLK_BOUNCE_ANY >>PAGE_SHIFT ); lim->alignment_offset =0 ;
@@ -174,6 +174,7 @@ void blk_queue_make_request(struct request_queue *q, make_request_fn *mfn)blk_set_default_limits (&q->limits);blk_queue_max_hw_sectors (q,BLK_SAFE_MAX_SECTORS ); + q->limits.discard_zeroes_data =0 ;/* * If the caller didn't supply a lock, fall back to our embedded
block/blk-sysfs.c +2 -1
@@ -152,7 +152,8 @@ static ssize_t queue_discard_granularity_show(struct request_queue *q, char *pagstatic ssize_t queue_discard_max_show (struct request_queue *q,char *page) { -return queue_var_show (q->limits.max_discard_sectors <<9 , page); +return sprintf (page,"%llu\n" , + (unsigned long long )q->limits.max_discard_sectors <<9 ); }static ssize_t queue_discard_zeroes_data_show (struct request_queue *q,char *page)
block/blk.h +2 -1
@@ -68,7 +68,8 @@ static inline struct request *__elv_next_request(struct request_queue *q)return rq; } -if (!q->elevator->ops->elevator_dispatch_fn (q,0 )) +if (test_bit (QUEUE_FLAG_DEAD , &q->queue_flags) || + !q->elevator->ops->elevator_dispatch_fn (q,0 ))return NULL ; } }
block/genhd.c +1 -1
@@ -1724,7 +1724,7 @@ static void disk_add_events(struct gendisk *disk) {struct disk_events *ev; -if (!disk->fops->check_events || !(disk->events | disk->async_events)) +if (!disk->fops->check_events)return ; ev =kzalloc (sizeof (*ev),GFP_KERNEL );
drivers/ata/pata_cmd64x.c +38 -4
70 lines not on this page · raw message
drivers/block/brd.c +7 -4
@@ -552,7 +552,7 @@ static struct kobject *brd_probe(dev_t dev, int *part, void *data)struct kobject *kobj;mutex_lock (&brd_devices_mutex); - brd =brd_init_one (dev &MINORMASK ); + brd =brd_init_one (MINOR (dev) >> part_shift); kobj = brd ?get_disk (brd->brd_disk) :ERR_PTR (-ENOMEM );mutex_unlock (&brd_devices_mutex);
@@ -585,15 +585,18 @@ static int __init brd_init(void)if (max_part >0 ) part_shift =fls (max_part); +if ((1UL << part_shift) >DISK_MAX_PARTS ) +return -EINVAL ; +if (rd_nr >1UL << (MINORBITS - part_shift))return -EINVAL ;if (rd_nr) { nr = rd_nr; - range = rd_nr; + range = rd_nr << part_shift; }else { nr =CONFIG_BLK_DEV_RAM_COUNT ; - range =1UL << (MINORBITS - part_shift); + range =1UL <<MINORBITS ; }if (register_blkdev (RAMDISK_MAJOR ,"ramdisk" ))
@@ -632,7 +635,7 @@ static void __exit brd_exit(void)unsigned long range;struct brd_device *brd, *next; - range = rd_nr ? rd_nr :1UL << (MINORBITS - part_shift); + range = rd_nr ? rd_nr << part_shift :1UL <<MINORBITS ;list_for_each_entry_safe (brd, next, &brd_devices, brd_list)brd_del_one (brd);
drivers/block/loop.c +7 -4
@@ -1674,7 +1674,7 @@ static struct kobject *loop_probe(dev_t dev, int *part, void *data)struct kobject *kobj;mutex_lock (&loop_devices_mutex); - lo =loop_init_one (dev &MINORMASK ); + lo =loop_init_one (MINOR (dev) >> part_shift); kobj = lo ?get_disk (lo->lo_disk) :ERR_PTR (-ENOMEM );mutex_unlock (&loop_devices_mutex);
@@ -1707,15 +1707,18 @@ static int __init loop_init(void)if (max_part >0 ) part_shift =fls (max_part); +if ((1UL << part_shift) >DISK_MAX_PARTS ) +return -EINVAL ; +if (max_loop >1UL << (MINORBITS - part_shift))return -EINVAL ;if (max_loop) { nr = max_loop; - range = max_loop; + range = max_loop << part_shift; }else { nr =8 ; - range =1UL << (MINORBITS - part_shift); + range =1UL <<MINORBITS ; }if (register_blkdev (LOOP_MAJOR ,"loop" ))
@@ -1754,7 +1757,7 @@ static void __exit loop_exit(void)unsigned long range;struct loop_device *lo, *next; - range = max_loop ? max_loop :1UL << (MINORBITS - part_shift); + range = max_loop ? max_loop << part_shift :1UL <<MINORBITS ;list_for_each_entry_safe (lo, next, &loop_devices, lo_list)loop_del_one (lo);
drivers/block/paride/pcd.c +12 -7
@@ -172,7 +172,8 @@ module_param_array(drive3, int, NULL, 0);static int pcd_open (struct cdrom_device_info *cdi,int purpose);static void pcd_release (struct cdrom_device_info *cdi);static int pcd_drive_status (struct cdrom_device_info *cdi,int slot_nr); -static int pcd_media_changed (struct cdrom_device_info *cdi,int slot_nr); +static unsigned int pcd_check_events (struct cdrom_device_info *cdi, +unsigned int clearing,int slot_nr);static int pcd_tray_move (struct cdrom_device_info *cdi,int position);static int pcd_lock_door (struct cdrom_device_info *cdi,int lock);static int pcd_drive_reset (struct cdrom_device_info *cdi);
@@ -257,10 +258,11 @@ static int pcd_block_ioctl(struct block_device *bdev, fmode_t mode,return ret; } -static int pcd_block_media_changed (struct gendisk *disk) +static unsigned int pcd_block_check_events (struct gendisk *disk, +unsigned int clearing) {struct pcd_unit *cd = disk->private_data; -return cdrom_media_changed (&cd->info); +return cdrom_check_events (&cd->info, clearing); }static const struct block_device_operations pcd_bdops = {
@@ -268,14 +270,14 @@ static const struct block_device_operations pcd_bdops = { .open = pcd_block_open, .release = pcd_block_release, .ioctl = pcd_block_ioctl, - .media_changed = pcd_block_media_changed, + .check_events = pcd_block_check_events, };static struct cdrom_device_ops pcd_dops = { .open = pcd_open, .release = pcd_release, .drive_status = pcd_drive_status, - .media_changed = pcd_media_changed, + .check_events = pcd_check_events, .tray_move = pcd_tray_move, .lock_door = pcd_lock_door, .get_mcn = pcd_get_mcn,
@@ -318,6 +320,8 @@ static void pcd_init_units(void) disk->first_minor = unit;strcpy (disk->disk_name, cd->name);/* umm... */ disk->fops = &pcd_bdops; + disk->flags =GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE ; + disk->events =DISK_EVENT_MEDIA_CHANGE ; } }
@@ -502,13 +506,14 @@ static int pcd_packet(struct cdrom_device_info *cdi, struct packet_command *cgc)#define DBMSG (msg) ((verbose>1)?(msg):NULL) -static int pcd_media_changed (struct cdrom_device_info *cdi,int slot_nr) +static unsigned int pcd_check_events (struct cdrom_device_info *cdi, +unsigned int clearing,int slot_nr) {struct pcd_unit *cd = cdi->handle;int res = cd->changed;if (res) cd->changed =0 ; -return res; +return res ?DISK_EVENT_MEDIA_CHANGE :0 ; }static int pcd_lock_door (struct cdrom_device_info *cdi,int lock)
drivers/block/paride/pd.c +4 -3
@@ -794,7 +794,7 @@ static int pd_release(struct gendisk *p, fmode_t mode)return 0 ; } -static int pd_check_media (struct gendisk *p) +static unsigned int pd_check_events (struct gendisk *p,unsigned int clearing) {struct pd_unit *disk = p->private_data;int r;
@@ -803,7 +803,7 @@ static int pd_check_media(struct gendisk *p)pd_special_command (disk, pd_media_check); r = disk->changed; disk->changed =0 ; -return r; +return r ?DISK_EVENT_MEDIA_CHANGE :0 ; }static int pd_revalidate (struct gendisk *p)
@@ -822,7 +822,7 @@ static const struct block_device_operations pd_fops = { .release = pd_release, .ioctl = pd_ioctl, .getgeo = pd_getgeo, - .media_changed = pd_check_media, + .check_events = pd_check_events, .revalidate_disk= pd_revalidate };
@@ -837,6 +837,7 @@ static void pd_probe_drive(struct pd_unit *disk) p->fops = &pd_fops; p->major = major; p->first_minor = (disk - pd) <<PD_BITS ; + p->events =DISK_EVENT_MEDIA_CHANGE ; disk->gd = p; p->private_data = disk; p->queue = pd_queue;
drivers/block/paride/pf.c +6 -4
@@ -243,7 +243,8 @@ static struct pf_unit units[PF_UNITS];static int pf_identify (struct pf_unit *pf);static void pf_lock (struct pf_unit *pf,int func);static void pf_eject (struct pf_unit *pf); -static int pf_check_media (struct gendisk *disk); +static unsigned int pf_check_events (struct gendisk *disk, +unsigned int clearing);static char pf_scratch[512 ];/* scratch block buffer */
@@ -270,7 +271,7 @@ static const struct block_device_operations pf_fops = { .release = pf_release, .ioctl = pf_ioctl, .getgeo = pf_getgeo, - .media_changed = pf_check_media, + .check_events = pf_check_events, };static void __init pf_init_units (void )
@@ -293,6 +294,7 @@ static void __init pf_init_units(void) disk->first_minor = unit;strcpy (disk->disk_name, pf->name); disk->fops = &pf_fops; + disk->events =DISK_EVENT_MEDIA_CHANGE ;if (!(*drives[unit])[D_PRT ]) pf_drive_count++; }
@@ -377,9 +379,9 @@ static int pf_release(struct gendisk *disk, fmode_t mode) } -static int pf_check_media (struct gendisk *disk) +static unsigned int pf_check_events (struct gendisk *disk,unsigned int clearing) { -return 1 ; +return DISK_EVENT_MEDIA_CHANGE ; }static inline int status_reg (struct pf_unit *pf)
drivers/cdrom/gdrom.c +10 -6
@@ -395,10 +395,12 @@ static int gdrom_drivestatus(struct cdrom_device_info *cd_info, int ignore)return CDS_NO_INFO ; } -static int gdrom_mediachanged (struct cdrom_device_info *cd_info,int ignore) +static unsigned int gdrom_check_events (struct cdrom_device_info *cd_info, +unsigned int clearing,int ignore) {/* check the sense key */ -return (__raw_readb (GDROM_ERROR_REG ) &0xF0 ) ==0x60 ; +return (__raw_readb (GDROM_ERROR_REG ) &0xF0 ) ==0x60 ? +DISK_EVENT_MEDIA_CHANGE :0 ; }/* reset the G1 bus */
@@ -483,7 +485,7 @@ static struct cdrom_device_ops gdrom_ops = { .open = gdrom_open, .release = gdrom_release, .drive_status = gdrom_drivestatus, - .media_changed = gdrom_mediachanged, + .check_events = gdrom_check_events, .get_last_session = gdrom_get_last_session, .reset = gdrom_hardreset, .audio_ioctl = gdrom_audio_ioctl,
@@ -509,9 +511,10 @@ static int gdrom_bdops_release(struct gendisk *disk, fmode_t mode)return 0 ; } -static int gdrom_bdops_mediachanged (struct gendisk *disk) +static unsigned int gdrom_bdops_check_events (struct gendisk *disk, +unsigned int clearing) { -return cdrom_media_changed (gd.cd_info); +return cdrom_check_events (gd.cd_info, clearing); } static int gdrom_bdops_ioctl(struct block_device *bdev, fmode_t mode,
@@ -530,7 +533,7 @@ static const struct block_device_operations gdrom_bdops = { .owner = THIS_MODULE, .open = gdrom_bdops_open, .release = gdrom_bdops_release, - .media_changed = gdrom_bdops_mediachanged, + .check_events = gdrom_bdops_check_events, .ioctl = gdrom_bdops_ioctl, };
@@ -800,6 +803,7 @@ static int __devinit probe_gdrom(struct platform_device *devptr) goto probe_fail_cdrom_register; } gd.disk->fops = &gdrom_bdops; + gd.disk->events =DISK_EVENT_MEDIA_CHANGE ;/* latch on to the interrupt */ err =gdrom_set_interrupt_handlers ();if (err)
drivers/cdrom/viocd.c +12 -8
@@ -186,10 +186,11 @@ static int viocd_blk_ioctl(struct block_device *bdev, fmode_t mode,return ret; } -static int viocd_blk_media_changed (struct gendisk *disk) +static unsigned int viocd_blk_check_events (struct gendisk *disk, +unsigned int clearing) {struct disk_info *di = disk->private_data; -return cdrom_media_changed (&di->viocd_info); +return cdrom_check_events (&di->viocd_info, clearing); }static const struct block_device_operations viocd_fops = {
@@ -197,7 +198,7 @@ static const struct block_device_operations viocd_fops = { .open = viocd_blk_open, .release = viocd_blk_release, .ioctl = viocd_blk_ioctl, - .media_changed = viocd_blk_media_changed, + .check_events = viocd_blk_check_events, };static int viocd_open (struct cdrom_device_info *cdi,int purpose)
@@ -320,7 +321,8 @@ static void do_viocd_request(struct request_queue *q) } } -static int viocd_media_changed (struct cdrom_device_info *cdi,int disc_nr) +static unsigned int viocd_check_events (struct cdrom_device_info *cdi, +unsigned int clearing,int disc_nr) {struct viocd_waitevent we;HvLpEvent_Rc hvrc;
@@ -340,7 +342,7 @@ static int viocd_media_changed(struct cdrom_device_info *cdi, int disc_nr)if (hvrc !=0 ) {pr_warning ("bad rc on HvCallEvent_signalLpEventFast %d\n" , (int )hvrc); -return -EIO ; +return 0 ; }wait_for_completion (&we.com);
@@ -354,7 +356,7 @@ static int viocd_media_changed(struct cdrom_device_info *cdi, int disc_nr)return 0 ; } -return we.changed; +return we.changed ?DISK_EVENT_MEDIA_CHANGE :0 ; }static int viocd_lock_door (struct cdrom_device_info *cdi,int locking)
@@ -550,7 +552,7 @@ static int viocd_audio_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,static struct cdrom_device_ops viocd_dops = { .open = viocd_open, .release = viocd_release, - .media_changed = viocd_media_changed, + .check_events = viocd_check_events, .lock_door = viocd_lock_door, .generic_packet = viocd_packet, .audio_ioctl = viocd_audio_ioctl,
@@ -623,7 +625,9 @@ static int viocd_probe(struct vio_dev *vdev, const struct vio_device_id *id)blk_queue_max_hw_sectors (q,4096 /512 ); gendisk->queue = q; gendisk->fops = &viocd_fops; - gendisk->flags =GENHD_FL_CD |GENHD_FL_REMOVABLE ; + gendisk->flags =GENHD_FL_CD |GENHD_FL_REMOVABLE | +GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE ; + gendisk->events =DISK_EVENT_MEDIA_CHANGE ;set_capacity (gendisk,0 ); gendisk->private_data = d; d->viocd_disk = gendisk;
drivers/char/i8k.c +2 -2
@@ -139,8 +139,8 @@ static int i8k_smm(struct smm_regs *regs) "movl %%edi,20(%%rax)\n\t" "popq %%rdx\n\t" "movl %%edx,0(%%rax)\n\t" - "lahf\n\t" - "shrl $8,%%eax\n\t" + "pushfq\n\t" + "popq %%rax\n\t" "andl $1,%%eax\n" :"=a"(rc) : "a"(regs)
drivers/cpufreq/cpufreq.c +18 -2
@@ -1207,12 +1207,28 @@ static int __cpufreq_remove_dev(struct sys_device *sys_dev) cpufreq_driver->exit (data);unlock_policy_rwsem_write (cpu); +cpufreq_debug_enable_ratelimit (); + +#ifdef CONFIG_HOTPLUG_CPU +/* when the CPU which is the parent of the kobj is hotplugged +* offline, check for siblings, and create cpufreq sysfs interface +* and symlinks +*/ +if (unlikely (cpumask_weight (data->cpus) >1 )) { +/* first sibling now owns the new sysfs dir */ +cpumask_clear_cpu (cpu, data->cpus); +cpufreq_add_dev (get_cpu_sysdev (cpumask_first (data->cpus))); + +/* finally remove our own symlink */ +lock_policy_rwsem_write (cpu); +__cpufreq_remove_dev (sys_dev); + } +#endif +free_cpumask_var (data->related_cpus);free_cpumask_var (data->cpus);kfree (data); -per_cpu (cpufreq_cpu_data, cpu) =NULL ; -cpufreq_debug_enable_ratelimit ();return 0 ; }
drivers/cpufreq/cpufreq_stats.c +18 -3
@@ -165,17 +165,27 @@ static int freq_table_get_index(struct cpufreq_stats *stat, unsigned int freq)return -1 ; } +/* should be called late in the CPU removal sequence so that the stats +* memory is still available in case someone tries to use it. +*/ static void cpufreq_stats_free_table (unsigned int cpu) {struct cpufreq_stats *stat =per_cpu (cpufreq_stats_table, cpu); -struct cpufreq_policy *policy =cpufreq_cpu_get (cpu); -if (policy && policy->cpu == cpu) -sysfs_remove_group (&policy->kobj, &stats_attr_group);if (stat) {kfree (stat->time_in_state);kfree (stat); }per_cpu (cpufreq_stats_table, cpu) =NULL ; +} + +/* must be called early in the CPU removal sequence (before +* cpufreq_remove_dev) so that policy is still valid. +*/ +static void cpufreq_stats_free_sysfs (unsigned int cpu) +{ +struct cpufreq_policy *policy =cpufreq_cpu_get (cpu); +if (policy && policy->cpu == cpu) +sysfs_remove_group (&policy->kobj, &stats_attr_group);if (policy)cpufreq_cpu_put (policy); }
@@ -316,6 +326,9 @@ static int __cpuinit cpufreq_stat_cpu_callback(struct notifier_block *nfb,case CPU_ONLINE_FROZEN :cpufreq_update_policy (cpu);break ; +case CPU_DOWN_PREPARE : +cpufreq_stats_free_sysfs (cpu); +break ;case CPU_DEAD :case CPU_DEAD_FROZEN :cpufreq_stats_free_table (cpu);
@@ -324,9 +337,11 @@ static int __cpuinit cpufreq_stat_cpu_callback(struct notifier_block *nfb,return NOTIFY_OK ; } +/* priority=1 so this will get called before cpufreq_remove_dev */ static struct notifier_block cpufreq_stat_cpu_notifier__refdata = { .notifier_call = cpufreq_stat_cpu_callback, + .priority =1 , };static struct notifier_block notifier_policy_block = {
drivers/cpuidle/governors/menu.c +3 -1
@@ -237,6 +237,7 @@ static int menu_select(struct cpuidle_device *dev)unsigned int power_usage =-1 ;int i;int multiplier; +struct timespec t;if (data->needs_update) {menu_update (dev);
@@ -251,8 +252,9 @@ static int menu_select(struct cpuidle_device *dev)return 0 ;/* determine the expected residency time, round up */ + t =ktime_to_timespec (tick_nohz_get_sleep_length ()); data->expected_us = -DIV_ROUND_UP ((u32 )ktime_to_ns (tick_nohz_get_sleep_length ()),1000 ); + t.tv_sec *USEC_PER_SEC + t.tv_nsec /NSEC_PER_USEC ; data->bucket =which_bucket (data->expected_us);
drivers/gpu/drm/drm_irq.c +23 -0
@@ -942,11 +942,34 @@ EXPORT_SYMBOL(drm_vblank_put);void drm_vblank_off (struct drm_device *dev,int crtc) { +struct drm_pending_vblank_event *e, *t; +struct timeval now;unsigned long irqflags; +unsigned int seq;spin_lock_irqsave (&dev->vbl_lock, irqflags);vblank_disable_and_save (dev, crtc);DRM_WAKEUP (&dev->vbl_queue[crtc]); + +/* Send any queued vblank events, lest the natives grow disquiet */ + seq =drm_vblank_count_and_time (dev, crtc, &now); +list_for_each_entry_safe (e, t, &dev->vblank_event_list, base.link) { +if (e->pipe != crtc) +continue ; +DRM_DEBUG ("Sending premature vblank event on disable: \ +wanted %d, current %d\n" , + e->event.sequence, seq); + + e->event.sequence = seq; + e->event.tv_sec = now.tv_sec; + e->event.tv_usec = now.tv_usec; +drm_vblank_put (dev, e->pipe); +list_move_tail (&e->base.link, &e->base.file_priv->event_list); +wake_up_interruptible (&e->base.file_priv->event_wait); +trace_drm_vblank_event_delivered (e->base.pid, e->pipe, + e->event.sequence); + } +spin_unlock_irqrestore (&dev->vbl_lock, irqflags); }EXPORT_SYMBOL (drm_vblank_off);
drivers/gpu/drm/i915/intel_ringbuffer.c +27 -2
@@ -684,12 +684,37 @@ gen6_ring_put_irq(struct intel_ring_buffer *ring, u32 gflag, u32 rflag)static bool bsd_ring_get_irq (struct intel_ring_buffer *ring) { -return ring_get_irq (ring,GT_BSD_USER_INTERRUPT ); +struct drm_device *dev = ring->dev; +drm_i915_private_t *dev_priv = dev->dev_private; + +if (!dev->irq_enabled) +return false; + +spin_lock (&ring->irq_lock); +if (ring->irq_refcount++ ==0 ) { +if (IS_G4X (dev)) +i915_enable_irq (dev_priv,I915_BSD_USER_INTERRUPT ); +else +ironlake_enable_irq (dev_priv,GT_BSD_USER_INTERRUPT ); + } +spin_unlock (&ring->irq_lock); + +return true; }static void bsd_ring_put_irq (struct intel_ring_buffer *ring) { -ring_put_irq (ring,GT_BSD_USER_INTERRUPT ); +struct drm_device *dev = ring->dev; +drm_i915_private_t *dev_priv = dev->dev_private; + +spin_lock (&ring->irq_lock); +if (--ring->irq_refcount ==0 ) { +if (IS_G4X (dev)) +i915_disable_irq (dev_priv,I915_BSD_USER_INTERRUPT ); +else +ironlake_disable_irq (dev_priv,GT_BSD_USER_INTERRUPT ); + } +spin_unlock (&ring->irq_lock); } static int
drivers/gpu/drm/radeon/evergreen.c +5 -1
@@ -1585,7 +1585,7 @@ static void evergreen_gpu_init(struct radeon_device *rdev)u32 sq_stack_resource_mgmt_2;u32 sq_stack_resource_mgmt_3;u32 vgt_cache_invalidation; -u32 hdp_host_path_cntl; +u32 hdp_host_path_cntl, tmp;int i, j, num_shader_engines, ps_thread_count;switch (rdev->family) {
@@ -2145,6 +2145,10 @@ static void evergreen_gpu_init(struct radeon_device *rdev)for (i =SQ_ALU_CONST_BUFFER_SIZE_HS_0 ; i <0x29000 ; i +=4 )WREG32 (i,0 ); + tmp =RREG32 (HDP_MISC_CNTL ); + tmp |=HDP_FLUSH_INVALIDATE_CACHE ; +WREG32 (HDP_MISC_CNTL , tmp); + hdp_host_path_cntl =RREG32 (HDP_HOST_PATH_CNTL );WREG32 (HDP_HOST_PATH_CNTL , hdp_host_path_cntl);
drivers/gpu/drm/radeon/evergreend.h +2 -0
@@ -64,6 +64,8 @@#define GB_BACKEND_MAP 0x98FC#define DMIF_ADDR_CONFIG 0xBD4#define HDP_ADDR_CONFIG 0x2F48 +#define HDP_MISC_CNTL 0x2F4C +#define HDP_FLUSH_INVALIDATE_CACHE (1 << 0)#define CC_SYS_RB_BACKEND_DISABLE 0x3F88#define GC_USER_RB_BACKEND_DISABLE 0x9B7C
drivers/gpu/drm/radeon/radeon_asic.c +4 -0
@@ -782,6 +782,7 @@ static struct radeon_asic evergreen_asic = { .hpd_fini = &evergreen_hpd_fini, .hpd_sense = &evergreen_hpd_sense, .hpd_set_polarity = &evergreen_hpd_set_polarity, + .ioctl_wait_idle = r600_ioctl_wait_idle, .gui_idle = &r600_gui_idle, .pm_misc = &evergreen_pm_misc, .pm_prepare = &evergreen_pm_prepare,
@@ -828,6 +829,7 @@ static struct radeon_asic sumo_asic = { .hpd_fini = &evergreen_hpd_fini, .hpd_sense = &evergreen_hpd_sense, .hpd_set_polarity = &evergreen_hpd_set_polarity, + .ioctl_wait_idle = r600_ioctl_wait_idle, .gui_idle = &r600_gui_idle, .pm_misc = &evergreen_pm_misc, .pm_prepare = &evergreen_pm_prepare,
@@ -874,6 +876,8 @@ static struct radeon_asic btc_asic = { .hpd_fini = &evergreen_hpd_fini, .hpd_sense = &evergreen_hpd_sense, .hpd_set_polarity = &evergreen_hpd_set_polarity, + .ioctl_wait_idle = r600_ioctl_wait_idle, + .ioctl_wait_idle = r600_ioctl_wait_idle, .gui_idle = &r600_gui_idle, .pm_misc = &evergreen_pm_misc, .pm_prepare = &evergreen_pm_prepare,
drivers/hid/hid-magicmouse.c +9 -1
@@ -501,9 +501,17 @@ static int magicmouse_probe(struct hid_device *hdev, } report->size =6 ; +/* +* The device reponds with 'invalid report id' when feature +* report switching it into multitouch mode is sent to it. +* +* This results in -EIO from the _raw low-level transport callback, +* but there seems to be no other way of switching the mode. +* Thus the super-ugly hacky success check below. +*/ ret = hdev->hid_output_raw_report (hdev, feature,sizeof (feature),HID_FEATURE_REPORT ); -if (ret !=sizeof (feature)) { +if (ret != -EIO ) {hid_err (hdev,"unable to request touch data (%d)\n" , ret); goto err_stop_hw; }
drivers/ide/ide-cd.c +7 -5
@@ -1177,7 +1177,7 @@ static struct cdrom_device_ops ide_cdrom_dops = { .open = ide_cdrom_open_real, .release = ide_cdrom_release_real, .drive_status = ide_cdrom_drive_status, - .media_changed = ide_cdrom_check_media_change_real, + .check_events = ide_cdrom_check_events_real, .tray_move = ide_cdrom_tray_move, .lock_door = ide_cdrom_lock_door, .select_speed = ide_cdrom_select_speed,
@@ -1702,10 +1702,11 @@ static int idecd_ioctl(struct block_device *bdev, fmode_t mode, } -static int idecd_media_changed (struct gendisk *disk) +static unsigned int idecd_check_events (struct gendisk *disk, +unsigned int clearing) {struct cdrom_info *info =ide_drv_g (disk, cdrom_info); -return cdrom_media_changed (&info->devinfo); +return cdrom_check_events (&info->devinfo, clearing); }static int idecd_revalidate_disk (struct gendisk *disk)
@@ -1723,7 +1724,7 @@ static const struct block_device_operations idecd_ops = { .open = idecd_open, .release = idecd_release, .ioctl = idecd_ioctl, - .media_changed = idecd_media_changed, + .check_events = idecd_check_events, .revalidate_disk = idecd_revalidate_disk };
@@ -1789,7 +1790,8 @@ static int ide_cd_probe(ide_drive_t *drive)ide_cd_read_toc (drive, &sense); g->fops = &idecd_ops; - g->flags |=GENHD_FL_REMOVABLE ; + g->flags |=GENHD_FL_REMOVABLE |GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE ; + g->events =DISK_EVENT_MEDIA_CHANGE ;add_disk (g);return 0 ;
drivers/ide/ide-cd.h +2 -1
@@ -111,7 +111,8 @@ int cdrom_check_status(ide_drive_t *, struct request_sense *);int ide_cdrom_open_real (struct cdrom_device_info *,int );void ide_cdrom_release_real (struct cdrom_device_info *);int ide_cdrom_drive_status (struct cdrom_device_info *,int ); -int ide_cdrom_check_media_change_real (struct cdrom_device_info *,int ); +unsigned int ide_cdrom_check_events_real (struct cdrom_device_info *, +unsigned int clearing,int slot_nr);int ide_cdrom_tray_move (struct cdrom_device_info *,int );int ide_cdrom_lock_door (struct cdrom_device_info *,int );int ide_cdrom_select_speed (struct cdrom_device_info *,int );
drivers/ide/ide-cd_ioctl.c +4 -4
@@ -79,8 +79,8 @@ int ide_cdrom_drive_status(struct cdrom_device_info *cdi, int slot_nr)return CDS_DRIVE_NOT_READY ; } -int ide_cdrom_check_media_change_real (struct cdrom_device_info *cdi, -int slot_nr) +unsigned int ide_cdrom_check_events_real (struct cdrom_device_info *cdi, +unsigned int clearing,int slot_nr) {ide_drive_t *drive = cdi->handle;int retval;
@@ -89,9 +89,9 @@ int ide_cdrom_check_media_change_real(struct cdrom_device_info *cdi, (void )cdrom_check_status (drive,NULL ); retval = (drive->dev_flags &IDE_DFLAG_MEDIA_CHANGED ) ?1 :0 ; drive->dev_flags &= ~IDE_DFLAG_MEDIA_CHANGED ; -return retval; +return retval ?DISK_EVENT_MEDIA_CHANGE :0 ; }else { -return -EINVAL ; +return 0 ; } }
drivers/ide/ide-gd.c +8 -6
@@ -285,11 +285,12 @@ static int ide_gd_getgeo(struct block_device *bdev, struct hd_geometry *geo)return 0 ; } -static int ide_gd_media_changed (struct gendisk *disk) +static unsigned int ide_gd_check_events (struct gendisk *disk, +unsigned int clearing) {struct ide_disk_obj *idkp =ide_drv_g (disk, ide_disk_obj);ide_drive_t *drive = idkp->drive; -int ret; +bool ret;/* do not scan partitions twice if this is a removable device */ if (drive->dev_flags &IDE_DFLAG_ATTACH ) {
@@ -297,10 +298,10 @@ static int ide_gd_media_changed(struct gendisk *disk)return 0 ; } - ret = !!(drive->dev_flags &IDE_DFLAG_MEDIA_CHANGED ); + ret = drive->dev_flags &IDE_DFLAG_MEDIA_CHANGED ; drive->dev_flags &= ~IDE_DFLAG_MEDIA_CHANGED ; -return ret; +return ret ?DISK_EVENT_MEDIA_CHANGE :0 ; }static void ide_gd_unlock_native_capacity (struct gendisk *disk)
@@ -318,7 +319,7 @@ static int ide_gd_revalidate_disk(struct gendisk *disk)struct ide_disk_obj *idkp =ide_drv_g (disk, ide_disk_obj);ide_drive_t *drive = idkp->drive; -if (ide_gd_media_changed (disk)) +if (ide_gd_check_events (disk,0 )) drive->disk_ops->get_capacity (drive);set_capacity (disk,ide_gd_capacity (drive));
@@ -340,7 +341,7 @@ static const struct block_device_operations ide_gd_ops = { .release = ide_gd_release, .ioctl = ide_gd_ioctl, .getgeo = ide_gd_getgeo, - .media_changed = ide_gd_media_changed, + .check_events = ide_gd_check_events, .unlock_native_capacity = ide_gd_unlock_native_capacity, .revalidate_disk = ide_gd_revalidate_disk };
@@ -412,6 +413,7 @@ static int ide_gd_probe(ide_drive_t *drive)if (drive->dev_flags &IDE_DFLAG_REMOVABLE ) g->flags =GENHD_FL_REMOVABLE ; g->fops = &ide_gd_ops; + g->events =DISK_EVENT_MEDIA_CHANGE ;add_disk (g);return 0 ;
drivers/md/bitmap.c +6 -4
@@ -493,11 +493,11 @@ void bitmap_update_sb(struct bitmap *bitmap)spin_unlock_irqrestore (&bitmap->lock, flags); sb =kmap_atomic (bitmap->sb_page,KM_USER0 ); sb->events =cpu_to_le64 (bitmap->mddev->events); -if (bitmap->mddev->events < bitmap->events_cleared) { +if (bitmap->mddev->events < bitmap->events_cleared)/* rocking back to read-only */ bitmap->events_cleared = bitmap->mddev->events; - sb->events_cleared =cpu_to_le64 (bitmap->events_cleared); - } + sb->events_cleared =cpu_to_le64 (bitmap->events_cleared); + sb->state =cpu_to_le32 (bitmap->flags);/* Just in case these have been changed via sysfs: */ sb->daemon_sleep =cpu_to_le32 (bitmap->mddev->bitmap_info.daemon_sleep/HZ ); sb->write_behind =cpu_to_le32 (bitmap->mddev->bitmap_info.max_write_behind);
@@ -618,7 +618,7 @@ success:if (le32_to_cpu (sb->version) ==BITMAP_MAJOR_HOSTENDIAN ) bitmap->flags |=BITMAP_HOSTENDIAN ; bitmap->events_cleared =le64_to_cpu (sb->events_cleared); -if (sb->state &cpu_to_le32 (BITMAP_STALE )) +if (bitmap->flags &BITMAP_STALE ) bitmap->events_cleared = bitmap->mddev->events; err =0 ; out:
@@ -652,9 +652,11 @@ static int bitmap_mask_state(struct bitmap *bitmap, enum bitmap_state bits,switch (op) {case MASK_SET : sb->state |=cpu_to_le32 (bits); + bitmap->flags |= bits;break ;case MASK_UNSET : sb->state &=cpu_to_le32 (~bits); + bitmap->flags &= ~bits;break ;default :BUG ();
drivers/md/dm-table.c +17 -0
@@ -361,6 +361,7 @@ static void close_dev(struct dm_dev_internal *d, struct mapped_device *md)static int device_area_is_invalid (struct dm_target *ti,struct dm_dev *dev,sector_t start,sector_t len,void *data) { +struct request_queue *q;struct queue_limits *limits = data;struct block_device *bdev = dev->bdev; sector_t dev_size =
@@ -369,6 +370,22 @@ static int device_area_is_invalid(struct dm_target *ti, struct dm_dev *dev, limits->logical_block_size >>SECTOR_SHIFT ;char b[BDEVNAME_SIZE ]; +/* +* Some devices exist without request functions, +* such as loop devices not yet bound to backing files. +* Forbid the use of such devices. +*/ + q =bdev_get_queue (bdev); +if (!q || !q->make_request_fn) { +DMWARN ("%s: %s is not yet initialised: " +"start=%llu, len=%llu, dev_size=%llu" , +dm_device_name (ti->table->md),bdevname (bdev, b), + (unsigned long long )start, + (unsigned long long )len, + (unsigned long long )dev_size); +return 1 ; + } +if (!dev_size)return 0 ;
drivers/md/md.c +8 -3
@@ -4335,13 +4335,19 @@ static int md_alloc(dev_t dev, char *name) disk->fops = &md_fops; disk->private_data = mddev; disk->queue = mddev->queue; +blk_queue_flush (mddev->queue,REQ_FLUSH |REQ_FUA );/* Allow extended partitions. This makes the * 'mdp' device redundant, but we can't really * remove it now. */ disk->flags |=GENHD_FL_EXT_DEVT ; -add_disk (disk); mddev->gendisk = disk; +/* As soon as we call add_disk(), another thread could get +* through to md_open, so make sure it doesn't get too far +*/ +mutex_lock (&mddev->open_mutex); +add_disk (disk); + error =kobject_init_and_add (&mddev->kobj, &md_ktype, &disk_to_dev (disk)->kobj,"%s" ,"md" );if (error) {
@@ -4355,8 +4361,7 @@ static int md_alloc(dev_t dev, char *name)if (mddev->kobj.sd &&sysfs_create_group (&mddev->kobj, &md_bitmap_group))printk (KERN_DEBUG "pointless warning\n" ); - -blk_queue_flush (mddev->queue,REQ_FLUSH |REQ_FUA ); +mutex_unlock (&mddev->open_mutex); abort:mutex_unlock (&disks_mutex);if (!error && mddev->kobj.sd) {
drivers/media/video/cx88/cx88-blackbird.c +2 -3
@@ -1122,7 +1122,6 @@ static int mpeg_release(struct file *file)mutex_lock (&dev->core->lock); file->private_data =NULL ;kfree (fh); -mutex_unlock (&dev->core->lock);/* Make sure we release the hardware */ drv =cx8802_get_driver (dev,CX88_MPEG_BLACKBIRD );
@@ -1131,6 +1130,8 @@ static int mpeg_release(struct file *file)atomic_dec (&dev->core->mpeg_users); +mutex_unlock (&dev->core->lock); +return 0 ; }
@@ -1334,11 +1335,9 @@ static int cx8802_blackbird_probe(struct cx8802_driver *drv)blackbird_register_video (dev);/* initial device configuration: needed ? */ -mutex_lock (&dev->core->lock);// init_controls(core); cx88_set_tvnorm (core,core->tvnorm);cx88_video_mux (core,0 ); -mutex_unlock (&dev->core->lock);return 0 ;
drivers/media/video/cx88/cx88-dvb.c +2 -0
@@ -132,6 +132,7 @@ static int cx88_dvb_bus_ctrl(struct dvb_frontend* fe, int acquire)return -EINVAL ; } +mutex_lock (&dev->core->lock); drv =cx8802_get_driver (dev,CX88_MPEG_DVB );if (drv) {if (acquire){
@@ -142,6 +143,7 @@ static int cx88_dvb_bus_ctrl(struct dvb_frontend* fe, int acquire) dev->frontends.active_fe_id =0 ; } } +mutex_unlock (&dev->core->lock);return ret; }
drivers/media/video/cx88/cx88-mpeg.c +9 -11
@@ -624,13 +624,11 @@ static int cx8802_request_acquire(struct cx8802_driver *drv)if (drv->advise_acquire) { -mutex_lock (&drv->core->lock); core->active_ref++;if (core->active_type_id ==CX88_BOARD_NONE ) { core->active_type_id = drv->type_id; drv->advise_acquire (drv); } -mutex_unlock (&drv->core->lock);mpeg_dbg (1 ,"%s() Post acquire GPIO=%x\n" , __func__,cx_read (MO_GP0_IO )); }
@@ -643,14 +641,12 @@ static int cx8802_request_release(struct cx8802_driver *drv) {struct cx88_core *core = drv->core; -mutex_lock (&drv->core->lock);if (drv->advise_release && --core->active_ref ==0 ) { drv->advise_release (drv); core->active_type_id =CX88_BOARD_NONE ;mpeg_dbg (1 ,"%s() Post release GPIO=%x\n" , __func__,cx_read (MO_GP0_IO )); } -mutex_unlock (&drv->core->lock);return 0 ; }
@@ -713,18 +709,17 @@ int cx8802_register_driver(struct cx8802_driver *drv) drv->request_release = cx8802_request_release;memcpy (driver, drv,sizeof (*driver)); +mutex_lock (&drv->core->lock); err = drv->probe (driver);if (err ==0 ) { i++; -mutex_lock (&drv->core->lock);list_add_tail (&driver->drvlist, &dev->drvlist); -mutex_unlock (&drv->core->lock); }else {printk (KERN_ERR "%s/2: cx8802 probe failed, err = %d\n" , dev->core->name, err); } - +mutex_unlock (&drv->core->lock); }return i ?0 : -ENODEV ;
@@ -748,6 +743,8 @@ int cx8802_unregister_driver(struct cx8802_driver *drv) dev->pci->subsystem_device, dev->core->board.name, dev->core->boardnr); +mutex_lock (&dev->core->lock); +list_for_each_entry_safe (d, dtmp, &dev->drvlist, drvlist) {/* only unregister the correct driver type */ if (d->type_id != drv->type_id)
@@ -755,15 +752,14 @@ int cx8802_unregister_driver(struct cx8802_driver *drv) err = d->remove (d);if (err ==0 ) { -mutex_lock (&drv->core->lock);list_del (&d->drvlist); -mutex_unlock (&drv->core->lock);kfree (d); }else printk (KERN_ERR "%s/2: cx8802 driver remove " "failed (%d)\n" , dev->core->name, err); } +mutex_unlock (&dev->core->lock); }return err;
@@ -827,6 +823,8 @@ static void __devexit cx8802_remove(struct pci_dev *pci_dev)flush_request_modules (dev); +mutex_lock (&dev->core->lock); +if (!list_empty (&dev->drvlist)) {struct cx8802_driver *drv, *tmp;int err;
@@ -838,9 +836,7 @@ static void __devexit cx8802_remove(struct pci_dev *pci_dev)list_for_each_entry_safe (drv, tmp, &dev->drvlist, drvlist) { err = drv->remove (drv);if (err ==0 ) { -mutex_lock (&drv->core->lock);list_del (&drv->drvlist); -mutex_unlock (&drv->core->lock); }else printk (KERN_ERR "%s/2: cx8802 driver remove " "failed (%d)\n" , dev->core->name, err);
@@ -848,6 +844,8 @@ static void __devexit cx8802_remove(struct pci_dev *pci_dev) } } +mutex_unlock (&dev->core->lock); +/* Destroy any 8802 reference. */ dev->core->dvbdev =NULL ;
drivers/media/video/cx88/cx88.h +6 -1
@@ -495,6 +495,8 @@ struct cx8802_driver {int (*suspend)(struct pci_dev *pci_dev,pm_message_t state);int (*resume)(struct pci_dev *pci_dev); +/* Callers to the following functions must hold core->lock */ +/* MPEG 8802 -> mini driver - Driver probe and configuration */ int (*probe)(struct cx8802_driver *drv);int (*remove)(struct cx8802_driver *drv);
@@ -551,8 +553,9 @@ struct cx8802_dev {/* for switching modulation types */ unsigned char ts_gen_cntrl; -/* List of attached drivers */ +/* List of attached drivers; must hold core->lock to access */ struct list_head drvlist; +struct work_struct request_module_wk; };
@@ -675,6 +678,8 @@ int cx88_audio_thread(void *data);int cx8802_register_driver (struct cx8802_driver *drv);int cx8802_unregister_driver (struct cx8802_driver *drv); + +/* Caller must hold core->lock */ struct cx8802_driver *cx8802_get_driver (struct cx8802_dev *dev,enum cx88_board_type btype);/* ----------------------------------------------------------- */
drivers/mtd/mtdconcat.c +2 -2
@@ -319,7 +319,7 @@ concat_write_oob(struct mtd_info *mtd, loff_t to, struct mtd_oob_ops *ops)if (!(mtd->flags &MTD_WRITEABLE ))return -EROFS ; - ops->retlen =0 ; + ops->retlen = ops->oobretlen =0 ;for (i =0 ; i < concat->num_subdev; i++) {struct mtd_info *subdev = concat->subdev[i];
@@ -334,7 +334,7 @@ concat_write_oob(struct mtd_info *mtd, loff_t to, struct mtd_oob_ops *ops) devops.len = subdev->size - to; err = subdev->write_oob (subdev, to, &devops); - ops->retlen += devops.retlen; + ops->retlen += devops.oobretlen;if (err)return err;
drivers/mtd/nand/nand_base.c +2 -0
@@ -3111,6 +3111,8 @@ ident_done: chip->chip_shift +=32 -1 ; } + chip->badblockbits =8 ; +/* Set the bad block position */ if (mtd->writesize >512 || (busw &NAND_BUSWIDTH_16 )) chip->badblockpos =NAND_LARGE_BADBLOCK_POS ;
drivers/net/bonding/bond_3ad.c +5 -2
@@ -1482,8 +1482,11 @@ static struct aggregator *ad_agg_selection_test(struct aggregator *best,static int agg_device_up (const struct aggregator *agg) { -return (netif_running (agg->slave->dev) && -netif_carrier_ok (agg->slave->dev)); +struct port *port = agg->lag_ports; +if (!port) +return 0 ; +return (netif_running (port->slave->dev) && +netif_carrier_ok (port->slave->dev)); }/**
drivers/net/bonding/bond_alb.c +0 -4
@@ -163,8 +163,6 @@ static int tlb_initialize(struct bonding *bond)struct tlb_client_info *new_hashtbl;int i; -spin_lock_init (&(bond_info->tx_hashtbl_lock)); - new_hashtbl =kzalloc (size,GFP_KERNEL );if (!new_hashtbl) { pr_err("%s: Error: Failed to allocate TLB hash table\n",
@@ -764,8 +762,6 @@ static int rlb_initialize(struct bonding *bond)int size =RLB_HASH_TABLE_SIZE *sizeof (struct rlb_client_info );int i; -spin_lock_init (&(bond_info->rx_hashtbl_lock)); - new_hashtbl =kmalloc (size,GFP_KERNEL );if (!new_hashtbl) { pr_err("%s: Error: Failed to allocate RLB hash table\n",
drivers/net/bonding/bond_main.c +10 -6
@@ -1441,12 +1441,6 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev) bond_dev->name, slave_dev->name); } -/* bond must be initialized by bond_open() before enslaving */ -if (!(bond_dev->flags &IFF_UP )) { -pr_warning ("%s: master_dev is not up in bond_enslave\n" , - bond_dev->name); - } -/* already enslaved */ if (slave_dev->flags &IFF_SLAVE ) {pr_debug ("Error, Device was already enslaved\n" );
@@ -5157,9 +5151,19 @@ static int bond_init(struct net_device *bond_dev) {struct bonding *bond =netdev_priv (bond_dev);struct bond_net *bn =net_generic (dev_net (bond_dev), bond_net_id); +struct alb_bond_info *bond_info = &(BOND_ALB_INFO (bond));pr_debug ("Begin bond_init for %s\n" , bond_dev->name); +/* +* Initialize locks that may be required during +* en/deslave operations. All of the bond_open work +* (of which this is part) should really be moved to +* a phase prior to dev_open +*/ +spin_lock_init (&(bond_info->tx_hashtbl_lock)); +spin_lock_init (&(bond_info->rx_hashtbl_lock)); + bond->wq =create_singlethread_workqueue (bond_dev->name);if (!bond->wq)return -ENOMEM ;
drivers/net/bonding/bond_sysfs.c +0 -6
@@ -224,12 +224,6 @@ static ssize_t bonding_store_slaves(struct device *d,struct net_device *dev;struct bonding *bond =to_bond (d); -/* Quick sanity check -- is the bond interface up? */ -if (!(bond->dev->flags &IFF_UP )) { -pr_warning ("%s: doing slave updates when interface is down.\n" , - bond->dev->name); - } -if (!rtnl_trylock ())return restart_syscall ();
drivers/net/macvlan.c +2 -2
@@ -586,8 +586,8 @@ static int macvlan_port_create(struct net_device *dev) err =netdev_rx_handler_register (dev, macvlan_handle_frame, port);if (err)kfree (port); - - dev->priv_flags |=IFF_MACVLAN_PORT ; +else + dev->priv_flags |=IFF_MACVLAN_PORT ;return err; }
drivers/net/wireless/ath/ath9k/ar9003_eeprom.c +12 -2
@@ -652,7 +652,7 @@ static const struct ar9300_eeprom ar9300_x113 = { .regDmn = { LE16(0), LE16(0x1f) }, .txrxMask = 0x77, /* 4 bits tx and 4 bits rx */ .opCapFlags = { - .opFlags =AR5416_OPFLAGS_11G |AR5416_OPFLAGS_11A , + .opFlags =AR5416_OPFLAGS_11A , .eepMisc = 0, }, .rfSilent = 0,
@@ -922,7 +922,7 @@ static const struct ar9300_eeprom ar9300_x113 = { .db_stage2 = {3, 3, 3}, /* 3 chain */ .db_stage3 = {3, 3, 3}, /* doesn't exist for 2G */ .db_stage4 = {3, 3, 3}, /* don't exist for 2G */ - .xpaBiasLvl = 0, + .xpaBiasLvl = 0xf, .txFrameToDataStart = 0x0e, .txFrameToPaOn = 0x0e, .txClip = 3, /* 4 bits tx_clip, 4 bits dac_scale_cck */
@@ -3994,6 +3994,16 @@ static int ar9003_hw_tx_power_regwrite(struct ath_hw *ah, u8 * pPwrArray)POW_SM (pPwrArray[ALL_TARGET_LEGACY_1L_5L ],0 ) ); +/* Write the power for duplicated frames - HT40 */ + +/* dup40_cck (LSB), dup40_ofdm, ext20_cck, ext20_ofdm (MSB) */ +REG_WRITE (ah,0xa3e0 , +POW_SM (pPwrArray[ALL_TARGET_LEGACY_6_24 ],24 ) | +POW_SM (pPwrArray[ALL_TARGET_LEGACY_1L_5L ],16 ) | +POW_SM (pPwrArray[ALL_TARGET_LEGACY_6_24 ],8 ) | +POW_SM (pPwrArray[ALL_TARGET_LEGACY_1L_5L ],0 ) + ); +/* Write the HT20 power per rate set */ /* 0/8/16 (LSB), 1-3/9-11/17-19, 4, 5 (MSB) */
drivers/net/wireless/ath/ath9k/calib.c +13 -0
@@ -69,15 +69,21 @@ static void ath9k_hw_update_nfcal_hist_buffer(struct ath_hw *ah, int16_t *nfarray) {struct ath_common *common =ath9k_hw_common (ah); +struct ieee80211_conf *conf = &common->hw->conf;struct ath_nf_limits *limit;struct ath9k_nfcal_hist *h;bool high_nf_mid = false; +u8 chainmask = (ah->rxchainmask <<3 ) | ah->rxchainmask;int i; h = cal->nfCalHist; limit =ath9k_hw_get_nf_limits (ah, ah->curchan);for (i =0 ; i <NUM_NF_READINGS ; i++) { +if (!(chainmask & (1 << i)) || + ((i >=AR5416_MAX_CHAINS ) && !conf_is_ht40 (conf))) +continue ; + h[i].nfCalBuffer[h[i].currIndex] = nfarray[i];if (++h[i].currIndex >=ATH9K_NF_CAL_HIST_MAX )
@@ -225,6 +231,7 @@ void ath9k_hw_loadnf(struct ath_hw *ah, struct ath9k_channel *chan)int32_t val;u8 chainmask = (ah->rxchainmask <<3 ) | ah->rxchainmask;struct ath_common *common =ath9k_hw_common (ah); +struct ieee80211_conf *conf = &common->hw->conf;s16 default_nf =ath9k_hw_get_default_nf (ah, chan);if (ah->caldata)
@@ -234,6 +241,9 @@ void ath9k_hw_loadnf(struct ath_hw *ah, struct ath9k_channel *chan)if (chainmask & (1 << i)) {s16 nfval; +if ((i >=AR5416_MAX_CHAINS ) && !conf_is_ht40 (conf)) +continue ; +if (h) nfval = h[i].privNF;else
@@ -293,6 +303,9 @@ void ath9k_hw_loadnf(struct ath_hw *ah, struct ath9k_channel *chan)ENABLE_REGWRITE_BUFFER (ah);for (i =0 ; i <NUM_NF_READINGS ; i++) {if (chainmask & (1 << i)) { +if ((i >=AR5416_MAX_CHAINS ) && !conf_is_ht40 (conf)) +continue ; + val =REG_READ (ah, ah->nf_regs[i]); val &=0xFFFFFE00 ; val |= (((u32) (-50 ) <<1 ) &0x1ff );
drivers/net/wireless/iwlwifi/iwl-core.c +10 -0
@@ -1879,6 +1879,15 @@ int iwl_mac_change_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif,mutex_lock (&priv->mutex); +if (!ctx->vif || !iwl_is_ready_rf (priv)) { +/* +* Huh? But wait ... this can maybe happen when +* we're in the middle of a firmware restart! +*/ + err = -EBUSY ; + goto out; + } + interface_modes = ctx->interface_modes | ctx->exclusive_interface_modes;if (!(interface_modes &BIT (newtype))) {
@@ -1906,6 +1915,7 @@ int iwl_mac_change_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif,/* success */ iwl_teardown_interface (priv, vif, true); vif->type = newtype; + vif->p2p = newp2p; err =iwl_setup_interface (priv, ctx);WARN_ON (err);/*
drivers/net/wireless/iwlwifi/iwl-dev.h +11 -8
@@ -1604,21 +1604,24 @@ iwl_rxon_ctx_from_vif(struct ieee80211_vif *vif) ctx < &priv->contexts[NUM_IWL_RXON_CTX]; ctx++) \ if (priv->valid_contexts & BIT(ctx->ctxid)) -static inline int iwl_is_associated(struct iwl_priv *priv, -enum iwl_rxon_context_id ctxid) +static inline int iwl_is_associated_ctx(struct iwl_rxon_context *ctx) { -return (priv->contexts[ctxid].active.filter_flags & -RXON_FILTER_ASSOC_MSK ) ?1 :0 ; +return (ctx->active.filter_flags &RXON_FILTER_ASSOC_MSK ) ?1 :0 ; } -static inline int iwl_is_any_associated (struct iwl_priv *priv) +static inline int iwl_is_associated (struct iwl_priv *priv, +enum iwl_rxon_context_id ctxid) { -return iwl_is_associated (priv,IWL_RXON_CTX_BSS ); +return iwl_is_associated_ctx (&priv->contexts[ctxid]); } -static inline int iwl_is_associated_ctx (struct iwl_rxon_context *ctx) +static inline int iwl_is_any_associated (struct iwl_priv *priv) { -return (ctx->active.filter_flags &RXON_FILTER_ASSOC_MSK ) ?1 :0 ; +struct iwl_rxon_context *ctx; +for_each_context (priv, ctx) +if (iwl_is_associated_ctx (ctx)) +return true; +return false; }static inline int is_channel_valid (const struct iwl_channel_info *ch_info)
drivers/net/wireless/p54/p54usb.c +1 -0
@@ -82,6 +82,7 @@ static struct usb_device_id p54u_table[] __devinitdata = { {USB_DEVICE(0x06b9, 0x0121)}, /* Thomson SpeedTouch 121g */ {USB_DEVICE(0x0707, 0xee13)}, /* SMC 2862W-G version 2 */ {USB_DEVICE(0x083a, 0x4521)}, /* Siemens Gigaset USB Adapter 54 version 2 */ + {USB_DEVICE(0x083a, 0xc501)}, /* Zoom Wireless-G 4410 */ {USB_DEVICE(0x083a, 0xf503)}, /* Accton FD7050E ver 1010ec */ {USB_DEVICE(0x0846, 0x4240)}, /* Netgear WG111 (v2) */ {USB_DEVICE(0x0915, 0x2000)}, /* Cohiba Proto board */
drivers/pci/quirks.c +10 -0
@@ -2784,6 +2784,16 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x342e, vtd_mask_spec_errors);DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_INTEL ,0x3c28 , vtd_mask_spec_errors);#endif +static void __devinit fixup_ti816x_class (struct pci_dev * dev) +{ +/* TI 816x devices do not have class code set when in PCIe boot mode */ +if (dev->class ==PCI_CLASS_NOT_DEFINED ) { +dev_info (&dev->dev,"Setting PCI class for 816x PCIe device\n" ); + dev->class =PCI_CLASS_MULTIMEDIA_VIDEO ; + } +} +DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_TI ,0xb800 , fixup_ti816x_class); +static void pci_do_fixups (struct pci_dev *dev,struct pci_fixup *f,struct pci_fixup *end) {
drivers/platform/x86/intel_ips.c +1 -1
@@ -1111,7 +1111,7 @@ static int ips_monitor(void *data) last_msecs =jiffies_to_msecs (jiffies); expire = jiffies +msecs_to_jiffies (IPS_SAMPLE_PERIOD ); -__set_current_state (TASK_UNINTERRUPTIBLE ); +__set_current_state (TASK_INTERRUPTIBLE );mod_timer (&timer, expire);schedule ();
drivers/scsi/bnx2i/bnx2i_hwi.c +1 -0
@@ -1221,6 +1221,7 @@ int bnx2i_send_fw_iscsi_init_msg(struct bnx2i_hba *hba) iscsi_init.dummy_buffer_addr_hi = (u32) ((u64 ) hba->dummy_buf_dma >>32 ); + hba->num_ccell = hba->max_sqes >>1 ; hba->ctx_ccell_tasks = ((hba->num_ccell &0xFFFF ) | (hba->max_sqes <<16 )); iscsi_init.num_ccells_per_conn = hba->num_ccell;
drivers/scsi/bnx2i/bnx2i_init.c +1 -1
@@ -227,7 +227,7 @@ void bnx2i_stop(void *handle)wait_event_interruptible_timeout (hba->eh_wait, (list_empty (&hba->ep_ofld_list) &&list_empty (&hba->ep_destroy_list)), -10 *HZ ); +2 *HZ );/* Wait for all endpoints to be torn down, Chip will be reset once * control returns to network driver. So it is required to cleanup and * release all connection resources before returning from this routine.
drivers/scsi/bnx2i/bnx2i_iscsi.c +4 -1
@@ -858,7 +858,7 @@ struct bnx2i_hba *bnx2i_alloc_hba(struct cnic_dev *cnic)mutex_init (&hba->net_dev_lock);init_waitqueue_head (&hba->eh_wait);if (test_bit (BNX2I_NX2_DEV_57710 , &hba->cnic_dev_type)) { - hba->hba_shutdown_tmo =20 *HZ ; + hba->hba_shutdown_tmo =30 *HZ ; hba->conn_teardown_tmo =20 *HZ ; hba->conn_ctx_destroy_tmo =6 *HZ ; }else {/* 5706/5708/5709 */
@@ -1205,6 +1205,9 @@ static int bnx2i_task_xmit(struct iscsi_task *task)struct bnx2i_cmd *cmd = task->dd_data;struct iscsi_cmd *hdr = (struct iscsi_cmd *) task->hdr; +if (bnx2i_conn->ep->num_active_cmds +1 > hba->max_sqes) +return -ENOMEM ; +/* * If there is no scsi_cmnd this must be a mgmt task */
drivers/scsi/mpt2sas/mpt2sas_scsih.c +68 -26
139 lines not on this page · raw message
drivers/scsi/qla2xxx/qla_attr.c +3 -2
@@ -1877,14 +1877,15 @@ qla24xx_vport_delete(struct fc_vport *fc_vport)scsi_remove_host (vha->host); +/* Allow timer to run to drain queued items, when removing vp */ +qla24xx_deallocate_vp_id (vha); +if (vha->timer_active) {qla2x00_vp_stop_timer (vha);DEBUG15 (printk (KERN_INFO "scsi(%ld): timer for the vport[%d]" " = %p has stopped\n" , vha->host_no, vha->vp_idx, vha)); } -qla24xx_deallocate_vp_id (vha); -/* No pending activities shall be there on the vha now */ DEBUG (msleep (random32 ()%10 ));/* Just to see if something falls on * the net we have placed below */
drivers/scsi/qla2xxx/qla_os.c +19 -13
@@ -2359,21 +2359,26 @@ qla2x00_remove_one(struct pci_dev *pdev) base_vha =pci_get_drvdata (pdev); ha = base_vha->hw; -spin_lock_irqsave (&ha->vport_slock, flags); -list_for_each_entry (vha, &ha->vp_list, list) { -atomic_inc (&vha->vref_count); +mutex_lock (&ha->vport_lock); +while (ha->cur_vport_count) { +struct Scsi_Host *scsi_host; -if (vha->fc_vport) { -spin_unlock_irqrestore (&ha->vport_slock, flags); +spin_lock_irqsave (&ha->vport_slock, flags); -fc_vport_terminate (vha->fc_vport); +BUG_ON (base_vha->list.next == &ha->vp_list); +/* This assumes first entry in ha->vp_list is always base vha */ + vha =list_first_entry (&base_vha->list, scsi_qla_host_t, list); + scsi_host =scsi_host_get (vha->host); -spin_lock_irqsave (&ha->vport_slock, flags); - } +spin_unlock_irqrestore (&ha->vport_slock, flags); +mutex_unlock (&ha->vport_lock); + +fc_vport_terminate (vha->fc_vport); +scsi_host_put (vha->host); -atomic_dec (&vha->vref_count); +mutex_lock (&ha->vport_lock); } -spin_unlock_irqrestore (&ha->vport_slock, flags); +mutex_unlock (&ha->vport_lock);set_bit (UNLOADING , &base_vha->dpc_flags);
@@ -3603,7 +3608,8 @@ qla2x00_timer(scsi_qla_host_t *vha)if (!pci_channel_offline (ha->pdev))pci_read_config_word (ha->pdev,PCI_VENDOR_ID , &w); -if (IS_QLA82XX (ha)) { +/* Make sure qla82xx_watchdog is run only for physical port */ +if (!vha->vp_idx &&IS_QLA82XX (ha)) {if (test_bit (ISP_QUIESCE_NEEDED , &vha->dpc_flags)) start_dpc++;qla82xx_watchdog (vha);
@@ -3674,8 +3680,8 @@ qla2x00_timer(scsi_qla_host_t *vha) atomic_read(&vha->loop_down_timer))); } -/* Check if beacon LED needs to be blinked */ -if (ha->beacon_blink_led ==1 ) { +/* Check if beacon LED needs to be blinked for physical host only */ +if (!vha->vp_idx && (ha->beacon_blink_led ==1 )) {set_bit (BEACON_BLINK_NEEDED , &vha->dpc_flags); start_dpc++; }
drivers/scsi/sr.c +1 -1
@@ -636,7 +636,7 @@ static int sr_probe(struct device *dev) disk->first_minor = minor;sprintf (disk->disk_name,"sr%d" , minor); disk->fops = &sr_bdops; - disk->flags =GENHD_FL_CD ; + disk->flags =GENHD_FL_CD |GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE ; disk->events =DISK_EVENT_MEDIA_CHANGE |DISK_EVENT_EJECT_REQUEST ;blk_queue_rq_timeout (sdev->request_queue,SR_TIMEOUT );
drivers/scsi/ultrastor.c +1 -1
@@ -306,7 +306,7 @@ static inline int find_and_clear_bit_16(unsigned long *field)"0: bsfw %1,%w0\n\t" "btr %0,%1\n\t" "jnc 0b" - : "=&r" (rv), "=m" (*field) :); + : "=&r" (rv), "+m" (*field) :); return rv; }
drivers/sh/clk/cpg.c +1 -1
@@ -105,7 +105,7 @@ static int sh_clk_div6_set_parent(struct clk *clk, struct clk *parent)/* Rebuild the frequency table */ clk_rate_table_build (clk, clk->freq_table, table->nr_divisors, - table, &clk->arch_flags); + table,NULL );return 0 ; }
drivers/staging/rtl8712/rtl871x_ioctl_set.c +4 -1
@@ -68,7 +68,10 @@ static u8 do_join(struct _adapter *padapter) pmlmepriv->fw_state |= _FW_UNDER_LINKING; pmlmepriv->pscanned = plist; pmlmepriv->to_join = true; -if (_queue_empty (queue) == true) { + +/* adhoc mode will start with an empty queue, but skip checking */ +if (!check_fwstate (pmlmepriv,WIFI_ADHOC_STATE ) && +_queue_empty (queue)) {if (pmlmepriv->fw_state & _FW_UNDER_LINKING) pmlmepriv->fw_state ^= _FW_UNDER_LINKING;/* when set_ssid/set_bssid for do_join(), but scanning queue
drivers/staging/usbip/usbip_common.c +1 -1
@@ -709,7 +709,7 @@ static void correct_endian_ret_submit(struct usbip_header_ret_submit *pdu,be32_to_cpus (&pdu->status);be32_to_cpus (&pdu->actual_length);be32_to_cpus (&pdu->start_frame); -cpu_to_be32s (&pdu->number_of_packets); +be32_to_cpus (&pdu->number_of_packets);be32_to_cpus (&pdu->error_count); } }
drivers/target/target_core_device.c +2 -2
@@ -151,13 +151,13 @@ out: {struct se_device *dev = se_lun->lun_se_dev; -spin_lock (&dev->stats_lock); +spin_lock_irq (&dev->stats_lock); dev->num_cmds++;if (se_cmd->data_direction ==DMA_TO_DEVICE ) dev->write_bytes += se_cmd->data_length;else if (se_cmd->data_direction ==DMA_FROM_DEVICE ) dev->read_bytes += se_cmd->data_length; -spin_unlock (&dev->stats_lock); +spin_unlock_irq (&dev->stats_lock); }/*
drivers/target/target_core_tmr.c +4 -3
@@ -55,7 +55,8 @@ struct se_tmr_req *core_tmr_alloc_req( {struct se_tmr_req *tmr; - tmr =kmem_cache_zalloc (se_tmr_req_cache,GFP_KERNEL ); + tmr =kmem_cache_zalloc (se_tmr_req_cache, (in_interrupt ()) ? +GFP_ATOMIC :GFP_KERNEL );if (!(tmr)) {printk (KERN_ERR "Unable to allocate struct se_tmr_req\n" );return ERR_PTR (-ENOMEM );
@@ -398,9 +399,9 @@ int core_tmr_lun_reset(printk (KERN_INFO "LUN_RESET: SCSI-2 Released reservation\n" ); } -spin_lock (&dev->stats_lock); +spin_lock_irq (&dev->stats_lock); dev->num_resets++; -spin_unlock (&dev->stats_lock); +spin_unlock_irq (&dev->stats_lock); DEBUG_LR("LUN_RESET: %s for [%s] Complete\n", (preempt_and_abort_list) ? "Preempt" : "TMR",
drivers/target/target_core_transport.c +34 -12
121 lines not on this page · raw message
drivers/usb/class/cdc-acm.c +11 -2
@@ -946,7 +946,7 @@ static int acm_probe(struct usb_interface *intf,u8 ac_management_function =0 ;u8 call_management_function =0 ;int call_interface_num =-1 ; -int data_interface_num; +int data_interface_num =-1 ;unsigned long quirks;int num_rx_buf;int i;
@@ -1030,7 +1030,11 @@ next_desc:if (!union_header) {if (call_interface_num >0 ) {dev_dbg (&intf->dev,"No union descriptor, using call management descriptor\n" ); - data_interface =usb_ifnum_to_if (usb_dev, (data_interface_num = call_interface_num)); +/* quirks for Droids MuIn LCD */ +if (quirks &NO_DATA_INTERFACE ) + data_interface =usb_ifnum_to_if (usb_dev,0 ); +else + data_interface =usb_ifnum_to_if (usb_dev, (data_interface_num = call_interface_num)); control_interface = intf; }else {if (intf->cur_altsetting->desc.bNumEndpoints !=3 ) {
@@ -1622,6 +1626,11 @@ static const struct usb_device_id acm_ids[] = { .driver_info = NOT_A_MODEM, }, +/* Support for Droids MuIn LCD */ + { USB_DEVICE(0x04d8, 0x000b), + .driver_info =NO_DATA_INTERFACE , + }, + /* control interfaces without any protocol set */ { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, USB_CDC_PROTO_NONE) },
drivers/usb/class/cdc-acm.h +1 -0
@@ -137,3 +137,4 @@ struct acm {#define SINGLE_RX_URB 2#define NO_CAP_LINE 4#define NOT_A_MODEM 8 +#define NO_DATA_INTERFACE 16
drivers/usb/core/hcd.c +1 -4
@@ -983,7 +983,7 @@ static int register_root_hub(struct usb_hcd *hcd)spin_unlock_irq (&hcd_root_hub_lock);/* Did the HC die before the root hub was registered? */ -if (HCD_DEAD (hcd) || hcd->state ==HC_STATE_HALT ) +if (HCD_DEAD (hcd))usb_hc_died (hcd);/* This time clean up */ }
@@ -2103,9 +2103,6 @@ irqreturn_t usb_hcd_irq (int irq, void *__hcd) rc =IRQ_NONE ; }else {set_bit (HCD_FLAG_SAW_IRQ , &hcd->flags); - -if (unlikely (hcd->state ==HC_STATE_HALT )) -usb_hc_died (hcd); rc =IRQ_HANDLED ; }
drivers/usb/gadget/at91_udc.c +1 -1
@@ -1767,7 +1767,7 @@ static int __init at91udc_probe(struct platform_device *pdev) }/* newer chips have more FIFO memory than rm9200 */ -if (cpu_is_at91sam9260 ()) { +if (cpu_is_at91sam9260 () ||cpu_is_at91sam9g20 ()) { udc->ep[0 ].maxpacket =64 ; udc->ep[3 ].maxpacket =64 ; udc->ep[4 ].maxpacket =512 ;
drivers/usb/gadget/f_rndis.c +1 -2
@@ -420,8 +420,7 @@ rndis_setup(struct usb_function *f, const struct usb_ctrlrequest *ctrl)*/ case ((USB_DIR_OUT |USB_TYPE_CLASS |USB_RECIP_INTERFACE ) <<8 ) |USB_CDC_SEND_ENCAPSULATED_COMMAND : -if (w_length > req->length || w_value - || w_index != rndis->ctrl_id) +if (w_value || w_index != rndis->ctrl_id) goto invalid;/* read the request; process it later */ value = w_length;
drivers/usb/host/ehci-hcd.c +3 -1
@@ -776,8 +776,9 @@ static irqreturn_t ehci_irq (struct usb_hcd *hcd) goto dead; } +/* Shared IRQ? */ masked_status = status &INTR_MASK ; -if (!masked_status) {/* irq sharing? */ +if (!masked_status ||unlikely (hcd->state ==HC_STATE_HALT )) {spin_unlock (&ehci->lock);return IRQ_NONE ; }
@@ -872,6 +873,7 @@ static irqreturn_t ehci_irq (struct usb_hcd *hcd) dead:ehci_reset (ehci);ehci_writel (ehci,0 , &ehci->regs->configured_flag); +usb_hc_died (hcd);/* generic layer kills/unlinks all urbs, then * uses ehci_stop to clean up the rest */
drivers/usb/host/ehci-sched.c +6 -2
@@ -471,8 +471,10 @@ static int enable_periodic (struct ehci_hcd *ehci)*/ status =handshake_on_error_set_halt (ehci, &ehci->regs->status,STS_PSS ,0 ,9 *125 ); -if (status) +if (status) { +usb_hc_died (ehci_to_hcd (ehci));return status; + } cmd =ehci_readl (ehci, &ehci->regs->command) |CMD_PSE ;ehci_writel (ehci, cmd, &ehci->regs->command);
@@ -510,8 +512,10 @@ static int disable_periodic (struct ehci_hcd *ehci)*/ status =handshake_on_error_set_halt (ehci, &ehci->regs->status,STS_PSS ,STS_PSS ,9 *125 ); -if (status) +if (status) { +usb_hc_died (ehci_to_hcd (ehci));return status; + } cmd =ehci_readl (ehci, &ehci->regs->command) & ~CMD_PSE ;ehci_writel (ehci, cmd, &ehci->regs->command);
drivers/usb/host/isp116x-hcd.c +1 -0
@@ -612,6 +612,7 @@ static irqreturn_t isp116x_irq(struct usb_hcd *hcd)/* IRQ's are off, we do no DMA, perfectly ready to die ... */ hcd->state =HC_STATE_HALT ; +usb_hc_died (hcd); ret =IRQ_HANDLED ; goto done; }
drivers/usb/host/ohci-hcd.c +3 -1
@@ -773,6 +773,7 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd)if (ints == ~(u32 )0 ) {disable (ohci);ohci_dbg (ohci,"device removed!\n" ); +usb_hc_died (hcd);return IRQ_HANDLED ; }
@@ -780,7 +781,7 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd) ints &=ohci_readl (ohci, ®s->intrenable);/* interrupt for some other device? */ -if (ints ==0 ) +if (ints ==0 ||unlikely (hcd->state ==HC_STATE_HALT ))return IRQ_NOTMINE ;if (ints &OHCI_INTR_UE ) {
@@ -797,6 +798,7 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd) }else {disable (ohci);ohci_err (ohci,"OHCI Unrecoverable Error, disabled\n" ); +usb_hc_died (hcd); }ohci_dump (ohci,1 );
drivers/usb/host/ohci-pci.c +10 -2
@@ -207,10 +207,18 @@ static int ohci_quirk_amd700(struct usb_hcd *hcd)*/ static int ohci_quirk_nvidia_shutdown (struct usb_hcd *hcd) { +struct pci_dev *pdev =to_pci_dev (hcd->self.controller);struct ohci_hcd *ohci =hcd_to_ohci (hcd); - ohci->flags |=OHCI_QUIRK_SHUTDOWN ; -ohci_dbg (ohci,"enabled nVidia shutdown quirk\n" ); +/* Evidently nVidia fixed their later hardware; this is a guess at +* the changeover point. +*/ +#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_USB 0x026d + +if (pdev->device <PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_USB ) { + ohci->flags |=OHCI_QUIRK_SHUTDOWN ; +ohci_dbg (ohci,"enabled nVidia shutdown quirk\n" ); + }return 0 ; }
drivers/usb/host/oxu210hp-hcd.c +5 -1
@@ -1884,6 +1884,7 @@ static int enable_periodic(struct oxu_hcd *oxu) status =handshake (oxu, &oxu->regs->status,STS_PSS ,0 ,9 *125 );if (status !=0 ) {oxu_to_hcd (oxu)->state =HC_STATE_HALT ; +usb_hc_died (oxu_to_hcd (oxu));return status; }
@@ -1909,6 +1910,7 @@ static int disable_periodic(struct oxu_hcd *oxu) status =handshake (oxu, &oxu->regs->status,STS_PSS ,STS_PSS ,9 *125 );if (status !=0 ) {oxu_to_hcd (oxu)->state =HC_STATE_HALT ; +usb_hc_died (oxu_to_hcd (oxu));return status; }
@@ -2449,8 +2451,9 @@ static irqreturn_t oxu210_hcd_irq(struct usb_hcd *hcd) goto dead; } +/* Shared IRQ? */ status &=INTR_MASK ; -if (!status) {/* irq sharing? */ +if (!status ||unlikely (hcd->state ==HC_STATE_HALT )) {spin_unlock (&oxu->lock);return IRQ_NONE ; }
@@ -2516,6 +2519,7 @@ static irqreturn_t oxu210_hcd_irq(struct usb_hcd *hcd) dead:ehci_reset (oxu);writel (0 , &oxu->regs->configured_flag); +usb_hc_died (hcd);/* generic layer kills/unlinks all urbs, then * uses oxu_stop to clean up the rest */
drivers/usb/host/xhci-mem.c +5 -6
@@ -207,14 +207,13 @@ void xhci_free_or_cache_endpoint_ring(struct xhci_hcd *xhci, rings_cached = virt_dev->num_rings_cached;if (rings_cached <XHCI_MAX_RINGS_CACHED ) { - virt_dev->num_rings_cached++; - rings_cached = virt_dev->num_rings_cached; virt_dev->ring_cache[rings_cached] = virt_dev->eps[ep_index].ring; + virt_dev->num_rings_cached++;xhci_dbg (xhci,"Cached old ring, " "%d ring%s cached\n" , - rings_cached, - (rings_cached >1 ) ?"s" :"" ); + virt_dev->num_rings_cached, + (virt_dev->num_rings_cached >1 ) ?"s" :"" ); }else {xhci_ring_free (xhci, virt_dev->eps[ep_index].ring); xhci_dbg(xhci, "Ring cache full (%d rings), "
@@ -992,12 +991,12 @@ static inline unsigned int xhci_get_endpoint_interval(struct usb_device *udev,break ;case USB_SPEED_FULL : -if (usb_endpoint_xfer_int (&ep->desc)) { +if (usb_endpoint_xfer_isoc (&ep->desc)) { interval =xhci_parse_exponent_interval (udev, ep);break ; }/* -* Fall through for isochronous endpoint interval decoding +* Fall through for interrupt endpoint interval decoding * since it uses the same rules as low speed interrupt * endpoints. */
drivers/usb/host/xhci-ring.c +9 -9
@@ -1532,6 +1532,9 @@ static int process_ctrl_td(struct xhci_hcd *xhci, struct xhci_td *td,else *status =0 ;break ; +case COMP_STOP_INVAL : +case COMP_STOP : +return finish_td (xhci, td, event_trb, event, ep, status, false);default :if (!xhci_requires_manual_halt_cleanup (xhci, ep_ctx, trb_comp_code))
@@ -1576,15 +1579,12 @@ static int process_ctrl_td(struct xhci_hcd *xhci, struct xhci_td *td, } }else {/* Maybe the event was for the data stage? */ -if (trb_comp_code !=COMP_STOP_INVAL ) { -/* We didn't stop on a link TRB in the middle */ - td->urb->actual_length = - td->urb->transfer_buffer_length - -TRB_LEN (event->transfer_len); -xhci_dbg (xhci,"Waiting for status " -"stage event\n" ); -return 0 ; - } + td->urb->actual_length = + td->urb->transfer_buffer_length - +TRB_LEN (le32_to_cpu (event->transfer_len)); +xhci_dbg (xhci,"Waiting for status " +"stage event\n" ); +return 0 ; } }
drivers/usb/host/xhci.c +10 -1
@@ -1636,8 +1636,17 @@ int xhci_check_bandwidth(struct usb_hcd *hcd, struct usb_device *udev)xhci_dbg_ctx (xhci, virt_dev->out_ctx,LAST_CTX_TO_EP_NUM (slot_ctx->dev_info)); +/* Free any rings that were dropped, but not changed. */ +for (i =1 ; i <31 ; ++i) { +if ((ctrl_ctx->drop_flags & (1 << (i +1 ))) && + !(ctrl_ctx->add_flags & (1 << (i +1 )))) +xhci_free_or_cache_endpoint_ring (xhci, virt_dev, i); + }xhci_zero_in_ctx (xhci, virt_dev); -/* Install new rings and free or cache any old rings */ +/* +* Install any rings for completely new endpoints or changed endpoints, +* and free or cache any old rings from changed endpoints. +*/ for (i =1 ; i <31 ; ++i) {if (!virt_dev->eps[i].new_ring)continue ;
drivers/usb/serial/cp210x.c +4 -0
@@ -113,6 +113,10 @@ static const struct usb_device_id id_table[] = { { USB_DEVICE(0x10C4, 0x8418) }, /* IRZ Automation Teleport SG-10 GSM/GPRS Modem */ { USB_DEVICE(0x10C4, 0x846E) }, /* BEI USB Sensor Interface (VCP) */ { USB_DEVICE(0x10C4, 0x8477) }, /* Balluff RFID */ + { USB_DEVICE(0x10C4, 0x85EA) }, /* AC-Services IBUS-IF */ + { USB_DEVICE(0x10C4, 0x85EB) }, /* AC-Services CIS-IBUS */ + { USB_DEVICE(0x10C4, 0x8664) }, /* AC-Services CAN-IF */ + { USB_DEVICE(0x10C4, 0x8665) }, /* AC-Services OBD-IF */ { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */ { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */ { USB_DEVICE(0x10C4, 0xEA71) }, /* Infinity GPS-MIC-1 Radio Monophone */
drivers/usb/serial/ftdi_sio.c +1 -0
@@ -566,6 +566,7 @@ static struct usb_device_id id_table_combined [] = { { USB_DEVICE(FTDI_VID, FTDI_IBS_APP70_PID) }, { USB_DEVICE(FTDI_VID, FTDI_IBS_PEDO_PID) }, { USB_DEVICE(FTDI_VID, FTDI_IBS_PROD_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_TAVIR_STK500_PID) },/* * ELV devices: */
drivers/usb/serial/ftdi_sio_ids.h +5 -0
@@ -491,6 +491,11 @@/* www.canusb.com Lawicel CANUSB device (FTDI_VID) */ #define FTDI_CANUSB_PID 0xFFA8/* Product Id */ +/* +* TavIR AVR product ids (FTDI_VID) +*/ +#define FTDI_TAVIR_STK500_PID 0xFA33/* STK500 AVR programmer */ +/********************************/
drivers/usb/serial/garmin_gps.c +13 -7
@@ -1,7 +1,7 @@/* * Garmin GPS driver * -* Copyright (C) 2006-2009 Hermann Kneissel [email protected] +* Copyright (C) 2006-2011 Hermann Kneissel [email protected] * * The latest version of the driver can be found at * http://sourceforge.net/projects/garmin-gps/
@@ -51,7 +51,7 @@ static int debug;*/ #define VERSION_MAJOR 0 -#define VERSION_MINOR 33 +#define VERSION_MINOR 36#define _STR (s) #s#define _DRIVER_VERSION (a, b) "v" _STR(a) "." _STR(b)
@@ -410,6 +410,7 @@ static int gsp_send_ack(struct garmin_data *garmin_data_p, __u8 pkt_id)*/ static int gsp_rec_packet (struct garmin_data *garmin_data_p,int count) { +unsigned long flags;const __u8 *recpkt = garmin_data_p->inbuffer+GSP_INITIAL_OFFSET ;__le32 *usbdata = (__le32 *) garmin_data_p->inbuffer;
@@ -458,7 +459,9 @@ static int gsp_rec_packet(struct garmin_data *garmin_data_p, int count)/* if this was an abort-transfer command, flush all queued data. */ if (isAbortTrfCmnd (garmin_data_p->inbuffer)) { +spin_lock_irqsave (&garmin_data_p->lock, flags); garmin_data_p->flags |=FLAGS_DROP_DATA ; +spin_unlock_irqrestore (&garmin_data_p->lock, flags);pkt_clear (garmin_data_p); }
@@ -943,7 +946,7 @@ static int garmin_open(struct tty_struct *tty, struct usb_serial_port *port)spin_lock_irqsave (&garmin_data_p->lock, flags); garmin_data_p->mode = initial_mode; garmin_data_p->count =0 ; - garmin_data_p->flags =0 ; + garmin_data_p->flags &=FLAGS_SESSION_REPLY1_SEEN ;spin_unlock_irqrestore (&garmin_data_p->lock, flags);/* shutdown any bulk reads that might be going on */
@@ -1178,7 +1181,8 @@ static int garmin_write_room(struct tty_struct *tty)static void garmin_read_process (struct garmin_data *garmin_data_p, -unsigned char *data,unsigned data_length) +unsigned char *data,unsigned data_length, +int bulk_data) {unsigned long flags;
@@ -1193,7 +1197,8 @@ static void garmin_read_process(struct garmin_data *garmin_data_p,send it directly to the tty port */ if (garmin_data_p->flags &FLAGS_QUEUING ) {pkt_add (garmin_data_p, data, data_length); - }else if (getLayerId (data) ==GARMIN_LAYERID_APPL ) { + }else if (bulk_data || +getLayerId (data) ==GARMIN_LAYERID_APPL ) {spin_lock_irqsave (&garmin_data_p->lock, flags); garmin_data_p->flags |=APP_RESP_SEEN ;
@@ -1237,7 +1242,7 @@ static void garmin_read_bulk_callback(struct urb *urb)usb_serial_debug_data (debug, &port->dev, __func__, urb->actual_length, data); -garmin_read_process (garmin_data_p, data, urb->actual_length); +garmin_read_process (garmin_data_p, data, urb->actual_length,1 );if (urb->actual_length ==0 &&0 != (garmin_data_p->flags &FLAGS_BULK_IN_RESTART )) {
@@ -1346,7 +1351,7 @@ static void garmin_read_int_callback(struct urb *urb) __func__, garmin_data_p->serial_num); } -garmin_read_process (garmin_data_p, data, urb->actual_length); +garmin_read_process (garmin_data_p, data, urb->actual_length,0 ); port->interrupt_in_urb->dev = port->serial->dev; retval =usb_submit_urb (urb,GFP_ATOMIC );
@@ -1461,6 +1466,7 @@ static int garmin_attach(struct usb_serial *serial) garmin_data_p->timer.function = timeout_handler; garmin_data_p->port = port; garmin_data_p->state =0 ; + garmin_data_p->flags =0 ; garmin_data_p->count =0 ;usb_set_serial_port_data (port, garmin_data_p);
drivers/usb/serial/moto_modem.c +1 -0
@@ -25,6 +25,7 @@ static const struct usb_device_id id_table[] = { { USB_DEVICE(0x05c6, 0x3197) }, /* unknown Motorola phone */ { USB_DEVICE(0x0c44, 0x0022) }, /* unknown Mororola phone */ { USB_DEVICE(0x22b8, 0x2a64) }, /* Motorola KRZR K1m */ + { USB_DEVICE(0x22b8, 0x2c84) }, /* Motorola VE240 phone */ { USB_DEVICE(0x22b8, 0x2c64) }, /* Motorola V950 phone */ { }, };
drivers/usb/serial/option.c +9 -1
@@ -149,6 +149,7 @@ static void option_instat_callback(struct urb *urb);#define HUAWEI_PRODUCT_K3765 0x1465#define HUAWEI_PRODUCT_E14AC 0x14AC#define HUAWEI_PRODUCT_ETS1220 0x1803 +#define HUAWEI_PRODUCT_E353 0x1506#define QUANTA_VENDOR_ID 0x0408#define QUANTA_PRODUCT_Q101 0xEA02
@@ -532,6 +533,7 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3765, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_ETS1220, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E14AC, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x01) }, { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V740) },
@@ -972,7 +974,7 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100) }, { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */ { USB_DEVICE(ONDA_VENDOR_ID, ONDA_MT825UP) }, /* ONDA MT825UP modem */ - { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730/GT-B3710 LTE USB modem.*/ + { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/ { } /* Terminating entry */ };MODULE_DEVICE_TABLE (usb, option_ids);
@@ -1109,6 +1111,12 @@ static int option_probe(struct usb_serial *serial, serial->interface->cur_altsetting->desc.bInterfaceNumber == 1)return -ENODEV ; +/* Don't bind network interface on Samsung GT-B3730, it is handled by a separate module */ +if (serial->dev->descriptor.idVendor ==SAMSUNG_VENDOR_ID && + serial->dev->descriptor.idProduct ==SAMSUNG_PRODUCT_GT_B3730 && + serial->interface->cur_altsetting->desc.bInterfaceClass !=USB_CLASS_CDC_DATA ) +return -ENODEV ; + data = serial->private =kzalloc (sizeof (struct usb_wwan_intf_private ),GFP_KERNEL );if (!data)
fs/block_dev.c +29 -16
87 lines not on this page · raw message
fs/cifs/connect.c +22 -9
@@ -2431,7 +2431,7 @@ void reset_cifs_unix_caps(int xid, struct cifsTconInfo *tcon,if (!CIFSSMBQFSUnixInfo (xid, tcon)) {__u64 cap =le64_to_cpu (tcon->fsUnixInfo.Capability); - +cFYI (1 ,"unix caps which server supports %lld" , cap);/* check for reconnect case in which we do not want to change the mount behavior if we can avoid it */ if (vol_info ==NULL ) {
@@ -2449,6 +2449,9 @@ void reset_cifs_unix_caps(int xid, struct cifsTconInfo *tcon, } } +if (cap &CIFS_UNIX_TRANSPORT_ENCRYPTION_MANDATORY_CAP ) +cERROR (1 ,"per-share encryption not supported yet" ); + cap &=CIFS_UNIX_CAP_MASK ;if (vol_info && vol_info->no_psx_acl) cap &= ~CIFS_UNIX_POSIX_ACL_CAP ;
@@ -2497,6 +2500,10 @@ void reset_cifs_unix_caps(int xid, struct cifsTconInfo *tcon,cFYI (1 ,"very large read cap" );if (cap &CIFS_UNIX_LARGE_WRITE_CAP )cFYI (1 ,"very large write cap" ); +if (cap &CIFS_UNIX_TRANSPORT_ENCRYPTION_CAP ) +cFYI (1 ,"transport encryption cap" ); +if (cap &CIFS_UNIX_TRANSPORT_ENCRYPTION_MANDATORY_CAP ) +cFYI (1 ,"mandatory transport encryption cap" );#endif /* CIFS_DEBUG2 */ if (CIFSSMBSetFSUnixInfo (xid, tcon, cap)) {if (vol_info ==NULL ) {
@@ -2815,20 +2822,26 @@ try_mount_again: goto remote_path_check; } -/* do not care if following two calls succeed - informational */ -if (!tcon->ipc) { -CIFSSMBQFSDeviceInfo (xid, tcon); -CIFSSMBQFSAttributeInfo (xid, tcon); - } -/* tell server which Unix caps we support */ -if (tcon->ses->capabilities &CAP_UNIX ) +if (tcon->ses->capabilities &CAP_UNIX ) {/* reset of caps checks mount to see if unix extensions disabled for just this mount */ reset_cifs_unix_caps (xid, tcon, sb, volume_info); -else +if ((tcon->ses->server->tcpStatus == CifsNeedReconnect) && + (le64_to_cpu (tcon->fsUnixInfo.Capability) & +CIFS_UNIX_TRANSPORT_ENCRYPTION_MANDATORY_CAP )) { + rc = -EACCES ; + goto mount_fail_check; + } + }else tcon->unix_ext =0 ;/* server does not support them */ +/* do not care if following two calls succeed - informational */ +if (!tcon->ipc) { +CIFSSMBQFSDeviceInfo (xid, tcon); +CIFSSMBQFSAttributeInfo (xid, tcon); + } +/* convert forward to back slashes in prepath here if needed */ if ((cifs_sb->mnt_cifs_flags &CIFS_MOUNT_POSIX_PATHS ) ==0 )convert_delimiter (cifs_sb->prepath,CIFS_DIR_SEP (cifs_sb));
fs/ecryptfs/keystore.c +21 -25
100 lines not on this page · raw message
fs/ext3/namei.c +11 -2
@@ -1416,10 +1416,19 @@ static int make_indexed_dir(handle_t *handle, struct dentry *dentry, frame->at = entries; frame->bh = bh; bh = bh2; +/* +* Mark buffers dirty here so that if do_split() fails we write a +* consistent set of buffers to disk. +*/ +ext3_journal_dirty_metadata (handle, frame->bh); +ext3_journal_dirty_metadata (handle, bh); de =do_split (handle,dir, &bh, frame, &hinfo, &retval); -dx_release (frames); -if (!(de)) +if (!de) { +ext3_mark_inode_dirty (handle, dir); +dx_release (frames);return retval; + } +dx_release (frames);return add_dirent_to_buf (handle, dentry, inode, de, bh); }
fs/ext4/ext4.h +0 -4
@@ -1590,12 +1590,8 @@ void ext4_get_group_no_and_offset(struct super_block *sb, ext4_fsblk_t blocknr,*/ struct ext4_lazy_init {unsigned long li_state; - -wait_queue_head_t li_wait_daemon;wait_queue_head_t li_wait_task; -struct timer_list li_timer;struct task_struct *li_task; -struct list_head li_request_list;struct mutex li_list_mtx; };
fs/ext4/mballoc.c +2 -0
@@ -1268,6 +1268,8 @@ repeat_load_buddy:return 0 ; err: +if (page) +page_cache_release (page);if (e4b->bd_bitmap_page)page_cache_release (e4b->bd_bitmap_page);if (e4b->bd_buddy_page)
fs/ext4/super.c +12 -29
74 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.