Linux 3.0.38
I'm announcing the release of the 3.0.38 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
------------
Makefile | 2 arch/arm/plat-samsung/adc.c | 8 +- drivers/hwmon/it87.c | 2 drivers/input/joystick/xpad.c | 1 drivers/media/dvb/dvb-core/dvbdev.c | 1 drivers/mtd/nand/nandsim.c | 12 --- drivers/net/e1000e/82571.c | 3 drivers/net/wireless/rt2x00/rt2x00usb.c | 2 drivers/platform/x86/intel_ips.c | 22 +++++ fs/buffer.c | 22 +++-- fs/fifo.c | 9 +- include/linux/hrtimer.h | 10 ++ include/linux/timex.h | 2 kernel/hrtimer.c | 53 +++++++++---- kernel/time/ntp.c | 124 ++++++++++---------------------- kernel/time/timekeeping.c | 115 ++++++++++++++++++++++------- net/ipv4/tcp_input.c | 2 net/wireless/util.c | 2 18 files changed, 233 insertions(+), 159 deletions(-)
Anders Kaseorg (1):
fifo: Do not restart open() if it already found a partner
Eric Dumazet (1):
tcp: drop SYN+FIN messages
Greg Kroah-Hartman (1):
Linux 3.0.38
Herton Ronaldo Krzesinski (1):
mtd: nandsim: don't open code a do_div helper
Jean Delvare (1):
hwmon: (it87) Preserve configuration register bits on init
Jeff Moyer (1):
block: fix infinite loop in __getblk_slow
John Stultz (5):
ntp: Fix leap-second hrtimer livelock
timekeeping: Fix CLOCK_MONOTONIC inconsistency during leapsecond
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
Richard Cochran (1):
ntp: Correct TAI offset during leap second
Santosh Nayak (1):
media: dvb-core: Release semaphore on error path dvb_register_device()
Stanislaw Gruszka (1):
rt2x00usb: fix indexes ordering on RX queue kick
Takashi Iwai (1):
intel_ips: blacklist HP ProBook laptops
Thomas Gleixner (5):
time: Move common updates to a function
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()
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 (1):
Input: xpad - add Andamiro Pump It Up pad
Makefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 3 PATCHLEVEL = 0 -SUBLEVEL = 37 +SUBLEVEL = 38 EXTRAVERSION = NAME = Sneaky Weasel
arch/arm/plat-samsung/adc.c +5 -3
@@ -143,11 +143,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/hwmon/it87.c +1 -1
@@ -2057,7 +2057,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 +1 -0
@@ -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 },
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/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/e1000e/82571.c +3 -0
@@ -1573,6 +1573,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/wireless/rt2x00/rt2x00usb.c +1 -1
@@ -426,8 +426,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>
@@ -1505,6 +1506,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;
@@ -1514,6 +1533,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 ;
fs/buffer.c +13 -9
@@ -1084,6 +1084,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 ))) {
@@ -1096,20 +1099,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 ;
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/timex.h +1 -1
@@ -266,7 +266,7 @@ static inline int ntp_synced(void)/* Returns how long ticks are at present, in ns / 2^NTP_SCALE_SHIFT. */ extern u64 tick_length; -extern void second_overflow (void ); +extern int second_overflow (unsigned long secs);extern void update_ntp_one_tick (void );extern int do_adjtimex (struct timex *);extern void hardpps (const struct timespec *,const struct timespec *);
kernel/hrtimer.c +37 -16
109 lines not on this page · raw message
kernel/time/ntp.c +41 -83
196 lines not on this page · raw message
kernel/time/timekeeping.c +87 -28
196 lines not on this page · raw message
net/ipv4/tcp_input.c +2 -0
@@ -5761,6 +5761,8 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb, goto discard;if (th->syn) { +if (th->fin) + goto discard;if (icsk->icsk_af_ops->conn_request (sk, skb) <0 )return 1 ;
net/wireless/util.c +1 -1
@@ -807,7 +807,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)