Linux 3.0.40
I'm announcing the release of the 3.0.40 kernel.
All users of the 3.0 kernel series must upgrade.
The updated 3.0.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-3.0.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
------------
Documentation/stable_kernel_rules.txt | 19 +++++++--- Makefile | 2 - arch/arm/mach-omap2/opp.c | 3 - arch/m68k/include/asm/entry_mm.h | 4 +- arch/m68k/kernel/sys_m68k.c | 8 +++- arch/powerpc/include/asm/cputime.h | 6 +-- arch/powerpc/include/asm/reg.h | 3 + arch/powerpc/kernel/ftrace.c | 12 +++--- arch/powerpc/kernel/time.c | 10 ++--- drivers/acpi/ac.c | 4 +- drivers/gpu/drm/radeon/atombios_dp.c | 10 +++-- drivers/gpu/drm/radeon/radeon_connectors.c | 35 +++++++++++++++---- drivers/gpu/drm/radeon/radeon_cursor.c | 8 +++- drivers/mmc/host/sdhci-pci.c | 1 drivers/net/bnx2.c | 6 +-- drivers/net/caif/caif_serial.c | 3 + drivers/net/tun.c | 6 ++- drivers/net/usb/kaweth.c | 2 - drivers/scsi/libsas/sas_expander.c | 47 +++++++++----------------- drivers/scsi/scsi_error.c | 14 +++++++ drivers/scsi/scsi_lib.c | 11 ++++++ drivers/scsi/scsi_scan.c | 3 + drivers/scsi/scsi_sysfs.c | 41 ++++++++++++++--------- drivers/usb/core/devio.c | 10 +++-- drivers/usb/early/ehci-dbgp.c | 2 - drivers/usb/gadget/u_ether.c | 12 +++--- fs/btrfs/async-thread.c | 9 ++++- fs/ext4/balloc.c | 3 + fs/ext4/bitmap.c | 8 +--- fs/ext4/ext4.h | 2 - fs/ext4/ialloc.c | 3 + fs/ext4/inode.c | 9 +++++ fs/locks.c | 6 +-- fs/nfs/file.c | 7 ++- fs/nfsd/nfs4xdr.c | 2 - include/linux/cpu.h | 5 +- kernel/futex.c | 17 +++++---- kernel/power/hibernate.c | 6 +++ kernel/power/suspend.c | 3 + kernel/workqueue.c | 38 +++++++++++++++++++++ net/caif/caif_dev.c | 2 - net/core/rtnetlink.c | 8 +++- net/ipv4/cipso_ipv4.c | 6 ++- net/ipv4/tcp.c | 5 ++ net/ipv4/tcp_input.c | 4 +- net/sched/sch_sfb.c | 2 + net/sctp/input.c | 7 +-- net/sctp/socket.c | 12 +++++- net/sunrpc/sched.c | 2 + net/sunrpc/xprtrdma/transport.c | 3 + net/sunrpc/xprtsock.c | 10 +++++ net/wanrouter/wanmain.c | 51 +++++++++++++---------------- sound/drivers/mpu401/mpu401_uart.c | 1 sound/pci/hda/patch_realtek.c | 1 sound/soc/codecs/wm8962.c | 3 + sound/soc/codecs/wm8994.c | 2 - sound/usb/clock.c | 3 + 57 files changed, 351 insertions(+), 171 deletions(-)
Alan Cox (3):
sch_sfb: Fix missing NULL check
caif: fix NULL pointer check
wanmain: comparing array with NULL
Andreas Schwab (2):
powerpc: Fix wrong divisor in usecs_to_cputime
m68k: Make sys_atomic_cmpxchg_32 work on classic m68k
Bart Van Assche (1):
SCSI: Avoid dangling pointer in scsi_requeue_command()
Brian Foster (1):
ext4: don't let i_reserved_meta_blocks go negative
Chris Mason (1):
Btrfs: call the ordered free operation without any locks held
Colin Ian King (1):
USB: echi-dbgp: increase the controller wait time to come out of halt.
Dan Carpenter (1):
USB: kaweth.c: use GFP_ATOMIC under spin_lock
Dan Williams (4):
SCSI: libsas: continue revalidation
SCSI: libsas: fix sas_discover_devices return code handling
SCSI: fix eh wakeup (scsi_schedule_eh vs scsi_restart_operations)
SCSI: fix hot unplug vs async scan race
Daniel Drake (1):
mmc: sdhci-pci: CaFe has broken card detection
Daniel Mack (1):
ALSA: snd-usb: fix clock source validity index
Darren Hart (3):
futex: Test for pi_mutex on fault in futex_wait_requeue_pi()
futex: Fix bug in WARN_ON for NULL q.pi_state
futex: Forbid uaddr == uaddr2 in futex_wait_requeue_pi()
David Henningsson (1):
ALSA: hda - Add support for Realtek ALC282
Greg Kroah-Hartman (1):
Linux 3.0.40
Hangbin Liu (1):
tcp: Add TCP_USER_TIMEOUT negative value check
Hans de Goede (1):
usbdevfs: Correct amount of data copied to user in processcompl_compat
J. Bruce Fields (2):
locks: fix checking of fcntl_setlease argument
nfsd4: our filesystems are normally case sensitive
Jeff Layton (1):
nfs: skip commit in releasepage if we're freeing memory for fs-related reasons
Jerome Glisse (3):
drm/radeon: fix non revealent error message drm/radeon: fix hotplug of DP to DVI|HDMI passive adapters (v2) drm/radeon: on hotplug force link training to happen (v2)
Jiri Benc (1):
net: fix rtnetlink IFF_PROMISC and IFF_ALLMULTI handling
Jiri Kosina (1):
tcp: perform DMA to userspace only if there is a task waiting for it
Kevin Cernekee (1):
usb: gadget: Fix g_ether interface link status
Lan Tianyu (1):
ACPI/AC: prevent OOPS on some boxes due to missing check power_supply_register() return value check
Mark Brown (2):
ASoC: wm8962: Allow VMID time to fully ramp
ASoC: wm8994: Ensure there are enough BCLKs for four channels
Mathias Krause (1):
net/tun: fix ioctl() based info leaks
Michael Chan (1):
bnx2: Fix bug in bnx2_free_tx_skbs().
Michel Dänzer (1):
drm/radeon: Try harder to avoid HW cursor ending on a multiple of 128 columns.
Mikael Pettersson (1):
m68k: Correct the Atari ALLOWINT definition
Neil Horman (1):
sctp: Fix list corruption resulting from freeing an association on a list
Nishanth Menon (1):
ARM: OMAP2+: OPP: Fix to ensure check of right oppdef after bad one
Paul Gortmaker (1):
stable: update references to older 2.6 versions for 3.x
Paul Moore (1):
cipso: don't follow a NULL pointer when setsockopt() is called
Sjur Brændeland (1):
caif: Fix access to freed pernet memory
Srivatsa S. Bhat (1):
ftrace: Disable function tracing during suspend/resume and hibernation, again
Takashi Iwai (1):
ALSA: mpu401: Fix missing initialization of irq field
Tejun Heo (1):
workqueue: perform cpu down operations from low priority cpu_notifier()
Theodore Ts'o (1):
ext4: pass a char * to ext4_count_free() instead of a buffer_head ptr
Tiejun Chen (1):
powerpc: Add "memory" attribute for mfmsr()
roger blofeld (1):
powerpc/ftrace: Fix assembly trampoline register usage
Documentation/stable_kernel_rules.txt +14 -5
@@ -1,4 +1,4 @@ -Everything you ever wanted to know about Linux 2.6 -stable releases. +Everything you ever wanted to know about Linux -stable releases. Rules on what kind of patches are accepted, and which ones are not, into the "-stable" tree:
@@ -41,10 +41,10 @@ Procedure for submitting patches to the -stable tree: cherry-picked than this can be specified in the following format in the sign-off area: - Cc: <[email protected]> # .32.x: a1f84a3: sched: Check for idle - Cc: <[email protected]> # .32.x: 1b9508f: sched: Rate-limit newidle - Cc: <[email protected]> # .32.x: fd21073: sched: Fix affinity logic - Cc: <[email protected]> # .32.x + Cc: <[email protected]> # 3.3.x: a1f84a3: sched: Check for idle + Cc: <[email protected]> # 3.3.x: 1b9508f: sched: Rate-limit newidle + Cc: <[email protected]> # 3.3.x: fd21073: sched: Fix affinity logic + Cc: <[email protected]> # 3.3.x Signed-off-by: Ingo Molnar <[email protected]> The tag sequence has the meaning of:
@@ -78,6 +78,15 @@ Review cycle: security kernel team, and not go through the normal review cycle. Contact the kernel security team for more details on this procedure. +Trees: + + - The queues of patches, for both completed versions and in progress + versions can be found at: + http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git + - The finalized and tagged releases of all stable kernels can be found + in separate branches per version at: + http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git + Review committee:
Makefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 3 PATCHLEVEL = 0 -SUBLEVEL = 39 +SUBLEVEL = 40 EXTRAVERSION = NAME = Sneaky Weasel
arch/arm/mach-omap2/opp.c +1 -2
@@ -53,7 +53,7 @@ int __init omap_init_opp_table(struct omap_opp_def *opp_def, omap_table_init =1 ;/* Lets now register with OPP library */ -for (i =0 ; i < opp_def_size; i++) { +for (i =0 ; i < opp_def_size; i++, opp_def++) {struct omap_hwmod *oh;struct device *dev;
@@ -86,7 +86,6 @@ int __init omap_init_opp_table(struct omap_opp_def *opp_def, __func__, opp_def->freq, opp_def->hwmod_name, i, r); } - opp_def++; }return 0 ;
arch/m68k/include/asm/entry_mm.h +2 -2
@@ -35,8 +35,8 @@/* the following macro is used when enabling interrupts */ #if defined(MACH_ATARI_ONLY ) -/* block out HSYNC on the atari */ -#define ALLOWINT (~0x400) +/* block out HSYNC = ipl 2 on the atari */ +#define ALLOWINT (~0x500)#define MAX_NOINT_IPL 3#else /* portable version */
arch/m68k/kernel/sys_m68k.c +6 -2
@@ -479,9 +479,13 @@ sys_atomic_cmpxchg_32(unsigned long newval, int oldval, int d3, int d4, int d5, goto bad_access; } - mem_value = *mem; +/* +* No need to check for EFAULT; we know that the page is +* present and writable. +*/ +__get_user (mem_value, mem);if (mem_value == oldval) - *mem = newval; +__put_user (newval, mem);pte_unmap_unlock (pte, ptl);up_read (&mm->mmap_sem);
arch/powerpc/include/asm/cputime.h +3 -3
@@ -126,11 +126,11 @@ static inline u64 cputime64_to_jiffies64(const cputime_t ct)/* * Convert cputime <-> microseconds */ -extern u64 __cputime_msec_factor; +extern u64 __cputime_usec_factor;static inline unsigned long cputime_to_usecs (const cputime_t ct) { -return mulhdu (ct, __cputime_msec_factor) *USEC_PER_MSEC ; +return mulhdu (ct, __cputime_usec_factor); }static inline cputime_t usecs_to_cputime (const unsigned long us)
@@ -143,7 +143,7 @@ static inline cputime_t usecs_to_cputime(const unsigned long us) sec = us /1000000 ;if (ct) { ct *= tb_ticks_per_sec; -do_div (ct,1000 ); +do_div (ct,1000000 ); }if (sec) ct += (cputime_t ) sec * tb_ticks_per_sec;
arch/powerpc/include/asm/reg.h +2 -1
@@ -1000,7 +1000,8 @@/* Macros for setting and retrieving special purpose registers */ #ifndef __ASSEMBLY__#define mfmsr () ({unsigned long rval; \ - asm volatile("mfmsr %0" : "=r" (rval)); rval;}) + asm volatile("mfmsr %0" : "=r" (rval) : \ + : "memory"); rval;})#ifdef CONFIG_PPC_BOOK3S_64 #define __mtmsrd (v, l) asm volatile("mtmsrd %0," __stringify(l) \ : : "r" (v) : "memory")
arch/powerpc/kernel/ftrace.c +6 -6
@@ -245,9 +245,9 @@ __ftrace_make_nop(struct module *mod,/* * On PPC32 the trampoline looks like: -* 0x3d, 0x60, 0x00, 0x00 lis r11,sym@ha -* 0x39, 0x6b, 0x00, 0x00 addi r11,r11,sym@l -* 0x7d, 0x69, 0x03, 0xa6 mtctr r11 +* 0x3d, 0x80, 0x00, 0x00 lis r12,sym@ha +* 0x39, 0x8c, 0x00, 0x00 addi r12,r12,sym@l +* 0x7d, 0x89, 0x03, 0xa6 mtctr r12 * 0x4e, 0x80, 0x04, 0x20 bctr */
@@ -262,9 +262,9 @@ __ftrace_make_nop(struct module *mod,pr_devel (" %08x %08x " , jmp[0 ], jmp[1 ]);/* verify that this is what we expect it to be */ -if (((jmp[0 ] &0xffff0000 ) !=0x3d600000 ) || - ((jmp[1 ] &0xffff0000 ) !=0x396b0000 ) || - (jmp[2 ] !=0x7d6903a6 ) || +if (((jmp[0 ] &0xffff0000 ) !=0x3d800000 ) || + ((jmp[1 ] &0xffff0000 ) !=0x398c0000 ) || + (jmp[2 ] !=0x7d8903a6 ) || (jmp[3 ] !=0x4e800420 )) {printk (KERN_ERR "Not a trampoline\n" );return -EINVAL ;
arch/powerpc/kernel/time.c +5 -5
@@ -168,13 +168,13 @@ EXPORT_SYMBOL_GPL(ppc_tb_freq);#ifdef CONFIG_VIRT_CPU_ACCOUNTING /* * Factors for converting from cputime_t (timebase ticks) to -* jiffies, milliseconds, seconds, and clock_t (1/USER_HZ seconds). +* jiffies, microseconds, seconds, and clock_t (1/USER_HZ seconds). * These are all stored as 0.64 fixed-point binary fractions. */ u64 __cputime_jiffies_factor;EXPORT_SYMBOL (__cputime_jiffies_factor); -u64 __cputime_msec_factor; -EXPORT_SYMBOL (__cputime_msec_factor); +u64 __cputime_usec_factor; +EXPORT_SYMBOL (__cputime_usec_factor);u64 __cputime_sec_factor;EXPORT_SYMBOL (__cputime_sec_factor);u64 __cputime_clockt_factor;
@@ -192,8 +192,8 @@ static void calc_cputime_factors(void)div128_by_32 (HZ ,0 , tb_ticks_per_sec, &res); __cputime_jiffies_factor = res.result_low; -div128_by_32 (1000 ,0 , tb_ticks_per_sec, &res); - __cputime_msec_factor = res.result_low; +div128_by_32 (1000000 ,0 , tb_ticks_per_sec, &res); + __cputime_usec_factor = res.result_low;div128_by_32 (1 ,0 , tb_ticks_per_sec, &res); __cputime_sec_factor = res.result_low;div128_by_32 (USER_HZ ,0 , tb_ticks_per_sec, &res);
drivers/acpi/ac.c +3 -1
@@ -292,7 +292,9 @@ static int acpi_ac_add(struct acpi_device *device) ac->charger.properties = ac_props; ac->charger.num_properties =ARRAY_SIZE (ac_props); ac->charger.get_property = get_ac_property; -power_supply_register (&ac->device->dev, &ac->charger); + result =power_supply_register (&ac->device->dev, &ac->charger); +if (result) + goto end; printk(KERN_INFO PREFIX "%s [%s] (%s)\n", acpi_device_name(device), acpi_device_bid(device),
drivers/gpu/drm/radeon/atombios_dp.c +7 -3
@@ -22,6 +22,7 @@* * Authors: Dave Airlie * Alex Deucher +* Jerome Glisse */ #include "drmP.h" #include "radeon_drm.h"
@@ -624,7 +625,6 @@ static bool radeon_dp_get_link_status(struct radeon_connector *radeon_connector, ret =radeon_dp_aux_native_read (radeon_connector,DP_LANE0_1_STATUS , link_status,DP_LINK_STATUS_SIZE ,100 );if (ret <=0 ) { -DRM_ERROR ("displayport link status failed\n" );return false; }
@@ -797,8 +797,10 @@ static int radeon_dp_link_train_cr(struct radeon_dp_link_train_info *dp_info)else mdelay (dp_info->rd_interval *4 ); -if (!radeon_dp_get_link_status (dp_info->radeon_connector, dp_info->link_status)) +if (!radeon_dp_get_link_status (dp_info->radeon_connector, dp_info->link_status)) { +DRM_ERROR ("displayport link status failed\n" );break ; + }if (dp_clock_recovery_ok (dp_info->link_status, dp_info->dp_lane_count)) { clock_recovery = true;
@@ -860,8 +862,10 @@ static int radeon_dp_link_train_ce(struct radeon_dp_link_train_info *dp_info)else mdelay (dp_info->rd_interval *4 ); -if (!radeon_dp_get_link_status (dp_info->radeon_connector, dp_info->link_status)) +if (!radeon_dp_get_link_status (dp_info->radeon_connector, dp_info->link_status)) { +DRM_ERROR ("displayport link status failed\n" );break ; + }if (dp_channel_eq_ok (dp_info->link_status, dp_info->dp_lane_count)) { channel_eq = true;
drivers/gpu/drm/radeon/radeon_connectors.c +27 -8
@@ -66,14 +66,33 @@ void radeon_connector_hotplug(struct drm_connector *connector)/* just deal with DP (not eDP) here. */ if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) { -int saved_dpms = connector->dpms; - -/* Only turn off the display it it's physically disconnected */ -if (!radeon_hpd_sense (rdev, radeon_connector->hpd.hpd)) -drm_helper_connector_dpms (connector,DRM_MODE_DPMS_OFF ); -else if (radeon_dp_needs_link_train (radeon_connector)) -drm_helper_connector_dpms (connector,DRM_MODE_DPMS_ON ); - connector->dpms = saved_dpms; +struct radeon_connector_atom_dig *dig_connector = + radeon_connector->con_priv; + +/* if existing sink type was not DP no need to retrain */ +if (dig_connector->dp_sink_type !=CONNECTOR_OBJECT_ID_DISPLAYPORT ) +return ; + +/* first get sink type as it may be reset after (un)plug */ + dig_connector->dp_sink_type =radeon_dp_getsinktype (radeon_connector); +/* don't do anything if sink is not display port, i.e., +* passive dp->(dvi|hdmi) adaptor +*/ +if (dig_connector->dp_sink_type ==CONNECTOR_OBJECT_ID_DISPLAYPORT ) { +int saved_dpms = connector->dpms; +/* Only turn off the display if it's physically disconnected */ +if (!radeon_hpd_sense (rdev, radeon_connector->hpd.hpd)) { +drm_helper_connector_dpms (connector,DRM_MODE_DPMS_OFF ); + }else if (radeon_dp_needs_link_train (radeon_connector)) { +/* set it to OFF so that drm_helper_connector_dpms() +* won't return immediately since the current state +* is ON at this point. +*/ + connector->dpms =DRM_MODE_DPMS_OFF ; +drm_helper_connector_dpms (connector,DRM_MODE_DPMS_ON ); + } + connector->dpms = saved_dpms; + } } }
drivers/gpu/drm/radeon/radeon_cursor.c +7 -1
@@ -257,8 +257,14 @@ int radeon_crtc_cursor_move(struct drm_crtc *crtc,if (!(cursor_end &0x7f )) w--; } -if (w <=0 ) +if (w <=0 ) { w =1 ; + cursor_end = x - xorigin + w; +if (!(cursor_end &0x7f )) { + x--; +WARN_ON_ONCE (x <0 ); + } + } } }
drivers/mmc/host/sdhci-pci.c +1 -0
@@ -140,6 +140,7 @@ static const struct sdhci_pci_fixes sdhci_ene_714 = {static const struct sdhci_pci_fixes sdhci_cafe = { .quirks =SDHCI_QUIRK_NO_SIMULT_VDD_AND_POWER |SDHCI_QUIRK_NO_BUSY_IRQ | +SDHCI_QUIRK_BROKEN_CARD_DETECTION |SDHCI_QUIRK_BROKEN_TIMEOUT_VAL , };
drivers/net/bnx2.c +3 -3
@@ -5310,7 +5310,7 @@ bnx2_free_tx_skbs(struct bnx2 *bp)int k, last;if (skb ==NULL ) { - j++; + j =NEXT_TX_BD (j);continue ; }
@@ -5322,8 +5322,8 @@ bnx2_free_tx_skbs(struct bnx2 *bp) tx_buf->skb =NULL ; last = tx_buf->nr_frags; - j++; -for (k =0 ; k < last; k++, j++) { + j =NEXT_TX_BD (j); +for (k =0 ; k < last; k++, j =NEXT_TX_BD (j)) { tx_buf = &txr->tx_buf_ring[TX_RING_IDX (j)]; dma_unmap_page(&bp->pdev->dev, dma_unmap_addr(tx_buf, mapping),
drivers/net/caif/caif_serial.c +3 -0
@@ -325,6 +325,9 @@ static int ldisc_open(struct tty_struct *tty)sprintf (name,"cf%s" , tty->name); dev =alloc_netdev (sizeof (*ser), name, caifdev_setup); +if (!dev) +return -ENOMEM ; + ser =netdev_priv (dev); ser->tty =tty_kref_get (tty); ser->dev = dev;
drivers/net/tun.c +4 -2
@@ -1239,10 +1239,12 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,int vnet_hdr_sz;int ret; -if (cmd ==TUNSETIFF ||_IOC_TYPE (cmd) ==0x89 ) +if (cmd ==TUNSETIFF ||_IOC_TYPE (cmd) ==0x89 ) {if (copy_from_user (&ifr, argp, ifreq_len))return -EFAULT ; - + }else { +memset (&ifr,0 ,sizeof (ifr)); + }if (cmd ==TUNGETFEATURES ) {/* Currently this just means: "what IFF flags are valid?". * This is needed because we never checked for invalid flags on
drivers/net/usb/kaweth.c +1 -1
@@ -1308,7 +1308,7 @@ static int kaweth_internal_control_msg(struct usb_device *usb_dev,int retv;int length =0 ;/* shut up GCC */ - urb =usb_alloc_urb (0 ,GFP_NOIO ); + urb =usb_alloc_urb (0 ,GFP_ATOMIC );if (!urb)return -ENOMEM ;
drivers/scsi/libsas/sas_expander.c +16 -31
106 lines not on this page · raw message
drivers/scsi/scsi_error.c +14 -0
@@ -1665,6 +1665,20 @@ static void scsi_restart_operations(struct Scsi_Host *shost)* requests are started. */ scsi_run_host_queues (shost); + +/* +* if eh is active and host_eh_scheduled is pending we need to re-run +* recovery. we do this check after scsi_run_host_queues() to allow +* everything pent up since the last eh run a chance to make forward +* progress before we sync again. Either we'll immediately re-run +* recovery or scsi_device_unbusy() will wake us again when these +* pending commands complete. +*/ +spin_lock_irqsave (shost->host_lock, flags); +if (shost->host_eh_scheduled) +if (scsi_host_set_state (shost,SHOST_RECOVERY )) +WARN_ON (scsi_host_set_state (shost,SHOST_CANCEL_RECOVERY )); +spin_unlock_irqrestore (shost->host_lock, flags); }/**
drivers/scsi/scsi_lib.c +11 -0
@@ -481,15 +481,26 @@ void scsi_requeue_run_queue(struct work_struct *work)*/ static void scsi_requeue_command (struct request_queue *q,struct scsi_cmnd *cmd) { +struct scsi_device *sdev = cmd->device;struct request *req = cmd->request;unsigned long flags; +/* +* We need to hold a reference on the device to avoid the queue being +* killed after the unlock and before scsi_run_queue is invoked which +* may happen because scsi_unprep_request() puts the command which +* releases its reference on the device. +*/ +get_device (&sdev->sdev_gendev); +spin_lock_irqsave (q->queue_lock, flags);scsi_unprep_request (req);blk_requeue_request (q, req);spin_unlock_irqrestore (q->queue_lock, flags);scsi_run_queue (q); + +put_device (&sdev->sdev_gendev); }void scsi_next_command (struct scsi_cmnd *cmd)
drivers/scsi/scsi_scan.c +3 -0
@@ -1710,6 +1710,9 @@ static void scsi_sysfs_add_devices(struct Scsi_Host *shost) {struct scsi_device *sdev;shost_for_each_device (sdev, shost) { +/* target removed before the device could be added */ +if (sdev->sdev_state ==SDEV_DEL ) +continue ;if (!scsi_host_scan_allowed (shost) ||scsi_sysfs_add_sdev (sdev) !=0 )__scsi_remove_device (sdev);
drivers/scsi/scsi_sysfs.c +26 -15
61 lines not on this page · raw message
drivers/usb/core/devio.c +7 -3
@@ -1557,10 +1557,14 @@ static int processcompl_compat(struct async *as, void __user * __user *arg)void __user *addr = as->userurb;unsigned int i; -if (as->userbuffer && urb->actual_length) -if (copy_to_user (as->userbuffer, urb->transfer_buffer, - urb->actual_length)) +if (as->userbuffer && urb->actual_length) { +if (urb->number_of_packets >0 )/* Isochronous */ + i = urb->transfer_buffer_length; +else /* Non-Isoc */ + i = urb->actual_length; +if (copy_to_user (as->userbuffer, urb->transfer_buffer, i))return -EFAULT ; + }if (put_user (as->status, &userurb->status))return -EFAULT ;if (put_user (urb->actual_length, &userurb->actual_length))
drivers/usb/early/ehci-dbgp.c +1 -1
@@ -450,7 +450,7 @@ static int dbgp_ehci_startup(void)writel (FLAG_CF , &ehci_regs->configured_flag);/* Wait until the controller is no longer halted */ - loop =10 ; + loop =1000 ; do { status = readl(&ehci_regs->status); if (!(status & STS_HALT))
drivers/usb/gadget/u_ether.c +6 -6
@@ -803,12 +803,6 @@ int gether_setup(struct usb_gadget *g, u8 ethaddr[ETH_ALEN])SET_ETHTOOL_OPS (net, &ops); -/* two kinds of host-initiated state changes: -* - iff DATA transfer is active, carrier is "on" -* - tx queueing enabled if open *and* carrier is "on" -*/ -netif_carrier_off (net); - dev->gadget = g;SET_NETDEV_DEV (net, &g->dev);SET_NETDEV_DEVTYPE (net, &gadget_type);
@@ -822,6 +816,12 @@ int gether_setup(struct usb_gadget *g, u8 ethaddr[ETH_ALEN])INFO (dev,"HOST MAC %pM\n" , dev->host_mac); the_dev = dev; + +/* two kinds of host-initiated state changes: +* - iff DATA transfer is active, carrier is "on" +* - tx queueing enabled if open *and* carrier is "on" +*/ +netif_carrier_off (net); }return status;
fs/btrfs/async-thread.c +8 -1
@@ -212,10 +212,17 @@ static noinline int run_ordered_completions(struct btrfs_workers *workers, work->ordered_func (work); -/* now take the lock again and call the freeing code */ +/* now take the lock again and drop our item from the list */ spin_lock (&workers->order_lock);list_del (&work->order_list); +spin_unlock (&workers->order_lock); + +/* +* we don't want to call the ordered free functions +* with the lock held though +*/ work->ordered_free (work); +spin_lock (&workers->order_lock); }spin_unlock (&workers->order_lock);
fs/ext4/balloc.c +2 -1
@@ -514,7 +514,8 @@ ext4_fsblk_t ext4_count_free_blocks(struct super_block *sb)if (bitmap_bh ==NULL )continue ; - x =ext4_count_free (bitmap_bh, sb->s_blocksize); + x =ext4_count_free (bitmap_bh->b_data, +EXT4_BLOCKS_PER_GROUP (sb) /8 );printk (KERN_DEBUG "group %u: stored = %d, counted = %u\n" , i,ext4_free_blks_count (sb, gdp), x); bitmap_count += x;
fs/ext4/bitmap.c +3 -5
@@ -15,15 +15,13 @@static const int nibblemap[] = {4 ,3 ,3 ,2 ,3 ,2 ,2 ,1 ,3 ,2 ,2 ,1 ,2 ,1 ,1 ,0 }; -unsigned int ext4_count_free (struct buffer_head *map,unsigned int numchars) +unsigned int ext4_count_free (char *bitmap,unsigned int numchars) {unsigned int i, sum =0 ; -if (!map) -return 0 ;for (i =0 ; i < numchars; i++) - sum += nibblemap[map->b_data[i] &0xf ] + - nibblemap[(map->b_data[i] >>4 ) &0xf ]; + sum += nibblemap[bitmap[i] &0xf ] + + nibblemap[(bitmap[i] >>4 ) &0xf ];return sum; }
fs/ext4/ext4.h +1 -1
@@ -1713,7 +1713,7 @@ struct mmpd_data {# define NORET_AND noreturn,/* bitmap.c */ -extern unsigned int ext4_count_free (struct buffer_head *,unsigned ); +extern unsigned int ext4_count_free (char *bitmap,unsigned numchars);/* balloc.c */ extern unsigned int ext4_block_group(struct super_block *sb,
fs/ext4/ialloc.c +2 -1
@@ -1193,7 +1193,8 @@ unsigned long ext4_count_free_inodes(struct super_block *sb)if (!bitmap_bh)continue ; - x =ext4_count_free (bitmap_bh,EXT4_INODES_PER_GROUP (sb) /8 ); + x =ext4_count_free (bitmap_bh->b_data, +EXT4_INODES_PER_GROUP (sb) /8 );printk (KERN_DEBUG "group %lu: stored = %d, counted = %lu\n" , (unsigned long ) i,ext4_free_inodes_count (sb, gdp), x); bitmap_count += x;
fs/ext4/inode.c +9 -0
@@ -1134,6 +1134,15 @@ void ext4_da_update_reserve_space(struct inode *inode, used = ei->i_reserved_data_blocks; } +if (unlikely (ei->i_allocated_meta_blocks > ei->i_reserved_meta_blocks)) { +ext4_msg (inode->i_sb,KERN_NOTICE ,"%s: ino %lu, allocated %d " +"with only %d reserved metadata blocks\n" , __func__, + inode->i_ino, ei->i_allocated_meta_blocks, + ei->i_reserved_meta_blocks); +WARN_ON (1 ); + ei->i_allocated_meta_blocks = ei->i_reserved_meta_blocks; + } +/* Update per-inode reservations */ ei->i_reserved_data_blocks -= used; ei->i_reserved_meta_blocks -= ei->i_allocated_meta_blocks;
fs/locks.c +3 -3
@@ -315,7 +315,7 @@ static int flock_make_lock(struct file *filp, struct file_lock **lock,return 0 ; } -static int assign_type (struct file_lock *fl,int type) +static int assign_type (struct file_lock *fl,long type) {switch (type) {case F_RDLCK :
@@ -452,7 +452,7 @@ static const struct lock_manager_operations lease_manager_ops = {/* * Initialize a lease, use the default lock manager operations */ -static int lease_init (struct file *filp,int type,struct file_lock *fl) +static int lease_init (struct file *filp,long type,struct file_lock *fl) {if (assign_type (fl, type) !=0 )return -EINVAL ;
@@ -470,7 +470,7 @@ static int lease_init(struct file *filp, int type, struct file_lock *fl) }/* Allocate a file_lock initialised to this type of lease */ -static struct file_lock *lease_alloc (struct file *filp,int type) +static struct file_lock *lease_alloc (struct file *filp,long type) {struct file_lock *fl =locks_alloc_lock ();int error = -ENOMEM ;
fs/nfs/file.c +5 -2
@@ -493,8 +493,11 @@ static int nfs_release_page(struct page *page, gfp_t gfp)dfprintk (PAGECACHE ,"NFS: release_page(%p)\n" , page); -/* Only do I/O if gfp is a superset of GFP_KERNEL */ -if (mapping && (gfp &GFP_KERNEL ) ==GFP_KERNEL ) { +/* Only do I/O if gfp is a superset of GFP_KERNEL, and we're not +* doing this memory reclaim for a fs-related allocation. +*/ +if (mapping && (gfp &GFP_KERNEL ) ==GFP_KERNEL && + !(current->flags &PF_FSTRANS )) {int how =FLUSH_SYNC ;/* Don't let kswapd deadlock waiting for OOM RPC calls */
fs/nfsd/nfs4xdr.c +1 -1
@@ -2010,7 +2010,7 @@ out_acl:if (bmval0 &FATTR4_WORD0_CASE_INSENSITIVE ) {if ((buflen -=4 ) <0 ) goto out_resource; -WRITE32 (1 ); +WRITE32 (0 ); }if (bmval0 &FATTR4_WORD0_CASE_PRESERVING ) {if ((buflen -=4 ) <0 )
include/linux/cpu.h +3 -2
@@ -66,8 +66,9 @@ enum {/* migration should happen before other stuff but after perf */ CPU_PRI_PERF =20 ,CPU_PRI_MIGRATION =10 , -/* prepare workqueues for other notifiers */ - CPU_PRI_WORKQUEUE = 5, +/* bring up workqueues before normal notifiers and down after */ +CPU_PRI_WORKQUEUE_UP =5 , + CPU_PRI_WORKQUEUE_DOWN = -5, };#ifdef CONFIG_SMP
kernel/futex.c +10 -7
@@ -2231,11 +2231,11 @@ int handle_early_requeue_pi_wakeup(struct futex_hash_bucket *hb,* @uaddr2: the pi futex we will take prior to returning to user-space * * The caller will wait on uaddr and will be requeued by futex_requeue() to -* uaddr2 which must be PI aware. Normal wakeup will wake on uaddr2 and -* complete the acquisition of the rt_mutex prior to returning to userspace. -* This ensures the rt_mutex maintains an owner when it has waiters; without -* one, the pi logic wouldn't know which task to boost/deboost, if there was a -* need to. +* uaddr2 which must be PI aware and unique from uaddr. Normal wakeup will wake +* on uaddr2 and complete the acquisition of the rt_mutex prior to returning to +* userspace. This ensures the rt_mutex maintains an owner when it has waiters; +* without one, the pi logic would not know which task to boost/deboost, if +* there was a need to. * * We call schedule in futex_wait_queue_me() when we enqueue and return there * via the following:
@@ -2272,6 +2272,9 @@ static int futex_wait_requeue_pi(u32 __user *uaddr, unsigned int flags,struct futex_q q = futex_q_init;int res, ret; +if (uaddr == uaddr2) +return -EINVAL ; +if (!bitset)return -EINVAL ;
@@ -2343,7 +2346,7 @@ static int futex_wait_requeue_pi(u32 __user *uaddr, unsigned int flags,* signal. futex_unlock_pi() will not destroy the lock_ptr nor * the pi_state. */ -WARN_ON (!&q.pi_state); +WARN_ON (!q.pi_state); pi_mutex = &q.pi_state->pi_mutex; ret =rt_mutex_finish_proxy_lock (pi_mutex, to, &rt_waiter,1 );debug_rt_mutex_free_waiter (&rt_waiter);
@@ -2370,7 +2373,7 @@ static int futex_wait_requeue_pi(u32 __user *uaddr, unsigned int flags,* fault, unlock the rt_mutex and return the fault to userspace. */ if (ret == -EFAULT ) { -if (rt_mutex_owner (pi_mutex) == current) +if (pi_mutex &&rt_mutex_owner (pi_mutex) == current)rt_mutex_unlock (pi_mutex); }else if (ret == -EINTR ) {/*
kernel/power/hibernate.c +6 -0
@@ -344,6 +344,7 @@ int hibernation_snapshot(int platform_mode) goto Complete_devices;suspend_console (); +ftrace_stop ();pm_restrict_gfp_mask (); error =dpm_suspend (PMSG_FREEZE );if (error)
@@ -369,6 +370,7 @@ int hibernation_snapshot(int platform_mode)if (error || !in_suspend)pm_restore_gfp_mask (); +ftrace_start ();resume_console (); Complete_devices:
@@ -471,6 +473,7 @@ int hibernation_restore(int platform_mode)pm_prepare_console ();suspend_console (); +ftrace_stop ();pm_restrict_gfp_mask (); error =dpm_suspend_start (PMSG_QUIESCE );if (!error) {
@@ -478,6 +481,7 @@ int hibernation_restore(int platform_mode)dpm_resume_end (PMSG_RECOVER ); }pm_restore_gfp_mask (); +ftrace_start ();resume_console ();pm_restore_console ();return error;
@@ -504,6 +508,7 @@ int hibernation_platform_enter(void) entering_platform_hibernation = true;suspend_console (); +ftrace_stop (); error =dpm_suspend_start (PMSG_HIBERNATE );if (error) {if (hibernation_ops->recover)
@@ -547,6 +552,7 @@ int hibernation_platform_enter(void) Resume_devices: entering_platform_hibernation = false;dpm_resume_end (PMSG_RESTORE ); +ftrace_start ();resume_console (); Close:
kernel/power/suspend.c +3 -0
@@ -23,6 +23,7 @@#include <linux/slab.h> #include <linux/suspend.h> #include <linux/syscore_ops.h> +#include <linux/ftrace.h> #include <trace/events/power.h> #include "power.h"
@@ -210,6 +211,7 @@ int suspend_devices_and_enter(suspend_state_t state) goto Close; }suspend_console (); +ftrace_stop ();suspend_test_start (); error =dpm_suspend_start (PMSG_SUSPEND );if (error) {
@@ -226,6 +228,7 @@ int suspend_devices_and_enter(suspend_state_t state)suspend_test_start ();dpm_resume_end (PMSG_RESUME );suspend_test_finish ("resume devices" ); +ftrace_start ();resume_console (); Close:if (suspend_ops->end)
kernel/workqueue.c +37 -1
@@ -3561,6 +3561,41 @@ static int __devinit workqueue_cpu_callback(struct notifier_block *nfb,return notifier_from_errno (0 ); } +/* +* Workqueues should be brought up before normal priority CPU notifiers. +* This will be registered high priority CPU notifier. +*/ +static int __devinit workqueue_cpu_up_callback (struct notifier_block *nfb, +unsigned long action, +void *hcpu) +{ +switch (action & ~CPU_TASKS_FROZEN ) { +case CPU_UP_PREPARE : +case CPU_UP_CANCELED : +case CPU_DOWN_FAILED : +case CPU_ONLINE : +return workqueue_cpu_callback (nfb, action, hcpu); + } +return NOTIFY_OK ; +} + +/* +* Workqueues should be brought down after normal priority CPU notifiers. +* This will be registered as low priority CPU notifier. +*/ +static int __devinit workqueue_cpu_down_callback (struct notifier_block *nfb, +unsigned long action, +void *hcpu) +{ +switch (action & ~CPU_TASKS_FROZEN ) { +case CPU_DOWN_PREPARE : +case CPU_DYING : +case CPU_POST_DEAD : +return workqueue_cpu_callback (nfb, action, hcpu); + } +return NOTIFY_OK ; +} +#ifdef CONFIG_SMP struct work_for_cpu {
@@ -3754,7 +3789,8 @@ static int __init init_workqueues(void)unsigned int cpu;int i; -cpu_notifier (workqueue_cpu_callback,CPU_PRI_WORKQUEUE ); +cpu_notifier (workqueue_cpu_up_callback,CPU_PRI_WORKQUEUE_UP ); +cpu_notifier (workqueue_cpu_down_callback,CPU_PRI_WORKQUEUE_DOWN );/* initialize gcwqs */ for_each_gcwq_cpu (cpu) {
net/caif/caif_dev.c +1 -1
@@ -424,9 +424,9 @@ static int __init caif_device_init(void) static void __exit caif_device_exit(void) { -unregister_pernet_subsys (&caif_net_ops);unregister_netdevice_notifier (&caif_device_notifier);dev_remove_pack (&caif_packet_type); +unregister_pernet_subsys (&caif_net_ops); }module_init (caif_device_init);
net/core/rtnetlink.c +7 -1
@@ -647,6 +647,12 @@ static void set_operstate(struct net_device *dev, unsigned char transition) } } +static unsigned int rtnl_dev_get_flags (const struct net_device *dev) +{ +return (dev->flags & ~(IFF_PROMISC |IFF_ALLMULTI )) | + (dev->gflags & (IFF_PROMISC |IFF_ALLMULTI )); +} +static unsigned int rtnl_dev_combine_flags (const struct net_device *dev,const struct ifinfomsg *ifm) {
@@ -655,7 +661,7 @@ static unsigned int rtnl_dev_combine_flags(const struct net_device *dev,/* bugwards compatibility: ifi_change == 0 is treated as ~0 */ if (ifm->ifi_change) flags = (flags & ifm->ifi_change) | - (dev->flags & ~ifm->ifi_change); + (rtnl_dev_get_flags (dev) & ~ifm->ifi_change);return flags; }
net/ipv4/cipso_ipv4.c +4 -2
@@ -1725,8 +1725,10 @@ int cipso_v4_validate(const struct sk_buff *skb, unsigned char **option)case CIPSO_V4_TAG_LOCAL :/* This is a non-standard tag that we only allow for * local connections, so if the incoming interface is -* not the loopback device drop the packet. */ -if (!(skb->dev->flags &IFF_LOOPBACK )) { +* not the loopback device drop the packet. Further, +* there is no legitimate reason for setting this from +* userspace so reject it if skb is NULL. */ +if (skb ==NULL || !(skb->dev->flags &IFF_LOOPBACK )) { err_offset = opt_iter; goto validate_return_locked; }
net/ipv4/tcp.c +4 -1
@@ -2394,7 +2394,10 @@ static int do_tcp_setsockopt(struct sock *sk, int level,/* Cap the max timeout in ms TCP will retry/retrans * before giving up and aborting (ETIMEDOUT) a connection. */ - icsk->icsk_user_timeout =msecs_to_jiffies (val); +if (val <0 ) + err = -EINVAL ; +else + icsk->icsk_user_timeout =msecs_to_jiffies (val);break ;default : err = -ENOPROTOOPT ;
net/ipv4/tcp_input.c +3 -1
@@ -5340,7 +5340,9 @@ int tcp_rcv_established(struct sock *sk, struct sk_buff *skb,if (tp->copied_seq == tp->rcv_nxt && len - tcp_header_len <= tp->ucopy.len) {#ifdef CONFIG_NET_DMA -if (tcp_dma_try_early_copy (sk, skb, tcp_header_len)) { +if (tp->ucopy.task == current && +sock_owned_by_user (sk) && +tcp_dma_try_early_copy (sk, skb, tcp_header_len)) { copied_early =1 ; eaten =1 ; }
net/sched/sch_sfb.c +2 -0
@@ -556,6 +556,8 @@ static int sfb_dump(struct Qdisc *sch, struct sk_buff *skb) sch->qstats.backlog = q->qdisc->qstats.backlog; opts =nla_nest_start (skb,TCA_OPTIONS ); +if (opts ==NULL ) + goto nla_put_failure;NLA_PUT (skb,TCA_SFB_PARMS ,sizeof (opt), &opt);return nla_nest_end (skb, opts);
net/sctp/input.c +2 -5
@@ -737,15 +737,12 @@ static void __sctp_unhash_endpoint(struct sctp_endpoint *ep) epb = &ep->base; -if (hlist_unhashed (&epb->node)) -return ; - epb->hashent =sctp_ep_hashfn (epb->bind_addr.port); head = &sctp_ep_hashtable[epb->hashent];sctp_write_lock (&head->lock); -__hlist_del (&epb->node); +hlist_del_init (&epb->node);sctp_write_unlock (&head->lock); }
@@ -826,7 +823,7 @@ static void __sctp_unhash_established(struct sctp_association *asoc) head = &sctp_assoc_hashtable[epb->hashent];sctp_write_lock (&head->lock); -__hlist_del (&epb->node); +hlist_del_init (&epb->node);sctp_write_unlock (&head->lock); }
net/sctp/socket.c +10 -2
@@ -1160,8 +1160,14 @@ out_free:SCTP_DEBUG_PRINTK ("About to exit __sctp_connect() free asoc: %p" " kaddrs: %p err: %d\n" , asoc, kaddrs, err); -if (asoc) +if (asoc) { +/* sctp_primitive_ASSOCIATE may have added this association +* To the hash table, try to unhash it, just in case, its a noop +* if it wasn't hashed so we're safe +*/ +sctp_unhash_established (asoc);sctp_association_free (asoc); + }return err; }
@@ -1871,8 +1877,10 @@ SCTP_STATIC int sctp_sendmsg(struct kiocb *iocb, struct sock *sk, goto out_unlock; out_free: -if (new_asoc) +if (new_asoc) { +sctp_unhash_established (asoc);sctp_association_free (asoc); + } out_unlock:sctp_release_sock (sk);
net/sunrpc/sched.c +2 -0
@@ -713,7 +713,9 @@ void rpc_execute(struct rpc_task *task)static void rpc_async_schedule (struct work_struct *work) { + current->flags |=PF_FSTRANS ; __rpc_execute(container_of(work, struct rpc_task, u.tk_work)); + current->flags &= ~PF_FSTRANS ; }/**
net/sunrpc/xprtrdma/transport.c +2 -1
@@ -200,6 +200,7 @@ xprt_rdma_connect_worker(struct work_struct *work)int rc =0 ;if (!xprt->shutdown) { + current->flags |=PF_FSTRANS ;xprt_clear_connected (xprt); dprintk("RPC: %s: %sconnect\n", __func__,
@@ -212,10 +213,10 @@ xprt_rdma_connect_worker(struct work_struct *work) out:xprt_wake_pending_tasks (xprt, rc); - out_clear:dprintk ("RPC: %s: exit\n" , __func__);xprt_clear_connecting (xprt); + current->flags &= ~PF_FSTRANS ; }/*
net/sunrpc/xprtsock.c +10 -0
@@ -1882,6 +1882,8 @@ static void xs_local_setup_socket(struct work_struct *work)if (xprt->shutdown) goto out; + current->flags |=PF_FSTRANS ; +clear_bit (XPRT_CONNECTION_ABORT , &xprt->state); status =__sock_create (xprt->xprt_net,AF_LOCAL ,SOCK_STREAM ,0 , &sock,1 );
@@ -1915,6 +1917,7 @@ static void xs_local_setup_socket(struct work_struct *work) out:xprt_clear_connecting (xprt);xprt_wake_pending_tasks (xprt, status); + current->flags &= ~PF_FSTRANS ; }static void xs_udp_finish_connecting (struct rpc_xprt *xprt,struct socket *sock)
@@ -1957,6 +1960,8 @@ static void xs_udp_setup_socket(struct work_struct *work)if (xprt->shutdown) goto out; + current->flags |=PF_FSTRANS ; +/* Start by resetting any existing state */ xs_reset_transport (transport); sock = xs_create_sock(xprt, transport,
@@ -1975,6 +1980,7 @@ static void xs_udp_setup_socket(struct work_struct *work) out:xprt_clear_connecting (xprt);xprt_wake_pending_tasks (xprt, status); + current->flags &= ~PF_FSTRANS ; }/*
@@ -2100,6 +2106,8 @@ static void xs_tcp_setup_socket(struct work_struct *work)if (xprt->shutdown) goto out; + current->flags |=PF_FSTRANS ; +if (!sock) {clear_bit (XPRT_CONNECTION_ABORT , &xprt->state); sock = xs_create_sock(xprt, transport,
@@ -2149,6 +2157,7 @@ static void xs_tcp_setup_socket(struct work_struct *work)case -EINPROGRESS :case -EALREADY :xprt_clear_connecting (xprt); + current->flags &= ~PF_FSTRANS ;return ;case -EINVAL :/* Happens, for instance, if the user specified a link
@@ -2161,6 +2170,7 @@ out_eagain: out:xprt_clear_connecting (xprt);xprt_wake_pending_tasks (xprt, status); + current->flags &= ~PF_FSTRANS ; }/**
net/wanrouter/wanmain.c +23 -28
59 lines not on this page · raw message
sound/drivers/mpu401/mpu401_uart.c +1 -0
@@ -554,6 +554,7 @@ int snd_mpu401_uart_new(struct snd_card *card, int device,spin_lock_init (&mpu->output_lock);spin_lock_init (&mpu->timer_lock); mpu->hardware = hardware; + mpu->irq =-1 ;if (! (info_flags &MPU401_INFO_INTEGRATED )) {int res_size = hardware ==MPU401_HW_PC98II ?4 :2 ; mpu->res =request_region (port, res_size,"MPU401 UART" );
sound/pci/hda/patch_realtek.c +1 -0
@@ -20133,6 +20133,7 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = { { .id = 0x10ec0275, .name = "ALC275", .patch = patch_alc269 }, { .id = 0x10ec0276, .name = "ALC276", .patch = patch_alc269 }, { .id = 0x10ec0280, .name = "ALC280", .patch = patch_alc269 }, + { .id = 0x10ec0282, .name = "ALC282", .patch = patch_alc269 }, { .id = 0x10ec0861, .rev = 0x100340, .name = "ALC660", .patch = patch_alc861 }, { .id = 0x10ec0660, .name = "ALC660-VD", .patch = patch_alc861vd },
sound/soc/codecs/wm8962.c +3 -0
@@ -2890,6 +2890,9 @@ static int wm8962_set_bias_level(struct snd_soc_codec *codec,/* VMID 2*250k */ snd_soc_update_bits (codec,WM8962_PWR_MGMT_1 ,WM8962_VMID_SEL_MASK ,0x100 ); + +if (codec->dapm.bias_level ==SND_SOC_BIAS_OFF ) +msleep (100 );break ;case SND_SOC_BIAS_OFF :
sound/soc/codecs/wm8994.c +1 -1
@@ -2127,7 +2127,7 @@ static int wm8994_hw_params(struct snd_pcm_substream *substream,return -EINVAL ; } - bclk_rate =params_rate (params) *2 ; + bclk_rate =params_rate (params) *4 ;switch (params_format (params)) {case SNDRV_PCM_FORMAT_S16_LE : bclk_rate *=16 ;
sound/usb/clock.c +2 -1
@@ -111,7 +111,8 @@ static bool uac_clock_source_is_valid(struct snd_usb_audio *chip, int source_id)return 0 ;/* If a clock source can't tell us whether it's valid, we assume it is */ -if (!uac2_control_is_readable (cs_desc->bmControls,UAC2_CS_CONTROL_CLOCK_VALID )) +if (!uac2_control_is_readable (cs_desc->bmControls, +UAC2_CS_CONTROL_CLOCK_VALID -1 ))return 1 ; err = snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), UAC2_CS_CUR,