Linux 3.0.37
I'm announcing the release of the 3.0.37 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 | 6 + Makefile | 2 arch/arm/kernel/smp.c | 12 ++- arch/powerpc/xmon/xmon.c | 2 arch/x86/include/asm/cpufeature.h | 2 arch/x86/kernel/acpi/boot.c | 27 ++++--- arch/x86/kernel/cpu/scattered.c | 2 arch/x86/kernel/reboot.c | 8 ++ drivers/acpi/acpi_pad.c | 7 + drivers/acpi/sysfs.c | 4 - drivers/block/umem.c | 40 ++++++++++ drivers/gpu/drm/drm_edid.c | 2 drivers/gpu/drm/i915/i915_suspend.c | 5 + drivers/gpu/drm/nouveau/nouveau_fbcon.c | 2 drivers/hwmon/applesmc.c | 4 - drivers/hwmon/coretemp.c | 2 drivers/md/raid10.c | 6 + drivers/md/raid5.c | 8 +- drivers/media/dvb/siano/smsusb.c | 2 drivers/mtd/nand/cafe_nand.c | 2 drivers/net/benet/be_main.c | 5 - drivers/net/bonding/bond_main.c | 9 +- drivers/net/can/c_can/c_can.c | 4 - drivers/net/dummy.c | 5 + drivers/net/sky2.c | 10 +- drivers/net/usb/ipheth.c | 5 + drivers/net/wireless/ath/ath9k/hw.c | 16 +++- drivers/net/wireless/ath/ath9k/main.c | 9 ++ drivers/net/wireless/mwifiex/11n_rxreorder.c | 5 - drivers/net/wireless/mwifiex/11n_rxreorder.h | 7 + drivers/net/wireless/mwifiex/wmm.c | 2 drivers/net/wireless/rtl818x/rtl8187/leds.c | 2 drivers/oprofile/oprofile_perf.c | 2 drivers/pci/pci-driver.c | 12 +++ drivers/pci/pci.c | 5 - drivers/pci/quirks.c | 26 ------ drivers/rtc/rtc-mxc.c | 5 - drivers/target/tcm_fc/tfc_sess.c | 3 drivers/usb/class/cdc-wdm.c | 2 drivers/usb/host/pci-quirks.c | 13 +++ drivers/usb/serial/cp210x.c | 11 ++ drivers/usb/serial/option.c | 34 +++++++++ drivers/vhost/vhost.c | 2 fs/btrfs/tree-log.c | 6 + fs/ecryptfs/kthread.c | 2 fs/ecryptfs/miscdev.c | 48 +++++++----- fs/nilfs2/gcinode.c | 2 fs/nilfs2/segment.c | 2 fs/open.c | 6 - fs/ramfs/file-nommu.c | 1 fs/udf/super.c | 102 ++++++++++++++++----------- include/linux/mmzone.h | 2 include/linux/pci.h | 2 include/net/cipso_ipv4.h | 29 +++++++ include/net/sch_generic.h | 7 + kernel/trace/trace.c | 2 mm/compaction.c | 5 + mm/madvise.c | 16 +++- mm/vmscan.c | 7 + net/bridge/br_if.c | 1 net/bridge/br_netlink.c | 2 net/bridge/br_private.h | 1 net/core/ethtool.c | 1 net/core/netpoll.c | 11 +- net/core/sock.c | 7 + net/ipv6/route.c | 41 ++++++++-- net/l2tp/l2tp_eth.c | 2 net/mac80211/rx.c | 5 + net/wireless/reg.c | 2 sound/pci/hda/patch_realtek.c | 1 sound/soc/codecs/tlv320aic3x.c | 4 - sound/soc/codecs/tlv320aic3x.h | 1 72 files changed, 477 insertions(+), 180 deletions(-)
Alan Stern (1):
PCI: EHCI: fix crash during suspend on ASUS computers
Andy Lutomirski (1):
mm: Hold a file reference in madvise_remove
Anton Blanchard (1):
powerpc/xmon: Use cpumask iterator to avoid warning
Ben Skeggs (1):
drm/nouveau/fbcon: using nv_two_heads is not a good idea
Benoît Thébaudeau (1):
drivers/rtc/rtc-mxc.c: fix irq enabled interrupts warning
Bjørn Mork (2):
USB: cdc-wdm: fix lockup on error in wdm_read
USB: option: add ZTE MF60
Bob Liu (1):
fs: ramfs: file-nommu: add SetPageUptodate()
Chris Mason (1):
Btrfs: run delayed directory updates during log replay
Craig Shelley (1):
USB: CP210x Add 10 Device IDs
Dan Carpenter (2):
can: c_can: precedence error in c_can_chip_config()
mtd: cafe_nand: fix an & vs | mistake
Daniel Vetter (1):
drm/edid: don't return stack garbage from supports_rb
David Henningsson (1):
ALSA: hda - Add Realtek ALC280 codec support
David Rientjes (1):
mm, thp: abort compaction if migration page cannot be charged to memcg
Davide Gerhard (1):
ipheth: add support for iPad
Dmitry Shmygov (1):
USB: option: add id for Cellient MEN-200
Eliad Peller (1):
cfg80211: fix potential deadlock in regulatory
Eric Dumazet (5):
net: l2tp_eth: fix kernel panic on rmmod l2tp_eth
dummy: fix rcu_sched self-detected stalls
bonding: Fix corrupted queue_mapping
be2net: fix a race in be_xmit()
netpoll: fix netpoll_send_udp() bugs
Feng Tang (3):
ACPI: Add a quirk for "AMILO PRO V2030" to ignore the timer overriding
ACPI: Make acpi_skip_timer_override cover all source_irq==0 cases
ACPI: Remove one board specific WARN when ignoring timer overriding
Forest Bond (1):
USB: option: Add USB ID for Novatel Ovation MC551
Gaosen Zhang (1):
USB: option: Add MEDIATEK product ids
Greg Kroah-Hartman (1):
Linux 3.0.37
H. Peter Anvin (1):
x86, cpufeature: Rename X86_FEATURE_DTS to X86_FEATURE_DTHERM
Hebbar, Gururaja (1):
ASoC: tlv320aic3x: Fix codec pll configure bug
Henrik Rydberg (1):
hwmon: (applesmc) Limit key length in warning messages
Jan Kara (3):
udf: Use 'ret' instead of abusing 'i' in udf_load_logicalvol()
udf: Avoid run away loop when partition table length is corrupted
udf: Fortify loading of sparing table
Jason Wang (1):
net: sock: validate data_len before allocating skb in sock_alloc_send_pskb()
Jiang Liu (1):
memory hotplug: fix invalid memory access caused by stale kswapd pointer
Johannes Berg (1):
mac80211: correct behaviour on unrecognised action frames
Linus Torvalds (1):
vfs: make O_PATH file descriptors usable for 'fchdir()'
Mark Rustad (1):
tcm_fc: Resolve suspicious RCU usage warnings
Mel Gorman (1):
stable: Allow merging of backports for serious user-visible performance issues
Michael Krufky (1):
media: smsusb: add autodetection support for USB ID 2040:f5a0
Michał Mirosław (1):
ethtool: allow ETHTOOL_GSSET_INFO for users
Mohammed Shafi Shajakhan (2):
ath9k: Fix softlockup in AR9485
ath9k_hw: avoid possible infinite loop in ar9003_get_pll_sqsum_dvc
Nadav Har'El (1):
vhost: don't forget to schedule()
NeilBrown (1):
md/raid10: Don't try to recovery unmatched (and unused) chunks.
Panayiotis Karabassis (1):
ath9k: enable serialize_regmode for non-PCIE AR9287
Paul Moore (1):
cipso: handle CIPSO options correctly when NetLabel is disabled
Pavel Vasilyev (1):
ACPI sysfs.c strlen fix
Russell King (1):
ARM: fix rcu stalls on SMP platforms
Ryusuke Konishi (1):
nilfs2: ensure proper cache clearing for gc-inodes
Sarah Sharp (1):
xhci: Avoid dead ports when CONFIG_USB_XHCI_HCD=n
Shaohua Li (1):
raid5: delayed stripe fix
Stanislaw Gruszka (1):
rtl8187: ->brightness_set can not sleep
Stone Piao (1):
mwifiex: fix 11n rx packet drop issue
Stuart Hayes (1):
acpi_pad: fix power_saving thread deadlock
Takashi Iwai (1):
drm/i915: Fix eDP blank screen after S3 resume on HP desktops
Tao Guo (1):
umem: fix up unplugging
Thomas Graf (1):
ipv6: Move ipv6 proc file registration to end of init order
Tyler Hicks (3):
eCryptfs: Gracefully refuse miscdev file ops on inherited/passed files
eCryptfs: Fix lockdep warning in miscdev operations
eCryptfs: Properly check for O_RDONLY flag before doing privileged open
Vaibhav Nagarnaik (1):
tracing: change CPU ring buffer state from tracing_cpumask
Will Deacon (1):
oprofile: perf: use NR_CPUS instead or nr_cpumask_bits for static array
Zhang Rui (1):
ACPI, x86: fix Dell M6600 ACPI reboot regression via DMI
majianpeng (1):
md/raid5: Do not add data_offset before call to is_badblock
stephen hemminger (2):
bridge: Assign rtnl_link_ops to bridge devices created via ioctl (v2)
sky2: fix checksum bit management on some chips
Documentation/stable_kernel_rules.txt +6 -0
@@ -12,6 +12,12 @@ Rules on what kind of patches are accepted, and which ones are not, into the marked CONFIG_BROKEN), an oops, a hang, data corruption, a real security issue, or some "oh, that's not good" issue. In short, something critical. + - Serious issues as reported by a user of a distribution kernel may also + be considered if they fix a notable performance or interactivity issue. + As these fixes are not as obvious and have a higher risk of a subtle + regression they should only be submitted by a distribution kernel + maintainer and include an addendum linking to a bugzilla entry if it + exists and additional information on the user-visible impact. - New device IDs and quirks are also accepted. - No "theoretical race condition" issues, unless an explanation of how the race can be exploited is also provided.
Makefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 3 PATCHLEVEL = 0 -SUBLEVEL = 36 +SUBLEVEL = 37 EXTRAVERSION = NAME = Sneaky Weasel
arch/arm/kernel/smp.c +10 -2
@@ -445,9 +445,7 @@ static DEFINE_PER_CPU(struct clock_event_device, percpu_clockevent);static void ipi_timer (void ) {struct clock_event_device *evt = &__get_cpu_var (percpu_clockevent); -irq_enter (); evt->event_handler (evt); -irq_exit (); }#ifdef CONFIG_LOCAL_TIMERS
@@ -458,7 +456,9 @@ asmlinkage void __exception_irq_entry do_local_timer(struct pt_regs *regs)if (local_timer_ack ()) {__inc_irq_stat (cpu, local_timer_irqs); +irq_enter ();ipi_timer (); +irq_exit (); }set_irq_regs (old_regs);
@@ -568,7 +568,9 @@ asmlinkage void __exception_irq_entry do_IPI(int ipinr, struct pt_regs *regs)switch (ipinr) {case IPI_TIMER : +irq_enter ();ipi_timer (); +irq_exit ();break ;case IPI_RESCHEDULE :
@@ -576,15 +578,21 @@ asmlinkage void __exception_irq_entry do_IPI(int ipinr, struct pt_regs *regs)break ;case IPI_CALL_FUNC : +irq_enter ();generic_smp_call_function_interrupt (); +irq_exit ();break ;case IPI_CALL_FUNC_SINGLE : +irq_enter ();generic_smp_call_function_single_interrupt (); +irq_exit ();break ;case IPI_CPU_STOP : +irq_enter ();ipi_cpu_stop (cpu); +irq_exit ();break ;default :
arch/powerpc/xmon/xmon.c +1 -1
@@ -975,7 +975,7 @@ static int cpu_cmd(void)/* print cpus waiting or in xmon */ printf ("cpus stopped:" ); count =0 ; -for (cpu =0 ; cpu <NR_CPUS ; ++cpu) { +for_each_possible_cpu (cpu) {if (cpumask_test_cpu (cpu, &cpus_in_xmon)) {if (count ==0 )printf (" %x" , cpu);
arch/x86/include/asm/cpufeature.h +1 -1
@@ -173,7 +173,7 @@#define X86_FEATURE_XSAVEOPT (7*32+ 4)/* Optimized Xsave */ #define X86_FEATURE_PLN (7*32+ 5)/* Intel Power Limit Notification */ #define X86_FEATURE_PTS (7*32+ 6)/* Intel Package Thermal Status */ -#define X86_FEATURE_DTS (7*32+ 7)/* Digital Thermal Sensor */ +#define X86_FEATURE_DTHERM (7*32+ 7)/* Digital Thermal Sensor */ /* Virtualization flags: Linux defined, word 8 */ #define X86_FEATURE_TPR_SHADOW (8*32+ 0)/* Intel TPR Shadow */
arch/x86/kernel/acpi/boot.c +16 -11
@@ -416,12 +416,14 @@ acpi_parse_int_src_ovr(struct acpi_subtable_header * header,return 0 ; } -if (intsrc->source_irq ==0 && intsrc->global_irq ==2 ) { +if (intsrc->source_irq ==0 ) {if (acpi_skip_timer_override) { -printk (PREFIX "BIOS IRQ0 pin2 override ignored.\n" ); +printk (PREFIX "BIOS IRQ0 override ignored.\n" );return 0 ; } -if (acpi_fix_pin2_polarity && (intsrc->inti_flags &ACPI_MADT_POLARITY_MASK )) { + +if ((intsrc->global_irq ==2 ) && acpi_fix_pin2_polarity + && (intsrc->inti_flags &ACPI_MADT_POLARITY_MASK )) { intsrc->inti_flags &= ~ACPI_MADT_POLARITY_MASK ;printk (PREFIX "BIOS IRQ0 pin2 override: forcing polarity to high active.\n" ); }
@@ -1327,17 +1329,12 @@ static int __init dmi_disable_acpi(const struct dmi_system_id *d) }/* -* Force ignoring BIOS IRQ0 pin2 override +* Force ignoring BIOS IRQ0 override */ static int __init dmi_ignore_irq0_timer_override (const struct dmi_system_id *d) { -/* -* The ati_ixp4x0_rev() early PCI quirk should have set -* the acpi_skip_timer_override flag already: -*/ if (!acpi_skip_timer_override) { -WARN (1 ,KERN_ERR "ati_ixp4x0 quirk not complete.\n" ); -pr_notice ("%s detected: Ignoring BIOS IRQ0 pin2 override\n" , +pr_notice ("%s detected: Ignoring BIOS IRQ0 override\n" , d->ident); acpi_skip_timer_override =1 ; }
@@ -1431,7 +1428,7 @@ static struct dmi_system_id __initdata acpi_dmi_table_late[] = {* is enabled. This input is incorrectly designated the * ISA IRQ 0 via an interrupt source override even though * it is wired to the output of the master 8259A and INTIN0 -* is not connected at all. Force ignoring BIOS IRQ0 pin2 +* is not connected at all. Force ignoring BIOS IRQ0 * override in that cases. */ {
@@ -1466,6 +1463,14 @@ static struct dmi_system_id __initdata acpi_dmi_table_late[] = { DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq 6715b"), }, }, + { + .callback = dmi_ignore_irq0_timer_override, + .ident = "FUJITSU SIEMENS", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), + DMI_MATCH(DMI_PRODUCT_NAME, "AMILO PRO V2030"), + }, + }, {} };
arch/x86/kernel/cpu/scattered.c +1 -1
@@ -31,7 +31,7 @@ void __cpuinit init_scattered_cpuid_features(struct cpuinfo_x86 *c)const struct cpuid_bit *cb;static const struct cpuid_bit __cpuinitconst cpuid_bits[] = { - {X86_FEATURE_DTS ,CR_EAX ,0 ,0x00000006 ,0 }, + {X86_FEATURE_DTHERM ,CR_EAX ,0 ,0x00000006 ,0 }, {X86_FEATURE_IDA ,CR_EAX ,1 ,0x00000006 ,0 }, {X86_FEATURE_ARAT ,CR_EAX ,2 ,0x00000006 ,0 }, {X86_FEATURE_PLN ,CR_EAX ,4 ,0x00000006 ,0 },
arch/x86/kernel/reboot.c +8 -0
@@ -452,6 +452,14 @@ static struct dmi_system_id __initdata pci_reboot_dmi_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6420"), }, }, + { /* Handle problems with rebooting on the Precision M6600. */ + .callback = set_pci_reboot, + .ident = "Dell OptiPlex 990", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Precision M6600"), + }, + }, { } };
drivers/acpi/acpi_pad.c +4 -3
@@ -36,6 +36,7 @@#define ACPI_PROCESSOR_AGGREGATOR_DEVICE_NAME "Processor Aggregator"#define ACPI_PROCESSOR_AGGREGATOR_NOTIFY 0x80static DEFINE_MUTEX (isolated_cpus_lock); +static DEFINE_MUTEX (round_robin_lock);static unsigned long power_saving_mwait_eax;
@@ -107,7 +108,7 @@ static void round_robin_cpu(unsigned int tsk_index)if (!alloc_cpumask_var (&tmp,GFP_KERNEL ))return ; -mutex_lock (&isolated_cpus_lock); +mutex_lock (&round_robin_lock);cpumask_clear (tmp);for_each_cpu (cpu, pad_busy_cpus)cpumask_or (tmp, tmp,topology_thread_cpumask (cpu));
@@ -116,7 +117,7 @@ static void round_robin_cpu(unsigned int tsk_index)if (cpumask_empty (tmp))cpumask_andnot (tmp, cpu_online_mask, pad_busy_cpus);if (cpumask_empty (tmp)) { -mutex_unlock (&isolated_cpus_lock); +mutex_unlock (&round_robin_lock);return ; }for_each_cpu (cpu, tmp) {
@@ -131,7 +132,7 @@ static void round_robin_cpu(unsigned int tsk_index) tsk_in_cpu[tsk_index] = preferred_cpu;cpumask_set_cpu (preferred_cpu, pad_busy_cpus); cpu_weight[preferred_cpu]++; -mutex_unlock (&isolated_cpus_lock); +mutex_unlock (&round_robin_lock);set_cpus_allowed_ptr (current,cpumask_of (preferred_cpu)); }
drivers/acpi/sysfs.c +2 -2
@@ -173,7 +173,7 @@ static int param_set_trace_state(const char *val, struct kernel_param *kp) {int result =0 ; -if (!strncmp (val,"enable" ,strlen ("enable" ) -1 )) { +if (!strncmp (val,"enable" ,strlen ("enable" ))) { result =acpi_debug_trace (trace_method_name, trace_debug_level, trace_debug_layer,0 );if (result)
@@ -181,7 +181,7 @@ static int param_set_trace_state(const char *val, struct kernel_param *kp) goto exit; } -if (!strncmp (val,"disable" ,strlen ("disable" ) -1 )) { +if (!strncmp (val,"disable" ,strlen ("disable" ))) {int name =0 ; result =acpi_debug_trace ((char *)&name, trace_debug_level, trace_debug_layer,0 );
drivers/block/umem.c +40 -0
@@ -513,6 +513,44 @@ static void process_page(unsigned long data) } } +struct mm_plug_cb { +struct blk_plug_cb cb; +struct cardinfo *card; +}; + +static void mm_unplug (struct blk_plug_cb *cb) +{ + struct mm_plug_cb *mmcb = container_of(cb, struct mm_plug_cb, cb); + +spin_lock_irq (&mmcb->card->lock); +activate (mmcb->card); +spin_unlock_irq (&mmcb->card->lock); +kfree (mmcb); +} + +static int mm_check_plugged (struct cardinfo *card) +{ +struct blk_plug *plug = current->plug; +struct mm_plug_cb *mmcb; + +if (!plug) +return 0 ; + +list_for_each_entry (mmcb, &plug->cb_list, cb.list) { +if (mmcb->cb.callback == mm_unplug && mmcb->card == card) +return 1 ; + } +/* Not currently on the callback list */ + mmcb =kmalloc (sizeof (*mmcb),GFP_ATOMIC ); +if (!mmcb) +return 0 ; + + mmcb->card = card; + mmcb->cb.callback = mm_unplug; +list_add (&mmcb->cb.list, &plug->cb_list); +return 1 ; +} +static int mm_make_request (struct request_queue *q,struct bio *bio) {struct cardinfo *card = q->queuedata;
@@ -523,6 +561,8 @@ static int mm_make_request(struct request_queue *q, struct bio *bio) *card->biotail = bio; bio->bi_next =NULL ; card->biotail = &bio->bi_next; +if (bio->bi_rw &REQ_SYNC || !mm_check_plugged (card)) +activate (card);spin_unlock_irq (&card->lock);return 0 ;
drivers/gpu/drm/drm_edid.c +1 -1
@@ -584,7 +584,7 @@ static bool drm_monitor_supports_rb(struct edid *edid) {if (edid->revision >=4 ) { -bool ret; +bool ret = false;drm_for_each_detailed_block ((u8 *)edid, is_rb, &ret);return ret; }
drivers/gpu/drm/i915/i915_suspend.c +4 -1
@@ -739,8 +739,11 @@ static void i915_restore_display(struct drm_device *dev)if (HAS_PCH_SPLIT (dev)) {I915_WRITE (BLC_PWM_PCH_CTL1 , dev_priv->saveBLC_PWM_CTL);I915_WRITE (BLC_PWM_PCH_CTL2 , dev_priv->saveBLC_PWM_CTL2); -I915_WRITE (BLC_PWM_CPU_CTL , dev_priv->saveBLC_CPU_PWM_CTL); +/* NOTE: BLC_PWM_CPU_CTL must be written after BLC_PWM_CPU_CTL2; +* otherwise we get blank eDP screen after S3 on some machines +*/ I915_WRITE (BLC_PWM_CPU_CTL2 , dev_priv->saveBLC_CPU_PWM_CTL2); +I915_WRITE (BLC_PWM_CPU_CTL , dev_priv->saveBLC_CPU_PWM_CTL);I915_WRITE (PCH_PP_ON_DELAYS , dev_priv->savePP_ON_DELAYS);I915_WRITE (PCH_PP_OFF_DELAYS , dev_priv->savePP_OFF_DELAYS);I915_WRITE (PCH_PP_DIVISOR , dev_priv->savePP_DIVISOR);
drivers/gpu/drm/nouveau/nouveau_fbcon.c +1 -1
@@ -487,7 +487,7 @@ int nouveau_fbcon_init(struct drm_device *dev) nfbdev->helper.funcs = &nouveau_fbcon_helper_funcs; ret =drm_fb_helper_init (dev, &nfbdev->helper, -nv_two_heads (dev) ?2 :1 ,4 ); + dev->mode_config.num_crtc,4 );if (ret) {kfree (nfbdev);return ret;
drivers/hwmon/applesmc.c +2 -2
@@ -215,7 +215,7 @@ static int read_smc(u8 cmd, const char *key, u8 *buffer, u8 len)int i;if (send_command (cmd) ||send_argument (key)) { -pr_warn ("%s: read arg fail\n" , key); +pr_warn ("%.4s: read arg fail\n" , key);return -EIO ; }
@@ -223,7 +223,7 @@ static int read_smc(u8 cmd, const char *key, u8 *buffer, u8 len)for (i =0 ; i < len; i++) {if (__wait_status (0x05 )) { -pr_warn ("%s: read data fail\n" , key); +pr_warn ("%.4s: read data fail\n" , key);return -EIO ; } buffer[i] =inb (APPLESMC_DATA_PORT );
drivers/hwmon/coretemp.c +1 -1
@@ -709,7 +709,7 @@ static void __cpuinit get_core_online(unsigned int cpu)* sensors. We check this bit only, all the early CPUs * without thermal sensors will be filtered out. */ -if (!cpu_has (c,X86_FEATURE_DTS )) +if (!cpu_has (c,X86_FEATURE_DTHERM ))return ;if (!pdev) {
drivers/md/raid10.c +6 -0
@@ -1858,6 +1858,12 @@ static sector_t sync_request(mddev_t *mddev, sector_t sector_nr,/* want to reconstruct this device */ rb2 = r10_bio; sect =raid10_find_virt (conf, sector_nr, i); +if (sect >= mddev->resync_max_sectors) { +/* last stripe is not complete - don't +* try to recover this sector. +*/ +continue ; + }/* Unless we are doing a full sync, we only need * to recover the block if it is set in the bitmap */
drivers/md/raid5.c +6 -2
@@ -199,12 +199,14 @@ static void __release_stripe(raid5_conf_t *conf, struct stripe_head *sh)BUG_ON (!list_empty (&sh->lru));BUG_ON (atomic_read (&conf->active_stripes)==0 );if (test_bit (STRIPE_HANDLE , &sh->state)) { -if (test_bit (STRIPE_DELAYED , &sh->state)) +if (test_bit (STRIPE_DELAYED , &sh->state) && + !test_bit (STRIPE_PREREAD_ACTIVE , &sh->state))list_add_tail (&sh->lru, &conf->delayed_list);else if (test_bit (STRIPE_BIT_DELAY , &sh->state) && sh->bm_seq - conf->seq_write >0 )list_add_tail (&sh->lru, &conf->bitmap_list);else { +clear_bit (STRIPE_DELAYED , &sh->state);clear_bit (STRIPE_BIT_DELAY , &sh->state);list_add_tail (&sh->lru, &conf->handle_list); }
@@ -3846,7 +3848,6 @@ static int chunk_aligned_read(mddev_t *mddev, struct bio * raid_bio) raid_bio->bi_next = (void *)rdev; align_bi->bi_bdev = rdev->bdev; align_bi->bi_flags &= ~(1 <<BIO_SEG_VALID ); - align_bi->bi_sector += rdev->data_offset;if (!bio_fits_rdev (align_bi)) {/* too big in some way */
@@ -3855,6 +3856,9 @@ static int chunk_aligned_read(mddev_t *mddev, struct bio * raid_bio)return 0 ; } +/* No reshape active, so we can trust rdev->data_offset */ + align_bi->bi_sector += rdev->data_offset; +spin_lock_irq (&conf->device_lock); wait_event_lock_irq(conf->wait_for_stripe, conf->quiesce == 0,
drivers/media/dvb/siano/smsusb.c +2 -0
@@ -543,6 +543,8 @@ static const struct usb_device_id smsusb_id_table[] __devinitconst = { .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, { USB_DEVICE(0x2040, 0xc0a0), .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, + { USB_DEVICE(0x2040, 0xf5a0), + .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, { }/* Terminating entry */ };
drivers/mtd/nand/cafe_nand.c +1 -1
@@ -102,7 +102,7 @@ static const char *part_probes[] = { "cmdlinepart", "RedBoot", NULL };static int cafe_device_ready (struct mtd_info *mtd) {struct cafe_priv *cafe = mtd->priv; -int result = !!(cafe_readl (cafe,NAND_STATUS ) |0x40000000 ); +int result = !!(cafe_readl (cafe,NAND_STATUS ) &0x40000000 );uint32_t irqs =cafe_readl (cafe,NAND_IRQ );cafe_writel (cafe, irqs,NAND_IRQ );
drivers/net/benet/be_main.c +3 -2
@@ -763,6 +763,8 @@ static netdev_tx_t be_xmit(struct sk_buff *skb, copied =make_tx_wrbs (adapter, skb, wrb_cnt, dummy_wrb);if (copied) { +int gso_segs =skb_shinfo (skb)->gso_segs; +/* record the sent skb in the sent_skb table */ BUG_ON (tx_obj->sent_skb_list[start]); tx_obj->sent_skb_list[start] = skb;
@@ -780,8 +782,7 @@ static netdev_tx_t be_xmit(struct sk_buff *skb,be_txq_notify (adapter, txq->id, wrb_cnt); -be_tx_stats_update (adapter, wrb_cnt, copied, -skb_shinfo (skb)->gso_segs, stopped); +be_tx_stats_update (adapter, wrb_cnt, copied, gso_segs, stopped); }else { txq->head = start;dev_kfree_skb_any (skb);
drivers/net/bonding/bond_main.c +5 -4
@@ -77,6 +77,7 @@#include <net/route.h> #include <net/net_namespace.h> #include <net/netns/generic.h> +#include <net/pkt_sched.h> #include "bonding.h" #include "bond_3ad.h" #include "bond_alb.h"
@@ -388,8 +389,6 @@ struct vlan_entry *bond_next_vlan(struct bonding *bond, struct vlan_entry *curr)return next; } -#define bond_queue_mapping (skb) (*(u16 *)((skb)->cb)) -/** * bond_dev_queue_xmit - Prepare skb for xmit. *
@@ -403,7 +402,9 @@ int bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, skb->dev = slave_dev; skb->priority =1 ; - skb->queue_mapping =bond_queue_mapping (skb); +BUILD_BUG_ON (sizeof (skb->queue_mapping) != +sizeof (qdisc_skb_cb (skb)->bond_queue_mapping)); + skb->queue_mapping =qdisc_skb_cb (skb)->bond_queue_mapping;if (unlikely (netpoll_tx_running (slave_dev)))bond_netpoll_send_skb (bond_get_slave_by_dev (bond, slave_dev), skb);
@@ -4240,7 +4241,7 @@ static u16 bond_select_queue(struct net_device *dev, struct sk_buff *skb)/* * Save the original txq to restore before passing to the driver */ -bond_queue_mapping (skb) = skb->queue_mapping; +qdisc_skb_cb (skb)->bond_queue_mapping = skb->queue_mapping;if (unlikely (txq >= dev->real_num_tx_queues)) { do {
drivers/net/can/c_can/c_can.c +2 -2
@@ -592,8 +592,8 @@ static void c_can_chip_config(struct net_device *dev) priv->write_reg (priv, &priv->regs->control,CONTROL_ENABLE_AR ); -if (priv->can.ctrlmode & (CAN_CTRLMODE_LISTENONLY & -CAN_CTRLMODE_LOOPBACK )) { +if ((priv->can.ctrlmode &CAN_CTRLMODE_LISTENONLY ) && + (priv->can.ctrlmode &CAN_CTRLMODE_LOOPBACK )) {/* loopback + silent mode : useful for hot self-test */ priv->write_reg (priv, &priv->regs->control,CONTROL_EIE |CONTROL_SIE |CONTROL_IE |CONTROL_TEST );
drivers/net/dummy.c +4 -1
@@ -37,6 +37,7 @@#include <linux/rtnetlink.h> #include <net/rtnetlink.h> #include <linux/u64_stats_sync.h> +#include <linux/sched.h> static int numdummies =1 ;
@@ -186,8 +187,10 @@ static int __init dummy_init_module(void)rtnl_lock (); err =__rtnl_link_register (&dummy_link_ops); -for (i =0 ; i < numdummies && !err; i++) +for (i =0 ; i < numdummies && !err; i++) { err =dummy_init_one (); +cond_resched (); + }if (err <0 )__rtnl_link_unregister (&dummy_link_ops);rtnl_unlock ();
drivers/net/sky2.c +6 -4
@@ -4206,10 +4206,12 @@ static int sky2_set_features(struct net_device *dev, u32 features)struct sky2_port *sky2 =netdev_priv (dev);u32 changed = dev->features ^ features; -if (changed &NETIF_F_RXCSUM ) { -u32 on = features &NETIF_F_RXCSUM ; -sky2_write32 (sky2->hw,Q_ADDR (rxqaddr[sky2->port],Q_CSR ), - on ?BMU_ENA_RX_CHKSUM :BMU_DIS_RX_CHKSUM ); +if ((changed &NETIF_F_RXCSUM ) && + !(sky2->hw->flags &SKY2_HW_NEW_LE )) { +sky2_write32 (sky2->hw, +Q_ADDR (rxqaddr[sky2->port],Q_CSR ), + (features &NETIF_F_RXCSUM ) + ?BMU_ENA_RX_CHKSUM :BMU_DIS_RX_CHKSUM ); }if (changed &NETIF_F_RXHASH )
drivers/net/usb/ipheth.c +5 -0
@@ -59,6 +59,7 @@#define USB_PRODUCT_IPHONE_3G 0x1292#define USB_PRODUCT_IPHONE_3GS 0x1294#define USB_PRODUCT_IPHONE_4 0x1297 +#define USB_PRODUCT_IPAD 0x129a#define USB_PRODUCT_IPHONE_4_VZW 0x129c#define USB_PRODUCT_IPHONE_4S 0x12a0
@@ -101,6 +102,10 @@ static struct usb_device_id ipheth_table[] = { IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS, IPHETH_USBINTF_PROTO) }, { USB_DEVICE_AND_INTERFACE_INFO( +USB_VENDOR_APPLE ,USB_PRODUCT_IPAD , +IPHETH_USBINTF_CLASS ,IPHETH_USBINTF_SUBCLASS , + IPHETH_USBINTF_PROTO) }, + { USB_DEVICE_AND_INTERFACE_INFO(USB_VENDOR_APPLE ,USB_PRODUCT_IPHONE_4_VZW ,IPHETH_USBINTF_CLASS ,IPHETH_USBINTF_SUBCLASS , IPHETH_USBINTF_PROTO) },
drivers/net/wireless/ath/ath9k/hw.c +14 -2
@@ -530,7 +530,7 @@ static int __ath9k_hw_init(struct ath_hw *ah)if (ah->config.serialize_regmode ==SER_REG_MODE_AUTO ) {if (ah->hw_version.macVersion ==AR_SREV_VERSION_5416_PCI || - ((AR_SREV_9160 (ah) ||AR_SREV_9280 (ah)) && + ((AR_SREV_9160 (ah) ||AR_SREV_9280 (ah) ||AR_SREV_9287 (ah)) && !ah->is_pciexpress)) { ah->config.serialize_regmode =SER_REG_MODE_ON ;
@@ -682,13 +682,25 @@ static void ath9k_hw_init_qos(struct ath_hw *ah)u32 ar9003_get_pll_sqsum_dvc (struct ath_hw *ah) { +struct ath_common *common =ath9k_hw_common (ah); +int i =0 ; +REG_CLR_BIT (ah,PLL3 ,PLL3_DO_MEAS_MASK );udelay (100 );REG_SET_BIT (ah,PLL3 ,PLL3_DO_MEAS_MASK ); -while ((REG_READ (ah,PLL4 ) &PLL4_MEAS_DONE ) ==0 ) +while ((REG_READ (ah,PLL4 ) &PLL4_MEAS_DONE ) ==0 ) { +udelay (100 ); +if (WARN_ON_ONCE (i >=100 )) { +ath_err (common,"PLL4 meaurement not done\n" ); +break ; + } + + i++; + } +return (REG_READ (ah,PLL3 ) &SQSUM_DVC_MASK ) >>3 ; }EXPORT_SYMBOL (ar9003_get_pll_sqsum_dvc);
drivers/net/wireless/ath/ath9k/main.c +9 -0
@@ -648,6 +648,15 @@ void ath_hw_pll_work(struct work_struct *work) hw_pll_work.work);u32 pll_sqsum; +/* +* ensure that the PLL WAR is executed only +* after the STA is associated (or) if the +* beaconing had started in interfaces that +* uses beacons. +*/ +if (!(sc->sc_flags &SC_OP_BEACONS )) +return ; +if (AR_SREV_9485 (sc->sc_ah)) {ath9k_ps_wakeup (sc);
drivers/net/wireless/mwifiex/11n_rxreorder.c +3 -2
@@ -267,7 +267,8 @@ mwifiex_11n_create_rx_reorder_tbl(struct mwifiex_private *priv, u8 *ta,else last_seq = priv->rx_seq[tid]; -if (last_seq >= new_node->start_win) +if (last_seq !=MWIFIEX_DEF_11N_RX_SEQ_NUM && + last_seq >= new_node->start_win) new_node->start_win = last_seq +1 ; new_node->win_size = win_size;
@@ -612,5 +613,5 @@ void mwifiex_11n_cleanup_reorder_tbl(struct mwifiex_private *priv)spin_unlock_irqrestore (&priv->rx_reorder_tbl_lock, flags);INIT_LIST_HEAD (&priv->rx_reorder_tbl_ptr); -memset (priv->rx_seq,0 ,sizeof (priv->rx_seq)); +mwifiex_reset_11n_rx_seq_num (priv); }
drivers/net/wireless/mwifiex/11n_rxreorder.h +7 -0
@@ -37,6 +37,13 @@#define ADDBA_RSP_STATUS_ACCEPT 0 +#define MWIFIEX_DEF_11N_RX_SEQ_NUM 0xffff + +static inline void mwifiex_reset_11n_rx_seq_num (struct mwifiex_private *priv) +{ +memset (priv->rx_seq,0xff ,sizeof (priv->rx_seq)); +} + int mwifiex_11n_rx_reorder_pkt(struct mwifiex_private *, u16 seqNum, u16 tid, u8 *ta,
drivers/net/wireless/mwifiex/wmm.c +2 -0
@@ -406,6 +406,8 @@ mwifiex_wmm_init(struct mwifiex_adapter *adapter) priv->add_ba_param.tx_win_size =MWIFIEX_AMPDU_DEF_TXWINSIZE ; priv->add_ba_param.rx_win_size =MWIFIEX_AMPDU_DEF_RXWINSIZE ; +mwifiex_reset_11n_rx_seq_num (priv); +atomic_set (&priv->wmm.tx_pkts_queued,0 );atomic_set (&priv->wmm.highest_queued_prio,HIGH_PRIO_TID ); }
drivers/net/wireless/rtl818x/rtl8187/leds.c +1 -1
@@ -117,7 +117,7 @@ static void rtl8187_led_brightness_set(struct led_classdev *led_dev, radio_on = true; }else if (radio_on) { radio_on = false; -cancel_delayed_work_sync (&priv->led_on); +cancel_delayed_work (&priv->led_on);ieee80211_queue_delayed_work (hw, &priv->led_off,0 ); } }else if (radio_on) {
drivers/oprofile/oprofile_perf.c +1 -1
@@ -25,7 +25,7 @@ static int oprofile_perf_enabled;static DEFINE_MUTEX (oprofile_perf_mutex);static struct op_counter_config *counter_config; -static struct perf_event **perf_events[nr_cpumask_bits]; +static struct perf_event **perf_events[NR_CPUS ];static int num_counters;/*
drivers/pci/pci-driver.c +12 -0
@@ -726,6 +726,18 @@ static int pci_pm_suspend_noirq(struct device *dev)pci_pm_set_unknown_state (pci_dev); +/* +* Some BIOSes from ASUS have a bug: If a USB EHCI host controller's +* PCI COMMAND register isn't 0, the BIOS assumes that the controller +* hasn't been quiesced and tries to turn it off. If the controller +* is already in D3, this can hang or cause memory corruption. +* +* Since the value of the COMMAND register doesn't matter once the +* device has been suspended, we can safely set it to 0 here. +*/ +if (pci_dev->class ==PCI_CLASS_SERIAL_USB_EHCI ) +pci_write_config_word (pci_dev,PCI_COMMAND ,0 ); +return 0 ; }
drivers/pci/pci.c +0 -5
@@ -1682,11 +1682,6 @@ int pci_prepare_to_sleep(struct pci_dev *dev)if (target_state ==PCI_POWER_ERROR )return -EIO ; -/* Some devices mustn't be in D3 during system sleep */ -if (target_state == PCI_D3hot && - (dev->dev_flags &PCI_DEV_FLAGS_NO_D3_DURING_SLEEP )) -return 0 ; -pci_enable_wake (dev, target_state,device_may_wakeup (&dev->dev)); error =pci_set_power_state (dev, target_state);
drivers/pci/quirks.c +0 -26
@@ -2856,32 +2856,6 @@ static void __devinit disable_igfx_irq(struct pci_dev *dev)DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_INTEL ,0x0102 , disable_igfx_irq);DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_INTEL ,0x010a , disable_igfx_irq); -/* -* The Intel 6 Series/C200 Series chipset's EHCI controllers on many -* ASUS motherboards will cause memory corruption or a system crash -* if they are in D3 while the system is put into S3 sleep. -*/ -static void __devinit asus_ehci_no_d3 (struct pci_dev *dev) -{ -const char *sys_info; -static const char good_Asus_board[] ="P8Z68-V" ; - -if (dev->dev_flags &PCI_DEV_FLAGS_NO_D3_DURING_SLEEP ) -return ; -if (dev->subsystem_vendor !=PCI_VENDOR_ID_ASUSTEK ) -return ; - sys_info =dmi_get_system_info (DMI_BOARD_NAME ); -if (sys_info &&memcmp (sys_info, good_Asus_board, -sizeof (good_Asus_board) -1 ) ==0 ) -return ; - -dev_info (&dev->dev,"broken D3 during system sleep on ASUS\n" ); - dev->dev_flags |=PCI_DEV_FLAGS_NO_D3_DURING_SLEEP ; -device_set_wakeup_capable (&dev->dev, false); -} -DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_INTEL ,0x1c26 , asus_ehci_no_d3); -DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_INTEL ,0x1c2d , asus_ehci_no_d3); -static void pci_do_fixups (struct pci_dev *dev,struct pci_fixup *f,struct pci_fixup *end) {
drivers/rtc/rtc-mxc.c +3 -2
@@ -191,10 +191,11 @@ static irqreturn_t mxc_rtc_interrupt(int irq, void *dev_id)struct platform_device *pdev = dev_id;struct rtc_plat_data *pdata =platform_get_drvdata (pdev);void __iomem *ioaddr = pdata->ioaddr; +unsigned long flags;u32 status;u32 events =0 ; -spin_lock_irq (&pdata->rtc->irq_lock); +spin_lock_irqsave (&pdata->rtc->irq_lock, flags); status =readw (ioaddr +RTC_RTCISR ) &readw (ioaddr +RTC_RTCIENR );/* clear interrupt sources */ writew (status, ioaddr +RTC_RTCISR );
@@ -217,7 +218,7 @@ static irqreturn_t mxc_rtc_interrupt(int irq, void *dev_id)rtc_update_alarm (&pdev->dev, &pdata->g_rtc_alarm);rtc_update_irq (pdata->rtc,1 , events); -spin_unlock_irq (&pdata->rtc->irq_lock); +spin_unlock_irqrestore (&pdata->rtc->irq_lock, flags);return IRQ_HANDLED ; }
drivers/target/tcm_fc/tfc_sess.c +2 -1
@@ -64,7 +64,8 @@ static struct ft_tport *ft_tport_create(struct fc_lport *lport)struct ft_tport *tport;int i; - tport =rcu_dereference (lport->prov[FC_TYPE_FCP ]); + tport =rcu_dereference_protected (lport->prov[FC_TYPE_FCP ], +lockdep_is_held (&ft_lport_lock));if (tport && tport->tpg)return tport;
drivers/usb/class/cdc-wdm.c +2 -0
@@ -457,6 +457,8 @@ retry: goto retry; }if (!desc->reslength) {/* zero length read */ +dev_dbg (&desc->intf->dev,"%s: zero length - clearing WDM_READ\n" , __func__); +clear_bit (WDM_READ , &desc->flags);spin_unlock_irq (&desc->iuspin); goto retry; }
drivers/usb/host/pci-quirks.c +13 -0
@@ -755,6 +755,7 @@ EXPORT_SYMBOL_GPL(usb_is_intel_switchable_xhci);*/ void usb_enable_xhci_ports (struct pci_dev *xhci_pdev) { +#if defined(CONFIG_USB_XHCI_HCD ) || defined(CONFIG_USB_XHCI_HCD_MODULE )u32 ports_available; ports_available =0xffffffff ;
@@ -782,6 +783,18 @@ void usb_enable_xhci_ports(struct pci_dev *xhci_pdev) &ports_available);dev_dbg (&xhci_pdev->dev,"USB 2.0 ports that are now switched over " "to xHCI: 0x%x\n" , ports_available); +#else +/* Don't switchover the ports if the user hasn't compiled the xHCI +* driver. Otherwise they will see "dead" USB ports that don't power +* the devices. +*/ +dev_warn (&xhci_pdev->dev, +"CONFIG_USB_XHCI_HCD is turned off, " +"defaulting to EHCI.\n" ); +dev_warn (&xhci_pdev->dev, +"USB 3.0 devices will work at USB 2.0 speeds.\n" ); +#endif /* CONFIG_USB_XHCI_HCD || CONFIG_USB_XHCI_HCD_MODULE */ + }EXPORT_SYMBOL_GPL (usb_enable_xhci_ports);
drivers/usb/serial/cp210x.c +11 -0
@@ -93,6 +93,7 @@ static const struct usb_device_id id_table[] = { { USB_DEVICE(0x10C4, 0x814B) }, /* West Mountain Radio RIGtalk */ { USB_DEVICE(0x10C4, 0x8156) }, /* B&G H3000 link cable */ { USB_DEVICE(0x10C4, 0x815E) }, /* Helicomm IP-Link 1220-DVM */ + { USB_DEVICE(0x10C4, 0x815F) }, /* Timewave HamLinkUSB */ { USB_DEVICE(0x10C4, 0x818B) }, /* AVIT Research USB to TTL */ { USB_DEVICE(0x10C4, 0x819F) }, /* MJS USB Toslink Switcher */ { USB_DEVICE(0x10C4, 0x81A6) }, /* ThinkOptics WavIt */
@@ -134,7 +135,13 @@ static const struct usb_device_id id_table[] = { { USB_DEVICE(0x10CE, 0xEA6A) }, /* Silicon Labs MobiData GPRS USB Modem 100EU */ { USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */ { USB_DEVICE(0x1555, 0x0004) }, /* Owen AC4 USB-RS485 Converter */ + { USB_DEVICE(0x166A, 0x0201) }, /* Clipsal 5500PACA C-Bus Pascal Automation Controller */ + { USB_DEVICE(0x166A, 0x0301) }, /* Clipsal 5800PC C-Bus Wireless PC Interface */ { USB_DEVICE(0x166A, 0x0303) }, /* Clipsal 5500PCU C-Bus USB interface */ + { USB_DEVICE(0x166A, 0x0304) }, /* Clipsal 5000CT2 C-Bus Black and White Touchscreen */ + { USB_DEVICE(0x166A, 0x0305) }, /* Clipsal C-5000CT2 C-Bus Spectrum Colour Touchscreen */ + { USB_DEVICE(0x166A, 0x0401) }, /* Clipsal L51xx C-Bus Architectural Dimmer */ + { USB_DEVICE(0x166A, 0x0101) }, /* Clipsal 5560884 C-Bus Multi-room Audio Matrix Switcher */ { USB_DEVICE(0x16D6, 0x0001) }, /* Jablotron serial interface */ { USB_DEVICE(0x16DC, 0x0010) }, /* W-IE-NE-R Plein & Baus GmbH PL512 Power Supply */ { USB_DEVICE(0x16DC, 0x0011) }, /* W-IE-NE-R Plein & Baus GmbH RCM Remote Control for MARATON Power Supply */
@@ -146,7 +153,11 @@ static const struct usb_device_id id_table[] = { { USB_DEVICE(0x1843, 0x0200) }, /* Vaisala USB Instrument Cable */ { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */ { USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */ + { USB_DEVICE(0x1E29, 0x0102) }, /* Festo CPX-USB */ + { USB_DEVICE(0x1E29, 0x0501) }, /* Festo CMSP */ { USB_DEVICE(0x3195, 0xF190) }, /* Link Instruments MSO-19 */ + { USB_DEVICE(0x3195, 0xF280) }, /* Link Instruments MSO-28 */ + { USB_DEVICE(0x3195, 0xF281) }, /* Link Instruments MSO-28 */ { USB_DEVICE(0x413C, 0x9500) }, /* DW700 GPS USB interface */ { } /* Terminating Entry */ };
drivers/usb/serial/option.c +34 -0
@@ -236,6 +236,7 @@ static void option_instat_callback(struct urb *urb);#define NOVATELWIRELESS_PRODUCT_G1 0xA001#define NOVATELWIRELESS_PRODUCT_G1_M 0xA002#define NOVATELWIRELESS_PRODUCT_G2 0xA010 +#define NOVATELWIRELESS_PRODUCT_MC551 0xB001/* AMOI PRODUCTS */ #define AMOI_VENDOR_ID 0x1614
@@ -496,6 +497,19 @@ static void option_instat_callback(struct urb *urb);/* MediaTek products */ #define MEDIATEK_VENDOR_ID 0x0e8d +#define MEDIATEK_PRODUCT_DC_1COM 0x00a0 +#define MEDIATEK_PRODUCT_DC_4COM 0x00a5 +#define MEDIATEK_PRODUCT_DC_5COM 0x00a4 +#define MEDIATEK_PRODUCT_7208_1COM 0x7101 +#define MEDIATEK_PRODUCT_7208_2COM 0x7102 +#define MEDIATEK_PRODUCT_FP_1COM 0x0003 +#define MEDIATEK_PRODUCT_FP_2COM 0x0023 +#define MEDIATEK_PRODUCT_FPDC_1COM 0x0043 +#define MEDIATEK_PRODUCT_FPDC_2COM 0x0033 + +/* Cellient products */ +#define CELLIENT_VENDOR_ID 0x2692 +#define CELLIENT_PRODUCT_MEN200 0x9005/* some devices interfaces need special handling due to a number of reasons */ enum option_blacklist_reason {
@@ -549,6 +563,10 @@ static const struct option_blacklist_info net_intf1_blacklist = { .reserved = BIT(1), }; +static const struct option_blacklist_info net_intf2_blacklist = { + .reserved =BIT (2 ), +}; +static const struct option_blacklist_info net_intf3_blacklist = { .reserved =BIT (3 ), };
@@ -734,6 +752,8 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_G1) }, { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_G1_M) }, { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_G2) }, +/* Novatel Ovation MC551 a.k.a. Verizon USB551L */ + { USB_DEVICE_AND_INTERFACE_INFO(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC551, 0xff, 0xff, 0xff) }, { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01) }, { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01A) },
@@ -1090,6 +1110,8 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1298, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1299, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1300, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1402, 0xff, 0xff, 0xff), + .driver_info = (kernel_ulong_t)&net_intf2_blacklist }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x2002, 0xff, 0xff, 0xff), .driver_info = (kernel_ulong_t)&zte_k3765_z_blacklist }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x2003, 0xff, 0xff, 0xff) },
@@ -1231,6 +1253,18 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, 0x00a1, 0xff, 0x02, 0x01) }, { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, 0x00a2, 0xff, 0x00, 0x00) }, { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, 0x00a2, 0xff, 0x02, 0x01) }, /* MediaTek MT6276M modem & app port */ + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_1COM, 0x0a, 0x00, 0x00) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_5COM, 0xff, 0x02, 0x01) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_5COM, 0xff, 0x00, 0x00) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM, 0xff, 0x02, 0x01) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM, 0xff, 0x00, 0x00) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_7208_1COM, 0x02, 0x00, 0x00) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_7208_2COM, 0x02, 0x02, 0x01) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_FP_1COM, 0x0a, 0x00, 0x00) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_FP_2COM, 0x0a, 0x00, 0x00) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_FPDC_1COM, 0x0a, 0x00, 0x00) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_FPDC_2COM, 0x0a, 0x00, 0x00) }, + { USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) }, { } /* Terminating entry */ };MODULE_DEVICE_TABLE (usb, option_ids);
drivers/vhost/vhost.c +2 -0
@@ -217,6 +217,8 @@ static int vhost_worker(void *data)if (work) {__set_current_state (TASK_RUNNING ); work->fn (work); +if (need_resched ()) +schedule (); }else schedule ();
fs/btrfs/tree-log.c +6 -0
@@ -691,6 +691,8 @@ static noinline int drop_one_dir_item(struct btrfs_trans_handle *trans,kfree (name);iput (inode); + +btrfs_run_delayed_items (trans, root);return ret; }
@@ -896,6 +898,7 @@ again: ret =btrfs_unlink_inode (trans, root, dir, inode, victim_name, victim_name_len); +btrfs_run_delayed_items (trans, root); }kfree (victim_name); ptr = (unsigned long )(victim_ref +1 ) + victim_name_len;
@@ -1476,6 +1479,9 @@ again: ret =btrfs_unlink_inode (trans, root, dir, inode, name, name_len);BUG_ON (ret); + +btrfs_run_delayed_items (trans, root); +kfree (name);iput (inode);
fs/ecryptfs/kthread.c +1 -1
@@ -149,7 +149,7 @@ int ecryptfs_privileged_open(struct file **lower_file, (*lower_file) =dentry_open (lower_dentry, lower_mnt, flags, cred);if (!IS_ERR (*lower_file)) goto out; -if (flags &O_RDONLY ) { +if ((flags &O_ACCMODE ) ==O_RDONLY ) { rc =PTR_ERR ((*lower_file)); goto out; }
fs/ecryptfs/miscdev.c +29 -19
99 lines not on this page · raw message
fs/nilfs2/gcinode.c +2 -0
@@ -191,6 +191,8 @@ void nilfs_remove_all_gcinodes(struct the_nilfs *nilfs)while (!list_empty (head)) { ii = list_first_entry(head, struct nilfs_inode_info, i_dirty);list_del_init (&ii->i_dirty); +truncate_inode_pages (&ii->vfs_inode.i_data,0 ); +nilfs_btnode_cache_clear (&ii->i_btnode_cache);iput (&ii->vfs_inode); } }
fs/nilfs2/segment.c +2 -0
@@ -2309,6 +2309,8 @@ nilfs_remove_written_gcinodes(struct the_nilfs *nilfs, struct list_head *head)if (!test_bit (NILFS_I_UPDATED , &ii->i_state))continue ;list_del_init (&ii->i_dirty); +truncate_inode_pages (&ii->vfs_inode.i_data,0 ); +nilfs_btnode_cache_clear (&ii->i_btnode_cache);iput (&ii->vfs_inode); } }
fs/open.c +3 -3
@@ -396,10 +396,10 @@ SYSCALL_DEFINE1(fchdir, unsigned int, fd) {struct file *file;struct inode *inode; -int error; +int error, fput_needed; error = -EBADF ; - file =fget (fd); + file =fget_raw_light (fd, &fput_needed);if (!file) goto out;
@@ -413,7 +413,7 @@ SYSCALL_DEFINE1(fchdir, unsigned int, fd)if (!error)set_fs_pwd (current->fs, &file->f_path); out_putf: -fput (file); +fput_light (file, fput_needed); out:return error; }
fs/ramfs/file-nommu.c +1 -0
@@ -110,6 +110,7 @@ int ramfs_nommu_expand_for_mapping(struct inode *inode, size_t newsize)/* prevent the page from being discarded on memory pressure */ SetPageDirty (page); +SetPageUptodate (page);unlock_page (page);put_page (page);
fs/udf/super.c +64 -38
139 lines not on this page · raw message
include/linux/mmzone.h +1 -1
@@ -633,7 +633,7 @@ typedef struct pglist_data {range, including holes */ int node_id;wait_queue_head_t kswapd_wait; -struct task_struct *kswapd; +struct task_struct *kswapd;/* Protected by lock_memory_hotplug() */ int kswapd_max_order;enum zone_type classzone_idx; } pg_data_t;
include/linux/pci.h +0 -2
@@ -174,8 +174,6 @@ enum pci_dev_flags {PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = (__force pci_dev_flags_t )1 ,/* Device configuration is irrevocably lost if disabled into D3 */ PCI_DEV_FLAGS_NO_D3 = (__force pci_dev_flags_t) 2, -/* Device causes system crash if in D3 during S3 sleep */ - PCI_DEV_FLAGS_NO_D3_DURING_SLEEP = (__force pci_dev_flags_t) 8, }; enum pci_irq_reroute_variant {
include/net/cipso_ipv4.h +28 -1
@@ -42,6 +42,7 @@#include <net/netlabel.h> #include <net/request_sock.h> #include <asm/atomic.h> +#include <asm/unaligned.h> /* known doi values */ #define CIPSO_V4_DOI_UNKNOWN 0x00000000
@@ -285,7 +286,33 @@ static inline int cipso_v4_skbuff_getattr(const struct sk_buff *skb,static inline int cipso_v4_validate (const struct sk_buff *skb,unsigned char **option) { -return -ENOSYS ; +unsigned char *opt = *option; +unsigned char err_offset =0 ; +u8 opt_len = opt[1 ]; +u8 opt_iter; + +if (opt_len <8 ) { + err_offset =1 ; + goto out; + } + +if (get_unaligned_be32 (&opt[2 ]) ==0 ) { + err_offset =2 ; + goto out; + } + +for (opt_iter =6 ; opt_iter < opt_len;) { +if (opt[opt_iter +1 ] > (opt_len - opt_iter)) { + err_offset = opt_iter +1 ; + goto out; + } + opt_iter += opt[opt_iter +1 ]; + } + +out: + *option = opt + err_offset; +return err_offset; + }#endif /* CONFIG_NETLABEL */
include/net/sch_generic.h +5 -2
@@ -219,13 +219,16 @@ struct tcf_proto {struct qdisc_skb_cb {unsigned int pkt_len; -unsigned char data[24 ]; +u16 bond_queue_mapping; +u16 _pad; +unsigned char data[20 ]; };static inline void qdisc_cb_private_validate (const struct sk_buff *skb,int sz) {struct qdisc_skb_cb *qcb; -BUILD_BUG_ON (sizeof (skb->cb) <sizeof (unsigned int ) + sz); + +BUILD_BUG_ON (sizeof (skb->cb) < offsetof(struct qdisc_skb_cb , data) + sz);BUILD_BUG_ON (sizeof (qcb->data) < sz); }
kernel/trace/trace.c +2 -0
@@ -2432,10 +2432,12 @@ tracing_cpumask_write(struct file *filp, const char __user *ubuf,if (cpumask_test_cpu (cpu, tracing_cpumask) && !cpumask_test_cpu (cpu, tracing_cpumask_new)) {atomic_inc (&global_trace.data[cpu]->disabled); +ring_buffer_record_disable_cpu (global_trace.buffer, cpu); }if (!cpumask_test_cpu (cpu, tracing_cpumask) &&cpumask_test_cpu (cpu, tracing_cpumask_new)) {atomic_dec (&global_trace.data[cpu]->disabled); +ring_buffer_record_enable_cpu (global_trace.buffer, cpu); } }arch_spin_unlock (&ftrace_max_lock);
mm/compaction.c +4 -1
@@ -596,8 +596,11 @@ static int compact_zone(struct zone *zone, struct compact_control *cc)if (err) {putback_lru_pages (&cc->migratepages); cc->nr_migratepages =0 ; +if (err == -ENOMEM ) { + ret =COMPACT_PARTIAL ; + goto out; + } } - } out:
mm/madvise.c +13 -3
@@ -13,6 +13,7 @@#include <linux/hugetlb.h> #include <linux/sched.h> #include <linux/ksm.h> +#include <linux/file.h> /* * Any behaviour which results in changes to the vma->vm_flags needs to
@@ -197,14 +198,16 @@ static long madvise_remove(struct vm_area_struct *vma,struct address_space *mapping;loff_t offset, endoff;int error; +struct file *f; *prev =NULL ;/* tell sys_madvise we drop mmap_sem */ if (vma->vm_flags & (VM_LOCKED |VM_NONLINEAR |VM_HUGETLB ))return -EINVAL ; -if (!vma->vm_file || !vma->vm_file->f_mapping - || !vma->vm_file->f_mapping->host) { + f = vma->vm_file; + +if (!f || !f->f_mapping || !f->f_mapping->host) {return -EINVAL ; }
@@ -218,9 +221,16 @@ static long madvise_remove(struct vm_area_struct *vma, endoff = (loff_t)(end - vma->vm_start -1 ) + ((loff_t )vma->vm_pgoff <<PAGE_SHIFT ); -/* vmtruncate_range needs to take i_mutex and i_alloc_sem */ +/* +* vmtruncate_range may need to take i_mutex and i_alloc_sem. +* We need to explicitly grab a reference because the vma (and +* hence the vma's reference to the file) can go away as soon as +* we drop mmap_sem. +*/ +get_file (f);up_read (¤t->mm->mmap_sem); error =vmtruncate_range (mapping->host, offset, endoff); +fput (f);down_read (¤t->mm->mmap_sem);return error; }
mm/vmscan.c +5 -2
@@ -2952,14 +2952,17 @@ int kswapd_run(int nid) }/* -* Called by memory hotplug when all memory in a node is offlined. +* Called by memory hotplug when all memory in a node is offlined. Caller must +* hold lock_memory_hotplug(). */ void kswapd_stop (int nid) {struct task_struct *kswapd =NODE_DATA (nid)->kswapd; -if (kswapd) +if (kswapd) {kthread_stop (kswapd); +NODE_DATA (nid)->kswapd =NULL ; + } }static int __init kswapd_init (void )
net/bridge/br_if.c +1 -0
@@ -241,6 +241,7 @@ int br_add_bridge(struct net *net, const char *name)return -ENOMEM ;dev_net_set (dev, net); + dev->rtnl_link_ops = &br_link_ops; res =register_netdev (dev);if (res)
net/bridge/br_netlink.c +1 -1
@@ -203,7 +203,7 @@ static int br_validate(struct nlattr *tb[], struct nlattr *data[])return 0 ; } -static struct rtnl_link_ops br_link_ops__read_mostly = { +struct rtnl_link_ops br_link_ops__read_mostly = { .kind ="bridge" , .priv_size =sizeof (struct net_bridge ), .setup = br_dev_setup,
net/bridge/br_private.h +1 -0
@@ -529,6 +529,7 @@ extern int (*br_fdb_test_addr_hook)(struct net_device *dev, unsigned char *addr)#endif /* br_netlink.c */ +extern struct rtnl_link_ops br_link_ops;extern int br_netlink_init (void );extern void br_netlink_fini (void );extern void br_ifinfo_notify (int event,struct net_bridge_port *port);
net/core/ethtool.c +1 -0
@@ -1964,6 +1964,7 @@ int dev_ethtool(struct net *net, struct ifreq *ifr)case ETHTOOL_GRXCSUM :case ETHTOOL_GTXCSUM :case ETHTOOL_GSG : +case ETHTOOL_GSSET_INFO :case ETHTOOL_GSTRINGS :case ETHTOOL_GTSO :case ETHTOOL_GPERMADDR :
net/core/netpoll.c +6 -5
@@ -357,22 +357,23 @@ EXPORT_SYMBOL(netpoll_send_skb_on_dev);void netpoll_send_udp (struct netpoll *np,const char *msg,int len) { -int total_len, eth_len, ip_len, udp_len; +int total_len, ip_len, udp_len;struct sk_buff *skb;struct udphdr *udph;struct iphdr *iph;struct ethhdr *eth; udp_len = len +sizeof (*udph); - ip_len = eth_len = udp_len +sizeof (*iph); - total_len = eth_len +ETH_HLEN +NET_IP_ALIGN ; + ip_len = udp_len +sizeof (*iph); + total_len = ip_len +LL_RESERVED_SPACE (np->dev); - skb =find_skb (np, total_len, total_len - len); + skb =find_skb (np, total_len + np->dev->needed_tailroom, + total_len - len);if (!skb)return ;skb_copy_to_linear_data (skb, msg, len); - skb->len += len; +skb_put (skb, len);skb_push (skb,sizeof (*udph));skb_reset_transport_header (skb);
net/core/sock.c +5 -2
@@ -1501,6 +1501,11 @@ struct sk_buff *sock_alloc_send_pskb(struct sock *sk, unsigned long header_len,gfp_t gfp_mask;long timeo;int err; +int npages = (data_len + (PAGE_SIZE -1 )) >>PAGE_SHIFT ; + + err = -EMSGSIZE ; +if (npages >MAX_SKB_FRAGS ) + goto failure; gfp_mask = sk->sk_allocation;if (gfp_mask & __GFP_WAIT)
@@ -1519,14 +1524,12 @@ struct sk_buff *sock_alloc_send_pskb(struct sock *sk, unsigned long header_len,if (atomic_read (&sk->sk_wmem_alloc) < sk->sk_sndbuf) { skb =alloc_skb (header_len, gfp_mask);if (skb) { -int npages;int i;/* No pages, we're done... */ if (!data_len)break ; - npages = (data_len + (PAGE_SIZE -1 )) >>PAGE_SHIFT ; skb->truesize += data_len;skb_shinfo (skb)->nr_frags = npages;for (i =0 ; i < npages; i++) {
net/ipv6/route.c +31 -10
87 lines not on this page · raw message
net/l2tp/l2tp_eth.c +2 -0
@@ -167,6 +167,7 @@ static void l2tp_eth_delete(struct l2tp_session *session)if (dev) {unregister_netdev (dev); spriv->dev =NULL ; +module_put (THIS_MODULE ); } } }
@@ -254,6 +255,7 @@ static int l2tp_eth_create(struct net *net, u32 tunnel_id, u32 session_id, u32 pif (rc <0 ) goto out_del_dev; +__module_get (THIS_MODULE );/* Must be done after register_netdev() */ strlcpy (session->ifname, dev->name,IFNAMSIZ );
net/mac80211/rx.c +4 -1
@@ -2291,7 +2291,7 @@ ieee80211_rx_h_action_return(struct ieee80211_rx_data *rx)* frames that we didn't handle, including returning unknown * ones. For all other modes we will return them to the sender, * setting the 0x80 bit in the action category, as required by -* 802.11-2007 7.3.1.11. +* 802.11-2012 9.24.4. * Newer versions of hostapd shall also use the management frame * registration mechanisms, but older ones still use cooked * monitor interfaces so push all frames there.
@@ -2301,6 +2301,9 @@ ieee80211_rx_h_action_return(struct ieee80211_rx_data *rx) sdata->vif.type == NL80211_IFTYPE_AP_VLAN))return RX_DROP_MONITOR ; +if (is_multicast_ether_addr (mgmt->da)) +return RX_DROP_MONITOR ; +/* do not return rejected action frames */ if (mgmt->u.action.category &0x80 )return RX_DROP_UNUSABLE ;
net/wireless/reg.c +1 -1
@@ -1358,7 +1358,7 @@ static void reg_set_request_processed(void)spin_unlock (®_requests_lock);if (last_request->initiator ==NL80211_REGDOM_SET_BY_USER ) -cancel_delayed_work_sync (®_timeout); +cancel_delayed_work (®_timeout);if (need_more_processing)schedule_work (®_work);
sound/pci/hda/patch_realtek.c +1 -0
@@ -20132,6 +20132,7 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = { { .id = 0x10ec0272, .name = "ALC272", .patch = patch_alc662 }, { .id = 0x10ec0275, .name = "ALC275", .patch = patch_alc269 }, { .id = 0x10ec0276, .name = "ALC276", .patch = patch_alc269 }, + { .id = 0x10ec0280, .name = "ALC280", .patch = patch_alc269 }, { .id = 0x10ec0861, .rev = 0x100340, .name = "ALC660", .patch = patch_alc861 }, { .id = 0x10ec0660, .name = "ALC660-VD", .patch = patch_alc861vd },
sound/soc/codecs/tlv320aic3x.c +1 -3
@@ -949,9 +949,7 @@ static int aic3x_hw_params(struct snd_pcm_substream *substream, } found: - data =snd_soc_read (codec,AIC3X_PLL_PROGA_REG ); -snd_soc_write (codec,AIC3X_PLL_PROGA_REG , - data | (pll_p <<PLLP_SHIFT )); +snd_soc_update_bits (codec,AIC3X_PLL_PROGA_REG ,PLLP_MASK , pll_p);snd_soc_write (codec,AIC3X_OVRF_STATUS_AND_PLLR_REG , pll_r <<PLLR_SHIFT );snd_soc_write (codec,AIC3X_PLL_PROGB_REG , pll_j <<PLLJ_SHIFT );
sound/soc/codecs/tlv320aic3x.h +1 -0
@@ -166,6 +166,7 @@/* PLL registers bitfields */ #define PLLP_SHIFT 0 +#define PLLP_MASK 7#define PLLQ_SHIFT 3#define PLLR_SHIFT 0#define PLLJ_SHIFT 2