Linux 3.18.118
Greg KH
maintainerI'm announcing the release of the 3.18.118 kernel.
All users of the 3.18 kernel series must upgrade.
The updated 3.18.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-3.18.y
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/microblaze/boot/Makefile | 10 ++-- arch/powerpc/kernel/head_8xx.S | 2 arch/powerpc/kernel/pci_32.c | 1 arch/powerpc/platforms/chrp/time.c | 6 +- arch/powerpc/platforms/embedded6xx/hlwd-pic.c | 5 ++ arch/powerpc/platforms/powermac/bootx_init.c | 4 + arch/powerpc/platforms/powermac/setup.c | 1 arch/s390/include/asm/cpu_mf.h | 6 +- arch/x86/kernel/cpu/perf_event_intel_uncore.c | 2 arch/x86/kernel/cpu/perf_event_intel_uncore_nhmex.c | 2 crypto/authenc.c | 1 crypto/authencesn.c | 1 drivers/acpi/pci_root.c | 4 + drivers/ata/libata-eh.c | 12 +++-- drivers/char/random.c | 10 +++- drivers/crypto/padlock-aes.c | 8 ++- drivers/gpu/drm/gma500/psb_intel_drv.h | 2 drivers/gpu/drm/gma500/psb_intel_lvds.c | 2 drivers/gpu/drm/radeon/radeon_connectors.c | 10 ++-- drivers/hid/i2c-hid/i2c-hid.c | 8 +++ drivers/infiniband/core/mad.c | 11 ++-- drivers/infiniband/core/ucma.c | 6 ++ drivers/md/md.c | 3 + drivers/media/common/siano/smsendian.c | 14 ++--- drivers/media/i2c/smiapp/smiapp-core.c | 11 ++-- drivers/media/pci/saa7164/saa7164-fw.c | 3 - drivers/media/platform/omap3isp/isp.c | 7 +- drivers/media/radio/si470x/radio-si470x-i2c.c | 6 +- drivers/net/can/usb/ems_usb.c | 1 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 2 drivers/net/wireless/ath/regd.h | 5 ++ drivers/net/wireless/ath/regd_common.h | 13 +++++ drivers/net/wireless/mwifiex/usb.c | 3 + drivers/net/wireless/rsi/rsi_91x_sdio.c | 2 drivers/net/wireless/ti/wlcore/sdio.c | 5 ++ drivers/net/xen-netfront.c | 6 ++ drivers/pci/pci-sysfs.c | 15 +++--- drivers/regulator/pfuze100-regulator.c | 1 drivers/rtc/interface.c | 5 ++ drivers/scsi/3w-9xxx.c | 5 ++ drivers/scsi/3w-xxxx.c | 3 + drivers/scsi/megaraid.c | 3 + drivers/scsi/qla2xxx/qla_init.c | 7 +- drivers/scsi/qla2xxx/qla_os.c | 5 +- drivers/scsi/sg.c | 1 drivers/scsi/ufs/ufshcd.c | 2 drivers/tty/hvc/hvc_opal.c | 1 drivers/tty/pty.c | 3 + drivers/usb/core/hub.c | 4 + drivers/virtio/virtio_balloon.c | 2 fs/jfs/xattr.c | 10 ++-- fs/squashfs/block.c | 2 fs/squashfs/cache.c | 3 + fs/squashfs/file.c | 8 ++- fs/squashfs/fragment.c | 17 ++++--- fs/squashfs/squashfs_fs.h | 6 ++ fs/squashfs/squashfs_fs_sb.h | 1 fs/squashfs/super.c | 5 +- include/linux/ring_buffer.h | 1 include/net/tcp.h | 2 kernel/bpf/verifier.c | 4 - kernel/trace/ring_buffer.c | 16 ++++++ kernel/trace/trace.c | 6 ++ kernel/trace/trace_events_trigger.c | 18 +++++-- kernel/trace/trace_kprobe.c | 15 +++++- mm/slub.c | 2 mm/vmalloc.c | 3 - net/dsa/slave.c | 6 ++ net/ipv4/fib_frontend.c | 4 - net/ipv4/inet_fragment.c | 10 ++-- net/ipv4/ipconfig.c | 13 +++++ net/ipv4/tcp_dctcp.c | 4 - net/ipv4/tcp_input.c | 48 ++++++++++---------- sound/pci/emu10k1/emupcm.c | 4 + sound/pci/emu10k1/memory.c | 6 +- sound/pci/fm801.c | 16 +++++- sound/pci/hda/patch_ca0132.c | 8 ++- sound/soc/soc-pcm.c | 6 +- sound/usb/pcm.c | 2 tools/usb/usbip/src/usbip_detach.c | 9 ++- 81 files changed, 365 insertions(+), 144 deletions(-)
Alexandre Belloni (1):
rtc: ensure rtc_set_alarm fails when alarms are not supported
Anil Gurumurthy (1):
scsi: qla2xxx: Return error when TMF returns
Anson Huang (1):
regulator: pfuze100: add .is_enable() for pfuze100_swb_regulator_ops
Anton Vasilyev (1):
can: ems_usb: Fix memory leak on ems_usb_disconnect()
Artem Savkov (1):
tracing/kprobes: Fix trace_probe flags on enable_trace_kprobe() failure
Brad Love (1):
media: saa7164: Fix driver name in debug output
Chintan Pandya (1):
mm: vmalloc: avoid racy handling of debugobjects in vunmap
Chris Novakovic (1):
ipconfig: Correctly initialise ic_nameservers
Christoph Hellwig (1):
PCI: Prevent sysfs disable of device while driver is attached
Christophe Leroy (1):
powerpc/8xx: fix invalid register expression in head_8xx.S
Colin Ian King (1):
media: smiapp: fix timeout checking in smiapp_read_nvm
Cong Wang (1):
infiniband: fix a possible use-after-free bug
DaeRyong Jeong (1):
tty: Fix data race in tty_insert_flip_string_fixed_flag
Damien Le Moal (1):
libata: Fix command retry decision
Dan Carpenter (1):
scsi: megaraid: silence a static checker bug
Dmitry Torokhov (1):
HID: i2c-hid: check if device is there before really probing
Dominik Bozek (1):
usb: hub: Don't wait for connect state at resume for powered-off ports
Eric Dumazet (5):
tcp: do not force quickack when receiving out-of-order packets
tcp: add max_quickacks param to tcp_incr_quickack and tcp_enter_quickack_mode
tcp: do not aggressively quick ack after ECN events
tcp: add one more quick ack after after ECN events
inet: frag: enforce memory limits earlier
Eugeniy Paltsev (1):
NET: stmmac: align DMA stuff to largest cache line length
Eyal Reizer (1):
wlcore: sdio: check for valid platform device data before suspend
Florian Fainelli (1):
net: dsa: Do not suspend/resume closed slave_dev
Ganapathi Bhat (1):
mwifiex: handle race during mwifiex_usb_disconnect
Greg Kroah-Hartman (1):
Linux 3.18.118
Herbert Xu (1):
crypto: padlock-aes - Fix Nano workaround data corruption
Jakub Kicinski (1):
bpf: fix references to free_bpf_prog_info() in comments
Jiang Biao (1):
virtio_balloon: fix another race between migration and ballooning
Jonathan Neuschäfer (1):
powerpc/embedded6xx/hlwd-pic: Prevent interrupts from being handled by Starlet
Kai Chieh Chuang (1):
ASoC: dpcm: fix BE dai not hw_free and shutdown
Kan Liang (2):
perf/x86/intel/uncore: Correct fixed counter index check in generic code perf/x86/intel/uncore: Correct fixed counter index check for NHM
Leon Romanovsky (1):
RDMA/mad: Convert BUG_ONs to error flows
Linus Torvalds (3):
squashfs: be more careful about metadata corruption
squashfs: more metadata hardening
squashfs: more metadata hardenings
Lorenzo Bianconi (1):
ipv4: remove BUG_ON() from fib_compute_spec_dst
Luc Van Oostenryck (2):
drm/radeon: fix mode_valid's return type drm/gma500: fix psb_intel_lvds_mode_valid()'s return type
Masami Hiramatsu (1):
ring_buffer: tracing: Inherit the tracing setting to next ring buffer
Mathieu Malaterre (5):
mm/slub.c: add __printf verification to slab_err() powerpc/32: Add a missing include header
powerpc/chrp/time: Make some functions static, add missing header include powerpc/powermac: Add missing prototype for note_bootable_part() powerpc/powermac: Mark variable x as unused
Mauro Carvalho Chehab (2):
media: siano: get rid of __le32/__le16 cast warnings
media: si470x: fix __be16 annotations
Maya Erez (1):
scsi: ufs: fix exception event handling
Michal Simek (1):
microblaze: Fix simpleImage format generation
Mika Westerberg (1):
PCI: pciehp: Request control of native hotplug only if supported
Quinn Tran (1):
scsi: qla2xxx: Fix ISP recovery on unload
Shankara Pailoor (1):
jfs: Fix inconsistency between memory allocation and ea_buf->max_size
Shuah Khan (Samsung OSG) (1):
usbip: usbip_detach: Fix memory, udev context and udev leak
Siva Rebbagondla (1):
rsi: Fix 'invalid vdd' warning in mmc
Steven Rostedt (VMware) (3):
tracing: Fix double free of event_trigger_data
tracing: Fix possible double free in event_enable_trigger_func()
tracing: Quiet gcc warning about maybe unused link variable
Stewart Smith (1):
hvc_opal: don't set tb_ticks_per_usec in udbg_init_opal_common()
Suman Anna (1):
media: omap3isp: fix unbalanced dma_iommu_mapping
Sven Eckelmann (9):
ath: Add regulatory mapping for FCC3_ETSIC
ath: Add regulatory mapping for ETSI8_WORLD
ath: Add regulatory mapping for APL13_WORLD
ath: Add regulatory mapping for APL2_FCCA
ath: Add regulatory mapping for Uganda
ath: Add regulatory mapping for Tanzania
ath: Add regulatory mapping for Serbia
ath: Add regulatory mapping for Bermuda
ath: Add regulatory mapping for Bahamas
Takashi Iwai (2):
ALSA: emu10k1: Rate-limit error messages about page errors
ALSA: usb-audio: Apply rate limit to warning messages in URB complete callback
Takashi Sakamoto (1):
ALSA: hda/ca0132: fix build failure when a local macro is defined
Theodore Ts'o (1):
random: mix rdrand with entropy sent in from userspace
Thomas Richter (2):
s390/cpum_sf: Add data entry sizes to sampling trailer entry
perf: fix invalid bit in diagnostic entry
Tony Battersby (1):
scsi: sg: fix minor memory leak in error path
Tudor-Dan Ambarus (2):
crypto: authencesn - don't leak pointers to authenc keys
crypto: authenc - don't leak pointers to authenc keys
Wenwen Wang (2):
scsi: 3w-9xxx: fix a missing-check bug
scsi: 3w-xxxx: fix a missing-check bug
Xiao Liang (1):
xen-netfront: wait xenbus state change when load module manually
Yousuk Seung (1):
tcp: refactor tcp_ecn_check_ce to remove sk type cast
Yufen Yu (1):
md: fix NULL dereference of mddev->pers in remove_and_add_spares()
Zhouyang Jia (2):
ALSA: emu10k1: add error handling for snd_ctl_add
ALSA: fm801: add error handling for snd_ctl_add
Greg KH
maintainerMakefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 3 PATCHLEVEL = 18 -SUBLEVEL = 117 +SUBLEVEL = 118 EXTRAVERSION = NAME = Diseased Newt
arch/microblaze/boot/Makefile +6 -4
@@ -21,18 +21,20 @@ $(obj)/linux.bin.gz: $(obj)/linux.bin FORCE quiet_cmd_cp = CP $< $@$2 cmd_cp = cat $< >$@$2 || (rm -f $@ && echo false) -quiet_cmd_strip = STRIP $@ +quiet_cmd_strip = STRIP $< $@$2 cmd_strip = $(STRIP) -K microblaze_start -K _end -K __log_buf \ - -K _fdt_start vmlinux -o $@ + -K _fdt_start $< -o $@$2 UIMAGE_LOADADDR = $(CONFIG_KERNEL_BASE_ADDR) +UIMAGE_IN = $@ +UIMAGE_OUT = [email protected] $(obj)/simpleImage.%: vmlinux FORCE $(call if_changed,cp,.unstrip) $(call if_changed,objcopy) $(call if_changed,uimage) - $(call if_changed,strip) - @echo 'Kernel: $@ is ready' ' (#'`cat .version`')' + $(call if_changed,strip,.strip) + @echo 'Kernel: $(UIMAGE_OUT) is ready' ' (#'`cat .version`')' clean-files += simpleImage.*.unstrip linux.bin.ub
arch/powerpc/kernel/head_8xx.S +1 -1
@@ -722,7 +722,7 @@ start_here: tovirt(r6,r6) lis r5, abatron_pteptrs@h ori r5, r5, abatron_pteptrs@l - stw r5, 0xf0(r0) /* Must match your Abatron config file */ + stw r5, 0xf0(0) /* Must match your Abatron config file */ tophys(r5,r5) stw r6, 0(r5)
arch/powerpc/kernel/pci_32.c +1 -0
@@ -11,6 +11,7 @@#include <linux/sched.h> #include <linux/errno.h> #include <linux/bootmem.h> +#include <linux/syscalls.h> #include <linux/irq.h> #include <linux/list.h> #include <linux/of.h>
arch/powerpc/platforms/chrp/time.c +4 -2
@@ -27,6 +27,8 @@#include <asm/sections.h> #include <asm/time.h> +#include <platforms/chrp/chrp.h> +extern spinlock_t rtc_lock;#define NVRAM_AS0 0x74
@@ -62,7 +64,7 @@ long __init chrp_time_init(void)return 0 ; } -int chrp_cmos_clock_read (int addr) +static int chrp_cmos_clock_read (int addr) {if (nvram_as1 !=0 )outb (addr>>8 , nvram_as1);
@@ -70,7 +72,7 @@ int chrp_cmos_clock_read(int addr)return (inb (nvram_data)); } -void chrp_cmos_clock_write (unsigned long val,int addr) +static void chrp_cmos_clock_write (unsigned long val,int addr) {if (nvram_as1 !=0 )outb (addr>>8 , nvram_as1);
arch/powerpc/platforms/embedded6xx/hlwd-pic.c +5 -0
@@ -35,6 +35,8 @@*/ #define HW_BROADWAY_ICR 0x00#define HW_BROADWAY_IMR 0x04 +#define HW_STARLET_ICR 0x08 +#define HW_STARLET_IMR 0x0c/*
@@ -74,6 +76,9 @@ static void hlwd_pic_unmask(struct irq_data *d)void __iomem *io_base =irq_data_get_irq_chip_data (d);setbits32 (io_base +HW_BROADWAY_IMR ,1 << irq); + +/* Make sure the ARM (aka. Starlet) doesn't handle this interrupt. */ +clrbits32 (io_base +HW_STARLET_IMR ,1 << irq); }
arch/powerpc/platforms/powermac/bootx_init.c +3 -1
@@ -467,7 +467,7 @@ void __init bootx_init(unsigned long r3, unsigned long r4)boot_infos_t *bi = (boot_infos_t *) r4;unsigned long hdr;unsigned long space; -unsigned long ptr, x; +unsigned long ptr;char *model;unsigned long offset =reloc_offset ();
@@ -561,6 +561,8 @@ void __init bootx_init(unsigned long r3, unsigned long r4)* MMU switched OFF, so this should not be useful anymore. */ if (bi->version <4 ) { +unsigned long x__maybe_unused ; +bootx_printf ("Touching pages...\n" );/*
arch/powerpc/platforms/powermac/setup.c +1 -0
@@ -359,6 +359,7 @@ static int pmac_late_init(void) }machine_late_initcall (powermac, pmac_late_init); +void note_bootable_part (dev_t dev,int part,int goodness);/* * This is __init_refok because we check for "initializing" before * touching any of the __init sensitive things and "initializing"
arch/s390/include/asm/cpu_mf.h +4 -2
@@ -118,7 +118,7 @@ struct hws_basic_entry {struct hws_diag_entry {unsigned int def:16 ;/* 0-15 Data Entry Format */ -unsigned int R:14 ;/* 16-19 and 20-30 reserved */ +unsigned int R:15 ;/* 16-19 and 20-30 reserved */ unsigned int I:1 ;/* 31 entry valid or invalid */ u8 data[];/* Machine-dependent sample data */ } __packed;
@@ -134,7 +134,9 @@ struct hws_trailer_entry { unsigned int f:1; /* 0 - Block Full Indicator */ unsigned int a:1; /* 1 - Alert request control */ unsigned int t:1; /* 2 - Timestamp format */ - unsigned long long:61; /* 3 - 63: Reserved */ + unsigned int :29; /* 3 - 31: Reserved */ + unsigned int bsdes:16; /* 32-47: size of basic SDE */ + unsigned int dsdes:16; /* 48-63: size of diagnostic SDE */ };unsigned long long flags;/* 0 - 63: All indicators */ };
arch/x86/kernel/cpu/perf_event_intel_uncore.c +1 -1
@@ -175,7 +175,7 @@ void uncore_perf_event_update(struct intel_uncore_box *box, struct perf_event *eu64 prev_count, new_count, delta;int shift; -if (event->hw.idx >=UNCORE_PMC_IDX_FIXED ) +if (event->hw.idx ==UNCORE_PMC_IDX_FIXED ) shift =64 -uncore_fixed_ctr_bits (box);else shift =64 -uncore_perf_ctr_bits (box);
arch/x86/kernel/cpu/perf_event_intel_uncore_nhmex.c +1 -1
@@ -240,7 +240,7 @@ static void nhmex_uncore_msr_enable_event(struct intel_uncore_box *box, struct p {struct hw_perf_event *hwc = &event->hw; -if (hwc->idx >=UNCORE_PMC_IDX_FIXED ) +if (hwc->idx ==UNCORE_PMC_IDX_FIXED )wrmsrl (hwc->config_base,NHMEX_PMON_CTL_EN_BIT0 );else if (box->pmu->type->event_mask &NHMEX_PMON_CTL_EN_BIT0 )wrmsrl (hwc->config_base, hwc->config |NHMEX_PMON_CTL_EN_BIT22 );
crypto/authenc.c +1 -0
@@ -112,6 +112,7 @@ static int crypto_authenc_setkey(struct crypto_aead *authenc, const u8 *key, CRYPTO_TFM_RES_MASK); out: +memzero_explicit (&keys,sizeof (keys));return err; badkey:
crypto/authencesn.c +1 -0
@@ -86,6 +86,7 @@ static int crypto_authenc_esn_setkey(struct crypto_aead *authenc_esn, const u8 * CRYPTO_TFM_RES_MASK); out: +memzero_explicit (&keys,sizeof (keys));return err; badkey:
drivers/acpi/pci_root.c +3 -1
@@ -476,9 +476,11 @@ static void negotiate_os_control(struct acpi_pci_root *root, int *no_aspm, } control =OSC_PCI_EXPRESS_CAPABILITY_CONTROL - |OSC_PCI_EXPRESS_NATIVE_HP_CONTROL |OSC_PCI_EXPRESS_PME_CONTROL ; +if (IS_ENABLED (CONFIG_HOTPLUG_PCI_PCIE )) + control |=OSC_PCI_EXPRESS_NATIVE_HP_CONTROL ; +if (pci_aer_available ()) {if (aer_acpi_firmware_first ()) dev_info(&device->dev,
drivers/ata/libata-eh.c +8 -4
@@ -2173,12 +2173,16 @@ static void ata_eh_link_autopsy(struct ata_link *link)if (qc->err_mask & ~AC_ERR_OTHER ) qc->err_mask &= ~AC_ERR_OTHER ; -/* SENSE_VALID trumps dev/unknown error and revalidation */ +/* +* SENSE_VALID trumps dev/unknown error and revalidation. Upper +* layers will determine whether the command is worth retrying +* based on the sense data and device class/type. Otherwise, +* determine directly if the command is worth retrying using its +* error mask and flags. +*/ if (qc->flags &ATA_QCFLAG_SENSE_VALID ) qc->err_mask &= ~(AC_ERR_DEV |AC_ERR_OTHER ); - -/* determine whether the command is worth retrying */ -if (ata_eh_worth_retry (qc)) +else if (ata_eh_worth_retry (qc)) qc->flags |=ATA_QCFLAG_RETRY ;/* accumulate error info */
drivers/char/random.c +9 -1
@@ -1417,14 +1417,22 @@ static int write_pool(struct entropy_store *r, const char __user *buffer, size_t count) { size_t bytes; -__u32 buf[16 ]; +__u32 t, buf[16 ];const char __user *p = buffer;while (count >0 ) { +int b, i =0 ; + bytes =min (count,sizeof (buf));if (copy_from_user (&buf, p, bytes))return -EFAULT ; +for (b = bytes ; b >0 ; b -=sizeof (__u32), i++) { +if (!arch_get_random_int (&t)) +break ; + buf[i] ^= t; + } + count -= bytes; p += bytes;
drivers/crypto/padlock-aes.c +6 -2
@@ -266,6 +266,8 @@ static inline void padlock_xcrypt_ecb(const u8 *input, u8 *output, void *key,return ; } + count -= initial; +if (initial) asmvolatile (".byte 0xf3,0x0f,0xa7,0xc8" /* rep xcryptecb */ : "+S"(input), "+D"(output)
@@ -273,7 +275,7 @@ static inline void padlock_xcrypt_ecb(const u8 *input, u8 *output, void *key, asmvolatile (".byte 0xf3,0x0f,0xa7,0xc8" /* rep xcryptecb */ :"+S" (input),"+D" (output) - :"d" (control_word),"b" (key),"c" (count - initial)); + :"d" (control_word),"b" (key),"c" (count)); } static inline u8 *padlock_xcrypt_cbc(const u8 *input, u8 *output, void *key,
@@ -284,6 +286,8 @@ static inline u8 *padlock_xcrypt_cbc(const u8 *input, u8 *output, void *key,if (count < cbc_fetch_blocks)return cbc_crypt (input, output, key, iv, control_word, count); + count -= initial; +if (initial) asmvolatile (".byte 0xf3,0x0f,0xa7,0xd0" /* rep xcryptcbc */ : "+S" (input), "+D" (output), "+a" (iv)
@@ -291,7 +295,7 @@ static inline u8 *padlock_xcrypt_cbc(const u8 *input, u8 *output, void *key, asmvolatile (".byte 0xf3,0x0f,0xa7,0xd0" /* rep xcryptcbc */ :"+S" (input),"+D" (output),"+a" (iv) - :"d" (control_word),"b" (key),"c" (count-initial)); + :"d" (control_word),"b" (key),"c" (count));return iv; }
drivers/gpu/drm/gma500/psb_intel_drv.h +1 -1
@@ -251,7 +251,7 @@ extern int intelfb_remove(struct drm_device *dev,extern bool psb_intel_lvds_mode_fixup (struct drm_encoder *encoder,const struct drm_display_mode *mode,struct drm_display_mode *adjusted_mode); -extern int psb_intel_lvds_mode_valid (struct drm_connector *connector, +extern enum drm_mode_status psb_intel_lvds_mode_valid (struct drm_connector *connector,struct drm_display_mode *mode); extern int psb_intel_lvds_set_property(struct drm_connector *connector, struct drm_property *property,
drivers/gpu/drm/gma500/psb_intel_lvds.c +1 -1
@@ -343,7 +343,7 @@ static void psb_intel_lvds_restore(struct drm_connector *connector) } } -int psb_intel_lvds_mode_valid (struct drm_connector *connector, +enum drm_mode_status psb_intel_lvds_mode_valid (struct drm_connector *connector,struct drm_display_mode *mode) {struct drm_psb_private *dev_priv = connector->dev->dev_private;
drivers/gpu/drm/radeon/radeon_connectors.c +5 -5
@@ -804,7 +804,7 @@ static int radeon_lvds_get_modes(struct drm_connector *connector)return ret; } -static int radeon_lvds_mode_valid (struct drm_connector *connector, +static enum drm_mode_status radeon_lvds_mode_valid (struct drm_connector *connector,struct drm_display_mode *mode) {struct drm_encoder *encoder =radeon_best_single_encoder (connector);
@@ -947,7 +947,7 @@ static int radeon_vga_get_modes(struct drm_connector *connector)return ret; } -static int radeon_vga_mode_valid (struct drm_connector *connector, +static enum drm_mode_status radeon_vga_mode_valid (struct drm_connector *connector,struct drm_display_mode *mode) {struct drm_device *dev = connector->dev;
@@ -1086,7 +1086,7 @@ static int radeon_tv_get_modes(struct drm_connector *connector)return 1 ; } -static int radeon_tv_mode_valid (struct drm_connector *connector, +static enum drm_mode_status radeon_tv_mode_valid (struct drm_connector *connector,struct drm_display_mode *mode) {if ((mode->hdisplay >1024 ) || (mode->vdisplay >768 ))
@@ -1387,7 +1387,7 @@ static void radeon_dvi_force(struct drm_connector *connector) radeon_connector->use_digital = true; } -static int radeon_dvi_mode_valid (struct drm_connector *connector, +static enum drm_mode_status radeon_dvi_mode_valid (struct drm_connector *connector,struct drm_display_mode *mode) {struct drm_device *dev = connector->dev;
@@ -1666,7 +1666,7 @@ out:return ret; } -static int radeon_dp_mode_valid (struct drm_connector *connector, +static enum drm_mode_status radeon_dp_mode_valid (struct drm_connector *connector,struct drm_display_mode *mode) {struct drm_device *dev = connector->dev;
drivers/hid/i2c-hid/i2c-hid.c +8 -0
@@ -981,6 +981,14 @@ static int i2c_hid_probe(struct i2c_client *client,pm_runtime_set_active (&client->dev);pm_runtime_enable (&client->dev); +/* Make sure there is something at this address */ + ret =i2c_smbus_read_byte (client); +if (ret <0 ) { +dev_dbg (&client->dev,"nothing at this address: %d\n" , ret); + ret = -ENXIO ; + goto err_pm; + } + ret =i2c_hid_fetch_hid_descriptor (ihid);if (ret <0 ) goto err_pm;
drivers/infiniband/core/mad.c +7 -4
@@ -1466,7 +1466,8 @@ static int add_oui_reg_req(struct ib_mad_reg_req *mad_reg_req, mad_reg_req->oui, 3)) { method = &(*vendor_table)->vendor_class[ vclass]->method_table[i]; -BUG_ON (!*method); +if (!*method) + goto error3; goto check_in_use; } }
@@ -1476,10 +1477,12 @@ static int add_oui_reg_req(struct ib_mad_reg_req *mad_reg_req, vclass]->oui[i])) { method = &(*vendor_table)->vendor_class[ vclass]->method_table[i]; -BUG_ON (*method);/* Allocate method table for this OUI */ -if ((ret =allocate_method_table (method))) - goto error3; +if (!*method) { + ret =allocate_method_table (method); +if (ret) + goto error3; + }memcpy ((*vendor_table)->vendor_class[vclass]->oui[i], mad_reg_req->oui,3 ); goto check_in_use;
drivers/infiniband/core/ucma.c +5 -1
@@ -180,7 +180,7 @@ static struct ucma_multicast* ucma_alloc_multicast(struct ucma_context *ctx)return NULL ;mutex_lock (&mut); - mc->id =idr_alloc (&multicast_idr, mc,0 ,0 ,GFP_KERNEL ); + mc->id =idr_alloc (&multicast_idr,NULL ,0 ,0 ,GFP_KERNEL );mutex_unlock (&mut);if (mc->id <0 ) goto error;
@@ -1262,6 +1262,10 @@ static ssize_t ucma_process_join(struct ucma_file *file, goto err3; } +mutex_lock (&mut); +idr_replace (&multicast_idr, mc, mc->id); +mutex_unlock (&mut); +mutex_unlock (&file->mut);ucma_put_ctx (ctx);return 0 ;
drivers/md/md.c +3 -0
@@ -5676,6 +5676,9 @@ static int hot_remove_disk(struct mddev *mddev, dev_t dev)char b[BDEVNAME_SIZE ];struct md_rdev *rdev; +if (!mddev->pers) +return -ENODEV ; + rdev =find_rdev (mddev, dev);if (!rdev)return -ENXIO ;
drivers/media/common/siano/smsendian.c +7 -7
@@ -35,7 +35,7 @@ void smsendian_handle_tx_message(void *buffer)switch (msg->x_msg_header.msg_type) {case MSG_SMS_DATA_DOWNLOAD_REQ : { - msg->msg_data[0 ] =le32_to_cpu (msg->msg_data[0 ]); + msg->msg_data[0 ] =le32_to_cpu ((__force __le32)(msg->msg_data[0 ]));break ; }
@@ -44,7 +44,7 @@ void smsendian_handle_tx_message(void *buffer) sizeof(struct sms_msg_hdr))/4;for (i =0 ; i < msg_words; i++) - msg->msg_data[i] =le32_to_cpu (msg->msg_data[i]); + msg->msg_data[i] =le32_to_cpu ((__force __le32 )msg->msg_data[i]);break ; }
@@ -64,7 +64,7 @@ void smsendian_handle_rx_message(void *buffer) {struct sms_version_res *ver = (struct sms_version_res *) msg; - ver->chip_model =le16_to_cpu (ver->chip_model); + ver->chip_model =le16_to_cpu ((__force __le16 )ver->chip_model);break ; }
@@ -81,7 +81,7 @@ void smsendian_handle_rx_message(void *buffer) sizeof(struct sms_msg_hdr))/4;for (i =0 ; i < msg_words; i++) - msg->msg_data[i] =le32_to_cpu (msg->msg_data[i]); + msg->msg_data[i] =le32_to_cpu ((__force __le32 )msg->msg_data[i]);break ; }
@@ -95,9 +95,9 @@ void smsendian_handle_message_header(void *msg)#ifdef __BIG_ENDIANstruct sms_msg_hdr *phdr = (struct sms_msg_hdr *)msg; - phdr->msg_type =le16_to_cpu (phdr->msg_type); - phdr->msg_length =le16_to_cpu (phdr->msg_length); - phdr->msg_flags =le16_to_cpu (phdr->msg_flags); + phdr->msg_type =le16_to_cpu ((__force __le16 )phdr->msg_type); + phdr->msg_length =le16_to_cpu ((__force __le16 )phdr->msg_length); + phdr->msg_flags =le16_to_cpu ((__force __le16 )phdr->msg_flags);#endif /* __BIG_ENDIAN */ }EXPORT_SYMBOL_GPL (smsendian_handle_message_header);
drivers/media/i2c/smiapp/smiapp-core.c +5 -6
@@ -939,7 +939,7 @@ static int smiapp_read_nvm(struct smiapp_sensor *sensor,if (rval) goto out; -for (i =0 ; i <1000 ; i++) { +for (i =1000 ; i >0 ; i--) { rval =smiapp_read ( sensor,SMIAPP_REG_U8_DATA_TRANSFER_IF_1_STATUS , &s);
@@ -950,11 +950,10 @@ static int smiapp_read_nvm(struct smiapp_sensor *sensor,if (s &SMIAPP_DATA_TRANSFER_IF_1_STATUS_RD_READY )break ; -if (--i ==0 ) { - rval = -ETIMEDOUT ; - goto out; - } - + } +if (!i) { + rval = -ETIMEDOUT ; + goto out; }for (i =0 ; i <SMIAPP_NVM_PAGE_SIZE ; i++) {
drivers/media/pci/saa7164/saa7164-fw.c +2 -1
@@ -430,7 +430,8 @@ int saa7164_downloadfirmware(struct saa7164_dev *dev) __func__, fw->size);if (fw->size != fwlength) { -printk (KERN_ERR "xc5000: firmware incorrect size\n" ); +printk (KERN_ERR "saa7164: firmware incorrect size %zu != %u\n" , + fw->size, fwlength); ret = -ENOMEM ; goto out; }
drivers/media/platform/omap3isp/isp.c +4 -3
@@ -2117,6 +2117,7 @@ error_csiphy:static void isp_detach_iommu (struct isp_device *isp) { +arm_iommu_detach_device (isp->dev);arm_iommu_release_mapping (isp->mapping); isp->mapping =NULL ;iommu_group_remove_device (isp->dev);
@@ -2150,8 +2151,7 @@ static int isp_attach_iommu(struct isp_device *isp) mapping =arm_iommu_create_mapping (&platform_bus_type,SZ_1G ,SZ_2G );if (IS_ERR (mapping)) {dev_err (isp->dev,"failed to create ARM IOMMU mapping\n" ); - ret =PTR_ERR (mapping); - goto error; +return PTR_ERR (mapping); } isp->mapping = mapping;
@@ -2166,7 +2166,8 @@ static int isp_attach_iommu(struct isp_device *isp)return 0 ; error: -isp_detach_iommu (isp); +arm_iommu_release_mapping (isp->mapping); + isp->mapping =NULL ;return ret; }
drivers/media/radio/si470x/radio-si470x-i2c.c +3 -3
@@ -96,7 +96,7 @@ MODULE_PARM_DESC(max_rds_errors, "RDS maximum block errors: *1*");*/ int si470x_get_register (struct si470x_device *radio,int regnr) { -u16 buf[READ_REG_NUM ]; +__be16 buf[READ_REG_NUM ];struct i2c_msg msgs[1 ] = { { .addr = radio->client->addr,
@@ -121,7 +121,7 @@ int si470x_get_register(struct si470x_device *radio, int regnr)int si470x_set_register (struct si470x_device *radio,int regnr) {int i; -u16 buf[WRITE_REG_NUM ]; +__be16 buf[WRITE_REG_NUM ];struct i2c_msg msgs[1 ] = { { .addr = radio->client->addr,
@@ -151,7 +151,7 @@ int si470x_set_register(struct si470x_device *radio, int regnr)static int si470x_get_all_registers (struct si470x_device *radio) {int i; -u16 buf[READ_REG_NUM ]; +__be16 buf[READ_REG_NUM ];struct i2c_msg msgs[1 ] = { { .addr = radio->client->addr,
drivers/net/can/usb/ems_usb.c +1 -0
@@ -1083,6 +1083,7 @@ static void ems_usb_disconnect(struct usb_interface *intf)usb_free_urb (dev->intr_urb);kfree (dev->intr_in_buffer); +kfree (dev->tx_msg_buffer); } }
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +1 -1
@@ -53,7 +53,7 @@#include "stmmac.h" #include <linux/reset.h> -#define STMMAC_ALIGN (x) L1_CACHE_ALIGN(x) +#define STMMAC_ALIGN (x) __ALIGN_KERNEL(x, SMP_CACHE_BYTES)/* Module parameters */ #define TX_TIMEO 5000
drivers/net/wireless/ath/regd.h +5 -0
@@ -68,12 +68,14 @@ enum CountryCode {CTRY_AUSTRALIA =36 ,CTRY_AUSTRIA =40 ,CTRY_AZERBAIJAN =31 , +CTRY_BAHAMAS =44 ,CTRY_BAHRAIN =48 ,CTRY_BANGLADESH =50 ,CTRY_BARBADOS =52 ,CTRY_BELARUS =112 ,CTRY_BELGIUM =56 ,CTRY_BELIZE =84 , +CTRY_BERMUDA =60 ,CTRY_BOLIVIA =68 ,CTRY_BOSNIA_HERZ =70 , CTRY_BRAZIL = 76,
@@ -159,6 +161,7 @@ enum CountryCode {CTRY_ROMANIA =642 ,CTRY_RUSSIA =643 ,CTRY_SAUDI_ARABIA =682 , +CTRY_SERBIA =688 ,CTRY_SERBIA_MONTENEGRO =891 ,CTRY_SINGAPORE =702 , CTRY_SLOVAKIA = 703,
@@ -170,11 +173,13 @@ enum CountryCode {CTRY_SWITZERLAND =756 ,CTRY_SYRIA =760 ,CTRY_TAIWAN =158 , +CTRY_TANZANIA =834 ,CTRY_THAILAND =764 ,CTRY_TRINIDAD_Y_TOBAGO =780 ,CTRY_TUNISIA =788 ,CTRY_TURKEY =792 ,CTRY_UAE =784 , +CTRY_UGANDA =800 ,CTRY_UKRAINE =804 ,CTRY_UNITED_KINGDOM =826 , CTRY_UNITED_STATES = 840,
drivers/net/wireless/ath/regd_common.h +13 -0
@@ -35,6 +35,7 @@ enum EnumRd {FRANCE_RES =0x31 ,FCC3_FCCA =0x3A ,FCC3_WORLD =0x3B , +FCC3_ETSIC =0x3F ,ETSI1_WORLD =0x37 , ETSI3_ETSIA = 0x32,
@@ -44,6 +45,7 @@ enum EnumRd {ETSI4_ETSIC =0x38 ,ETSI5_WORLD =0x39 ,ETSI6_WORLD =0x34 , +ETSI8_WORLD =0x3D ,ETSI_RESERVED =0x33 , MKK1_MKKA = 0x40,
@@ -59,6 +61,7 @@ enum EnumRd {MKK1_MKKA1 =0x4A ,MKK1_MKKA2 =0x4B ,MKK1_MKKC =0x4C , +APL2_FCCA =0x4D ,APL3_FCCA =0x50 , APL1_WORLD = 0x52,
@@ -67,6 +70,7 @@ enum EnumRd {APL1_ETSIC =0x55 ,APL2_ETSIC =0x56 ,APL5_WORLD =0x58 , +APL13_WORLD =0x5A ,APL6_WORLD =0x5B ,APL7_FCCA =0x5C , APL8_WORLD = 0x5D,
@@ -168,6 +172,7 @@ static struct reg_dmn_pair_mapping regDomainPairs[] = { {FCC2_ETSIC, CTL_FCC, CTL_ETSI}, {FCC3_FCCA, CTL_FCC, CTL_FCC}, {FCC3_WORLD, CTL_FCC, CTL_ETSI}, + {FCC3_ETSIC, CTL_FCC, CTL_ETSI}, {FCC4_FCCA, CTL_FCC, CTL_FCC}, {FCC5_FCCA, CTL_FCC, CTL_FCC}, {FCC6_FCCA, CTL_FCC, CTL_FCC},
@@ -179,6 +184,7 @@ static struct reg_dmn_pair_mapping regDomainPairs[] = { {ETSI4_WORLD, CTL_ETSI, CTL_ETSI}, {ETSI5_WORLD, CTL_ETSI, CTL_ETSI}, {ETSI6_WORLD, CTL_ETSI, CTL_ETSI}, + {ETSI8_WORLD, CTL_ETSI, CTL_ETSI},/* XXX: For ETSI3_ETSIA, Was NO_CTL meant for the 2 GHz band ? */ {ETSI3_ETSIA, CTL_ETSI, CTL_ETSI},
@@ -188,9 +194,11 @@ static struct reg_dmn_pair_mapping regDomainPairs[] = { {FCC1_FCCA, CTL_FCC, CTL_FCC}, {APL1_WORLD, CTL_FCC, CTL_ETSI}, {APL2_WORLD, CTL_FCC, CTL_ETSI}, + {APL2_FCCA, CTL_FCC, CTL_FCC}, {APL3_WORLD, CTL_FCC, CTL_ETSI}, {APL4_WORLD, CTL_FCC, CTL_ETSI}, {APL5_WORLD, CTL_FCC, CTL_ETSI}, + {APL13_WORLD, CTL_ETSI, CTL_ETSI}, {APL6_WORLD, CTL_ETSI, CTL_ETSI}, {APL8_WORLD, CTL_ETSI, CTL_ETSI}, {APL9_WORLD, CTL_ETSI, CTL_ETSI},
@@ -298,6 +306,7 @@ static struct country_code_to_enum_rd allCountries[] = { {CTRY_AUSTRALIA2, FCC6_WORLD, "AU"}, {CTRY_AUSTRIA, ETSI1_WORLD, "AT"}, {CTRY_AZERBAIJAN, ETSI4_WORLD, "AZ"}, + {CTRY_BAHAMAS, FCC3_WORLD, "BS"}, {CTRY_BAHRAIN, APL6_WORLD, "BH"}, {CTRY_BANGLADESH, NULL1_WORLD, "BD"}, {CTRY_BARBADOS, FCC2_WORLD, "BB"},
@@ -305,6 +314,7 @@ static struct country_code_to_enum_rd allCountries[] = { {CTRY_BELGIUM, ETSI1_WORLD, "BE"}, {CTRY_BELGIUM2, ETSI4_WORLD, "BL"}, {CTRY_BELIZE, APL1_ETSIC, "BZ"}, + {CTRY_BERMUDA, FCC3_FCCA, "BM"}, {CTRY_BOLIVIA, APL1_ETSIC, "BO"}, {CTRY_BOSNIA_HERZ, ETSI1_WORLD, "BA"}, {CTRY_BRAZIL, FCC3_WORLD, "BR"},
@@ -444,6 +454,7 @@ static struct country_code_to_enum_rd allCountries[] = { {CTRY_ROMANIA, NULL1_WORLD, "RO"}, {CTRY_RUSSIA, NULL1_WORLD, "RU"}, {CTRY_SAUDI_ARABIA, NULL1_WORLD, "SA"}, + {CTRY_SERBIA, ETSI1_WORLD, "RS"}, {CTRY_SERBIA_MONTENEGRO, ETSI1_WORLD, "CS"}, {CTRY_SINGAPORE, APL6_WORLD, "SG"}, {CTRY_SLOVAKIA, ETSI1_WORLD, "SK"},
@@ -455,10 +466,12 @@ static struct country_code_to_enum_rd allCountries[] = { {CTRY_SWITZERLAND, ETSI1_WORLD, "CH"}, {CTRY_SYRIA, NULL1_WORLD, "SY"}, {CTRY_TAIWAN, APL3_FCCA, "TW"}, + {CTRY_TANZANIA, APL1_WORLD, "TZ"}, {CTRY_THAILAND, FCC3_WORLD, "TH"}, {CTRY_TRINIDAD_Y_TOBAGO, FCC3_WORLD, "TT"}, {CTRY_TUNISIA, ETSI3_WORLD, "TN"}, {CTRY_TURKEY, ETSI3_WORLD, "TR"}, + {CTRY_UGANDA, FCC3_WORLD, "UG"}, {CTRY_UKRAINE, NULL1_WORLD, "UA"}, {CTRY_UAE, NULL1_WORLD, "AE"}, {CTRY_UNITED_KINGDOM, ETSI1_WORLD, "GB"},
drivers/net/wireless/mwifiex/usb.c +3 -0
@@ -556,6 +556,9 @@ static void mwifiex_usb_disconnect(struct usb_interface *intf) MWIFIEX_FUNC_SHUTDOWN); } +if (adapter->workqueue) +flush_workqueue (adapter->workqueue); +mwifiex_usb_free (card);dev_dbg (adapter->dev,"%s: removing card\n" , __func__);
drivers/net/wireless/rsi/rsi_91x_sdio.c +0 -2
@@ -155,7 +155,6 @@ static void rsi_reset_card(struct sdio_func *pfunction)int err;struct mmc_card *card = pfunction->card;struct mmc_host *host = card->host; -s32 bit = (fls (host->ocr_avail) -1 );u8 cmd52_resp;u32 clock, resp, i;u16 rca;
@@ -175,7 +174,6 @@ static void rsi_reset_card(struct sdio_func *pfunction)msleep (20 );/* Initialize the SDIO card */ - host->ios.vdd = bit; host->ios.chip_select =MMC_CS_DONTCARE ; host->ios.bus_mode =MMC_BUSMODE_OPENDRAIN ; host->ios.power_mode =MMC_POWER_UP ;
drivers/net/wireless/ti/wlcore/sdio.c +5 -0
@@ -342,6 +342,11 @@ static int wl1271_suspend(struct device *dev)mmc_pm_flag_t sdio_flags;int ret =0 ; +if (!wl) { +dev_err (dev,"no wilink module was probed\n" ); + goto out; + } +dev_dbg (dev,"wl1271 suspend. wow_enabled: %d\n" , wl->wow_enabled);
drivers/net/xen-netfront.c +6 -0
@@ -85,6 +85,7 @@ struct netfront_cb {/* IRQ name is queue name with "-tx" or "-rx" appended */ #define IRQ_NAME_SIZE (QUEUE_NAME_SIZE + 3) +static DECLARE_WAIT_QUEUE_HEAD (module_load_q);static DECLARE_WAIT_QUEUE_HEAD (module_unload_q);struct netfront_stats {
@@ -1359,6 +1360,11 @@ static struct net_device *xennet_create_dev(struct xenbus_device *dev)netif_carrier_off (netdev);xenbus_switch_state (dev, XenbusStateInitialising); +wait_event (module_load_q, +xenbus_read_driver_state (dev->otherend) != + XenbusStateClosed && +xenbus_read_driver_state (dev->otherend) != + XenbusStateUnknown);return netdev; exit:
drivers/pci/pci-sysfs.c +9 -6
@@ -199,13 +199,16 @@ static ssize_t enable_store(struct device *dev, struct device_attribute *attr,if (!capable (CAP_SYS_ADMIN ))return -EPERM ; -if (!val) { -if (pci_is_enabled (pdev)) -pci_disable_device (pdev); -else - result = -EIO ; - }else +device_lock (dev); +if (dev->driver) + result = -EBUSY ; +else if (val) result =pci_enable_device (pdev); +else if (pci_is_enabled (pdev)) +pci_disable_device (pdev); +else + result = -EIO ; +device_unlock (dev);return result <0 ? result : count; }
drivers/regulator/pfuze100-regulator.c +1 -0
@@ -142,6 +142,7 @@ static struct regulator_ops pfuze100_sw_regulator_ops = {static struct regulator_ops pfuze100_swb_regulator_ops = { .enable = regulator_enable_regmap, .disable = regulator_disable_regmap, + .is_enabled = regulator_is_enabled_regmap, .list_voltage = regulator_list_voltage_table, .map_voltage = regulator_map_voltage_ascend, .set_voltage_sel = regulator_set_voltage_sel_regmap,
drivers/rtc/interface.c +5 -0
@@ -381,6 +381,11 @@ int rtc_set_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) {int err; +if (!rtc->ops) +return -ENODEV ; +else if (!rtc->ops->set_alarm) +return -EINVAL ; + err =rtc_valid_tm (&alarm->time);if (err !=0 )return err;
drivers/scsi/3w-9xxx.c +5 -0
@@ -901,6 +901,11 @@ static int twa_chrdev_open(struct inode *inode, struct file *file)unsigned int minor_number;int retval =TW_IOCTL_ERROR_OS_ENODEV ; +if (!capable (CAP_SYS_ADMIN )) { + retval = -EACCES ; + goto out; + } + minor_number =iminor (inode);if (minor_number >= twa_device_extension_count) goto out;
drivers/scsi/3w-xxxx.c +3 -0
@@ -1047,6 +1047,9 @@ static int tw_chrdev_open(struct inode *inode, struct file *file)dprintk (KERN_WARNING "3w-xxxx: tw_ioctl_open()\n" ); +if (!capable (CAP_SYS_ADMIN )) +return -EACCES ; + minor_number =iminor (inode);if (minor_number >= tw_device_extension_count)return -ENODEV ;
drivers/scsi/megaraid.c +3 -0
@@ -4200,6 +4200,9 @@ megaraid_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)int irq, i, j;int error = -ENODEV ; +if (hba_count >=MAX_CONTROLLERS ) + goto out; +if (pci_enable_device (pdev)) goto out;pci_set_master (pdev);
drivers/scsi/qla2xxx/qla_init.c +3 -4
@@ -325,11 +325,10 @@ qla2x00_async_tm_cmd(fc_port_t *fcport, uint32_t flags, uint32_t lun,wait_for_completion (&tm_iocb->u.tmf.comp); - rval = tm_iocb->u.tmf.comp_status ==CS_COMPLETE ? -QLA_SUCCESS :QLA_FUNCTION_FAILED ; + rval = tm_iocb->u.tmf.data; -if ((rval !=QLA_SUCCESS ) || tm_iocb->u.tmf.data) { -ql_dbg (ql_dbg_taskm, vha,0x8030 , +if (rval !=QLA_SUCCESS ) { +ql_log (ql_log_warn, vha,0x8030 ,"TM IOCB failed (%x).\n" , rval); }
drivers/scsi/qla2xxx/qla_os.c +3 -2
@@ -5000,8 +5000,9 @@ qla2x00_do_dpc(void *data) } } -if (test_and_clear_bit (ISP_ABORT_NEEDED , - &base_vha->dpc_flags)) { +if (test_and_clear_bit + (ISP_ABORT_NEEDED , &base_vha->dpc_flags) && + !test_bit (UNLOADING , &base_vha->dpc_flags)) {ql_dbg (ql_dbg_dpc, base_vha,0x4007 ,"ISP abort scheduled.\n" );
drivers/scsi/sg.c +1 -0
@@ -2242,6 +2242,7 @@ sg_add_sfp(Sg_device * sdp)write_lock_irqsave (&sdp->sfd_lock, iflags);if (atomic_read (&sdp->detaching)) {write_unlock_irqrestore (&sdp->sfd_lock, iflags); +kfree (sfp);return ERR_PTR (-ENODEV ); }list_add_tail (&sfp->sfd_siblings, &sdp->sfds);
drivers/scsi/ufs/ufshcd.c +2 -0
@@ -3330,6 +3330,7 @@ static void ufshcd_exception_event_handler(struct work_struct *work) hba = container_of(work, struct ufs_hba, eeh_work);pm_runtime_get_sync (hba->dev); +scsi_block_requests (hba->host); err =ufshcd_get_ee_status (hba, &status);if (err) { dev_err(hba->dev, "%s: failed to get exception status %d\n",
@@ -3345,6 +3346,7 @@ static void ufshcd_exception_event_handler(struct work_struct *work) __func__, err); } out: +scsi_unblock_requests (hba->host);pm_runtime_put_sync (hba->dev);return ; }
drivers/tty/hvc/hvc_opal.c +0 -1
@@ -337,7 +337,6 @@ static void udbg_init_opal_common(void) udbg_putc = udbg_opal_putc; udbg_getc = udbg_opal_getc; udbg_getc_poll = udbg_opal_getc_poll; - tb_ticks_per_usec =0x200 ;/* Make udelay not suck */ }void __init hvc_opal_init_early (void )
drivers/tty/pty.c +3 -0
@@ -114,16 +114,19 @@ static int pty_space(struct tty_struct *to)static int pty_write (struct tty_struct *tty,const unsigned char *buf,int c) {struct tty_struct *to = tty->link; +unsigned long flags;if (tty->stopped)return 0 ;if (c >0 ) { +spin_lock_irqsave (&to->port->lock, flags);/* Stuff the data into the input queue of the other end */ c =tty_insert_flip_string (to->port, buf, c);/* And shovel */ if (c)tty_flip_buffer_push (to->port); +spin_unlock_irqrestore (&to->port->lock, flags); }return c; }
drivers/usb/core/hub.c +4 -0
@@ -3310,6 +3310,10 @@ static int wait_for_ss_port_enable(struct usb_device *udev,while (delay_ms <2000 ) {if (status || *portstatus &USB_PORT_STAT_CONNECTION )break ; +if (!port_is_power_on (hub, *portstatus)) { + status = -ENODEV ; +break ; + }msleep (20 ); delay_ms +=20 ; status =hub_port_status (hub, *port1, portstatus, portchange);
drivers/virtio/virtio_balloon.c +2 -0
@@ -416,7 +416,9 @@ static int virtballoon_migratepage(struct balloon_dev_info *vb_dev_info,tell_host (vb, vb->inflate_vq);/* balloon's page migration 2nd step -- deflate "page" */ +spin_lock_irqsave (&vb_dev_info->pages_lock, flags);balloon_page_delete (page); +spin_unlock_irqrestore (&vb_dev_info->pages_lock, flags); vb->num_pfns =VIRTIO_BALLOON_PAGES_PER_PAGE ;set_page_pfns (vb->pfns, page);tell_host (vb, vb->deflate_vq);
fs/jfs/xattr.c +6 -4
@@ -493,15 +493,17 @@ static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size)if (size >PSIZE ) {/* * To keep the rest of the code simple. Allocate a -* contiguous buffer to work with +* contiguous buffer to work with. Make the buffer large +* enough to make use of the whole extent. */ - ea_buf->xattr =kmalloc (size,GFP_KERNEL ); + ea_buf->max_size = (size + sb->s_blocksize -1 ) & + ~(sb->s_blocksize -1 ); + + ea_buf->xattr =kmalloc (ea_buf->max_size,GFP_KERNEL );if (ea_buf->xattr ==NULL )return -ENOMEM ; ea_buf->flag =EA_MALLOC ; - ea_buf->max_size = (size + sb->s_blocksize -1 ) & - ~(sb->s_blocksize -1 );if (ea_size ==0 )return 0 ;
fs/squashfs/block.c +2 -0
@@ -166,6 +166,8 @@ int squashfs_read_data(struct super_block *sb, u64 index, int length, }if (compressed) { +if (!msblk->stream) + goto read_failure; length =squashfs_decompress (msblk, bh, b, offset, length, output);if (length <0 )
fs/squashfs/cache.c +3 -0
@@ -350,6 +350,9 @@ int squashfs_read_metadata(struct super_block *sb, void *buffer,TRACE ("Entered squashfs_read_metadata [%llx:%x]\n" , *block, *offset); +if (unlikely (length <0 )) +return -EIO ; +while (length) { entry =squashfs_cache_get (sb, msblk->block_cache, *block,0 );if (entry->error) {
fs/squashfs/file.c +6 -2
@@ -194,7 +194,11 @@ static long long read_indexes(struct super_block *sb, int n, }for (i =0 ; i < blocks; i++) { -int size =le32_to_cpu (blist[i]); +int size =squashfs_block_size (blist[i]); +if (size <0 ) { + err = size; + goto failure; + } block +=SQUASHFS_COMPRESSED_SIZE_BLOCK (size); } n -= blocks;
@@ -367,7 +371,7 @@ static int read_blocklist(struct inode *inode, int index, u64 *block) sizeof(size));if (res <0 )return res; -return le32_to_cpu (size); +return squashfs_block_size (size); }/* Copy data into page cache */
fs/squashfs/fragment.c +10 -7
@@ -49,11 +49,16 @@ int squashfs_frag_lookup(struct super_block *sb, unsigned int fragment, u64 *fragment_block) {struct squashfs_sb_info *msblk = sb->s_fs_info; -int block =SQUASHFS_FRAGMENT_INDEX (fragment); -int offset =SQUASHFS_FRAGMENT_INDEX_OFFSET (fragment); -u64 start_block =le64_to_cpu (msblk->fragment_index[block]); +int block, offset, size;struct squashfs_fragment_entry fragment_entry; -int size; +u64 start_block; + +if (fragment >= msblk->fragments) +return -EIO ; + block =SQUASHFS_FRAGMENT_INDEX (fragment); + offset =SQUASHFS_FRAGMENT_INDEX_OFFSET (fragment); + + start_block =le64_to_cpu (msblk->fragment_index[block]); size =squashfs_read_metadata (sb, &fragment_entry, &start_block, &offset,sizeof (fragment_entry));
@@ -61,9 +66,7 @@ int squashfs_frag_lookup(struct super_block *sb, unsigned int fragment,return size; *fragment_block =le64_to_cpu (fragment_entry.start_block); - size =le32_to_cpu (fragment_entry.size); - -return size; +return squashfs_block_size (fragment_entry.size); }
fs/squashfs/squashfs_fs.h +6 -0
@@ -129,6 +129,12 @@#define SQUASHFS_COMPRESSED_BLOCK (B ) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK)) +static inline int squashfs_block_size (__le32 raw) +{ +u32 size =le32_to_cpu (raw); +return (size >>25 ) ? -EIO : size; +} +/* * Inode number ops. Inodes consist of a compressed block number, and an * uncompressed offset within that block
fs/squashfs/squashfs_fs_sb.h +1 -0
@@ -75,6 +75,7 @@ struct squashfs_sb_info {unsigned short block_log;long long bytes_used;unsigned int inodes; +unsigned int fragments; int xattr_ids; };#endif
fs/squashfs/super.c +3 -2
@@ -176,6 +176,7 @@ static int squashfs_fill_super(struct super_block *sb, void *data, int silent) msblk->inode_table =le64_to_cpu (sblk->inode_table_start); msblk->directory_table =le64_to_cpu (sblk->directory_table_start); msblk->inodes =le32_to_cpu (sblk->inodes); + msblk->fragments =le32_to_cpu (sblk->fragments); flags =le16_to_cpu (sblk->flags);TRACE ("Found valid superblock on %s\n" ,bdevname (sb->s_bdev, b));
@@ -186,7 +187,7 @@ static int squashfs_fill_super(struct super_block *sb, void *data, int silent)TRACE ("Filesystem size %lld bytes\n" , msblk->bytes_used);TRACE ("Block size %d\n" , msblk->block_size);TRACE ("Number of inodes %d\n" , msblk->inodes); -TRACE ("Number of fragments %d\n" ,le32_to_cpu (sblk->fragments)); +TRACE ("Number of fragments %d\n" , msblk->fragments);TRACE ("Number of ids %d\n" ,le16_to_cpu (sblk->no_ids));TRACE ("sblk->inode_table_start %llx\n" , msblk->inode_table);TRACE ("sblk->directory_table_start %llx\n" , msblk->directory_table);
@@ -273,7 +274,7 @@ allocate_id_index_table: sb->s_export_op = &squashfs_export_ops; handle_fragments: - fragments =le32_to_cpu (sblk->fragments); + fragments = msblk->fragments;if (fragments ==0 ) goto check_directory_table;
include/linux/ring_buffer.h +1 -0
@@ -162,6 +162,7 @@ void ring_buffer_record_enable(struct ring_buffer *buffer);void ring_buffer_record_off (struct ring_buffer *buffer);void ring_buffer_record_on (struct ring_buffer *buffer);int ring_buffer_record_is_on (struct ring_buffer *buffer); +int ring_buffer_record_is_set_on (struct ring_buffer *buffer);void ring_buffer_record_disable_cpu (struct ring_buffer *buffer,int cpu);void ring_buffer_record_enable_cpu (struct ring_buffer *buffer,int cpu);
include/net/tcp.h +1 -1
@@ -372,7 +372,7 @@ ssize_t tcp_splice_read(struct socket *sk, loff_t *ppos, struct pipe_inode_info *pipe, size_t len, unsigned int flags); -void tcp_enter_quickack_mode (struct sock *sk); +void tcp_enter_quickack_mode (struct sock *sk,unsigned int max_quickacks);static inline void tcp_dec_quickack_mode (struct sock *sk,const unsigned int pkts) {
kernel/bpf/verifier.c +2 -2
@@ -1763,7 +1763,7 @@ static int replace_map_fd_with_map_ptr(struct verifier_env *env)/* hold the map. If the program is rejected by verifier, * the map will be released by release_maps() or it * will be used by the valid program until it's unloaded -* and all maps are released in free_bpf_prog_info() +* and all maps are released in free_used_maps() */ atomic_inc (&map->refcnt);
@@ -1929,7 +1929,7 @@ free_log_buf: free_env:if (!prog->aux->used_maps)/* if we didn't copy map pointers into bpf_prog_info, release -* them now. Otherwise free_bpf_prog_info() will release them. +* them now. Otherwise free_used_maps() will release them. */ release_maps (env);kfree (env);
kernel/trace/ring_buffer.c +16 -0
@@ -3152,6 +3152,22 @@ int ring_buffer_record_is_on(struct ring_buffer *buffer)return !atomic_read (&buffer->record_disabled); } +/** +* ring_buffer_record_is_set_on - return true if the ring buffer is set writable +* @buffer: The ring buffer to see if write is set enabled +* +* Returns true if the ring buffer is set writable by ring_buffer_record_on(). +* Note that this does NOT mean it is in a writable state. +* +* It may return true when the ring buffer has been disabled by +* ring_buffer_record_disable(), as that is a temporary disabling of +* the ring buffer. +*/ +int ring_buffer_record_is_set_on (struct ring_buffer *buffer) +{ +return !(atomic_read (&buffer->record_disabled) &RB_BUFFER_OFF ); +} +/** * ring_buffer_record_disable_cpu - stop all writes into the cpu_buffer * @buffer: The ring buffer to stop writes to.
kernel/trace/trace.c +6 -0
@@ -1023,6 +1023,12 @@ update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu)arch_spin_lock (&tr->max_lock); +/* Inherit the recordable setting from trace_buffer */ +if (ring_buffer_record_is_set_on (tr->trace_buffer.buffer)) +ring_buffer_record_on (tr->max_buffer.buffer); +else +ring_buffer_record_off (tr->max_buffer.buffer); + buf = tr->trace_buffer.buffer; tr->trace_buffer.buffer = tr->max_buffer.buffer; tr->max_buffer.buffer = buf;
kernel/trace/trace_events_trigger.c +13 -5
@@ -663,6 +663,8 @@ event_trigger_callback(struct event_command *cmd_ops, goto out_free; out_reg: +/* Up the trigger_data count to make sure reg doesn't free it on failure */ +event_trigger_init (trigger_ops, trigger_data); ret = cmd_ops->reg (glob, trigger_ops, trigger_data, file);/* * The above returns on success the # of functions enabled,
@@ -670,11 +672,13 @@ event_trigger_callback(struct event_command *cmd_ops,* Consider no functions a failure too. */ if (!ret) { + cmd_ops->unreg (glob, trigger_ops, trigger_data, file); ret = -ENOENT ; - goto out_free; - }else if (ret <0 ) - goto out_free; - ret =0 ; + }else if (ret >0 ) + ret =0 ; + +/* Down the counter of trigger_data or free it if not used anymore */ +event_trigger_free (trigger_ops, trigger_data); out:return ret;
@@ -1227,6 +1231,9 @@ event_enable_trigger_func(struct event_command *cmd_ops, goto out; } +/* Up the trigger_data count to make sure nothing frees it on failure */ +event_trigger_init (trigger_ops, trigger_data); +if (trigger) { number =strsep (&trigger,":" );
@@ -1277,6 +1284,7 @@ event_enable_trigger_func(struct event_command *cmd_ops, goto out_disable;/* Just return zero, not the number of enabled functions */ ret =0 ; +event_trigger_free (trigger_ops, trigger_data); out:return ret;
@@ -1287,7 +1295,7 @@ event_enable_trigger_func(struct event_command *cmd_ops, out_free:if (cmd_ops->set_filter) cmd_ops->set_filter (NULL , trigger_data,NULL ); -kfree (trigger_data); +event_trigger_free (trigger_ops, trigger_data);kfree (enable_data); goto out; }
kernel/trace/trace_kprobe.c +13 -2
@@ -361,11 +361,10 @@ static struct trace_kprobe *find_trace_kprobe(const char *event,static int enable_trace_kprobe (struct trace_kprobe *tk,struct ftrace_event_file *file) { +struct event_file_link *link =NULL ;int ret =0 ;if (file) { -struct event_file_link *link; - link =kmalloc (sizeof (*link),GFP_KERNEL );if (!link) { ret = -ENOMEM ;
@@ -385,6 +384,18 @@ enable_trace_kprobe(struct trace_kprobe *tk, struct ftrace_event_file *file)else ret =enable_kprobe (&tk->rp.kp); } + +if (ret) { +if (file) { +/* Notice the if is true on not WARN() */ +if (!WARN_ON_ONCE (!link)) +list_del_rcu (&link->list); +kfree (link); + tk->tp.flags &= ~TP_FLAG_TRACE ; + }else { + tk->tp.flags &= ~TP_FLAG_PROFILE ; + } + } out:return ret; }
mm/slub.c +1 -1
@@ -636,7 +636,7 @@ static void object_err(struct kmem_cache *s, struct page *page,print_trailer (s, page, object); } -static void slab_err (struct kmem_cache *s,struct page *page, +static __printf(3, 4) void slab_err(struct kmem_cache *s, struct page *page,const char *fmt, ...) {va_list args;
mm/vmalloc.c +2 -1
@@ -1440,7 +1440,7 @@ static void __vunmap(const void *addr, int deallocate_pages) addr))return ; - area =remove_vm_area (addr); + area =find_vmap_area ((unsigned long )addr)->vm;if (unlikely (!area)) {WARN (1 ,KERN_ERR "Trying to vfree() nonexistent vm area (%p)\n" , addr);
@@ -1450,6 +1450,7 @@ static void __vunmap(const void *addr, int deallocate_pages)debug_check_no_locks_freed (addr, area->size);debug_check_no_obj_freed (addr, area->size); +remove_vm_area (addr);if (deallocate_pages) {int i;
net/dsa/slave.c +6 -0
@@ -503,6 +503,9 @@ int dsa_slave_suspend(struct net_device *slave_dev) {struct dsa_slave_priv *p =netdev_priv (slave_dev); +if (!netif_running (slave_dev)) +return 0 ; +netif_device_detach (slave_dev);if (p->phy) {
@@ -520,6 +523,9 @@ int dsa_slave_resume(struct net_device *slave_dev) {struct dsa_slave_priv *p =netdev_priv (slave_dev); +if (!netif_running (slave_dev)) +return 0 ; +netif_device_attach (slave_dev);if (p->phy) {
net/ipv4/fib_frontend.c +2 -2
@@ -209,19 +209,19 @@ __be32 fib_compute_spec_dst(struct sk_buff *skb)return ip_hdr (skb)->daddr; in_dev =__in_dev_get_rcu (dev); -BUG_ON (!in_dev); net =dev_net (dev); scope =RT_SCOPE_UNIVERSE ;if (!ipv4_is_zeronet (ip_hdr (skb)->saddr)) { +bool vmark = in_dev &&IN_DEV_SRC_VMARK (in_dev); fl4.flowi4_oif =0 ; fl4.flowi4_iif =LOOPBACK_IFINDEX ; fl4.daddr =ip_hdr (skb)->saddr; fl4.saddr =0 ; fl4.flowi4_tos =RT_TOS (ip_hdr (skb)->tos); fl4.flowi4_scope = scope; - fl4.flowi4_mark =IN_DEV_SRC_VMARK (in_dev) ? skb->mark :0 ; + fl4.flowi4_mark = vmark ? skb->mark :0 ;if (!fib_lookup (net, &fl4, &res))return FIB_RES_PREFSRC (net, res); }else {
net/ipv4/inet_fragment.c +5 -5
@@ -379,11 +379,6 @@ static struct inet_frag_queue *inet_frag_alloc(struct netns_frags *nf, {struct inet_frag_queue *q; -if (frag_mem_limit (nf) > nf->high_thresh) { -inet_frag_schedule_worker (f); -return NULL ; - } - q =kmem_cache_zalloc (f->frags_cachep,GFP_ATOMIC );if (q ==NULL )return NULL ;
@@ -420,6 +415,11 @@ struct inet_frag_queue *inet_frag_find(struct netns_frags *nf,struct inet_frag_queue *q;int depth =0 ; +if (!nf->high_thresh ||frag_mem_limit (nf) > nf->high_thresh) { +inet_frag_schedule_worker (f); +return NULL ; + } +if (frag_mem_limit (nf) > nf->low_thresh)inet_frag_schedule_worker (f);
net/ipv4/ipconfig.c +13 -0
@@ -772,6 +772,11 @@ static void __init ic_bootp_init_ext(u8 *e)*/ static inline void __init ic_bootp_init (void ) { +/* Re-initialise all name servers to NONE, in case any were set via the +* "ip=" or "nfsaddrs=" kernel command line parameters: any IP addresses +* specified there will already have been decoded but are no longer +* needed +*/ ic_nameservers_predef ();dev_add_pack (&bootp_packet_type);
@@ -1404,6 +1409,13 @@ static int __init ip_auto_config(void)int err;unsigned int i; +/* Initialise all name servers to NONE (but only if the "ip=" or +* "nfsaddrs=" kernel command line parameters weren't decoded, otherwise +* we'll overwrite the IP addresses specified there) +*/ +if (ic_set_manually ==0 ) +ic_nameservers_predef (); +#ifdef CONFIG_PROC_FS proc_create ("pnp" ,S_IRUGO , init_net.proc_net, &pnp_seq_fops);#endif /* CONFIG_PROC_FS */
@@ -1605,6 +1617,7 @@ static int __init ip_auto_config_setup(char *addrs)return 1 ; } +/* Initialise all name servers to NONE */ ic_nameservers_predef ();/* Parse string for static IP assignment. */
net/ipv4/tcp_dctcp.c +2 -2
@@ -135,7 +135,7 @@ static void dctcp_ce_state_0_to_1(struct sock *sk)*/ if (inet_csk (sk)->icsk_ack.pending &ICSK_ACK_TIMER )__tcp_send_ack (sk, ca->prior_rcv_nxt); -tcp_enter_quickack_mode (sk); +tcp_enter_quickack_mode (sk,1 ); } ca->prior_rcv_nxt = tp->rcv_nxt;
@@ -156,7 +156,7 @@ static void dctcp_ce_state_1_to_0(struct sock *sk)*/ if (inet_csk (sk)->icsk_ack.pending &ICSK_ACK_TIMER )__tcp_send_ack (sk, ca->prior_rcv_nxt); -tcp_enter_quickack_mode (sk); +tcp_enter_quickack_mode (sk,1 ); } ca->prior_rcv_nxt = tp->rcv_nxt;
net/ipv4/tcp_input.c +25 -23
141 lines not on this page · raw message
sound/pci/emu10k1/emupcm.c +3 -1
@@ -1875,7 +1875,9 @@ int snd_emu10k1_pcm_efx(struct snd_emu10k1 *emu, int device,if (!kctl)return -ENOMEM ; kctl->id.device = device; -snd_ctl_add (emu->card, kctl); + err =snd_ctl_add (emu->card, kctl); +if (err <0 ) +return err;snd_pcm_lib_preallocate_pages_for_all (pcm,SNDRV_DMA_TYPE_DEV ,snd_dma_pci_data (emu->pci),64 *1024 ,64 *1024 );
sound/pci/emu10k1/memory.c +3 -3
@@ -237,13 +237,13 @@ __found_pages:static int is_valid_page (struct snd_emu10k1 *emu,dma_addr_t addr) {if (addr & ~emu->dma_mask) { -dev_err (emu->card->dev, +dev_err_ratelimited (emu->card->dev,"max memory size is 0x%lx (addr = 0x%lx)!!\n" , emu->dma_mask, (unsigned long )addr);return 0 ; }if (addr & (EMUPAGESIZE -1 )) { -dev_err (emu->card->dev,"page is not aligned\n" ); +dev_err_ratelimited (emu->card->dev,"page is not aligned\n" );return 0 ; }return 1 ;
@@ -334,7 +334,7 @@ snd_emu10k1_alloc_pages(struct snd_emu10k1 *emu, struct snd_pcm_substream *substelse addr =snd_pcm_sgbuf_get_addr (substream, ofs);if (!is_valid_page (emu, addr)) { -dev_err (emu->card->dev, +dev_err_ratelimited (emu->card->dev,"emu: failure page = %d\n" , idx);mutex_unlock (&hdr->block_mutex);return NULL ;
sound/pci/fm801.c +12 -4
@@ -1070,11 +1070,19 @@ static int snd_fm801_mixer(struct fm801 *chip)if ((err =snd_ac97_mixer (chip->ac97_bus, &ac97, &chip->ac97_sec)) <0 )return err; } -for (i =0 ; i <FM801_CONTROLS ; i++) -snd_ctl_add (chip->card,snd_ctl_new1 (&snd_fm801_controls[i], chip)); +for (i =0 ; i <FM801_CONTROLS ; i++) { + err =snd_ctl_add (chip->card, +snd_ctl_new1 (&snd_fm801_controls[i], chip)); +if (err <0 ) +return err; + }if (chip->multichannel) { -for (i =0 ; i <FM801_CONTROLS_MULTI ; i++) -snd_ctl_add (chip->card,snd_ctl_new1 (&snd_fm801_controls_multi[i], chip)); +for (i =0 ; i <FM801_CONTROLS_MULTI ; i++) { + err =snd_ctl_add (chip->card, +snd_ctl_new1 (&snd_fm801_controls_multi[i], chip)); +if (err <0 ) +return err; + } }return 0 ; }
sound/pci/hda/patch_ca0132.c +6 -2
@@ -38,6 +38,10 @@/* Enable this to see controls for tuning purpose. */ /*#define ENABLE_TUNING_CONTROLS*/ +#ifdef ENABLE_TUNING_CONTROLS +#include <sound/tlv.h> +#endif +#define FLOAT_ZERO 0x00000000#define FLOAT_ONE 0x3f800000#define FLOAT_TWO 0x40000000
@@ -3037,8 +3041,8 @@ static int equalizer_ctl_put(struct snd_kcontrol *kcontrol,return 1 ; } -static const DECLARE_TLV_DB_SCALE(voice_focus_db_scale, 2000, 100, 0); -static const DECLARE_TLV_DB_SCALE(eq_db_scale, -2400, 100, 0); +static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(voice_focus_db_scale, 2000, 100, 0); +static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(eq_db_scale, -2400, 100, 0); static int add_tuning_control(struct hda_codec *codec, hda_nid_t pnid, hda_nid_t nid,
sound/soc/soc-pcm.c +4 -2
@@ -1611,8 +1611,10 @@ int dpcm_be_dai_shutdown(struct snd_soc_pcm_runtime *fe, int stream)continue ;if ((be->dpcm[stream].state !=SND_SOC_DPCM_STATE_HW_FREE ) && - (be->dpcm[stream].state !=SND_SOC_DPCM_STATE_OPEN )) -continue ; + (be->dpcm[stream].state !=SND_SOC_DPCM_STATE_OPEN )) { +soc_pcm_hw_free (be_substream); + be->dpcm[stream].state =SND_SOC_DPCM_STATE_HW_FREE ; + }dev_dbg (be->dev,"ASoC: close BE %s\n" , dpcm->fe->dai_link->name);
sound/usb/pcm.c +1 -1
@@ -1263,7 +1263,7 @@ static void retire_capture_urb(struct snd_usb_substream *subs,if (bytes % (runtime->sample_bits >>3 ) !=0 ) {int oldbytes = bytes; bytes = frames * stride; -dev_warn (&subs->dev->dev, +dev_warn_ratelimited (&subs->dev->dev,"Corrected urb data len. %d->%d\n" , oldbytes, bytes); }
tools/usb/usbip/src/usbip_detach.c +6 -3
@@ -43,7 +43,7 @@ void usbip_detach_usage(void)static int detach_port (char *port) { -int ret; +int ret =0 ;uint8_t portnum;char path[PATH_MAX +1 ];
@@ -71,9 +71,12 @@ static int detach_port(char *port) } ret =usbip_vhci_detach_device (portnum); -if (ret <0 ) -return -1 ; +if (ret <0 ) { + ret =-1 ; + goto call_driver_close; + } +call_driver_close:usbip_vhci_driver_close ();return ret;