Linux 3.4.6
I'm announcing the release of the 3.4.6 kernel.
All users of the 3.4 kernel series must upgrade.
The updated 3.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-3.4.y
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/plat-samsung/adc.c | 8 drivers/acpi/acpica/nspredef.c | 2 drivers/acpi/processor_core.c | 6 drivers/clk/clk.c | 9 drivers/hid/hid-apple.c | 6 drivers/hid/hid-core.c | 7 drivers/hid/hid-ids.h | 6 drivers/hwmon/it87.c | 2 drivers/input/joystick/xpad.c | 6 drivers/input/mouse/bcm5974.c | 20 + drivers/md/raid1.c | 3 drivers/media/dvb/dvb-core/dvbdev.c | 1 drivers/media/video/cx231xx/cx231xx-audio.c | 4 drivers/media/video/cx231xx/cx231xx-vbi.c | 2 drivers/mtd/nand/nandsim.c | 12 drivers/net/bonding/bond_debugfs.c | 2 drivers/net/bonding/bond_main.c | 9 drivers/net/ethernet/intel/e1000e/82571.c | 3 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 3 drivers/net/wireless/iwlegacy/4965-mac.c | 4 drivers/net/wireless/iwlegacy/common.c | 14 - drivers/net/wireless/rt2x00/rt2x00usb.c | 2 drivers/platform/x86/intel_ips.c | 22 + drivers/rpmsg/virtio_rpmsg_bus.c | 2 fs/buffer.c | 22 + fs/fifo.c | 9 fs/locks.c | 2 include/linux/Kbuild | 1 include/linux/hrtimer.h | 10 include/linux/sched.h | 8 kernel/hrtimer.c | 53 ++-- kernel/sched/core.c | 275 ++++++++++++++++------ kernel/sched/idle_task.c | 1 kernel/sched/sched.h | 2 kernel/time/tick-sched.c | 2 kernel/time/timekeeping.c | 64 ++++- net/mac80211/mlme.c | 6 net/wireless/util.c | 2 39 files changed, 459 insertions(+), 155 deletions(-)
Anders Kaseorg (1):
fifo: Do not restart open() if it already found a partner
Bob Moore (1):
ACPICA: Fix possible fault in return package object repair code
Dave Jones (1):
Remove easily user-triggerable BUG from generic_setlease
David Dillow (1):
media: cx231xx: don't DMA to random addresses
Deepak Sikri (1):
stmmac: Fix for nfs hang on multiple reboot
Eliad Peller (1):
mac80211: destroy assoc_data correctly if assoc fails
Emmanuel Grumbach (1):
iwlegacy: don't mess up the SCD when removing a key
Eric W. Biederman (2):
bonding: debugfs and network namespaces are incompatible
bonding: Manage /proc/net/bonding/ entries from the netdev events
Federico Fuga (1):
rpmsg: fix dependency on initialization order
Greg Kroah-Hartman (1):
Linux 3.4.6
Henrik Rydberg (1):
Input: bcm5974 - Add support for 2012 MacBook Pro Retina
Herton Ronaldo Krzesinski (1):
mtd: nandsim: don't open code a do_div helper
Ilia Katsnelson (1):
Input: xpad - add signature for Razer Onza Tournament Edition
Jean Delvare (1):
hwmon: (it87) Preserve configuration register bits on init
Jeff Moyer (1):
block: fix infinite loop in __getblk_slow
John Stultz (3):
hrtimer: Provide clock_was_set_delayed()
timekeeping: Fix leapsecond triggered load spike issue
hrtimer: Update hrtimer base offsets each hrtimer_interrupt
Michal Kazior (1):
cfg80211: check iface combinations only when iface is running
NeilBrown (1):
md/raid1: fix use-after-free bug in RAID1 data-check code.
Pawel Moll (1):
clk: Check parent for NULL in clk_change_rate
Peter Zijlstra (1):
sched/nohz: Rewrite and fix load-avg computation -- again
Ryan Bourgeois (1):
HID: add support for 2012 MacBook Pro Retina
Samuel Ortiz (1):
NFC: Export nfc.h to userland
Santosh Nayak (1):
media: dvb-core: Release semaphore on error path dvb_register_device()
Stanislaw Gruszka (2):
rt2x00usb: fix indexes ordering on RX queue kick
iwlegacy: always monitor for stuck queues
Takashi Iwai (1):
intel_ips: blacklist HP ProBook laptops
Thomas Gleixner (4):
timekeeping: Maintain ktime_t based offsets for hrtimers
hrtimers: Move lock held region in hrtimer_interrupt()
timekeeping: Provide hrtimer update function
timekeeping: Add missing update call in timekeeping_resume()
Thomas Renninger (1):
cpufreq / ACPI: Fix not loading acpi-cpufreq driver regression
Todd Poynor (1):
ARM: SAMSUNG: fix race in s3c_adc_start for ADC
Tushar Dave (1):
e1000e: Correct link check logic for 82571 serdes
Yuri Khan (2):
Input: xpad - handle all variations of Mad Catz Beat Pad
Input: xpad - add Andamiro Pump It Up pad
Makefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 3 PATCHLEVEL = 4 -SUBLEVEL = 5 +SUBLEVEL = 6 EXTRAVERSION = NAME = Saber-toothed Squirrel
arch/arm/plat-samsung/adc.c +5 -3
@@ -157,11 +157,13 @@ int s3c_adc_start(struct s3c_adc_client *client,return -EINVAL ; } -if (client->is_ts && adc->ts_pend) -return -EAGAIN ; -spin_lock_irqsave (&adc->lock, flags); +if (client->is_ts && adc->ts_pend) { +spin_unlock_irqrestore (&adc->lock, flags); +return -EAGAIN ; + } + client->channel = channel; client->nr_samples = nr_samples;
drivers/acpi/acpica/nspredef.c +1 -1
@@ -638,7 +638,7 @@ acpi_ns_check_package(struct acpi_predefined_data *data,/* Create the new outer package and populate it */ status = -acpi_ns_wrap_with_package (data, *elements, +acpi_ns_wrap_with_package (data, return_object, return_object_ptr);if (ACPI_FAILURE (status)) {return (status);
drivers/acpi/processor_core.c +4 -2
@@ -189,10 +189,12 @@ int acpi_get_cpuid(acpi_handle handle, int type, u32 acpi_id)* Processor (CPU3, 0x03, 0x00000410, 0x06) {} * } * -* Ignores apic_id and always return 0 for CPU0's handle. +* Ignores apic_id and always returns 0 for the processor +* handle with acpi id 0 if nr_cpu_ids is 1. +* This should be the case if SMP tables are not found. * Return -1 for other CPU's handle. */ -if (acpi_id ==0 ) +if (nr_cpu_ids <=1 && acpi_id ==0 )return acpi_id;else return apic_id;
drivers/clk/clk.c +6 -3
@@ -834,18 +834,21 @@ static void clk_change_rate(struct clk *clk) {struct clk *child;unsigned long old_rate; +unsigned long best_parent_rate =0 ;struct hlist_node *tmp; old_rate = clk->rate; +if (clk->parent) + best_parent_rate = clk->parent->rate; +if (clk->ops->set_rate) clk->ops->set_rate (clk->hw, clk->new_rate);if (clk->ops->recalc_rate) - clk->rate = clk->ops->recalc_rate (clk->hw, - clk->parent->rate); + clk->rate = clk->ops->recalc_rate (clk->hw, best_parent_rate);else - clk->rate = clk->parent->rate; + clk->rate = best_parent_rate;if (clk->notifier_count && old_rate != clk->rate)__clk_notify (clk,POST_RATE_CHANGE , old_rate, clk->rate);
drivers/hid/hid-apple.c +6 -0
@@ -514,6 +514,12 @@ static const struct hid_device_id apple_devices[] = { .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS), .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI), + .driver_data = APPLE_HAS_FN }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ISO), + .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS), + .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI), .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO),
drivers/hid/hid-core.c +7 -0
@@ -1379,6 +1379,9 @@ static const struct hid_device_id hid_have_special_driver[] = { { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI) }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO) }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ISO) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS) }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) },
@@ -1914,6 +1917,7 @@ static const struct hid_device_id hid_ignore_list[] = { { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MCT) }, { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_HYBRID) }, { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_HEATCONTROL) }, + { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_BEATPAD) }, { HID_USB_DEVICE(USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1024LS) }, { HID_USB_DEVICE(USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1208LS) }, { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICKIT1) },
@@ -2008,6 +2012,9 @@ static const struct hid_device_id hid_mouse_ignore_list[] = { { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI) }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO) }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ISO) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS) }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) }, { }
drivers/hid/hid-ids.h +6 -0
@@ -125,6 +125,9 @@#define USB_DEVICE_ID_APPLE_WELLSPRING6_ANSI 0x024c#define USB_DEVICE_ID_APPLE_WELLSPRING6_ISO 0x024d#define USB_DEVICE_ID_APPLE_WELLSPRING6_JIS 0x024e +#define USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI 0x0262 +#define USB_DEVICE_ID_APPLE_WELLSPRING7_ISO 0x0263 +#define USB_DEVICE_ID_APPLE_WELLSPRING7_JIS 0x0264#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI 0x0239#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO 0x023a#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS 0x023b
@@ -509,6 +512,9 @@#define USB_DEVICE_ID_CRYSTALTOUCH 0x0006#define USB_DEVICE_ID_CRYSTALTOUCH_DUAL 0x0007 +#define USB_VENDOR_ID_MADCATZ 0x0738 +#define USB_DEVICE_ID_MADCATZ_BEATPAD 0x4540 +#define USB_VENDOR_ID_MCC 0x09db#define USB_DEVICE_ID_MCC_PMD1024LS 0x0076#define USB_DEVICE_ID_MCC_PMD1208LS 0x007a
drivers/hwmon/it87.c +1 -1
@@ -2157,7 +2157,7 @@ static void __devinit it87_init_device(struct platform_device *pdev)/* Start monitoring */ it87_write_value (data,IT87_REG_CONFIG , - (it87_read_value (data,IT87_REG_CONFIG ) &0x36 ) + (it87_read_value (data,IT87_REG_CONFIG ) &0x3e ) | (update_vbat ?0x41 :0x01 )); }
drivers/input/joystick/xpad.c +5 -1
@@ -142,6 +142,7 @@ static const struct xpad_device { { 0x0c12, 0x880a, "Pelican Eclipse PL-2023", 0, XTYPE_XBOX }, { 0x0c12, 0x8810, "Zeroplus Xbox Controller", 0, XTYPE_XBOX }, { 0x0c12, 0x9902, "HAMA VibraX - *FAULTY HARDWARE*", 0, XTYPE_XBOX }, + { 0x0d2f, 0x0002, "Andamiro Pump It Up pad", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX }, { 0x0e4c, 0x1097, "Radica Gamester Controller", 0, XTYPE_XBOX }, { 0x0e4c, 0x2390, "Radica Games Jtech Controller", 0, XTYPE_XBOX }, { 0x0e6f, 0x0003, "Logic3 Freebird wireless Controller", 0, XTYPE_XBOX },
@@ -164,6 +165,7 @@ static const struct xpad_device { { 0x1bad, 0x0003, "Harmonix Rock Band Drumkit", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 }, { 0x0f0d, 0x0016, "Hori Real Arcade Pro.EX", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, { 0x0f0d, 0x000d, "Hori Fighting Stick EX2", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, + { 0x1689, 0xfd00, "Razer Onza Tournament Edition", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 }, { 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX }, { 0x0000, 0x0000, "Generic X-Box pad", 0, XTYPE_UNKNOWN } };
@@ -238,12 +240,14 @@ static struct usb_device_id xpad_table [] = {XPAD_XBOX360_VENDOR (0x045e ),/* Microsoft X-Box 360 controllers */ XPAD_XBOX360_VENDOR (0x046d ),/* Logitech X-Box 360 style controllers */ XPAD_XBOX360_VENDOR (0x0738 ),/* Mad Catz X-Box 360 controllers */ + { USB_DEVICE(0x0738, 0x4540) }, /* Mad Catz Beat Pad */XPAD_XBOX360_VENDOR (0x0e6f ),/* 0x0e6f X-Box 360 controllers */ XPAD_XBOX360_VENDOR (0x12ab ),/* X-Box 360 dance pads */ XPAD_XBOX360_VENDOR (0x1430 ),/* RedOctane X-Box 360 controllers */ XPAD_XBOX360_VENDOR (0x146b ),/* BigBen Interactive Controllers */ XPAD_XBOX360_VENDOR (0x1bad ),/* Harminix Rock Band Guitar and Drums */ - XPAD_XBOX360_VENDOR(0x0f0d), /* Hori Controllers */ +XPAD_XBOX360_VENDOR (0x0f0d ),/* Hori Controllers */ + XPAD_XBOX360_VENDOR(0x1689), /* Razer Onza */ { } };
drivers/input/mouse/bcm5974.c +20 -0
@@ -79,6 +79,10 @@#define USB_DEVICE_ID_APPLE_WELLSPRING5A_ANSI 0x0252#define USB_DEVICE_ID_APPLE_WELLSPRING5A_ISO 0x0253#define USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS 0x0254 +/* MacbookPro10,1 (unibody, June 2012) */ +#define USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI 0x0262 +#define USB_DEVICE_ID_APPLE_WELLSPRING7_ISO 0x0263 +#define USB_DEVICE_ID_APPLE_WELLSPRING7_JIS 0x0264#define BCM5974_DEVICE (prod) { \ .match_flags = (USB_DEVICE_ID_MATCH_DEVICE | \
@@ -128,6 +132,10 @@ static const struct usb_device_id bcm5974_table[] = {BCM5974_DEVICE (USB_DEVICE_ID_APPLE_WELLSPRING5A_ANSI ),BCM5974_DEVICE (USB_DEVICE_ID_APPLE_WELLSPRING5A_ISO ),BCM5974_DEVICE (USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS ), +/* MacbookPro10,1 */ +BCM5974_DEVICE (USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI ), +BCM5974_DEVICE (USB_DEVICE_ID_APPLE_WELLSPRING7_ISO ), + BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7_JIS), /* Terminating entry */ {} };
@@ -354,6 +362,18 @@ static const struct bcm5974_config bcm5974_config_table[] = { { DIM_X, DIM_X / SN_COORD, -4620, 5140 }, { DIM_Y, DIM_Y / SN_COORD, -150, 6600 } }, + { +USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI , +USB_DEVICE_ID_APPLE_WELLSPRING7_ISO , +USB_DEVICE_ID_APPLE_WELLSPRING7_JIS , +HAS_INTEGRATED_BUTTON , +0x84 ,sizeof (struct bt_data ), +0x81 ,TYPE2 ,FINGER_TYPE2 ,FINGER_TYPE2 +SIZEOF_ALL_FINGERS , + { DIM_PRESSURE, DIM_PRESSURE / SN_PRESSURE, 0, 300 }, + { DIM_WIDTH, DIM_WIDTH / SN_WIDTH, 0, 2048 }, + { DIM_X, DIM_X / SN_COORD, -4750, 5280 }, + { DIM_Y, DIM_Y / SN_COORD, -150, 6730 } + }, {} };
drivers/md/raid1.c +2 -1
@@ -2486,9 +2486,10 @@ static sector_t sync_request(struct mddev *mddev, sector_t sector_nr, int *skipp*/ if (test_bit (MD_RECOVERY_REQUESTED , &mddev->recovery)) {atomic_set (&r1_bio->remaining, read_targets); -for (i =0 ; i < conf->raid_disks *2 ; i++) { +for (i =0 ; i < conf->raid_disks *2 && read_targets; i++) { bio = r1_bio->bios[i];if (bio->bi_end_io == end_sync_read) { + read_targets--;md_sync_acct (bio->bi_bdev, nr_sectors);generic_make_request (bio); }
drivers/media/dvb/dvb-core/dvbdev.c +1 -0
@@ -243,6 +243,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,if (minor ==MAX_DVB_MINORS ) {kfree (dvbdevfops);kfree (dvbdev); +up_write (&minor_rwsem);mutex_unlock (&dvbdev_register_lock);return -EINVAL ; }
drivers/media/video/cx231xx/cx231xx-audio.c +2 -2
@@ -307,7 +307,7 @@ static int cx231xx_init_audio_isoc(struct cx231xx *dev) urb->context = dev; urb->pipe =usb_rcvisocpipe (dev->udev, dev->adev.end_point_addr); - urb->transfer_flags =URB_ISO_ASAP |URB_NO_TRANSFER_DMA_MAP ; + urb->transfer_flags =URB_ISO_ASAP ; urb->transfer_buffer = dev->adev.transfer_buffer[i]; urb->interval =1 ; urb->complete = cx231xx_audio_isocirq;
@@ -368,7 +368,7 @@ static int cx231xx_init_audio_bulk(struct cx231xx *dev) urb->context = dev; urb->pipe =usb_rcvbulkpipe (dev->udev, dev->adev.end_point_addr); - urb->transfer_flags =URB_NO_TRANSFER_DMA_MAP ; + urb->transfer_flags =0 ; urb->transfer_buffer = dev->adev.transfer_buffer[i]; urb->complete = cx231xx_audio_bulkirq; urb->transfer_buffer_length = sb_size;
drivers/media/video/cx231xx/cx231xx-vbi.c +1 -1
@@ -452,7 +452,7 @@ int cx231xx_init_vbi_isoc(struct cx231xx *dev, int max_packets,return -ENOMEM ; } dev->vbi_mode.bulk_ctl.urb[i] = urb; - urb->transfer_flags =URB_NO_TRANSFER_DMA_MAP ; + urb->transfer_flags =0 ; dev->vbi_mode.bulk_ctl.transfer_buffer[i] =kzalloc (sb_size,GFP_KERNEL );
drivers/mtd/nand/nandsim.c +3 -9
@@ -28,7 +28,7 @@#include <linux/module.h> #include <linux/moduleparam.h> #include <linux/vmalloc.h> -#include <asm/div64.h> +#include <linux/math64.h> #include <linux/slab.h> #include <linux/errno.h> #include <linux/string.h>
@@ -547,12 +547,6 @@ static char *get_partition_name(int i)return kstrdup (buf,GFP_KERNEL ); } -static uint64_t divide (uint64_t n,uint32_t d) -{ -do_div (n, d); -return n; -} -/* * Initialize the nandsim structure. *
@@ -581,7 +575,7 @@ static int init_nandsim(struct mtd_info *mtd) ns->geom.oobsz = mtd->oobsize; ns->geom.secsz = mtd->erasesize; ns->geom.pgszoob = ns->geom.pgsz + ns->geom.oobsz; - ns->geom.pgnum =divide (ns->geom.totsz, ns->geom.pgsz); + ns->geom.pgnum =div_u64 (ns->geom.totsz, ns->geom.pgsz); ns->geom.totszoob = ns->geom.totsz + (uint64_t )ns->geom.pgnum * ns->geom.oobsz; ns->geom.secshift =ffs (ns->geom.secsz) -1 ; ns->geom.pgshift = chip->page_shift;
@@ -924,7 +918,7 @@ static int setup_wear_reporting(struct mtd_info *mtd)if (!rptwear)return 0 ; - wear_eb_count =divide (mtd->size, mtd->erasesize); + wear_eb_count =div_u64 (mtd->size, mtd->erasesize); mem = wear_eb_count *sizeof (unsigned long );if (mem /sizeof (unsigned long ) != wear_eb_count) {NS_ERR ("Too many erase blocks for wear reporting\n" );
drivers/net/bonding/bond_debugfs.c +1 -1
@@ -6,7 +6,7 @@#include "bonding.h" #include "bond_alb.h" -#ifdef CONFIG_DEBUG_FS +#if defined(CONFIG_DEBUG_FS ) && !defined(CONFIG_NET_NS )#include <linux/debugfs.h> #include <linux/seq_file.h>
drivers/net/bonding/bond_main.c +6 -3
@@ -3218,6 +3218,12 @@ static int bond_master_netdev_event(unsigned long event,switch (event) {case NETDEV_CHANGENAME :return bond_event_changename (event_bond); +case NETDEV_UNREGISTER : +bond_remove_proc_entry (event_bond); +break ; +case NETDEV_REGISTER : +bond_create_proc_entry (event_bond); +break ;default :break ; }
@@ -4402,8 +4408,6 @@ static void bond_uninit(struct net_device *bond_dev)bond_work_cancel_all (bond); -bond_remove_proc_entry (bond); -bond_debug_unregister (bond);__hw_addr_flush (&bond->mc_list);
@@ -4805,7 +4809,6 @@ static int bond_init(struct net_device *bond_dev)bond_set_lockdep_class (bond_dev); -bond_create_proc_entry (bond);list_add_tail (&bond->bond_list, &bn->dev_list);bond_prepare_sysfs_group (bond);
drivers/net/ethernet/intel/e1000e/82571.c +3 -0
@@ -1553,6 +1553,9 @@ static s32 e1000_check_for_serdes_link_82571(struct e1000_hw *hw) ctrl =er32 (CTRL ); status =er32 (STATUS ); rxcw =er32 (RXCW ); +/* SYNCH bit and IV bit are sticky */ +udelay (10 ); + rxcw =er32 (RXCW );if ((rxcw &E1000_RXCW_SYNCH ) && !(rxcw &E1000_RXCW_IV )) {
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +3 -0
@@ -1158,6 +1158,7 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev) priv->hw->desc->prepare_tx_desc (desc,0 , len, csum_insertion);wmb (); priv->hw->desc->set_tx_owner (desc); +wmb (); }/* Interrupt on completition only for the latest segment */
@@ -1173,6 +1174,7 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)/* To avoid raise condition */ priv->hw->desc->set_tx_owner (first); +wmb (); priv->cur_tx++;
@@ -1236,6 +1238,7 @@ static inline void stmmac_rx_refill(struct stmmac_priv *priv) }wmb (); priv->hw->desc->set_rx_owner (p + entry); +wmb (); } }
drivers/net/wireless/iwlegacy/4965-mac.c +2 -2
@@ -3405,7 +3405,7 @@ il4965_remove_dynamic_key(struct il_priv *il,return 0 ; } -if (il->stations[sta_id].sta.key.key_offset ==WEP_INVALID_OFFSET ) { +if (il->stations[sta_id].sta.key.key_flags &STA_KEY_FLG_INVALID ) {IL_WARN ("Removing wrong key %d 0x%x\n" , keyconf->keyidx, key_flags);spin_unlock_irqrestore (&il->sta_lock, flags);
@@ -3420,7 +3420,7 @@ il4965_remove_dynamic_key(struct il_priv *il,memset (&il->stations[sta_id].sta.key,0 ,sizeof (struct il4965_keyinfo )); il->stations[sta_id].sta.key.key_flags =STA_KEY_FLG_NO_ENC |STA_KEY_FLG_INVALID ; - il->stations[sta_id].sta.key.key_offset =WEP_INVALID_OFFSET ; + il->stations[sta_id].sta.key.key_offset = keyconf->hw_key_idx; il->stations[sta_id].sta.sta.modify_mask =STA_MODIFY_KEY_MASK ; il->stations[sta_id].sta.mode =STA_CONTROL_MODIFY_MSK ;
drivers/net/wireless/iwlegacy/common.c +6 -8
@@ -4767,14 +4767,12 @@ il_bg_watchdog(unsigned long data)return ;/* monitor and check for other stuck queues */ -if (il_is_any_associated (il)) { -for (cnt =0 ; cnt < il->hw_params.max_txq_num; cnt++) { -/* skip as we already checked the command queue */ -if (cnt == il->cmd_queue) -continue ; -if (il_check_stuck_queue (il, cnt)) -return ; - } +for (cnt =0 ; cnt < il->hw_params.max_txq_num; cnt++) { +/* skip as we already checked the command queue */ +if (cnt == il->cmd_queue) +continue ; +if (il_check_stuck_queue (il, cnt)) +return ; } mod_timer(&il->watchdog,
drivers/net/wireless/rt2x00/rt2x00usb.c +1 -1
@@ -436,8 +436,8 @@ void rt2x00usb_kick_queue(struct data_queue *queue)case QID_RX :if (!rt2x00queue_full (queue))rt2x00queue_for_each_entry (queue, -Q_INDEX_DONE ,Q_INDEX , +Q_INDEX_DONE ,NULL , rt2x00usb_kick_rx_entry);break ;
drivers/platform/x86/intel_ips.c +22 -0
@@ -72,6 +72,7 @@#include <linux/string.h> #include <linux/tick.h> #include <linux/timer.h> +#include <linux/dmi.h> #include <drm/i915_drm.h> #include <asm/msr.h> #include <asm/processor.h>
@@ -1485,6 +1486,24 @@ static DEFINE_PCI_DEVICE_TABLE(ips_id_table) = {MODULE_DEVICE_TABLE (pci, ips_id_table); +static int ips_blacklist_callback (const struct dmi_system_id *id) +{ +pr_info ("Blacklisted intel_ips for %s\n" , id->ident); +return 1 ; +} + +static const struct dmi_system_id ips_blacklist[] = { + { + .callback = ips_blacklist_callback, + .ident ="HP ProBook" , + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"Hewlett-Packard" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"HP ProBook" ), + }, + }, + { }/* terminating entry */ +}; +static int ips_probe (struct pci_dev *dev,const struct pci_device_id *id) {u64 platform_info;
@@ -1494,6 +1513,9 @@ static int ips_probe(struct pci_dev *dev, const struct pci_device_id *id)u16 htshi, trc, trc_required_mask;u8 tse; +if (dmi_check_system (ips_blacklist)) +return -ENODEV ; + ips =kzalloc (sizeof (struct ips_driver ),GFP_KERNEL );if (!ips)return -ENOMEM ;
drivers/rpmsg/virtio_rpmsg_bus.c +1 -1
@@ -1085,7 +1085,7 @@ static int __init rpmsg_init(void)return ret; } -module_init (rpmsg_init); +subsys_initcall (rpmsg_init); static void __exit rpmsg_fini(void) {
fs/buffer.c +13 -9
@@ -1036,6 +1036,9 @@ grow_buffers(struct block_device *bdev, sector_t block, int size)static struct buffer_head *__getblk_slow (struct block_device *bdev,sector_t block,int size) { +int ret; +struct buffer_head *bh; +/* Size must be multiple of hard sectorsize */ if (unlikely (size & (bdev_logical_block_size (bdev)-1 ) || (size <512 || size >PAGE_SIZE ))) {
@@ -1048,20 +1051,21 @@ __getblk_slow(struct block_device *bdev, sector_t block, int size)return NULL ; } -for (;;) { -struct buffer_head * bh; -int ret; +retry: + bh =__find_get_block (bdev, block, size); +if (bh) +return bh; + ret =grow_buffers (bdev, block, size); +if (ret ==0 ) { +free_more_memory (); + goto retry; + }else if (ret >0 ) { bh =__find_get_block (bdev, block, size);if (bh)return bh; - - ret =grow_buffers (bdev, block, size); -if (ret <0 ) -return NULL ; -if (ret ==0 ) -free_more_memory (); } +return NULL ; }/*
fs/fifo.c +4 -5
@@ -14,7 +14,7 @@#include <linux/sched.h> #include <linux/pipe_fs_i.h> -static void wait_for_partner (struct inode * inode,unsigned int *cnt) +static int wait_for_partner (struct inode * inode,unsigned int *cnt) {int cur = *cnt;
@@ -23,6 +23,7 @@ static void wait_for_partner(struct inode* inode, unsigned int *cnt)if (signal_pending (current))break ; } +return cur == *cnt ? -ERESTARTSYS :0 ; }static void wake_up_partner (struct inode * inode)
@@ -67,8 +68,7 @@ static int fifo_open(struct inode *inode, struct file *filp)* seen a writer */ filp->f_version = pipe->w_counter; }else { -wait_for_partner (inode, &pipe->w_counter); -if (signal_pending (current)) +if (wait_for_partner (inode, &pipe->w_counter)) goto err_rd; } }
@@ -90,8 +90,7 @@ static int fifo_open(struct inode *inode, struct file *filp)wake_up_partner (inode);if (!pipe->readers) { -wait_for_partner (inode, &pipe->r_counter); -if (signal_pending (current)) +if (wait_for_partner (inode, &pipe->r_counter)) goto err_wr; }break ;
fs/locks.c +1 -1
@@ -1465,7 +1465,7 @@ int generic_setlease(struct file *filp, long arg, struct file_lock **flp)case F_WRLCK :return generic_add_lease (filp, arg, flp);default : -BUG (); +return -EINVAL ; } }EXPORT_SYMBOL (generic_setlease);
include/linux/Kbuild +1 -0
@@ -272,6 +272,7 @@ header-y += netfilter_ipv4.h header-y += netfilter_ipv6.h header-y += netlink.h header-y += netrom.h +header-y += nfc.h header-y += nfs.h header-y += nfs2.h header-y += nfs3.h
include/linux/hrtimer.h +9 -1
@@ -165,6 +165,7 @@ enum hrtimer_base_type {* @lock: lock protecting the base and associated clock bases * and timers * @active_bases: Bitfield to mark bases with active timers +* @clock_was_set: Indicates that clock was set from irq context. * @expires_next: absolute time of the next event which was scheduled * via clock_set_next_event() * @hres_active: State of high resolution mode
@@ -177,7 +178,8 @@ enum hrtimer_base_type {*/ struct hrtimer_cpu_base {raw_spinlock_t lock; -unsigned long active_bases; +unsigned int active_bases; +unsigned int clock_was_set;#ifdef CONFIG_HIGH_RES_TIMERS ktime_t expires_next;int hres_active;
@@ -286,6 +288,8 @@ extern void hrtimer_peek_ahead_timers(void);# define MONOTONIC_RES_NSEC HIGH_RES_NSEC# define KTIME_MONOTONIC_RES KTIME_HIGH_RES +extern void clock_was_set_delayed (void ); +#else # define MONOTONIC_RES_NSEC LOW_RES_NSEC
@@ -306,6 +310,9 @@ static inline int hrtimer_is_hres_active(struct hrtimer *timer) {return 0 ; } + +static inline void clock_was_set_delayed (void ) { } +#endif extern void clock_was_set (void );
@@ -320,6 +327,7 @@ extern ktime_t ktime_get(void);extern ktime_t ktime_get_real (void );extern ktime_t ktime_get_boottime (void );extern ktime_t ktime_get_monotonic_offset (void ); +extern ktime_t ktime_get_update_offsets (ktime_t *offs_real,ktime_t *offs_boot); DECLARE_PER_CPU(struct tick_device, tick_cpu_device);
include/linux/sched.h +8 -0
@@ -1933,6 +1933,14 @@ static inline int set_cpus_allowed_ptr(struct task_struct *p, }#endif +#ifdef CONFIG_NO_HZ +void calc_load_enter_idle (void ); +void calc_load_exit_idle (void ); +#else +static inline void calc_load_enter_idle (void ) { } +static inline void calc_load_exit_idle (void ) { } +#endif /* CONFIG_NO_HZ */ +#ifndef CONFIG_CPUMASK_OFFSTACK static inline int set_cpus_allowed (struct task_struct *p,cpumask_t new_mask) {
kernel/hrtimer.c +37 -16
109 lines not on this page · raw message
kernel/sched/core.c +203 -72
352 lines not on this page · raw message
kernel/sched/idle_task.c +0 -1
@@ -25,7 +25,6 @@ static void check_preempt_curr_idle(struct rq *rq, struct task_struct *p, int flstatic struct task_struct *pick_next_task_idle (struct rq *rq) {schedstat_inc (rq, sched_goidle); -calc_load_account_idle (rq);return rq->idle; }
kernel/sched/sched.h +0 -2
@@ -940,8 +940,6 @@ static inline u64 sched_avg_period(void)return (u64 )sysctl_sched_time_avg *NSEC_PER_MSEC /2 ; } -void calc_load_account_idle (struct rq *this_rq); -#ifdef CONFIG_SCHED_HRTICK /*
kernel/time/tick-sched.c +2 -0
@@ -401,6 +401,7 @@ static void tick_nohz_stop_sched_tick(struct tick_sched *ts)*/ if (!ts->tick_stopped) {select_nohz_load_balancer (1 ); +calc_load_enter_idle (); ts->idle_tick =hrtimer_get_expires (&ts->sched_timer); ts->tick_stopped =1 ;
@@ -591,6 +592,7 @@ void tick_nohz_idle_exit(void)account_idle_ticks (ticks);#endif +calc_load_exit_idle ();touch_softlockup_watchdog ();/* * Cancel the scheduled timer and restore the tick
kernel/time/timekeeping.c +62 -2
124 lines not on this page · raw message
net/mac80211/mlme.c +2 -4
@@ -2183,15 +2183,13 @@ ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata, sdata->name, mgmt->sa, status_code);ieee80211_destroy_assoc_data (sdata, false); }else { -printk (KERN_DEBUG "%s: associated\n" , sdata->name); -if (!ieee80211_assoc_success (sdata, *bss, mgmt, len)) {/* oops -- internal error -- send timeout for now */ -ieee80211_destroy_assoc_data (sdata, true); -sta_info_destroy_addr (sdata, mgmt->bssid); +ieee80211_destroy_assoc_data (sdata, false);cfg80211_put_bss (*bss);return RX_MGMT_CFG80211_ASSOC_TIMEOUT ; } +printk (KERN_DEBUG "%s: associated\n" , sdata->name);/* * destroy assoc_data afterwards, as otherwise an idle
net/wireless/util.c +1 -1
@@ -805,7 +805,7 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev, ntype == NL80211_IFTYPE_P2P_CLIENT))return -EBUSY ; -if (ntype != otype) { +if (ntype != otype &&netif_running (dev)) { err =cfg80211_can_change_interface (rdev, dev->ieee80211_ptr, ntype);if (err)