Linux 3.2.100
I'm announcing the release of the 3.2.100 kernel.
All users of the 3.2 kernel series should upgrade.
The updated 3.2.y git tree can be found at:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-3.2.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git
The diff from 3.2.99 is attached to this message.
Ben.
------------
Makefile | 7 +- arch/m32r/kernel/ptrace.c | 7 +- arch/s390/include/asm/system.h | 18 +- arch/s390/kernel/compat_linux.c | 1 + arch/sh/boards/mach-se/770x/setup.c | 24 +- arch/sh/include/mach-se/mach/se.h | 1 + arch/x86/include/asm/kvm_host.h | 4 +- arch/x86/include/asm/traps.h | 1 + arch/x86/kernel/cpu/mcheck/mce.c | 5 + arch/x86/kernel/entry_64.S | 2 +- arch/x86/kvm/lapic.c | 2 +- arch/x86/kvm/vmx.c | 12 +- arch/x86/kvm/x86.c | 38 +- crypto/algapi.c | 12 + drivers/acpi/apei/erst.c | 2 +- drivers/acpi/sbshc.c | 4 +- drivers/base/isa.c | 10 +- drivers/crypto/n2_core.c | 3 + drivers/hwmon/pmbus/pmbus_core.c | 21 +- drivers/i2c/i2c-core.c | 13 +- drivers/infiniband/hw/cxgb4/cq.c | 6 +- drivers/input/mouse/elantech.c | 2 +- drivers/input/mouse/trackpoint.c | 7 +- drivers/iommu/intel-iommu.c | 8 +- drivers/md/dm-mpath.c | 34 +- drivers/md/dm-snap.c | 48 +- drivers/md/dm-thin-metadata.c | 18 +- drivers/md/persistent-data/dm-btree.c | 19 +- drivers/media/dvb/dvb-usb/dibusb-common.c | 16 +- drivers/media/video/Makefile | 7 +- drivers/media/video/v4l2-compat-ioctl32.c | 973 +++++++++++++-------- drivers/media/video/v4l2-ioctl.c | 6 +- drivers/misc/eeprom/at24.c | 6 + drivers/mmc/host/s3cmci.c | 6 +- drivers/net/can/ti_hecc.c | 3 + drivers/net/can/usb/ems_usb.c | 2 + drivers/net/can/usb/esd_usb2.c | 2 + .../net/ethernet/freescale/fs_enet/fs_enet-main.c | 16 +- drivers/net/ethernet/freescale/fs_enet/fs_enet.h | 1 + drivers/net/ethernet/intel/e1000e/ich8lan.c | 10 +- drivers/net/ethernet/intel/e1000e/lib.c | 11 +- drivers/net/ethernet/intel/e1000e/netdev.c | 2 +- drivers/net/phy/marvell.c | 2 +- drivers/net/ppp/pppoe.c | 11 +- drivers/of/fdt.c | 2 +- drivers/parisc/lba_pci.c | 33 + drivers/pci/pci-driver.c | 7 +- drivers/scsi/libsas/sas_ata.c | 4 - drivers/scsi/scsi_lib.c | 10 +- drivers/staging/usbip/stub_dev.c | 3 +- drivers/staging/usbip/stub_main.c | 5 +- drivers/staging/usbip/stub_rx.c | 9 +- drivers/staging/usbip/stub_tx.c | 4 +- drivers/staging/usbip/usbip_common.c | 85 +- drivers/staging/usbip/usbip_common.h | 3 +- drivers/staging/usbip/userspace/src/utils.c | 9 +- drivers/staging/usbip/vhci_hcd.c | 12 +- drivers/staging/usbip/vhci_rx.c | 26 +- drivers/staging/usbip/vhci_tx.c | 3 +- drivers/tty/n_tty.c | 4 +- drivers/tty/serial/8250_pci.c | 3 + drivers/usb/core/config.c | 16 +- drivers/usb/core/devio.c | 14 +- drivers/usb/core/quirks.c | 6 +- drivers/usb/host/ehci-dbg.c | 2 +- drivers/usb/host/xhci-mem.c | 17 +- drivers/usb/host/xhci-ring.c | 12 +- drivers/usb/mon/mon_bin.c | 8 +- drivers/usb/serial/cp210x.c | 2 + drivers/usb/serial/ftdi_sio.c | 1 + drivers/usb/serial/ftdi_sio_ids.h | 6 + drivers/usb/serial/option.c | 12 + drivers/usb/storage/unusual_devs.h | 7 + fs/btrfs/extent-tree.c | 14 +- fs/btrfs/ioctl.c | 2 +- fs/ext4/namei.c | 4 + fs/nfsd/auth.c | 3 + include/asm-generic/dma-mapping-broken.h | 3 - include/linux/cred.h | 1 + include/linux/dma-mapping.h | 2 - include/linux/fscache.h | 2 +- include/linux/stddef.h | 10 + include/linux/usb/ch9.h | 2 + include/net/red.h | 11 + include/net/xfrm.h | 1 + include/scsi/libsas.h | 9 +- kernel/debug/kdb/kdb_io.c | 2 +- kernel/futex.c | 3 + kernel/groups.c | 5 +- kernel/hrtimer.c | 2 + kernel/posix-timers.c | 37 +- kernel/trace/ring_buffer.c | 6 +- kernel/uid16.c | 1 + mm/mprotect.c | 6 +- net/8021q/vlan.c | 6 +- net/batman-adv/bat_iv_ogm.c | 4 +- net/bridge/br_netlink.c | 7 +- net/can/af_can.c | 12 +- net/dccp/ccids/ccid2.c | 3 + net/ipv4/esp4.c | 1 + net/ipv4/igmp.c | 20 +- net/ipv4/raw.c | 119 ++- net/ipv4/tcp_ipv4.c | 2 +- net/ipv4/xfrm4_input.c | 11 +- net/ipv6/esp6.c | 3 +- net/ipv6/tcp_ipv6.c | 2 +- net/ipv6/xfrm6_input.c | 9 +- net/key/af_key.c | 8 + net/packet/af_packet.c | 5 + net/rds/rdma.c | 2 +- net/sched/sch_choke.c | 3 + net/sched/sch_gred.c | 3 + net/sched/sch_red.c | 2 + net/sctp/socket.c | 27 +- net/sunrpc/auth_gss/svcauth_gss.c | 1 + net/sunrpc/svcauth_unix.c | 2 + net/wireless/core.c | 7 +- net/wireless/wext-compat.c | 3 +- net/xfrm/xfrm_input.c | 56 ++ sound/core/oss/pcm_oss.c | 41 +- sound/core/oss/pcm_plugin.c | 14 +- sound/core/pcm.c | 2 + sound/core/pcm_lib.c | 5 +- sound/core/rawmidi.c | 15 +- sound/core/seq/seq_clientmgr.c | 15 +- sound/core/seq/seq_timer.c | 2 +- sound/drivers/aloop.c | 98 ++- sound/usb/mixer.c | 27 +- 128 files changed, 1509 insertions(+), 882 deletions(-)
Aaron Ma (2):
Input: elantech - add new icbody type 15
Input: trackpoint - force 3 buttons if 0 button is reported
Alexey Kodanev (1):
dccp: don't restart ccid2_hc_tx_rto_expire() if sk in closed state
Andrew Honig (1):
KVM: x86: Add memory barrier on vmcs field lookup
Andrzej Hajda (1):
v4l2-compat-ioctl32: fix alignment for ARM64
Anshuman Khandual (1):
mm/mprotect: add a cond_resched() inside change_pmd_range()
Arnd Bergmann (1):
mmc: s3mci: mark debug_regs[] as static
Bart Westgeest (1):
staging: usbip: removed dead code from receive function
Ben Hutchings (3):
nfsd: auth: Fix gid sorting when rootsquash enabled
of: fdt: Fix return with value in void function Linux 3.2.100
Benjamin Poirier (2):
e1000e: Separate signaling for link check/link up
e1000e: Fix e1000_check_for_copper_link_ich8lan return value.
Chandan Rajendra (1):
ext4: fix crash when a directory's i_size is too small
Christian Holl (1):
USB: serial: cp210x: add new device ID ELV ALC 8xxx
Christoph Hellwig (1):
scsi: dma-mapping: always provide dma_get_cache_alignment
Christoph Paasch (1):
tcp md5sig: Use skb's saddr when replying to an incoming segment
Christophe Leroy (1):
net: fs_enet: do not call phy_stop() in interrupts
Colin Ian King (1):
usb: host: fix incorrect updating of offset
Cong Wang (1):
8021q: fix a memory leak for VLAN 0 device
Dan Williams (1):
libsas: remove unused ata_task_resp fields
Daniel Mentz (2):
media: v4l2-compat-ioctl32: Copy v4l2_window->global_alpha
media: v4l2-compat-ioctl32.c: refactor compat ioctl32 logic
Daniel Thompson (1):
kdb: Fix handling of kallsyms_symbol_next() return value
David Howells (1):
fscache: Fix the default for fscache_maybe_release_page()
David Kozub (1):
USB: uas and storage: Add US_FL_BROKEN_FUA for another JMicron JMS567 ID
Dennis Yang (1):
dm thin metadata: THIN_MAX_CONCURRENT_LOCKS should be 6
Denys Vlasenko (1):
include/stddef.h: Move offsetofend() from vfio.h to a generic kernel header
Diego Elio Pettenò (1):
USB: serial: cp210x: add IDs for LifeScan OneTouch Verio IQ
Dmitry Fleytman Dmitry Fleytman (1):
usb: Add device quirk for Logitech HD Pro Webcam C925e
Eric Biggers (3):
af_key: fix buffer overread in verify_address_len()
af_key: fix buffer overread in parse_exthdrs()
crypto: algapi - fix NULL dereference in crypto_remove_spawns()
Eric Dumazet (1):
net/packet: fix a race in packet_bind() and packet_notifier()
Felix Fietkau (1):
net: igmp: fix source address check for IGMPv3 reports
Geert Uytterhoeven (1):
m32r: fix 'fix breakage from "m32r: use generic ptrace_resume code"' fallout
Gleb Natapov (2):
KVM: VMX: do not try to reexecute failed instruction while emulating invalid guest state
KVM: apic: fix LDR calculation in x2apic mode
Greg Kroah-Hartman (1):
ACPI: sbshc: remove raw pointer from printk() message
Guennadi Liakhovetski (1):
V4L2: fix VIDIOC_CREATE_BUFS 32-bit compatibility mode data copy-back
Guillaume Nault (1):
pppoe: take ->needed_headroom of lower device into account on xmit
Hans Verkuil (12):
v4l2-compat-ioctl32: fix sparse warnings
media: v4l2-compat-ioctl32.c: add capabilities field to, v4l2_input32
media: v4l2-ioctl.c: don't copy back the result for -ENOTTY
media: v4l2-compat-ioctl32.c: add missing VIDIOC_PREPARE_BUF
media: v4l2-compat-ioctl32.c: fix the indentation
media: v4l2-compat-ioctl32.c: move 'helper' functions to __get/put_v4l2_format32
media: v4l2-compat-ioctl32.c: avoid sizeof(type)
media: v4l2-compat-ioctl32.c: copy m.userptr in put_v4l2_plane32
media: v4l2-compat-ioctl32.c: fix ctrl_is_pointer
media: v4l2-compat-ioctl32.c: copy clip list in put_v4l2_window32
media: v4l2-compat-ioctl32.c: drop pr_info for unknown buffer type
media: v4l2-compat-ioctl32.c: don't copy back the result for certain errors
Heiko Carstens (1):
s390: always save and restore all registers on context switch
Heiner Kallweit (1):
eeprom: at24: check at24_read/write arguments
Helge Deller (1):
parisc: Hide Diva-built-in serial aux and graphics card
Herbert Xu (5):
ipv4: Use standard iovec primitive in raw_probe_proto_opt
ipv4: Avoid reading user iov twice after raw_probe_proto_opt
xfrm: Reinject transport-mode packets through tasklet
xfrm: Use __skb_queue_tail in xfrm_trans_queue
xfrm: Return error on unknown encap_type in init_state
Huacai Chen (2):
scsi: use dma_get_cache_alignment() as minimum DMA alignment
scsi: libsas: align sata_device's rps_resp on a cacheline
Håkon Bugge (1):
rds: Fix NULL pointer dereference in __rds_rdma_map
Jaejoong Kim (2):
ALSA: usb-audio: Fix out-of-bound error
ALSA: usb-audio: Add check return value for usb_string()
Jan Engelhardt (1):
crypto: n2 - cure use after free
Jeremy Compostella (1):
i2c: core-smbus: prevent stack corruption on read I2C_BLOCK_DATA
Joe Thornber (2):
dm thin metadata: introduce THIN_MAX_CONCURRENT_LOCKS dm btree: fix serious bug in btree_split_beneath()
Johannes Berg (2):
cfg80211: check dev_set_name() return value
cfg80211: fix station info handling bugs
Johannes Thumshirn (1):
dm mpath: simplify failure path of dm_multipath_init()
Josef Bacik (1):
btrfs: clear space cache inode generation always
Juan Zea (1):
usbip: fix usbip bind writing random string after command in match_busid
Kevin Cernekee (1):
net: igmp: Use correct source address on IGMPv3 reports
Lan Tianyu (1):
KVM/x86: Check input paging mode when cs.l is set
Laurent Caumont (1):
media: dvb: i2c transfers over usb cannot be done from stack
Li Jinyue (1):
futex: Prevent overflow by strengthen input validation
Linus Torvalds (2):
n_tty: fix EXTPROC vs ICANON interaction with TIOCINQ (aka FIONREAD)
kbuild: add '-fno-stack-check' to kernel build options
Liran Alon (1):
KVM: x86: Don't re-execute instruction when not passing CR2 value
Marc Kleine-Budde (1):
can: af_can: can_rcv(): replace WARN_ONCE by pr_warn_once
Martin Kelly (2):
can: ems_usb: cancel urb on -EPIPE and -EPROTO
can: esd_usb2: cancel urb on -EPIPE and -EPROTO
Masakazu Mokuno (1):
USB: core: Add type-specific length check of BOS descriptors
Mathias Nyman (2):
xhci: Don't show incorrect WARN message about events for empty rings
xhci: Don't add a virt_dev to the devs array before it's fully allocated
Matt Wilson (1):
serial: 8250_pci: Add Amazon PCI serial device ID
Max Schulze (1):
USB: serial: ftdi_sio: add id for Airbus DS P8GR
Mohamed Ghannam (1):
net: ipv4: fix for a race condition in raw_sendmsg
Nicolai Stange (1):
net: ipv4: emulate READ_ONCE() on ->hdrincl bit-field in raw_sendmsg()
Nikolay Aleksandrov (1):
net: bridge: fix early call to br_stp_change_bridge_id and plug newlink leaks
Nikolay Borisov (1):
btrfs: Fix possible off-by-one in btrfs_search_path_in_tree
Nogah Frankel (1):
net_sched: red: Avoid illegal values
Oliver Neukum (2):
USB: usbfs: Filter flags passed in from user space
usb: add RESET_RESUME for ELSA MicroLink 56K
Oliver Stäbler (1):
can: ti_hecc: Fix napi poll return value for repoll
Oscar Campos (1):
Input: trackpoint - assume 3 buttons when buttons detection fails
Pete Zaitcev (1):
USB: fix usbmon BUG trigger
Rafael J. Wysocki (1):
PCI / PM: Force devices to D0 in pci_pm_thaw_noirq()
Robb Glasser (1):
ALSA: pcm: prevent UAF in snd_pcm_info
Robert Lippert (1):
hwmon: (pmbus) Use 64bit math for DIRECT format values
Robin Murphy (1):
iommu/vt-d: Fix scatterlist offset handling
SZ Lin (林上智) (1):
USB: serial: option: adding support for YUGA CLM920-NC5
Sebastian Sjoholm (1):
USB: serial: option: add Quectel BG96 id
Sergei Shtylyov (2):
SolutionEngine771x: fix Ether platform data
SolutionEngine771x: add Ether TSU resource
Shuah Khan (4):
usbip: vhci: stop printing kernel pointer addresses in messages
usbip: stub: stop printing kernel pointer addresses in messages
usbip: prevent leaking socket pointer address in messages
usbip: remove kernel addresses from usb device and urb debug msgs
Steve Wise (1):
iw_cxgb4: Only validate the MSN for successful completions
Steven Rostedt (VMware) (1):
ring-buffer: Mask out the info bits when returning buffer page length
Sven Eckelmann (1):
batman-adv: Fix lock for ogm cnt access in batadv_iv_ogm_calc_tq
Takashi Iwai (13):
ALSA: seq: Fix regression by incorrect ioctl_mutex usages
ALSA: seq: Remove spurious WARN_ON() at timer check
ALSA: rawmidi: Avoid racy info ioctl via ctl device
ACPI: APEI / ERST: Fix missing error handling in erst_reader()
ALSA: usb-audio: Fix the missing ctl name suffix at parsing SU
ALSA: pcm: Remove incorrect snd_BUG_ON() usages
ALSA: pcm: Add missing error checks in OSS emulation plugin builder
ALSA: aloop: Release cable upon open error path
ALSA: aloop: Fix inconsistent format due to incomplete rule
ALSA: aloop: Fix racy hw constraints adjustment
ALSA: pcm: Abort properly at pending signal in OSS read/write loops
ALSA: pcm: Allow aborting mutex lock at OSS read/write loops
ALSA: pcm: Remove yet superfluous WARN_ON()
Thiago Rafael Becker (1):
kernel: make groups_sort calling a responsibility group_info allocators
Thomas Gleixner (3):
posix-timer: Properly check sigevent->sigev_notify x86/mce: Make machine check speculation protected
hrtimer: Reset hrtimer cpu base proper on CPU hotplug
Tianyu Lan (1):
KVM/x86: Fix wrong macro references of X86_CR0_PG_BIT and X86_CR4_PAE_BIT in kvm_valid_sregs()
Tiffany Lin (1):
media: v4l2-compat-ioctl32: fix missing reserved field copy in put_v4l2_create32
Wanpeng Li (1):
KVM: X86: Fix load RFLAGS w/o the fixed bit
William Breathitt Gray (1):
isa: Prevent NULL dereference in isa_bus driver callbacks
Xin Long (3):
sctp: use the right sk after waking up from wait_buf sleep
sctp: return error if the asoc has been peeled off in sctp_wait_for_sndbuf
sctp: do not allow the v4 socket to bind a v4mapped v6 address
Zhao Qiang (1):
net: phy: marvell: Limit 88m1101 autoneg errata to 88E1145 as well.
[email protected] (1):
dm: fix various targets to dm_register_target after module __init resources created
Makefile +5 -2
@@ -1,8 +1,8 @@ VERSION = 3 PATCHLEVEL = 2 -SUBLEVEL = 99 +SUBLEVEL = 100 EXTRAVERSION = -NAME = Saber-toothed Squirrel +NAME = Sleepy Otter # *DOCUMENTATION* # To see a list of typical targets execute "make help"
@@ -631,6 +631,9 @@ KBUILD_CFLAGS += $(call cc-disable-warning, pointer-sign) # disable invalid "can't wrap" optimizations for signed / pointers KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow) +# Make sure -fstack-check isn't enabled (like gentoo apparently did) +KBUILD_CFLAGS += $(call cc-option,-fno-stack-check,) + # conserve stack if available KBUILD_CFLAGS += $(call cc-option,-fconserve-stack)
arch/m32r/kernel/ptrace.c +3 -4
@@ -592,17 +592,16 @@ void user_enable_single_step(struct task_struct *child)if (access_process_vm (child, pc&~3 , &insn,sizeof (insn),0 ) !=sizeof (insn)) -return -EIO ; +return ;compute_next_pc (insn, pc, &next_pc, child);if (next_pc &0x80000000 ) -return -EIO ; +return ;if (embed_debug_trap (child, next_pc)) -return -EIO ; +return ;invalidate_cache (); -return 0 ; }void user_disable_single_step (struct task_struct *child)
arch/s390/include/asm/system.h +7 -11
@@ -89,17 +89,13 @@ static inline void restore_access_regs(unsigned int *acrs) asmvolatile ("lam 0,15,%0" : :"Q" (*acrs)); } -#define switch_to (prev,next,last) do { \ - if (prev->mm) { \ - save_fp_regs(&prev->thread.fp_regs); \ - save_access_regs(&prev->thread.acrs[0]); \ - } \ - if (next->mm) { \ - restore_fp_regs(&next->thread.fp_regs); \ - restore_access_regs(&next->thread.acrs[0]); \ - update_per_regs(next); \ - } \ - prev = __switch_to(prev,next); \ +#define switch_to (prev, next, last) do { \ + save_fp_regs(&prev->thread.fp_regs); \ + save_access_regs(&prev->thread.acrs[0]); \ + restore_fp_regs(&next->thread.fp_regs); \ + restore_access_regs(&next->thread.acrs[0]); \ + update_per_regs(next); \ + prev = __switch_to(prev, next); \ } while (0)extern void account_vtime (struct task_struct *,struct task_struct *);
arch/s390/kernel/compat_linux.c +1 -0
@@ -242,6 +242,7 @@ asmlinkage long sys32_setgroups16(int gidsetsize, u16 __user *grouplist)return retval; } +groups_sort (group_info); retval =set_current_groups (group_info);put_group_info (group_info);
arch/sh/boards/mach-se/770x/setup.c +20 -4
@@ -8,6 +8,7 @@*/ #include <linux/init.h> #include <linux/platform_device.h> +#include <linux/sh_eth.h> #include <mach-se/mach/se.h> #include <mach-se/mach/mrshpc.h> #include <asm/machvec.h>
@@ -114,13 +115,23 @@ static struct platform_device heartbeat_device = { #if defined(CONFIG_CPU_SUBTYPE_SH7710) ||\ defined(CONFIG_CPU_SUBTYPE_SH7712) /* SH771X Ethernet driver */ +static struct sh_eth_plat_data sh_eth_plat = { + .phy = PHY_ID, + .phy_interface = PHY_INTERFACE_MODE_MII, +}; + static struct resource sh_eth0_resources[] = { [0] = { .start = SH_ETH0_BASE, - .end = SH_ETH0_BASE + 0x1B8, + .end = SH_ETH0_BASE + 0x1B8 - 1, .flags = IORESOURCE_MEM, }, [1] = { + .start = SH_TSU_BASE, + .end = SH_TSU_BASE + 0x200 - 1, + .flags = IORESOURCE_MEM, + }, + [2] = { .start = SH_ETH0_IRQ, .end = SH_ETH0_IRQ, .flags = IORESOURCE_IRQ,
@@ -131,7 +142,7 @@ static struct platform_device sh_eth0_device = { .name = "sh-eth", .id = 0, .dev = { - .platform_data = PHY_ID, + .platform_data = &sh_eth_plat, }, .num_resources = ARRAY_SIZE(sh_eth0_resources), .resource = sh_eth0_resources,
@@ -140,10 +151,15 @@ static struct platform_device sh_eth0_device = {static struct resource sh_eth1_resources[] = { [0 ] = { .start =SH_ETH1_BASE , - .end =SH_ETH1_BASE +0x1B8 , + .end =SH_ETH1_BASE +0x1B8 -1 , .flags =IORESOURCE_MEM , }, [1 ] = { + .start =SH_TSU_BASE , + .end =SH_TSU_BASE +0x200 -1 , + .flags =IORESOURCE_MEM , + }, + [2 ] = { .start =SH_ETH1_IRQ , .end =SH_ETH1_IRQ , .flags =IORESOURCE_IRQ ,
@@ -154,7 +170,7 @@ static struct platform_device sh_eth1_device = { .name = "sh-eth", .id = 1, .dev = { - .platform_data = PHY_ID, + .platform_data = &sh_eth_plat, }, .num_resources = ARRAY_SIZE(sh_eth1_resources), .resource = sh_eth1_resources,
arch/sh/include/mach-se/mach/se.h +1 -0
@@ -98,6 +98,7 @@/* Base address */ #define SH_ETH0_BASE 0xA7000000#define SH_ETH1_BASE 0xA7000400 +#define SH_TSU_BASE 0xA7000800/* PHY ID */ #if defined(CONFIG_CPU_SUBTYPE_SH7710 )# define PHY_ID 0x00
arch/x86/include/asm/kvm_host.h +3 -1
@@ -694,13 +694,15 @@ enum emulation_result {#define EMULTYPE_NO_DECODE (1 << 0)#define EMULTYPE_TRAP_UD (1 << 1)#define EMULTYPE_SKIP (1 << 2) +#define EMULTYPE_NO_REEXECUTE (1 << 4)int x86_emulate_instruction (struct kvm_vcpu *vcpu,unsigned long cr2,int emulation_type,void *insn,int insn_len);static inline int emulate_instruction (struct kvm_vcpu *vcpu,int emulation_type) { -return x86_emulate_instruction (vcpu,0 , emulation_type,NULL ,0 ); +return x86_emulate_instruction (vcpu,0 , + emulation_type |EMULTYPE_NO_REEXECUTE ,NULL ,0 ); }void kvm_enable_efer_bits (u64 );
arch/x86/include/asm/traps.h +1 -0
@@ -69,6 +69,7 @@ dotraplinkage void do_simd_coprocessor_error(struct pt_regs *, long);#ifdef CONFIG_X86_32 dotraplinkage void do_iret_error(struct pt_regs *, long);#endif +void do_mce (struct pt_regs *,long );static inline int get_si_code (unsigned long condition) {
arch/x86/kernel/cpu/mcheck/mce.c +5 -0
@@ -1407,6 +1407,11 @@ static void unexpected_machine_check(struct pt_regs *regs, long error_code)void (*machine_check_vector)(struct pt_regs *,long error_code) = unexpected_machine_check; +void do_mce (struct pt_regs *regs,long error_code) +{ +machine_check_vector (regs, error_code); +} +/* * Called for each booted CPU to set up machine checks. * Must be called with preempt off:
arch/x86/kernel/entry_64.S +1 -1
@@ -1399,7 +1399,7 @@ errorentry page_fault do_page_fault errorentry async_page_fault do_async_page_fault #endif #ifdef CONFIG_X86_MCE -paranoidzeroentry machine_check *machine_check_vector(%rip) +paranoidzeroentry machine_check do_mce #endif /*
arch/x86/kvm/lapic.c +1 -1
@@ -1022,7 +1022,7 @@ void kvm_lapic_set_base(struct kvm_vcpu *vcpu, u64 value) vcpu->arch.apic_base = value;if (apic_x2apic_mode (apic)) {u32 id =kvm_apic_id (apic); -u32 ldr = ((id & ~0xf ) <<16 ) | (1 << (id &0xf )); +u32 ldr = ((id >>4 ) <<16 ) | (1 << (id &0xf ));apic_set_reg (apic,APIC_LDR , ldr); } apic->base_address = apic->vcpu->arch.apic_base &
arch/x86/kvm/vmx.c +11 -1
@@ -573,8 +573,18 @@ static const int max_vmcs_field = ARRAY_SIZE(vmcs_field_to_offset_table);static inline short vmcs_field_to_offset (unsigned long field) { -if (field >= max_vmcs_field || vmcs_field_to_offset_table[field] ==0 ) +if (field >= max_vmcs_field)return -1 ; + +/* +* FIXME: Mitigation for CVE-2017-5753. To be replaced with a +* generic mechanism. +*/ + asm("lfence" ); + +if (vmcs_field_to_offset_table[field] ==0 ) +return -1 ; +return vmcs_field_to_offset_table[field]; }
arch/x86/kvm/x86.c +34 -4
@@ -4888,10 +4888,14 @@ static int handle_emulation_failure(struct kvm_vcpu *vcpu)return r; } -static bool reexecute_instruction (struct kvm_vcpu *vcpu,gva_t gva) +static bool reexecute_instruction (struct kvm_vcpu *vcpu,gva_t gva, +int emulation_type) {gpa_t gpa; +if (emulation_type &EMULTYPE_NO_REEXECUTE ) +return false; +if (tdp_enabled)return false;
@@ -4942,7 +4946,7 @@ int x86_emulate_instruction(struct kvm_vcpu *vcpu,if (r !=EMULATION_OK ) {if (emulation_type &EMULTYPE_TRAP_UD )return EMULATE_FAIL ; -if (reexecute_instruction (vcpu, cr2)) +if (reexecute_instruction (vcpu, cr2, emulation_type))return EMULATE_DONE ;if (emulation_type &EMULTYPE_SKIP )return EMULATE_FAIL ;
@@ -4969,7 +4973,7 @@ int x86_emulate_instruction(struct kvm_vcpu *vcpu,return EMULATE_DONE ;if (r ==EMULATION_FAILED ) { -if (reexecute_instruction (vcpu, cr2)) +if (reexecute_instruction (vcpu, cr2, emulation_type))return EMULATE_DONE ;return handle_emulation_failure (vcpu);
@@ -6073,7 +6077,7 @@ int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)#endif kvm_rip_write (vcpu, regs->rip); -kvm_set_rflags (vcpu, regs->rflags); +kvm_set_rflags (vcpu, regs->rflags |0x2 /*X86_EFLAGS_FIXED*/ ); vcpu->arch.exception.pending = false;
@@ -6168,6 +6172,29 @@ int kvm_task_switch(struct kvm_vcpu *vcpu, u16 tss_selector, int reason, }EXPORT_SYMBOL_GPL (kvm_task_switch); +int kvm_valid_sregs (struct kvm_vcpu *vcpu,struct kvm_sregs *sregs) +{ +if ((sregs->efer &EFER_LME ) && (sregs->cr0 &X86_CR0_PG )) { +/* +* When EFER.LME and CR0.PG are set, the processor is in +* 64-bit mode (though maybe in a 32-bit code segment). +* CR4.PAE and EFER.LMA must be set. +*/ +if (!(sregs->cr4 &X86_CR4_PAE ) + || !(sregs->efer &EFER_LMA )) +return -EINVAL ; + }else { +/* +* Not in 64-bit mode: EFER.LMA is clear and the code +* segment cannot be 64-bit. +*/ +if (sregs->efer &EFER_LMA || sregs->cs.l) +return -EINVAL ; + } + +return 0 ; +} +int kvm_arch_vcpu_ioctl_set_sregs (struct kvm_vcpu *vcpu,struct kvm_sregs *sregs) {
@@ -6178,6 +6205,9 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,if (!guest_cpuid_has_xsave (vcpu) && (sregs->cr4 &X86_CR4_OSXSAVE ))return -EINVAL ; +if (kvm_valid_sregs (vcpu, sregs)) +return -EINVAL ; + dt.size = sregs->idt.limit; dt.address = sregs->idt.base; kvm_x86_ops->set_idt (vcpu, &dt);
crypto/algapi.c +12 -0
@@ -163,6 +163,18 @@ void crypto_remove_spawns(struct crypto_alg *alg, struct list_head *list, spawn->alg =NULL ; spawns = &inst->alg.cra_users; + +/* +* We may encounter an unregistered instance here, since +* an instance's spawns are set up prior to the instance +* being registered. An unregistered instance will have +* NULL ->cra_users.next, since ->cra_users isn't +* properly initialized until registration. But an +* unregistered instance cannot have any users, so treat +* it the same as ->cra_users being empty. +*/ +if (spawns->next ==NULL ) +break ; } }while ((spawns =crypto_more_spawns (alg, &stack, &top, &secondary_spawns)));
drivers/acpi/apei/erst.c +1 -1
@@ -1019,7 +1019,7 @@ static ssize_t erst_reader(u64 *id, enum pstore_type_id *type,/* The record may be cleared by others, try read next record */ if (len == -ENOENT ) goto skip; -else if (len <sizeof (*rcd)) { +else if (len <0 || len <sizeof (*rcd)) { rc = -EIO ; goto out; }
drivers/acpi/sbshc.c +2 -2
@@ -288,8 +288,8 @@ static int acpi_smbus_hc_add(struct acpi_device *device) device->driver_data = hc;acpi_ec_add_query_handler (hc->ec, hc->query_bit,NULL , smbus_alarm, hc); - printk(KERN_INFO PREFIX "SBS HC: EC = 0x%p, offset = 0x%0x, query_bit = 0x%0x\n", - hc->ec, hc->offset, hc->query_bit); +dev_info (&device->dev,"SBS HC: offset = 0x%0x, query_bit = 0x%0x\n" , + hc->offset, hc->query_bit);return 0 ; }
drivers/base/isa.c +5 -5
@@ -39,7 +39,7 @@ static int isa_bus_probe(struct device *dev) {struct isa_driver *isa_driver = dev->platform_data; -if (isa_driver->probe) +if (isa_driver && isa_driver->probe)return isa_driver->probe (dev,to_isa_dev (dev)->id);return 0 ;
@@ -49,7 +49,7 @@ static int isa_bus_remove(struct device *dev) {struct isa_driver *isa_driver = dev->platform_data; -if (isa_driver->remove) +if (isa_driver && isa_driver->remove)return isa_driver->remove (dev,to_isa_dev (dev)->id);return 0 ;
@@ -59,7 +59,7 @@ static void isa_bus_shutdown(struct device *dev) {struct isa_driver *isa_driver = dev->platform_data; -if (isa_driver->shutdown) +if (isa_driver && isa_driver->shutdown) isa_driver->shutdown (dev,to_isa_dev (dev)->id); }
@@ -67,7 +67,7 @@ static int isa_bus_suspend(struct device *dev, pm_message_t state) {struct isa_driver *isa_driver = dev->platform_data; -if (isa_driver->suspend) +if (isa_driver && isa_driver->suspend)return isa_driver->suspend (dev,to_isa_dev (dev)->id, state);return 0 ;
@@ -77,7 +77,7 @@ static int isa_bus_resume(struct device *dev) {struct isa_driver *isa_driver = dev->platform_data; -if (isa_driver->resume) +if (isa_driver && isa_driver->resume)return isa_driver->resume (dev,to_isa_dev (dev)->id);return 0 ;
drivers/crypto/n2_core.c +3 -0
@@ -1642,6 +1642,7 @@ static int queue_cache_init(void) CWQ_ENTRY_SIZE, 0, NULL);if (!queue_cache[HV_NCS_QTYPE_CWQ -1 ]) {kmem_cache_destroy (queue_cache[HV_NCS_QTYPE_MAU -1 ]); + queue_cache[HV_NCS_QTYPE_MAU -1 ] =NULL ;return -ENOMEM ; }return 0 ;
@@ -1651,6 +1652,8 @@ static void queue_cache_destroy(void) {kmem_cache_destroy (queue_cache[HV_NCS_QTYPE_MAU -1 ]);kmem_cache_destroy (queue_cache[HV_NCS_QTYPE_CWQ -1 ]); + queue_cache[HV_NCS_QTYPE_MAU -1 ] =NULL ; + queue_cache[HV_NCS_QTYPE_CWQ -1 ] =NULL ; }static int spu_queue_register (struct spu_queue *p,unsigned long q_type)
drivers/hwmon/pmbus/pmbus_core.c +12 -9
@@ -19,6 +19,7 @@*/ #include <linux/kernel.h> +#include <linux/math64.h> #include <linux/module.h> #include <linux/init.h> #include <linux/err.h>
@@ -475,8 +476,8 @@ static long pmbus_reg2data_linear(struct pmbus_data *data,static long pmbus_reg2data_direct (struct pmbus_data *data,struct pmbus_sensor *sensor) { -long val = (s16 ) sensor->data; -long m, b,R ; +s64 b, val = (s16 )sensor->data; +s32 m,R ; m = data->info->m[sensor->class]; b = data->info->b[sensor->class];
@@ -504,11 +505,12 @@ static long pmbus_reg2data_direct(struct pmbus_data *data,R --; }while (R <0 ) { - val =DIV_ROUND_CLOSEST (val,10 ); + val =div_s64 (val +5LL ,10L );/* round closest */ R ++; } -return (val - b) / m; + val =div_s64 (val - b, m); +return clamp_val (val,LONG_MIN ,LONG_MAX ); }/*
@@ -620,7 +622,8 @@ static u16 pmbus_data2reg_linear(struct pmbus_data *data,static u16 pmbus_data2reg_direct (struct pmbus_data *data,enum pmbus_sensor_classes class,long val) { -long m, b,R ; +s64 b, val64 = val; +s32 m,R ; m = data->info->m[class]; b = data->info->b[class];
@@ -637,18 +640,18 @@ static u16 pmbus_data2reg_direct(struct pmbus_data *data,R -=3 ;/* Adjust R and b for data in milli-units */ b *=1000 ; } - val = val * m + b; + val64 = val64 * m + b;while (R >0 ) { - val *=10 ; + val64 *=10 ;R --; }while (R <0 ) { - val =DIV_ROUND_CLOSEST (val,10 ); + val64 =div_s64 (val64 +5LL ,10L );/* round closest */ R ++; } -return val; +return (u16 )clamp_val (val64,-32768 ,32767 ); } static u16 pmbus_data2reg_vid(struct pmbus_data *data,
drivers/i2c/i2c-core.c +7 -6
@@ -2009,16 +2009,17 @@ static s32 i2c_smbus_xfer_emulated(struct i2c_adapter *adapter, u16 addr,the underlying bus driver */ break ;case I2C_SMBUS_I2C_BLOCK_DATA : +if (data->block[0 ] >I2C_SMBUS_BLOCK_MAX ) { +dev_err (&adapter->dev,"Invalid block %s size %d\n" , + read_write ==I2C_SMBUS_READ ?"read" :"write" , + data->block[0 ]); +return -EINVAL ; + } +if (read_write ==I2C_SMBUS_READ ) { msg[1 ].len = data->block[0 ]; }else { msg[0 ].len = data->block[0 ] +1 ; -if (msg[0 ].len >I2C_SMBUS_BLOCK_MAX +1 ) { -dev_err (&adapter->dev, -"Invalid block write size %d\n" , - data->block[0 ]); -return -EINVAL ; - }for (i =1 ; i <= data->block[0 ]; i++) msgbuf0[i] = data->block[i]; }
drivers/infiniband/hw/cxgb4/cq.c +3 -3
@@ -484,10 +484,10 @@ static int poll_cq(struct t4_wq *wq, struct t4_cq *cq, struct t4_cqe *cqe, ret = -EAGAIN ; goto skip_cqe; } -if (unlikely ((CQE_WRID_MSN (hw_cqe) != (wq->rq.msn)))) { +if (unlikely (!CQE_STATUS (hw_cqe) && +CQE_WRID_MSN (hw_cqe) != wq->rq.msn)) {t4_set_wq_in_error (wq); - hw_cqe->header |=htonl (V_CQE_STATUS (T4_ERR_MSN )); - goto proc_cqe; + hw_cqe->header |=cpu_to_be32 (V_CQE_STATUS (T4_ERR_MSN )); } goto proc_cqe; }
drivers/input/mouse/elantech.c +1 -1
@@ -1284,7 +1284,7 @@ static int elantech_set_properties(struct elantech_data *etd)case 5 : etd->hw_version =3 ;break ; - case 6 ... 14: + case 6 ... 15: etd->hw_version =4 ;break ;default :
drivers/input/mouse/trackpoint.c +5 -2
@@ -298,8 +298,11 @@ int trackpoint_detect(struct psmouse *psmouse, bool set_properties)return 0 ;if (trackpoint_read (&psmouse->ps2dev,TP_EXT_BTN , &button_info)) { -printk (KERN_WARNING "trackpoint.c: failed to get extended button data\n" ); - button_info =0 ; +printk (KERN_WARNING "trackpoint.c: failed to get extended button data, assuming 3 buttons\n" ); + button_info =0x33 ; + }else if (!button_info) { +printk (KERN_WARNING "trackpoint.c: got 0 in extended button data, assuming 3 buttons\n" ); + button_info =0x33 ; } psmouse->private =kzalloc (sizeof (struct trackpoint_data ),GFP_KERNEL );
drivers/iommu/intel-iommu.c +5 -3
@@ -1783,10 +1783,12 @@ static int __domain_mapping(struct dmar_domain *domain, unsigned long iov_pfn,uint64_t tmp;if (!sg_res) { +unsigned int pgoff = sg->offset & ~PAGE_MASK ; + sg_res =aligned_nrpages (sg->offset, sg->length); - sg->dma_address = ((dma_addr_t )iov_pfn <<VTD_PAGE_SHIFT ) + sg->offset; + sg->dma_address = ((dma_addr_t )iov_pfn <<VTD_PAGE_SHIFT ) + pgoff; sg->dma_length = sg->length; - pteval =page_to_phys (sg_page (sg)) | prot; + pteval = (sg_phys (sg) - pgoff) | prot; phys_pfn = pteval >>VTD_PAGE_SHIFT ; }
@@ -3085,7 +3087,7 @@ static int intel_nontranslate_map_sg(struct device *hddev,for_each_sg (sglist, sg, nelems, i) {BUG_ON (!sg_page (sg)); - sg->dma_address =page_to_phys (sg_page (sg)) + sg->offset; + sg->dma_address =sg_phys (sg); sg->dma_length = sg->length; }return nelems;
drivers/md/dm-mpath.c +20 -14
@@ -1658,19 +1658,11 @@ static int __init dm_multipath_init(void)if (!_mpio_cache)return -ENOMEM ; - r =dm_register_target (&multipath_target); -if (r <0 ) { -DMERR ("register failed %d" , r); -kmem_cache_destroy (_mpio_cache); -return -EINVAL ; - } - kmultipathd =alloc_workqueue ("kmpathd" ,WQ_MEM_RECLAIM ,0 );if (!kmultipathd) {DMERR ("failed to create workqueue kmpathd" ); -dm_unregister_target (&multipath_target); -kmem_cache_destroy (_mpio_cache); -return -ENOMEM ; + r = -ENOMEM ; + goto bad_alloc_kmultipathd; }/*
@@ -1683,16 +1675,30 @@ static int __init dm_multipath_init(void) WQ_MEM_RECLAIM);if (!kmpath_handlerd) {DMERR ("failed to create workqueue kmpath_handlerd" ); -destroy_workqueue (kmultipathd); -dm_unregister_target (&multipath_target); -kmem_cache_destroy (_mpio_cache); -return -ENOMEM ; + r = -ENOMEM ; + goto bad_alloc_kmpath_handlerd; + } + + r =dm_register_target (&multipath_target); +if (r <0 ) { +DMERR ("register failed %d" , r); + r = -EINVAL ; + goto bad_register_target; }DMINFO ("version %u.%u.%u loaded" , multipath_target.version[0 ], multipath_target.version[1 ], multipath_target.version[2 ]); +return 0 ; + +bad_register_target: +destroy_workqueue (kmpath_handlerd); +bad_alloc_kmpath_handlerd: +destroy_workqueue (kmultipathd); +bad_alloc_kmultipathd: +kmem_cache_destroy (_mpio_cache); +return r; }
drivers/md/dm-snap.c +24 -24
68 lines not on this page · raw message
drivers/md/dm-thin-metadata.c +12 -6
@@ -80,6 +80,16 @@#define THIN_METADATA_CACHE_SIZE 64#define SECTOR_TO_BLOCK_SHIFT 3 +/* +* For btree insert: +* 3 for btree insert + +* 2 for btree lookup used within space map +* For btree remove: +* 2 for shadow spine + +* 4 for rebalance 3 child node +*/ +#define THIN_MAX_CONCURRENT_LOCKS 6 +/* This should be plenty */ #define SPACE_MAP_ROOT_SIZE 128
@@ -669,13 +679,9 @@ struct dm_pool_metadata *dm_pool_metadata_open(struct block_device *bdev,return ERR_PTR (-ENOMEM ); } -/* -* Max hex locks: -* 3 for btree insert + -* 2 for btree lookup used within space map -*/ bm =dm_block_manager_create (bdev,THIN_METADATA_BLOCK_SIZE , -THIN_METADATA_CACHE_SIZE ,5 ); +THIN_METADATA_CACHE_SIZE , +THIN_MAX_CONCURRENT_LOCKS );if (!bm) {DMERR ("could not create block manager" );kfree (pmd);
drivers/md/persistent-data/dm-btree.c +2 -17
@@ -568,23 +568,8 @@ static int btree_split_beneath(struct shadow_spine *s, uint64_t key) pn->keys[1 ] = rn->keys[0 ];memcpy_disk (value_ptr (pn,1 ,sizeof (__le64)), &val,sizeof (__le64)); -/* -* rejig the spine. This is ugly, since it knows too -* much about the spine -*/ -if (s->nodes[0 ] != new_parent) { -unlock_block (s->info, s->nodes[0 ]); - s->nodes[0 ] = new_parent; - } -if (key <le64_to_cpu (rn->keys[0 ])) { -unlock_block (s->info, right); - s->nodes[1 ] = left; - }else { -unlock_block (s->info, left); - s->nodes[1 ] = right; - } - s->count =2 ; - +unlock_block (s->info, left); +unlock_block (s->info, right);return 0 ; }
drivers/media/dvb/dvb-usb/dibusb-common.c +14 -2
@@ -169,8 +169,20 @@ EXPORT_SYMBOL(dibusb_i2c_algo);int dibusb_read_eeprom_byte (struct dvb_usb_device *d,u8 offs,u8 *val) { -u8 wbuf[1 ] = { offs }; -return dibusb_i2c_msg (d,0x50 , wbuf,1 , val,1 ); +u8 *buf; +int rc; + + buf =kmalloc (2 ,GFP_KERNEL ); +if (!buf) +return -ENOMEM ; + + buf[0 ] = offs; + + rc =dibusb_i2c_msg (d,0x50 , &buf[0 ],1 , &buf[1 ],1 ); + *val = buf[1 ]; +kfree (buf); + +return rc; }EXPORT_SYMBOL (dibusb_read_eeprom_byte);
drivers/media/video/Makefile +4 -3
@@ -13,12 +13,13 @@ omap2cam-objs := omap24xxcam.o omap24xxcam-dma.o videodev-objs := v4l2-dev.o v4l2-ioctl.o v4l2-device.o v4l2-fh.o \ v4l2-event.o v4l2-ctrls.o v4l2-subdev.o +ifeq ($(CONFIG_COMPAT),y) + videodev-objs += v4l2-compat-ioctl32.o +endif + # V4L2 core modules obj-$(CONFIG_VIDEO_DEV) += videodev.o v4l2-int-device.o -ifeq ($(CONFIG_COMPAT),y) - obj-$(CONFIG_VIDEO_DEV) += v4l2-compat-ioctl32.o -endif obj-$(CONFIG_VIDEO_V4L2_COMMON) += v4l2-common.o
drivers/media/video/v4l2-compat-ioctl32.c +593 -380
1,377 lines not on this page · raw message
drivers/media/video/v4l2-ioctl.c +4 -2
@@ -2308,8 +2308,10 @@ video_usercopy(struct file *file, unsigned int cmd, unsigned long arg,/* Handles IOCTL */ err =func (file, cmd, parg); -if (err == -ENOIOCTLCMD ) - err = -EINVAL ; +if (err == -ENOTTY || err == -ENOIOCTLCMD ) { + err = -ENOTTY ; + goto out; + }if (has_array_args) { *kernel_ptr = user_ptr;
drivers/misc/eeprom/at24.c +6 -0
@@ -274,6 +274,9 @@ static ssize_t at24_read(struct at24_data *at24,if (unlikely (!count))return count; +if (off + count > at24->chip.byte_len) +return -EINVAL ; +/* * Read data from chip, protecting against concurrent updates * from this host, but not from other I2C masters.
@@ -396,6 +399,9 @@ static ssize_t at24_write(struct at24_data *at24, const char *buf, loff_t off,if (unlikely (!count))return count; +if (off + count > at24->chip.byte_len) +return -EINVAL ; +/* * Write data to chip, protecting against concurrent updates * from this host, but not from other I2C masters.
drivers/mmc/host/s3cmci.c +4 -2
@@ -1460,7 +1460,9 @@ static const struct file_operations s3cmci_fops_state = {struct s3cmci_reg {unsigned short addr;unsigned char *name; -} debug_regs[] = { +}; + +static const struct s3cmci_reg debug_regs[] = {DBG_REG (CON ),DBG_REG (PRE ),DBG_REG (CMDARG ),
@@ -1482,7 +1484,7 @@ struct s3cmci_reg {static int s3cmci_regs_show (struct seq_file *seq,void *v) {struct s3cmci_host *host = seq->private; -struct s3cmci_reg *rptr = debug_regs; +const struct s3cmci_reg *rptr = debug_regs;for (; rptr->name; rptr++) seq_printf(seq, "SDI%s\t=0x%08x\n", rptr->name,
drivers/net/can/ti_hecc.c +3 -0
@@ -651,6 +651,9 @@ static int ti_hecc_rx_poll(struct napi_struct *napi, int quota) mbx_mask =hecc_read (priv,HECC_CANMIM ); mbx_mask |=HECC_TX_MBOX_MASK ;hecc_write (priv,HECC_CANMIM , mbx_mask); + }else { +/* repoll is done only if whole budget is used */ + num_pkts = quota; }return num_pkts;
drivers/net/can/usb/ems_usb.c +2 -0
@@ -292,6 +292,8 @@ static void ems_usb_read_interrupt_callback(struct urb *urb)case -ECONNRESET :/* unlink */ case -ENOENT : +case -EPIPE : +case -EPROTO :case -ESHUTDOWN :return ;
drivers/net/can/usb/esd_usb2.c +2 -0
@@ -393,6 +393,8 @@ static void esd_usb2_read_bulk_callback(struct urb *urb)break ;case -ENOENT : +case -EPIPE : +case -EPROTO :case -ESHUTDOWN :return ;
drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c +13 -3
@@ -706,9 +706,11 @@ static int fs_enet_start_xmit(struct sk_buff *skb, struct net_device *dev)return NETDEV_TX_OK ; } -static void fs_timeout (struct net_device *dev) +static void fs_timeout_work (struct work_struct *work) { -struct fs_enet_private *fep =netdev_priv (dev); + struct fs_enet_private *fep = container_of(work, struct fs_enet_private, + timeout_work); +struct net_device *dev = fep->ndev;unsigned long flags;int wake =0 ;
@@ -720,7 +722,6 @@ static void fs_timeout(struct net_device *dev)phy_stop (fep->phydev); (*fep->ops->stop)(dev); (*fep->ops->restart)(dev); -phy_start (fep->phydev); }phy_start (fep->phydev);
@@ -731,6 +732,13 @@ static void fs_timeout(struct net_device *dev)netif_wake_queue (dev); } +static void fs_timeout (struct net_device *dev) +{ +struct fs_enet_private *fep =netdev_priv (dev); + +schedule_work (&fep->timeout_work); +} +/*----------------------------------------------------------------------------- * generic link-change handler - should be sufficient for most cases *-----------------------------------------------------------------------------*/
@@ -857,6 +865,7 @@ static int fs_enet_close(struct net_device *dev)netif_carrier_off (dev);if (fep->fpi->use_napi)napi_disable (&fep->napi); +cancel_work_sync (&fep->timeout_work);phy_stop (fep->phydev);spin_lock_irqsave (&fep->lock, flags);
@@ -1080,6 +1089,7 @@ static int __devinit fs_enet_probe(struct platform_device *ofdev) ndev->netdev_ops = &fs_enet_netdev_ops; ndev->watchdog_timeo =2 *HZ ; +INIT_WORK (&fep->timeout_work, fs_timeout_work);if (fpi->use_napi)netif_napi_add (ndev, &fep->napi, fs_enet_rx_napi, fpi->napi_weight);
drivers/net/ethernet/freescale/fs_enet/fs_enet.h +1 -0
@@ -124,6 +124,7 @@ struct fs_enet_private {spinlock_t lock;/* during all ops except TX pckt processing */ spinlock_t tx_lock;/* during fs_start_xmit and fs_tx */ struct fs_platform_info *fpi; +struct work_struct timeout_work;const struct fs_ops *ops;int rx_ring, tx_ring;dma_addr_t ring_mem_addr;
drivers/net/ethernet/intel/e1000e/ich8lan.c +8 -2
@@ -657,6 +657,9 @@ static s32 e1000_set_eee_pchlan(struct e1000_hw *hw)* Checks to see of the link status of the hardware has changed. If a * change in link status has been detected, then we read the PHY registers * to get the current speed/duplex if link exists. +* +* Returns a negative error code (-E1000_ERR_*) or 0 (link down) or 1 (link +* up). **/ static s32 e1000_check_for_copper_link_ich8lan (struct e1000_hw *hw) {
@@ -672,7 +675,7 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)* Change or Rx Sequence Error interrupt. */ if (!mac->get_link_status) { - ret_val =0 ; + ret_val =1 ; goto out; }
@@ -761,9 +764,12 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)* different link partner. */ ret_val =e1000e_config_fc_after_link_up (hw); -if (ret_val) +if (ret_val) {e_dbg ("Error configuring flow control\n" ); +return ret_val; + } + ret_val =1 ; out:return ret_val; }
drivers/net/ethernet/intel/e1000e/lib.c +8 -3
@@ -435,6 +435,9 @@ void e1000e_clear_hw_cntrs_base(struct e1000_hw *hw)* Checks to see of the link status of the hardware has changed. If a * change in link status has been detected, then we read the PHY registers * to get the current speed/duplex if link exists. +* +* Returns a negative error code (-E1000_ERR_*) or 0 (link down) or 1 (link +* up). **/ s32 e1000e_check_for_copper_link (struct e1000_hw *hw) {
@@ -449,7 +452,7 @@ s32 e1000e_check_for_copper_link(struct e1000_hw *hw)* Change or Rx Sequence Error interrupt. */ if (!mac->get_link_status) -return 0 ; +return 1 ;/* * First we want to see if the MII Status Register reports
@@ -494,10 +497,12 @@ s32 e1000e_check_for_copper_link(struct e1000_hw *hw)* different link partner. */ ret_val =e1000e_config_fc_after_link_up (hw); -if (ret_val) +if (ret_val) {e_dbg ("Error configuring flow control\n" ); +return ret_val; + } -return ret_val; +return 1 ; }/**
drivers/net/ethernet/intel/e1000e/netdev.c +1 -1
@@ -4222,7 +4222,7 @@ static bool e1000e_has_link(struct e1000_adapter *adapter)case e1000_media_type_copper:if (hw->mac.get_link_status) { ret_val = hw->mac.ops.check_for_link (hw); - link_active = !hw->mac.get_link_status; + link_active = ret_val >0 ; }else { link_active =1 ; }
drivers/net/phy/marvell.c +1 -1
@@ -808,7 +808,7 @@ static struct phy_driver marvell_drivers[] = { .features = PHY_GBIT_FEATURES, .flags = PHY_HAS_INTERRUPT, .config_init = &m88e1145_config_init, - .config_aneg = &marvell_config_aneg, + .config_aneg = &m88e1101_config_aneg, .read_status = &genphy_read_status, .ack_interrupt = &marvell_ack_interrupt, .config_intr = &marvell_config_intr,
drivers/net/ppp/pppoe.c +6 -5
@@ -838,6 +838,7 @@ static int pppoe_sendmsg(struct kiocb *iocb, struct socket *sock,struct pppoe_hdr *ph;struct net_device *dev;char *start; +int hlen;lock_sock (sk);if (sock_flag (sk,SOCK_DEAD ) || !(sk->sk_state &PPPOX_CONNECTED )) {
@@ -856,16 +857,16 @@ static int pppoe_sendmsg(struct kiocb *iocb, struct socket *sock,if (total_len > (dev->mtu + dev->hard_header_len)) goto end; - - skb =sock_wmalloc (sk, total_len + dev->hard_header_len +32 , -0 ,GFP_KERNEL ); + hlen =LL_RESERVED_SPACE (dev); + skb =sock_wmalloc (sk, hlen +sizeof (*ph) + total_len + + dev->needed_tailroom,0 ,GFP_KERNEL );if (!skb) { error = -ENOMEM ; goto end; }/* Reserve space for headers. */ -skb_reserve (skb, dev->hard_header_len); +skb_reserve (skb, hlen);skb_reset_network_header (skb); skb->dev = dev;
@@ -926,7 +927,7 @@ static int __pppoe_xmit(struct sock *sk, struct sk_buff *skb)/* Copy the data if there is no space for the header or if it's * read-only. */ -if (skb_cow_head (skb,sizeof (*ph) + dev->hard_header_len)) +if (skb_cow_head (skb,LL_RESERVED_SPACE (dev) +sizeof (*ph))) goto abort;__skb_push (skb,sizeof (*ph));
drivers/of/fdt.c +1 -1
@@ -389,7 +389,7 @@ static void __unflatten_device_tree(struct boot_param_header *blob, mem = (unsigned long )dt_alloc (size +4 , __alignof__(struct device_node ));if (!mem) -return NULL ; +return ;memset ((void *)mem,0 , size);
drivers/parisc/lba_pci.c +33 -0
@@ -1603,3 +1603,36 @@ void lba_set_iregs(struct parisc_device *lba, u32 ibase, u32 imask)iounmap (base_addr); } + +/* +* The design of the Diva management card in rp34x0 machines (rp3410, rp3440) +* seems rushed, so that many built-in components simply don't work. +* The following quirks disable the serial AUX port and the built-in ATI RV100 +* Radeon 7000 graphics card which both don't have any external connectors and +* thus are useless, and even worse, e.g. the AUX port occupies ttyS0 and as +* such makes those machines the only PARISC machines on which we can't use +* ttyS0 as boot console. +*/ +static void quirk_diva_ati_card (struct pci_dev *dev) +{ +if (dev->subsystem_vendor !=PCI_VENDOR_ID_HP || + dev->subsystem_device !=0x1292 ) +return ; + +dev_info (&dev->dev,"Hiding Diva built-in ATI card" ); + dev->device =0 ; +} +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_ATI ,PCI_DEVICE_ID_ATI_RADEON_QY , + quirk_diva_ati_card); + +static void quirk_diva_aux_disable (struct pci_dev *dev) +{ +if (dev->subsystem_vendor !=PCI_VENDOR_ID_HP || + dev->subsystem_device !=0x1291 ) +return ; + +dev_info (&dev->dev,"Hiding Diva built-in AUX serial device" ); + dev->device =0 ; +} +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_HP ,PCI_DEVICE_ID_HP_DIVA_AUX , + quirk_diva_aux_disable);
drivers/pci/pci-driver.c +6 -1
@@ -872,7 +872,12 @@ static int pci_pm_thaw_noirq(struct device *dev)if (pci_has_legacy_pm_support (pci_dev))return pci_legacy_resume_early (dev); -pci_update_current_state (pci_dev,PCI_D0 ); +/* +* pci_restore_state() requires the device to be in D0 (because of MSI +* restoration among other things), so force it into D0 in case the +* driver's "freeze" callbacks put it into a low-power state directly. +*/ +pci_set_power_state (pci_dev,PCI_D0 );pci_restore_state (pci_dev);if (drv && drv->pm && drv->pm->thaw_noirq)
drivers/scsi/libsas/sas_ata.c +0 -4
@@ -121,10 +121,6 @@ static void sas_ata_task_done(struct sas_task *task)if (unlikely (link->eh_info.err_mask)) qc->flags |=ATA_QCFLAG_FAILED ; } - - dev->sata_dev.sstatus = resp->sstatus; - dev->sata_dev.serror = resp->serror; - dev->sata_dev.scontrol = resp->scontrol; }else { ac =sas_to_ata_err (stat);if (ac) {
drivers/scsi/scsi_lib.c +6 -4
@@ -1688,11 +1688,13 @@ struct request_queue *__scsi_alloc_queue(struct Scsi_Host *shost, q->limits.cluster =0 ;/* -* set a reasonable default alignment on word boundaries: the -* host and device may alter it using -* blk_queue_update_dma_alignment() later. +* Set a reasonable default alignment: The larger of 32-byte (dword), +* which is a common minimum for HBAs, and the minimum DMA alignment, +* which is set by the platform. +* +* Devices that require a bigger alignment can increase it later. */ -blk_queue_dma_alignment (q,0x03 ); +blk_queue_dma_alignment (q,max (4 ,dma_get_cache_alignment ()) -1 );return q; }
drivers/staging/usbip/stub_dev.c +1 -2
@@ -186,8 +186,7 @@ static void stub_shutdown_connection(struct usbip_device *ud)* step 1? */ if (ud->tcp_socket) { -dev_dbg (&sdev->udev->dev,"shutdown tcp_socket %p\n" , - ud->tcp_socket); +dev_dbg (&sdev->udev->dev,"shutdown sockfd %d\n" , ud->sockfd);kernel_sock_shutdown (ud->tcp_socket,SHUT_RDWR ); }
drivers/staging/usbip/stub_main.c +3 -2
@@ -227,11 +227,12 @@ void stub_device_cleanup_urbs(struct stub_device *sdev)struct stub_priv *priv;struct urb *urb; -dev_dbg (&sdev->udev->dev,"free sdev %p\n" , sdev); +dev_dbg (&sdev->udev->dev,"Stub device cleaning up urbs\n" );while ((priv =stub_priv_pop (sdev))) { urb = priv->urb; -dev_dbg (&sdev->udev->dev,"free urb %p\n" , urb); +dev_dbg (&sdev->udev->dev,"free urb seqnum %lu\n" , + priv->seqnum);usb_kill_urb (urb);kmem_cache_free (stub_priv_cache, priv);
drivers/staging/usbip/stub_rx.c +3 -6
@@ -239,9 +239,6 @@ static int stub_recv_cmd_unlink(struct stub_device *sdev,if (priv->seqnum == pdu->u.cmd_unlink.seqnum) {int ret; -dev_info (&priv->urb->dev->dev,"unlink urb %p\n" , - priv->urb); -/* * This matched urb is not completed yet (i.e., be in * flight in usb hcd hardware/driver). Now we are
@@ -280,8 +277,8 @@ static int stub_recv_cmd_unlink(struct stub_device *sdev, ret =usb_unlink_urb (priv->urb);if (ret != -EINPROGRESS )dev_err (&priv->urb->dev->dev, -"failed to unlink a urb %p, ret %d\n" , - priv->urb, ret); +"failed to unlink a urb # %lu, ret %d\n" , + priv->seqnum, ret);return 0 ; } }
@@ -586,7 +583,7 @@ static void stub_rx_pdu(struct usbip_device *ud)memset (&pdu,0 ,sizeof (pdu));/* 1. receive a pdu header */ - ret =usbip_xmit (0 , ud->tcp_socket, (char *) &pdu,sizeof (pdu),0 ); + ret =usbip_recv (ud->tcp_socket, &pdu,sizeof (pdu));if (ret !=sizeof (pdu)) {dev_err (dev,"recv a header, %d\n" , ret);usbip_event_add (ud,SDEV_EVENT_ERROR_TCP );
drivers/staging/usbip/stub_tx.c +2 -2
@@ -201,8 +201,8 @@ static int stub_send_ret_submit(struct stub_device *sdev)/* 1. setup usbip_header */ setup_ret_submit_pdu (&pdu_header, urb); -usbip_dbg_stub_tx ("setup txdata seqnum: %d urb: %p\n" , - pdu_header.base.seqnum, urb); +usbip_dbg_stub_tx ("setup txdata seqnum: %d\n" , + pdu_header.base.seqnum);/*usbip_dump_header(pdu_header);*/ usbip_header_correct_endian (&pdu_header,1 );
drivers/staging/usbip/usbip_common.c +21 -64
166 lines not on this page · raw message
drivers/staging/usbip/usbip_common.h +1 -2
@@ -306,8 +306,7 @@ void setreuse(struct socket *);void usbip_dump_urb (struct urb *purb);void usbip_dump_header (struct usbip_header *pdu); -int usbip_xmit (int send,struct socket *sock,char *buf,int size, -int msg_flags); +int usbip_recv (struct socket *sock,void *buf,int size);struct socket *sockfd_to_socket (unsigned int sockfd); void usbip_pack_pdu(struct usbip_header *pdu, struct urb *urb, int cmd,
drivers/staging/usbip/userspace/src/utils.c +6 -3
@@ -34,6 +34,7 @@ int modify_match_busid(char *busid, int add)char match_busid_attr_path[SYSFS_PATH_MAX ];struct sysfs_attribute *match_busid_attr;int rc, ret =0 ; +int cmd_size;if (strnlen (busid,SYSFS_BUS_ID_SIZE ) >SYSFS_BUS_ID_SIZE -1 ) {dbg ("busid is too long" );
@@ -58,13 +59,15 @@ int modify_match_busid(char *busid, int add) }if (add) -snprintf (buff,SYSFS_BUS_ID_SIZE +4 ,"add %s" , busid); + cmd_size =snprintf (buff,SYSFS_BUS_ID_SIZE +4 ,"add %s" , + busid);else -snprintf (buff,SYSFS_BUS_ID_SIZE +4 ,"del %s" , busid); + cmd_size =snprintf (buff,SYSFS_BUS_ID_SIZE +4 ,"del %s" , + busid);dbg ("write \"%s\" to %s" , buff, match_busid_attr->path); - rc =sysfs_write_attribute (match_busid_attr, buff,sizeof (buff)); + rc =sysfs_write_attribute (match_busid_attr, buff, cmd_size);if (rc <0 ) {dbg ("failed to write match_busid: %s" ,strerror (errno)); ret =-1 ;
drivers/staging/usbip/vhci_hcd.c +1 -11
@@ -516,9 +516,6 @@ static int vhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,unsigned long flags;struct vhci_device *vdev; -usbip_dbg_vhci_hc ("enter, usb_hcd %p urb %p mem_flags %d\n" , - hcd, urb, mem_flags); -/* patch to usb_sg_init() is in 2.5.60 */ BUG_ON (!urb->transfer_buffer && urb->transfer_buffer_length);
@@ -677,8 +674,6 @@ static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)struct vhci_priv *priv;struct vhci_device *vdev; -pr_info ("dequeue a urb %p\n" , urb); -spin_lock_irqsave (&the_controller->lock, flags); priv = urb->hcpriv;
@@ -707,7 +702,6 @@ static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)spin_lock_irqsave (&vdev->priv_lock, flags2); -pr_info ("device %p seems to be disconnected\n" , vdev);list_del (&priv->list);kfree (priv); urb->hcpriv =NULL ;
@@ -719,8 +713,6 @@ static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)* vhci_rx will receive RET_UNLINK and give back the URB. * Otherwise, we give back it here. */ -pr_info ("gives back urb %p\n" , urb); -usb_hcd_unlink_urb_from_ep (hcd, urb);spin_unlock_irqrestore (&the_controller->lock, flags);
@@ -751,8 +743,6 @@ static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status) unlink->unlink_seqnum = priv->seqnum; -pr_info ("device %p seems to be still connected\n" , vdev); -/* send cmd_unlink and try to cancel the pending URB in the * peer */ list_add_tail (&unlink->list, &vdev->unlink_tx);
@@ -821,7 +811,7 @@ static void vhci_shutdown_connection(struct usbip_device *ud)/* need this? see stub_dev.c */ if (ud->tcp_socket) { -pr_debug ("shutdown tcp_socket %p\n" , ud->tcp_socket); +pr_debug ("shutdown tcp_socket %d\n" , ud->sockfd);kernel_sock_shutdown (ud->tcp_socket,SHUT_RDWR ); }
drivers/staging/usbip/vhci_rx.c +12 -14
@@ -35,21 +35,19 @@ struct urb *pickup_urb_and_free_priv(struct vhci_device *vdev, __u32 seqnum) urb = priv->urb; status = urb->status; -usbip_dbg_vhci_rx ("find urb %p vurb %p seqnum %u\n" , - urb, priv, seqnum); +usbip_dbg_vhci_rx ("find urb seqnum %u\n" , seqnum);/* TODO: fix logic here to improve indent situtation */ if (status != -EINPROGRESS ) {if (status == -ENOENT || status == -ECONNRESET ) -dev_info (&urb->dev->dev, -"urb %p was unlinked " -"%ssynchronuously.\n" , urb, - status == -ENOENT ?"" :"a" ); +dev_dbg (&urb->dev->dev, +"urb seq# %u was unlinked %ssynchronuously\n" , + seqnum, status == -ENOENT ?"" :"a" );else -dev_info (&urb->dev->dev, -"urb %p may be in a error, " -"status %d\n" , urb, status); +dev_dbg (&urb->dev->dev, +"urb seq# %u may be in a error, status %d\n" , + seqnum, status); }list_del (&priv->list);
@@ -75,8 +73,8 @@ static void vhci_recv_ret_submit(struct vhci_device *vdev,spin_unlock (&vdev->priv_lock);if (!urb) { -pr_err ("cannot find a urb of seqnum %u\n" , pdu->base.seqnum); -pr_info ("max seqnum %d\n" , +pr_err ("cannot find a urb of seqnum %u max seqnum %d\n" , + pdu->base.seqnum,atomic_read (&the_controller->seqnum));usbip_event_add (ud,VDEV_EVENT_ERROR_TCP );return ;
@@ -99,7 +97,7 @@ static void vhci_recv_ret_submit(struct vhci_device *vdev,if (usbip_dbg_flag_vhci_rx)usbip_dump_urb (urb); -usbip_dbg_vhci_rx ("now giveback urb %p\n" , urb); +usbip_dbg_vhci_rx ("now giveback urb %u\n" , pdu->base.seqnum);spin_lock_irqsave (&the_controller->lock, flags);usb_hcd_unlink_urb_from_ep (vhci_to_hcd (the_controller), urb);
@@ -165,7 +163,7 @@ static void vhci_recv_ret_unlink(struct vhci_device *vdev,pr_info ("the urb (seqnum %d) was already given backed\n" , pdu->base.seqnum); }else { -usbip_dbg_vhci_rx ("now giveback urb %p\n" , urb); +usbip_dbg_vhci_rx ("now giveback urb %d\n" , pdu->base.seqnum);/* If unlink is succeed, status is -ECONNRESET */ urb->status = pdu->u.ret_unlink.status;
@@ -205,7 +203,7 @@ static void vhci_rx_pdu(struct usbip_device *ud)memset (&pdu,0 ,sizeof (pdu));/* 1. receive a pdu header */ - ret =usbip_xmit (0 , ud->tcp_socket, (char *) &pdu,sizeof (pdu),0 ); + ret =usbip_recv (ud->tcp_socket, &pdu,sizeof (pdu));if (ret <0 ) {if (ret == -ECONNRESET )pr_info ("connection reset by peer\n" );
drivers/staging/usbip/vhci_tx.c +2 -1
@@ -83,7 +83,8 @@ static int vhci_send_cmd_submit(struct vhci_device *vdev)memset (&msg,0 ,sizeof (msg));memset (&iov,0 ,sizeof (iov)); -usbip_dbg_vhci_tx ("setup txdata urb %p\n" , urb); +usbip_dbg_vhci_tx ("setup txdata urb seqnum %lu\n" , + priv->seqnum);/* 1. setup usbip_header */ setup_cmd_submit_pdu (&pdu_header, urb);
drivers/tty/n_tty.c +2 -2
@@ -1459,7 +1459,7 @@ static void n_tty_set_termios(struct tty_struct *tty, struct ktermios *old)BUG_ON (!tty);if (old) - canon_change = (old->c_lflag ^ tty->termios->c_lflag) &ICANON ; + canon_change = (old->c_lflag ^ tty->termios->c_lflag) & (ICANON |EXTPROC );if (canon_change) {memset (&tty->read_flags,0 ,sizeof tty->read_flags); tty->canon_head = tty->read_tail;
@@ -2096,7 +2096,7 @@ static int n_tty_ioctl(struct tty_struct *tty, struct file *file,case TIOCINQ :/* FIXME: Locking */ retval = tty->read_cnt; -if (L_ICANON (tty)) +if (L_ICANON (tty) && !L_EXTPROC (tty)) retval =inq_canon (tty);return put_user (retval, (unsigned int __user *) arg);default :
drivers/tty/serial/8250_pci.c +3 -0
@@ -4175,6 +4175,9 @@ static struct pci_device_id serial_pci_tbl[] = { { PCI_DEVICE(0x1601, 0x0800), .driver_data = pbn_b0_4_1250000 }, { PCI_DEVICE(0x1601, 0xa801), .driver_data = pbn_b0_4_1250000 }, + /* Amazon PCI serial device */ + { PCI_DEVICE(0x1d0f, 0x8250), .driver_data = pbn_b0_1_115200 }, +/* * These entries match devices with class COMMUNICATION_SERIAL, * COMMUNICATION_MODEM or COMMUNICATION_MULTISERIAL
drivers/usb/core/config.c +15 -1
@@ -878,6 +878,13 @@ void usb_release_bos_descriptor(struct usb_device *dev) } } +static const __u8 bos_desc_len[256 ] = { + [USB_CAP_TYPE_WIRELESS_USB ] =USB_DT_USB_WIRELESS_CAP_SIZE , + [USB_CAP_TYPE_EXT ] =USB_DT_USB_EXT_CAP_SIZE , + [USB_SS_CAP_TYPE ] =USB_DT_USB_SS_CAP_SIZE , + [CONTAINER_ID_TYPE ] =USB_DT_USB_SS_CONTN_ID_SIZE , +}; +/* Get BOS descriptor set */ int usb_get_bos_descriptor (struct usb_device *dev) {
@@ -886,6 +893,7 @@ int usb_get_bos_descriptor(struct usb_device *dev)struct usb_dev_cap_header *cap;unsigned char *buffer;int length, total_len, num, i; +__u8 cap_type;int ret; bos =kzalloc (sizeof (struct usb_bos_descriptor ),GFP_KERNEL );
@@ -938,7 +946,13 @@ int usb_get_bos_descriptor(struct usb_device *dev) dev->bos->desc->bNumDeviceCaps = i;break ; } + cap_type = cap->bDevCapabilityType; length = cap->bLength; +if (bos_desc_len[cap_type] && length < bos_desc_len[cap_type]) { + dev->bos->desc->bNumDeviceCaps = i; +break ; + } + total_len -= length;if (cap->bDescriptorType !=USB_DT_DEVICE_CAPABILITY ) {
@@ -946,7 +960,7 @@ int usb_get_bos_descriptor(struct usb_device *dev)continue ; } -switch (cap->bDevCapabilityType) { +switch (cap_type) {case USB_CAP_TYPE_WIRELESS_USB :/* Wireless USB cap descriptor is handled by wusb */ break ;
drivers/usb/core/devio.c +9 -5
@@ -1093,14 +1093,18 @@ static int proc_do_submiturb(struct dev_state *ps, struct usbdevfs_urb *uurb,unsigned int u, totlen, isofrmlen;int ret, ifnum =-1 ;int is_in; - -if (uurb->flags & ~(USBDEVFS_URB_ISO_ASAP | -USBDEVFS_URB_SHORT_NOT_OK | +unsigned long mask =USBDEVFS_URB_SHORT_NOT_OK |USBDEVFS_URB_BULK_CONTINUATION |USBDEVFS_URB_NO_FSBR |USBDEVFS_URB_ZERO_PACKET | -USBDEVFS_URB_NO_INTERRUPT )) -return -EINVAL ; +USBDEVFS_URB_NO_INTERRUPT ; +/* USBDEVFS_URB_ISO_ASAP is a special case */ +if (uurb->type ==USBDEVFS_URB_TYPE_ISO ) + mask |=USBDEVFS_URB_ISO_ASAP ; + +if (uurb->flags & ~mask) +return -EINVAL ; +if (uurb->buffer_length >0 && !uurb->buffer)return -EINVAL ; if (!(uurb->type == USBDEVFS_URB_TYPE_CONTROL &&
drivers/usb/core/quirks.c +5 -1
@@ -53,10 +53,11 @@ static const struct usb_device_id usb_quirk_list[] = {/* Microsoft LifeCam-VX700 v2.0 */ { USB_DEVICE(0x045e, 0x0770), .driver_info = USB_QUIRK_RESET_RESUME }, - /* Logitech HD Pro Webcams C920, C920-C and C930e */ + /* Logitech HD Pro Webcams C920, C920-C, C925e and C930e */ { USB_DEVICE(0x046d, 0x082d), .driver_info = USB_QUIRK_DELAY_INIT }, { USB_DEVICE(0x046d, 0x0841), .driver_info = USB_QUIRK_DELAY_INIT }, { USB_DEVICE(0x046d, 0x0843), .driver_info = USB_QUIRK_DELAY_INIT }, + { USB_DEVICE(0x046d, 0x085b), .driver_info = USB_QUIRK_DELAY_INIT }, /* Logitech ConferenceCam CC3000e */ { USB_DEVICE(0x046d, 0x0847), .driver_info = USB_QUIRK_DELAY_INIT },
@@ -128,6 +129,9 @@ static const struct usb_device_id usb_quirk_list[] = {/* appletouch */ { USB_DEVICE(0x05ac, 0x021a), .driver_info = USB_QUIRK_RESET_RESUME }, + /* ELSA MicroLink 56K */ + { USB_DEVICE(0x05cc, 0x2267), .driver_info = USB_QUIRK_RESET_RESUME }, + /* Avision AV600U */ { USB_DEVICE(0x0638, 0x0a13), .driver_info = USB_QUIRK_STRING_FETCH_255 },
drivers/usb/host/ehci-dbg.c +1 -1
@@ -785,7 +785,7 @@ static ssize_t fill_registers_buffer(struct debug_buffer *buf)default :/* unknown */ break; } - temp = (cap >>8 ) &0xff ; + offset = (cap >>8 ) &0xff ; } }#endif
drivers/usb/host/xhci-mem.c +13 -4
@@ -873,10 +873,9 @@ int xhci_alloc_virt_device(struct xhci_hcd *xhci, int slot_id,return 0 ; } - xhci->devs[slot_id] =kzalloc (sizeof (*xhci->devs[slot_id]), flags); -if (!xhci->devs[slot_id]) + dev =kzalloc (sizeof (*dev), flags); +if (!dev)return 0 ; - dev = xhci->devs[slot_id];/* Allocate the (output) device context that will be used in the HC. */ dev->out_ctx =xhci_alloc_container_ctx (xhci,XHCI_CTX_TYPE_DEVICE , flags);
@@ -925,9 +924,19 @@ int xhci_alloc_virt_device(struct xhci_hcd *xhci, int slot_id, &xhci->dcbaa->dev_context_ptrs[slot_id], le64_to_cpu(xhci->dcbaa->dev_context_ptrs[slot_id])); + xhci->devs[slot_id] = dev; +return 1 ; fail: -xhci_free_virt_device (xhci, slot_id); + +if (dev->eps[0 ].ring) +xhci_ring_free (xhci, dev->eps[0 ].ring); +if (dev->in_ctx) +xhci_free_container_ctx (xhci, dev->in_ctx); +if (dev->out_ctx) +xhci_free_container_ctx (xhci, dev->out_ctx); +kfree (dev); +return 0 ; }
drivers/usb/host/xhci-ring.c +8 -4
@@ -2396,12 +2396,16 @@ static int handle_tx_event(struct xhci_hcd *xhci,*/ if (list_empty (&ep_ring->td_list)) {/* -* A stopped endpoint may generate an extra completion -* event if the device was suspended. Don't print -* warnings. +* Don't print wanings if it's due to a stopped endpoint +* generating an extra completion event if the device +* was suspended. Or, a event for the last TRB of a +* short TD we already got a short event for. +* The short TD is already removed from the TD list. */ +if (!(trb_comp_code ==COMP_STOP || - trb_comp_code ==COMP_STOP_INVAL )) { + trb_comp_code ==COMP_STOP_INVAL || + ep_ring->last_td_was_short)) {xhci_warn (xhci,"WARN Event TRB for slot %d ep %d with no TDs queued?\n" ,TRB_TO_SLOT_ID (le32_to_cpu (event->flags)), ep_index);
drivers/usb/mon/mon_bin.c +7 -1
@@ -1000,7 +1000,9 @@ static long mon_bin_ioctl(struct file *file, unsigned int cmd, unsigned long argbreak ;case MON_IOCQ_RING_SIZE : +mutex_lock (&rp->fetch_lock); ret = rp->b_size; +mutex_unlock (&rp->fetch_lock);break ;case MON_IOCT_RING_SIZE :
@@ -1227,12 +1229,16 @@ static int mon_bin_vma_fault(struct vm_area_struct *vma, struct vm_fault *vmf)unsigned long offset, chunk_idx;struct page *pageptr; +mutex_lock (&rp->fetch_lock); offset = vmf->pgoff <<PAGE_SHIFT ; -if (offset >= rp->b_size) +if (offset >= rp->b_size) {
Lines of this file are not shown. View the raw message.
include/asm-generic/dma-mapping-broken.h +0 -3
Lines of this file are not shown. View the raw message.
net/ipv4/raw.c +72 -47
119 lines not on this page · raw message
net/xfrm/xfrm_input.c +56 -0
56 lines not on this page · raw message
sound/core/oss/pcm_oss.c +27 -14
41 lines not on this page · raw message
sound/drivers/aloop.c +50 -48
98 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.