Magellan Linux

Annotation of /trunk/kernel-magellan/patches-3.2/0111-3.2.12-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1706 - (hide annotations) (download)
Thu Mar 22 12:46:31 2012 UTC (12 years, 2 months ago) by niro
File size: 52103 byte(s)
-linux-3.2.12
1 niro 1706 diff --git a/Documentation/hwmon/w83627ehf b/Documentation/hwmon/w83627ehf
2     index 3f44dbd..75f3155 100644
3     --- a/Documentation/hwmon/w83627ehf
4     +++ b/Documentation/hwmon/w83627ehf
5     @@ -50,7 +50,7 @@ W83627DHG, W83627DHG-P, W83627UHG, W83667HG, W83667HG-B, W83667HG-I
6     (NCT6775F), and NCT6776F super I/O chips. We will refer to them collectively
7     as Winbond chips.
8    
9     -The chips implement 2 to 4 temperature sensors (9 for NCT6775F and NCT6776F),
10     +The chips implement 3 to 4 temperature sensors (9 for NCT6775F and NCT6776F),
11     2 to 5 fan rotation speed sensors, 8 to 10 analog voltage sensors, one VID
12     (except for 627UHG), alarms with beep warnings (control unimplemented),
13     and some automatic fan regulation strategies (plus manual fan control mode).
14     diff --git a/Documentation/hwmon/zl6100 b/Documentation/hwmon/zl6100
15     index 7617798..c5e1a5b 100644
16     --- a/Documentation/hwmon/zl6100
17     +++ b/Documentation/hwmon/zl6100
18     @@ -73,14 +73,12 @@ Module parameters
19     delay
20     -----
21    
22     -Some Intersil/Zilker Labs DC-DC controllers require a minimum interval between
23     -I2C bus accesses. According to Intersil, the minimum interval is 2 ms, though
24     -1 ms appears to be sufficient and has not caused any problems in testing.
25     -The problem is known to affect ZL6100, ZL2105, and ZL2008. It is known not to
26     -affect ZL2004 and ZL6105. The driver automatically sets the interval to 1 ms
27     -except for ZL2004 and ZL6105. To enable manual override, the driver provides a
28     -writeable module parameter, 'delay', which can be used to set the interval to
29     -a value between 0 and 65,535 microseconds.
30     +Intersil/Zilker Labs DC-DC controllers require a minimum interval between I2C
31     +bus accesses. According to Intersil, the minimum interval is 2 ms, though 1 ms
32     +appears to be sufficient and has not caused any problems in testing. The problem
33     +is known to affect all currently supported chips. For manual override, the
34     +driver provides a writeable module parameter, 'delay', which can be used to set
35     +the interval to a value between 0 and 65,535 microseconds.
36    
37    
38     Sysfs entries
39     diff --git a/arch/sparc/Makefile b/arch/sparc/Makefile
40     index ad1fb5d..eddcfb3 100644
41     --- a/arch/sparc/Makefile
42     +++ b/arch/sparc/Makefile
43     @@ -31,7 +31,7 @@ UTS_MACHINE := sparc
44    
45     #KBUILD_CFLAGS += -g -pipe -fcall-used-g5 -fcall-used-g7
46     KBUILD_CFLAGS += -m32 -pipe -mno-fpu -fcall-used-g5 -fcall-used-g7
47     -KBUILD_AFLAGS += -m32
48     +KBUILD_AFLAGS += -m32 -Wa,-Av8
49    
50     #LDFLAGS_vmlinux = -N -Ttext 0xf0004000
51     # Since 2.5.40, the first stage is left not btfix-ed.
52     diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c
53     index 121f1be..957c216 100644
54     --- a/arch/x86/kernel/cpu/perf_event_intel.c
55     +++ b/arch/x86/kernel/cpu/perf_event_intel.c
56     @@ -389,14 +389,15 @@ static __initconst const u64 westmere_hw_cache_event_ids
57     #define NHM_LOCAL_DRAM (1 << 14)
58     #define NHM_NON_DRAM (1 << 15)
59    
60     -#define NHM_ALL_DRAM (NHM_REMOTE_DRAM|NHM_LOCAL_DRAM)
61     +#define NHM_LOCAL (NHM_LOCAL_DRAM|NHM_REMOTE_CACHE_FWD)
62     +#define NHM_REMOTE (NHM_REMOTE_DRAM)
63    
64     #define NHM_DMND_READ (NHM_DMND_DATA_RD)
65     #define NHM_DMND_WRITE (NHM_DMND_RFO|NHM_DMND_WB)
66     #define NHM_DMND_PREFETCH (NHM_PF_DATA_RD|NHM_PF_DATA_RFO)
67    
68     #define NHM_L3_HIT (NHM_UNCORE_HIT|NHM_OTHER_CORE_HIT_SNP|NHM_OTHER_CORE_HITM)
69     -#define NHM_L3_MISS (NHM_NON_DRAM|NHM_ALL_DRAM|NHM_REMOTE_CACHE_FWD)
70     +#define NHM_L3_MISS (NHM_NON_DRAM|NHM_LOCAL_DRAM|NHM_REMOTE_DRAM|NHM_REMOTE_CACHE_FWD)
71     #define NHM_L3_ACCESS (NHM_L3_HIT|NHM_L3_MISS)
72    
73     static __initconst const u64 nehalem_hw_cache_extra_regs
74     @@ -420,16 +421,16 @@ static __initconst const u64 nehalem_hw_cache_extra_regs
75     },
76     [ C(NODE) ] = {
77     [ C(OP_READ) ] = {
78     - [ C(RESULT_ACCESS) ] = NHM_DMND_READ|NHM_ALL_DRAM,
79     - [ C(RESULT_MISS) ] = NHM_DMND_READ|NHM_REMOTE_DRAM,
80     + [ C(RESULT_ACCESS) ] = NHM_DMND_READ|NHM_LOCAL|NHM_REMOTE,
81     + [ C(RESULT_MISS) ] = NHM_DMND_READ|NHM_REMOTE,
82     },
83     [ C(OP_WRITE) ] = {
84     - [ C(RESULT_ACCESS) ] = NHM_DMND_WRITE|NHM_ALL_DRAM,
85     - [ C(RESULT_MISS) ] = NHM_DMND_WRITE|NHM_REMOTE_DRAM,
86     + [ C(RESULT_ACCESS) ] = NHM_DMND_WRITE|NHM_LOCAL|NHM_REMOTE,
87     + [ C(RESULT_MISS) ] = NHM_DMND_WRITE|NHM_REMOTE,
88     },
89     [ C(OP_PREFETCH) ] = {
90     - [ C(RESULT_ACCESS) ] = NHM_DMND_PREFETCH|NHM_ALL_DRAM,
91     - [ C(RESULT_MISS) ] = NHM_DMND_PREFETCH|NHM_REMOTE_DRAM,
92     + [ C(RESULT_ACCESS) ] = NHM_DMND_PREFETCH|NHM_LOCAL|NHM_REMOTE,
93     + [ C(RESULT_MISS) ] = NHM_DMND_PREFETCH|NHM_REMOTE,
94     },
95     },
96     };
97     diff --git a/arch/x86/lib/delay.c b/arch/x86/lib/delay.c
98     index fc45ba8..e395693 100644
99     --- a/arch/x86/lib/delay.c
100     +++ b/arch/x86/lib/delay.c
101     @@ -48,9 +48,9 @@ static void delay_loop(unsigned long loops)
102     }
103    
104     /* TSC based delay: */
105     -static void delay_tsc(unsigned long loops)
106     +static void delay_tsc(unsigned long __loops)
107     {
108     - unsigned long bclock, now;
109     + u32 bclock, now, loops = __loops;
110     int cpu;
111    
112     preempt_disable();
113     diff --git a/block/genhd.c b/block/genhd.c
114     index 02e9fca..997afd6 100644
115     --- a/block/genhd.c
116     +++ b/block/genhd.c
117     @@ -36,6 +36,7 @@ static DEFINE_IDR(ext_devt_idr);
118    
119     static struct device_type disk_type;
120    
121     +static void disk_alloc_events(struct gendisk *disk);
122     static void disk_add_events(struct gendisk *disk);
123     static void disk_del_events(struct gendisk *disk);
124     static void disk_release_events(struct gendisk *disk);
125     @@ -602,6 +603,8 @@ void add_disk(struct gendisk *disk)
126     disk->major = MAJOR(devt);
127     disk->first_minor = MINOR(devt);
128    
129     + disk_alloc_events(disk);
130     +
131     /* Register BDI before referencing it from bdev */
132     bdi = &disk->queue->backing_dev_info;
133     bdi_register_dev(bdi, disk_devt(disk));
134     @@ -1476,9 +1479,9 @@ static void __disk_unblock_events(struct gendisk *disk, bool check_now)
135     intv = disk_events_poll_jiffies(disk);
136     set_timer_slack(&ev->dwork.timer, intv / 4);
137     if (check_now)
138     - queue_delayed_work(system_nrt_wq, &ev->dwork, 0);
139     + queue_delayed_work(system_nrt_freezable_wq, &ev->dwork, 0);
140     else if (intv)
141     - queue_delayed_work(system_nrt_wq, &ev->dwork, intv);
142     + queue_delayed_work(system_nrt_freezable_wq, &ev->dwork, intv);
143     out_unlock:
144     spin_unlock_irqrestore(&ev->lock, flags);
145     }
146     @@ -1522,7 +1525,7 @@ void disk_flush_events(struct gendisk *disk, unsigned int mask)
147     ev->clearing |= mask;
148     if (!ev->block) {
149     cancel_delayed_work(&ev->dwork);
150     - queue_delayed_work(system_nrt_wq, &ev->dwork, 0);
151     + queue_delayed_work(system_nrt_freezable_wq, &ev->dwork, 0);
152     }
153     spin_unlock_irq(&ev->lock);
154     }
155     @@ -1559,7 +1562,7 @@ unsigned int disk_clear_events(struct gendisk *disk, unsigned int mask)
156    
157     /* uncondtionally schedule event check and wait for it to finish */
158     disk_block_events(disk);
159     - queue_delayed_work(system_nrt_wq, &ev->dwork, 0);
160     + queue_delayed_work(system_nrt_freezable_wq, &ev->dwork, 0);
161     flush_delayed_work(&ev->dwork);
162     __disk_unblock_events(disk, false);
163    
164     @@ -1596,7 +1599,7 @@ static void disk_events_workfn(struct work_struct *work)
165    
166     intv = disk_events_poll_jiffies(disk);
167     if (!ev->block && intv)
168     - queue_delayed_work(system_nrt_wq, &ev->dwork, intv);
169     + queue_delayed_work(system_nrt_freezable_wq, &ev->dwork, intv);
170    
171     spin_unlock_irq(&ev->lock);
172    
173     @@ -1734,9 +1737,9 @@ module_param_cb(events_dfl_poll_msecs, &disk_events_dfl_poll_msecs_param_ops,
174     &disk_events_dfl_poll_msecs, 0644);
175    
176     /*
177     - * disk_{add|del|release}_events - initialize and destroy disk_events.
178     + * disk_{alloc|add|del|release}_events - initialize and destroy disk_events.
179     */
180     -static void disk_add_events(struct gendisk *disk)
181     +static void disk_alloc_events(struct gendisk *disk)
182     {
183     struct disk_events *ev;
184    
185     @@ -1749,16 +1752,6 @@ static void disk_add_events(struct gendisk *disk)
186     return;
187     }
188    
189     - if (sysfs_create_files(&disk_to_dev(disk)->kobj,
190     - disk_events_attrs) < 0) {
191     - pr_warn("%s: failed to create sysfs files for events\n",
192     - disk->disk_name);
193     - kfree(ev);
194     - return;
195     - }
196     -
197     - disk->ev = ev;
198     -
199     INIT_LIST_HEAD(&ev->node);
200     ev->disk = disk;
201     spin_lock_init(&ev->lock);
202     @@ -1767,8 +1760,21 @@ static void disk_add_events(struct gendisk *disk)
203     ev->poll_msecs = -1;
204     INIT_DELAYED_WORK(&ev->dwork, disk_events_workfn);
205    
206     + disk->ev = ev;
207     +}
208     +
209     +static void disk_add_events(struct gendisk *disk)
210     +{
211     + if (!disk->ev)
212     + return;
213     +
214     + /* FIXME: error handling */
215     + if (sysfs_create_files(&disk_to_dev(disk)->kobj, disk_events_attrs) < 0)
216     + pr_warn("%s: failed to create sysfs files for events\n",
217     + disk->disk_name);
218     +
219     mutex_lock(&disk_events_mutex);
220     - list_add_tail(&ev->node, &disk_events);
221     + list_add_tail(&disk->ev->node, &disk_events);
222     mutex_unlock(&disk_events_mutex);
223    
224     /*
225     diff --git a/drivers/block/sx8.c b/drivers/block/sx8.c
226     index b70f0fc..eec7b7a 100644
227     --- a/drivers/block/sx8.c
228     +++ b/drivers/block/sx8.c
229     @@ -1116,7 +1116,7 @@ static inline void carm_handle_resp(struct carm_host *host,
230     break;
231     case MISC_GET_FW_VER: {
232     struct carm_fw_ver *ver = (struct carm_fw_ver *)
233     - mem + sizeof(struct carm_msg_get_fw_ver);
234     + (mem + sizeof(struct carm_msg_get_fw_ver));
235     if (!error) {
236     host->fw_ver = le32_to_cpu(ver->version);
237     host->flags |= (ver->features & FL_FW_VER_MASK);
238     diff --git a/drivers/hwmon/pmbus/zl6100.c b/drivers/hwmon/pmbus/zl6100.c
239     index ba296fd..5c5cdd2 100644
240     --- a/drivers/hwmon/pmbus/zl6100.c
241     +++ b/drivers/hwmon/pmbus/zl6100.c
242     @@ -178,16 +178,11 @@ static int zl6100_probe(struct i2c_client *client,
243     data->id = mid->driver_data;
244    
245     /*
246     - * ZL2008, ZL2105, and ZL6100 are known to require a wait time
247     - * between I2C accesses. ZL2004 and ZL6105 are known to be safe.
248     - *
249     - * Only clear the wait time for chips known to be safe. The wait time
250     - * can be cleared later for additional chips if tests show that it
251     - * is not needed (in other words, better be safe than sorry).
252     + * According to information from the chip vendor, all currently
253     + * supported chips are known to require a wait time between I2C
254     + * accesses.
255     */
256     data->delay = delay;
257     - if (data->id == zl2004 || data->id == zl6105)
258     - data->delay = 0;
259    
260     /*
261     * Since there was a direct I2C device access above, wait before
262     diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c
263     index c25387d..ceaec92 100644
264     --- a/drivers/hwmon/w83627ehf.c
265     +++ b/drivers/hwmon/w83627ehf.c
266     @@ -39,7 +39,7 @@
267     0x8860 0xa1
268     w83627dhg 9 5 4 3 0xa020 0xc1 0x5ca3
269     w83627dhg-p 9 5 4 3 0xb070 0xc1 0x5ca3
270     - w83627uhg 8 2 2 2 0xa230 0xc1 0x5ca3
271     + w83627uhg 8 2 2 3 0xa230 0xc1 0x5ca3
272     w83667hg 9 5 3 3 0xa510 0xc1 0x5ca3
273     w83667hg-b 9 5 3 4 0xb350 0xc1 0x5ca3
274     nct6775f 9 4 3 9 0xb470 0xc1 0x5ca3
275     @@ -1607,7 +1607,7 @@ store_##reg(struct device *dev, struct device_attribute *attr, \
276     val = step_time_to_reg(val, data->pwm_mode[nr]); \
277     mutex_lock(&data->update_lock); \
278     data->reg[nr] = val; \
279     - w83627ehf_write_value(data, W83627EHF_REG_##REG[nr], val); \
280     + w83627ehf_write_value(data, data->REG_##REG[nr], val); \
281     mutex_unlock(&data->update_lock); \
282     return count; \
283     } \
284     @@ -2004,7 +2004,8 @@ static int __devinit w83627ehf_probe(struct platform_device *pdev)
285     goto exit;
286     }
287    
288     - data = kzalloc(sizeof(struct w83627ehf_data), GFP_KERNEL);
289     + data = devm_kzalloc(&pdev->dev, sizeof(struct w83627ehf_data),
290     + GFP_KERNEL);
291     if (!data) {
292     err = -ENOMEM;
293     goto exit_release;
294     @@ -2157,16 +2158,16 @@ static int __devinit w83627ehf_probe(struct platform_device *pdev)
295     w83627ehf_set_temp_reg_ehf(data, 3);
296    
297     /*
298     - * Temperature sources for temp1 and temp2 are selected with
299     + * Temperature sources for temp2 and temp3 are selected with
300     * bank 0, registers 0x49 and 0x4a.
301     */
302     data->temp_src[0] = 0; /* SYSTIN */
303     reg = w83627ehf_read_value(data, 0x49) & 0x07;
304     /* Adjust to have the same mapping as other source registers */
305     if (reg == 0)
306     - data->temp_src[1]++;
307     + data->temp_src[1] = 1;
308     else if (reg >= 2 && reg <= 5)
309     - data->temp_src[1] += 2;
310     + data->temp_src[1] = reg + 2;
311     else /* should never happen */
312     data->have_temp &= ~(1 << 1);
313     reg = w83627ehf_read_value(data, 0x4a);
314     @@ -2498,9 +2499,8 @@ static int __devinit w83627ehf_probe(struct platform_device *pdev)
315    
316     exit_remove:
317     w83627ehf_device_remove_files(dev);
318     - kfree(data);
319     - platform_set_drvdata(pdev, NULL);
320     exit_release:
321     + platform_set_drvdata(pdev, NULL);
322     release_region(res->start, IOREGION_LENGTH);
323     exit:
324     return err;
325     @@ -2514,7 +2514,6 @@ static int __devexit w83627ehf_remove(struct platform_device *pdev)
326     w83627ehf_device_remove_files(&pdev->dev);
327     release_region(data->addr, IOREGION_LENGTH);
328     platform_set_drvdata(pdev, NULL);
329     - kfree(data);
330    
331     return 0;
332     }
333     diff --git a/drivers/i2c/algos/i2c-algo-bit.c b/drivers/i2c/algos/i2c-algo-bit.c
334     index 525c734..24f94f4 100644
335     --- a/drivers/i2c/algos/i2c-algo-bit.c
336     +++ b/drivers/i2c/algos/i2c-algo-bit.c
337     @@ -103,8 +103,14 @@ static int sclhi(struct i2c_algo_bit_data *adap)
338     * chips may hold it low ("clock stretching") while they
339     * are processing data internally.
340     */
341     - if (time_after(jiffies, start + adap->timeout))
342     + if (time_after(jiffies, start + adap->timeout)) {
343     + /* Test one last time, as we may have been preempted
344     + * between last check and timeout test.
345     + */
346     + if (getscl(adap))
347     + break;
348     return -ETIMEDOUT;
349     + }
350     cond_resched();
351     }
352     #ifdef DEBUG
353     diff --git a/drivers/media/video/omap3isp/ispccdc.c b/drivers/media/video/omap3isp/ispccdc.c
354     index 54a4a3f..a319281 100644
355     --- a/drivers/media/video/omap3isp/ispccdc.c
356     +++ b/drivers/media/video/omap3isp/ispccdc.c
357     @@ -1406,8 +1406,7 @@ static int __ccdc_handle_stopping(struct isp_ccdc_device *ccdc, u32 event)
358    
359     static void ccdc_hs_vs_isr(struct isp_ccdc_device *ccdc)
360     {
361     - struct isp_pipeline *pipe =
362     - to_isp_pipeline(&ccdc->video_out.video.entity);
363     + struct isp_pipeline *pipe = to_isp_pipeline(&ccdc->subdev.entity);
364     struct video_device *vdev = ccdc->subdev.devnode;
365     struct v4l2_event event;
366    
367     diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
368     index 02c7ed8..eccdcff 100644
369     --- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
370     +++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
371     @@ -2241,10 +2241,6 @@ static netdev_tx_t atl1c_xmit_frame(struct sk_buff *skb,
372     dev_info(&adapter->pdev->dev, "tx locked\n");
373     return NETDEV_TX_LOCKED;
374     }
375     - if (skb->mark == 0x01)
376     - type = atl1c_trans_high;
377     - else
378     - type = atl1c_trans_normal;
379    
380     if (atl1c_tpd_avail(adapter, type) < tpd_req) {
381     /* no enough descriptor, just stop queue */
382     diff --git a/drivers/net/ethernet/packetengines/Kconfig b/drivers/net/ethernet/packetengines/Kconfig
383     index b97132d..8f29feb 100644
384     --- a/drivers/net/ethernet/packetengines/Kconfig
385     +++ b/drivers/net/ethernet/packetengines/Kconfig
386     @@ -4,6 +4,7 @@
387    
388     config NET_PACKET_ENGINE
389     bool "Packet Engine devices"
390     + default y
391     depends on PCI
392     ---help---
393     If you have a network (Ethernet) card belonging to this class, say Y
394     diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
395     index c8f47f1..0cf2351 100644
396     --- a/drivers/net/ethernet/realtek/r8169.c
397     +++ b/drivers/net/ethernet/realtek/r8169.c
398     @@ -3781,12 +3781,20 @@ static void rtl8169_init_ring_indexes(struct rtl8169_private *tp)
399    
400     static void rtl_hw_jumbo_enable(struct rtl8169_private *tp)
401     {
402     + void __iomem *ioaddr = tp->mmio_addr;
403     +
404     + RTL_W8(Cfg9346, Cfg9346_Unlock);
405     rtl_generic_op(tp, tp->jumbo_ops.enable);
406     + RTL_W8(Cfg9346, Cfg9346_Lock);
407     }
408    
409     static void rtl_hw_jumbo_disable(struct rtl8169_private *tp)
410     {
411     + void __iomem *ioaddr = tp->mmio_addr;
412     +
413     + RTL_W8(Cfg9346, Cfg9346_Unlock);
414     rtl_generic_op(tp, tp->jumbo_ops.disable);
415     + RTL_W8(Cfg9346, Cfg9346_Lock);
416     }
417    
418     static void r8168c_hw_jumbo_enable(struct rtl8169_private *tp)
419     diff --git a/drivers/net/ethernet/sfc/rx.c b/drivers/net/ethernet/sfc/rx.c
420     index 752d521..5ef4cc0 100644
421     --- a/drivers/net/ethernet/sfc/rx.c
422     +++ b/drivers/net/ethernet/sfc/rx.c
423     @@ -156,11 +156,10 @@ static int efx_init_rx_buffers_skb(struct efx_rx_queue *rx_queue)
424     if (unlikely(!skb))
425     return -ENOMEM;
426    
427     - /* Adjust the SKB for padding and checksum */
428     + /* Adjust the SKB for padding */
429     skb_reserve(skb, NET_IP_ALIGN);
430     rx_buf->len = skb_len - NET_IP_ALIGN;
431     rx_buf->is_page = false;
432     - skb->ip_summed = CHECKSUM_UNNECESSARY;
433    
434     rx_buf->dma_addr = pci_map_single(efx->pci_dev,
435     skb->data, rx_buf->len,
436     @@ -499,6 +498,7 @@ static void efx_rx_packet_gro(struct efx_channel *channel,
437    
438     EFX_BUG_ON_PARANOID(!checksummed);
439     rx_buf->u.skb = NULL;
440     + skb->ip_summed = CHECKSUM_UNNECESSARY;
441    
442     gro_result = napi_gro_receive(napi, skb);
443     }
444     diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c
445     index edfa15d..486b404 100644
446     --- a/drivers/net/ppp/ppp_generic.c
447     +++ b/drivers/net/ppp/ppp_generic.c
448     @@ -2024,14 +2024,22 @@ ppp_mp_reconstruct(struct ppp *ppp)
449     continue;
450     }
451     if (PPP_MP_CB(p)->sequence != seq) {
452     + u32 oldseq;
453     /* Fragment `seq' is missing. If it is after
454     minseq, it might arrive later, so stop here. */
455     if (seq_after(seq, minseq))
456     break;
457     /* Fragment `seq' is lost, keep going. */
458     lost = 1;
459     + oldseq = seq;
460     seq = seq_before(minseq, PPP_MP_CB(p)->sequence)?
461     minseq + 1: PPP_MP_CB(p)->sequence;
462     +
463     + if (ppp->debug & 1)
464     + netdev_printk(KERN_DEBUG, ppp->dev,
465     + "lost frag %u..%u\n",
466     + oldseq, seq-1);
467     +
468     goto again;
469     }
470    
471     @@ -2076,6 +2084,10 @@ ppp_mp_reconstruct(struct ppp *ppp)
472     struct sk_buff *tmp2;
473    
474     skb_queue_reverse_walk_from_safe(list, p, tmp2) {
475     + if (ppp->debug & 1)
476     + netdev_printk(KERN_DEBUG, ppp->dev,
477     + "discarding frag %u\n",
478     + PPP_MP_CB(p)->sequence);
479     __skb_unlink(p, list);
480     kfree_skb(p);
481     }
482     @@ -2091,6 +2103,17 @@ ppp_mp_reconstruct(struct ppp *ppp)
483     /* If we have discarded any fragments,
484     signal a receive error. */
485     if (PPP_MP_CB(head)->sequence != ppp->nextseq) {
486     + skb_queue_walk_safe(list, p, tmp) {
487     + if (p == head)
488     + break;
489     + if (ppp->debug & 1)
490     + netdev_printk(KERN_DEBUG, ppp->dev,
491     + "discarding frag %u\n",
492     + PPP_MP_CB(p)->sequence);
493     + __skb_unlink(p, list);
494     + kfree_skb(p);
495     + }
496     +
497     if (ppp->debug & 1)
498     netdev_printk(KERN_DEBUG, ppp->dev,
499     " missed pkts %u..%u\n",
500     diff --git a/drivers/net/usb/asix.c b/drivers/net/usb/asix.c
501     index f5e063a..fda4be2 100644
502     --- a/drivers/net/usb/asix.c
503     +++ b/drivers/net/usb/asix.c
504     @@ -1595,6 +1595,10 @@ static const struct usb_device_id products [] = {
505     USB_DEVICE (0x6189, 0x182d),
506     .driver_info = (unsigned long) &ax8817x_info,
507     }, {
508     + // Sitecom LN-031 "USB 2.0 10/100/1000 Ethernet adapter"
509     + USB_DEVICE (0x0df6, 0x0056),
510     + .driver_info = (unsigned long) &ax88178_info,
511     +}, {
512     // corega FEther USB2-TX
513     USB_DEVICE (0x07aa, 0x0017),
514     .driver_info = (unsigned long) &ax8817x_info,
515     diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
516     index d96bfb1..d426261 100644
517     --- a/drivers/net/vmxnet3/vmxnet3_drv.c
518     +++ b/drivers/net/vmxnet3/vmxnet3_drv.c
519     @@ -830,13 +830,8 @@ vmxnet3_parse_and_copy_hdr(struct sk_buff *skb, struct vmxnet3_tx_queue *tq,
520     ctx->l4_hdr_size = ((struct tcphdr *)
521     skb_transport_header(skb))->doff * 4;
522     else if (iph->protocol == IPPROTO_UDP)
523     - /*
524     - * Use tcp header size so that bytes to
525     - * be copied are more than required by
526     - * the device.
527     - */
528     ctx->l4_hdr_size =
529     - sizeof(struct tcphdr);
530     + sizeof(struct udphdr);
531     else
532     ctx->l4_hdr_size = 0;
533     } else {
534     diff --git a/drivers/net/vmxnet3/vmxnet3_int.h b/drivers/net/vmxnet3/vmxnet3_int.h
535     index b18eac1..8df921b 100644
536     --- a/drivers/net/vmxnet3/vmxnet3_int.h
537     +++ b/drivers/net/vmxnet3/vmxnet3_int.h
538     @@ -70,10 +70,10 @@
539     /*
540     * Version numbers
541     */
542     -#define VMXNET3_DRIVER_VERSION_STRING "1.1.18.0-k"
543     +#define VMXNET3_DRIVER_VERSION_STRING "1.1.29.0-k"
544    
545     /* a 32-bit int, each byte encode a verion number in VMXNET3_DRIVER_VERSION */
546     -#define VMXNET3_DRIVER_VERSION_NUM 0x01011200
547     +#define VMXNET3_DRIVER_VERSION_NUM 0x01011D00
548    
549     #if defined(CONFIG_PCI_MSI)
550     /* RSS only makes sense if MSI-X is supported. */
551     diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c
552     index edd317f..21b529b 100644
553     --- a/drivers/net/wireless/rt2x00/rt2x00dev.c
554     +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
555     @@ -426,10 +426,14 @@ void rt2x00lib_txdone(struct queue_entry *entry,
556     /*
557     * If the data queue was below the threshold before the txdone
558     * handler we must make sure the packet queue in the mac80211 stack
559     - * is reenabled when the txdone handler has finished.
560     + * is reenabled when the txdone handler has finished. This has to be
561     + * serialized with rt2x00mac_tx(), otherwise we can wake up queue
562     + * before it was stopped.
563     */
564     + spin_lock_bh(&entry->queue->tx_lock);
565     if (!rt2x00queue_threshold(entry->queue))
566     rt2x00queue_unpause_queue(entry->queue);
567     + spin_unlock_bh(&entry->queue->tx_lock);
568     }
569     EXPORT_SYMBOL_GPL(rt2x00lib_txdone);
570    
571     diff --git a/drivers/net/wireless/rt2x00/rt2x00mac.c b/drivers/net/wireless/rt2x00/rt2x00mac.c
572     index bf0acff..373dae1 100644
573     --- a/drivers/net/wireless/rt2x00/rt2x00mac.c
574     +++ b/drivers/net/wireless/rt2x00/rt2x00mac.c
575     @@ -152,13 +152,22 @@ void rt2x00mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
576     if (unlikely(rt2x00queue_write_tx_frame(queue, skb, false)))
577     goto exit_fail;
578    
579     + /*
580     + * Pausing queue has to be serialized with rt2x00lib_txdone(). Note
581     + * we should not use spin_lock_bh variant as bottom halve was already
582     + * disabled before ieee80211_xmit() call.
583     + */
584     + spin_lock(&queue->tx_lock);
585     if (rt2x00queue_threshold(queue))
586     rt2x00queue_pause_queue(queue);
587     + spin_unlock(&queue->tx_lock);
588    
589     return;
590    
591     exit_fail:
592     + spin_lock(&queue->tx_lock);
593     rt2x00queue_pause_queue(queue);
594     + spin_unlock(&queue->tx_lock);
595     exit_free_skb:
596     dev_kfree_skb_any(skb);
597     }
598     diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c
599     index 5adfb3e..9b1b2b7 100644
600     --- a/drivers/net/wireless/rt2x00/rt2x00queue.c
601     +++ b/drivers/net/wireless/rt2x00/rt2x00queue.c
602     @@ -619,6 +619,9 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb,
603     else if (test_bit(REQUIRE_DMA, &queue->rt2x00dev->cap_flags))
604     rt2x00queue_align_frame(skb);
605    
606     + /*
607     + * That function must be called with bh disabled.
608     + */
609     spin_lock(&queue->tx_lock);
610    
611     if (unlikely(rt2x00queue_full(queue))) {
612     diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
613     index 1cfbf22..24f049e 100644
614     --- a/drivers/pci/pcie/aspm.c
615     +++ b/drivers/pci/pcie/aspm.c
616     @@ -500,6 +500,9 @@ static int pcie_aspm_sanity_check(struct pci_dev *pdev)
617     int pos;
618     u32 reg32;
619    
620     + if (aspm_disabled)
621     + return 0;
622     +
623     /*
624     * Some functions in a slot might not all be PCIe functions,
625     * very strange. Disable ASPM for the whole slot
626     diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
627     index b848277..1e5290b 100644
628     --- a/drivers/platform/x86/acer-wmi.c
629     +++ b/drivers/platform/x86/acer-wmi.c
630     @@ -679,6 +679,32 @@ static acpi_status AMW0_find_mailled(void)
631     return AE_OK;
632     }
633    
634     +static int AMW0_set_cap_acpi_check_device_found;
635     +
636     +static acpi_status AMW0_set_cap_acpi_check_device_cb(acpi_handle handle,
637     + u32 level, void *context, void **retval)
638     +{
639     + AMW0_set_cap_acpi_check_device_found = 1;
640     + return AE_OK;
641     +}
642     +
643     +static const struct acpi_device_id norfkill_ids[] = {
644     + { "VPC2004", 0},
645     + { "IBM0068", 0},
646     + { "LEN0068", 0},
647     + { "", 0},
648     +};
649     +
650     +static int AMW0_set_cap_acpi_check_device(void)
651     +{
652     + const struct acpi_device_id *id;
653     +
654     + for (id = norfkill_ids; id->id[0]; id++)
655     + acpi_get_devices(id->id, AMW0_set_cap_acpi_check_device_cb,
656     + NULL, NULL);
657     + return AMW0_set_cap_acpi_check_device_found;
658     +}
659     +
660     static acpi_status AMW0_set_capabilities(void)
661     {
662     struct wmab_args args;
663     @@ -692,7 +718,9 @@ static acpi_status AMW0_set_capabilities(void)
664     * work.
665     */
666     if (wmi_has_guid(AMW0_GUID2)) {
667     - interface->capability |= ACER_CAP_WIRELESS;
668     + if ((quirks != &quirk_unknown) ||
669     + !AMW0_set_cap_acpi_check_device())
670     + interface->capability |= ACER_CAP_WIRELESS;
671     return AE_OK;
672     }
673    
674     diff --git a/drivers/rapidio/devices/tsi721.h b/drivers/rapidio/devices/tsi721.h
675     index 822e54c..1c226b3 100644
676     --- a/drivers/rapidio/devices/tsi721.h
677     +++ b/drivers/rapidio/devices/tsi721.h
678     @@ -118,34 +118,34 @@
679    
680     #define TSI721_IDB_ENTRY_SIZE 64
681    
682     -#define TSI721_IDQ_CTL(x) (0x20000 + (x) * 1000)
683     +#define TSI721_IDQ_CTL(x) (0x20000 + (x) * 0x1000)
684     #define TSI721_IDQ_SUSPEND 0x00000002
685     #define TSI721_IDQ_INIT 0x00000001
686    
687     -#define TSI721_IDQ_STS(x) (0x20004 + (x) * 1000)
688     +#define TSI721_IDQ_STS(x) (0x20004 + (x) * 0x1000)
689     #define TSI721_IDQ_RUN 0x00200000
690    
691     -#define TSI721_IDQ_MASK(x) (0x20008 + (x) * 1000)
692     +#define TSI721_IDQ_MASK(x) (0x20008 + (x) * 0x1000)
693     #define TSI721_IDQ_MASK_MASK 0xffff0000
694     #define TSI721_IDQ_MASK_PATT 0x0000ffff
695    
696     -#define TSI721_IDQ_RP(x) (0x2000c + (x) * 1000)
697     +#define TSI721_IDQ_RP(x) (0x2000c + (x) * 0x1000)
698     #define TSI721_IDQ_RP_PTR 0x0007ffff
699    
700     -#define TSI721_IDQ_WP(x) (0x20010 + (x) * 1000)
701     +#define TSI721_IDQ_WP(x) (0x20010 + (x) * 0x1000)
702     #define TSI721_IDQ_WP_PTR 0x0007ffff
703    
704     -#define TSI721_IDQ_BASEL(x) (0x20014 + (x) * 1000)
705     +#define TSI721_IDQ_BASEL(x) (0x20014 + (x) * 0x1000)
706     #define TSI721_IDQ_BASEL_ADDR 0xffffffc0
707     -#define TSI721_IDQ_BASEU(x) (0x20018 + (x) * 1000)
708     -#define TSI721_IDQ_SIZE(x) (0x2001c + (x) * 1000)
709     +#define TSI721_IDQ_BASEU(x) (0x20018 + (x) * 0x1000)
710     +#define TSI721_IDQ_SIZE(x) (0x2001c + (x) * 0x1000)
711     #define TSI721_IDQ_SIZE_VAL(size) (__fls(size) - 4)
712     #define TSI721_IDQ_SIZE_MIN 512
713     #define TSI721_IDQ_SIZE_MAX (512 * 1024)
714    
715     -#define TSI721_SR_CHINT(x) (0x20040 + (x) * 1000)
716     -#define TSI721_SR_CHINTE(x) (0x20044 + (x) * 1000)
717     -#define TSI721_SR_CHINTSET(x) (0x20048 + (x) * 1000)
718     +#define TSI721_SR_CHINT(x) (0x20040 + (x) * 0x1000)
719     +#define TSI721_SR_CHINTE(x) (0x20044 + (x) * 0x1000)
720     +#define TSI721_SR_CHINTSET(x) (0x20048 + (x) * 0x1000)
721     #define TSI721_SR_CHINT_ODBOK 0x00000020
722     #define TSI721_SR_CHINT_IDBQRCV 0x00000010
723     #define TSI721_SR_CHINT_SUSP 0x00000008
724     @@ -156,7 +156,7 @@
725    
726     #define TSI721_IBWIN_NUM 8
727    
728     -#define TSI721_IBWINLB(x) (0x29000 + (x) * 20)
729     +#define TSI721_IBWINLB(x) (0x29000 + (x) * 0x20)
730     #define TSI721_IBWINLB_BA 0xfffff000
731     #define TSI721_IBWINLB_WEN 0x00000001
732    
733     @@ -187,13 +187,13 @@
734     */
735     #define TSI721_OBWIN_NUM TSI721_PC2SR_WINS
736    
737     -#define TSI721_OBWINLB(x) (0x40000 + (x) * 20)
738     +#define TSI721_OBWINLB(x) (0x40000 + (x) * 0x20)
739     #define TSI721_OBWINLB_BA 0xffff8000
740     #define TSI721_OBWINLB_WEN 0x00000001
741    
742     -#define TSI721_OBWINUB(x) (0x40004 + (x) * 20)
743     +#define TSI721_OBWINUB(x) (0x40004 + (x) * 0x20)
744    
745     -#define TSI721_OBWINSZ(x) (0x40008 + (x) * 20)
746     +#define TSI721_OBWINSZ(x) (0x40008 + (x) * 0x20)
747     #define TSI721_OBWINSZ_SIZE 0x00001f00
748     #define TSI721_OBWIN_SIZE(size) (__fls(size) - 15)
749    
750     diff --git a/drivers/regulator/tps6524x-regulator.c b/drivers/regulator/tps6524x-regulator.c
751     index 9166aa0..229b6f4 100644
752     --- a/drivers/regulator/tps6524x-regulator.c
753     +++ b/drivers/regulator/tps6524x-regulator.c
754     @@ -481,7 +481,7 @@ static int set_voltage(struct regulator_dev *rdev, int min_uV, int max_uV,
755     if (i >= info->n_voltages)
756     i = info->n_voltages - 1;
757    
758     - *selector = info->voltages[i];
759     + *selector = i;
760    
761     return write_field(hw, &info->voltage, i);
762     }
763     diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
764     index 0c1d5c73..03d3528 100644
765     --- a/drivers/target/iscsi/iscsi_target.c
766     +++ b/drivers/target/iscsi/iscsi_target.c
767     @@ -1029,7 +1029,7 @@ done:
768     return iscsit_add_reject_from_cmd(
769     ISCSI_REASON_BOOKMARK_NO_RESOURCES,
770     1, 1, buf, cmd);
771     - } else if (transport_ret == -EINVAL) {
772     + } else if (transport_ret < 0) {
773     /*
774     * Unsupported SAM Opcode. CHECK_CONDITION will be sent
775     * in iscsit_execute_cmd() during the CmdSN OOO Execution
776     diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c
777     index 778c1a6..6cf6ff4 100644
778     --- a/drivers/target/target_core_pr.c
779     +++ b/drivers/target/target_core_pr.c
780     @@ -120,7 +120,7 @@ static struct t10_pr_registration *core_scsi3_locate_pr_reg(struct se_device *,
781     struct se_node_acl *, struct se_session *);
782     static void core_scsi3_put_pr_reg(struct t10_pr_registration *);
783    
784     -static int target_check_scsi2_reservation_conflict(struct se_cmd *cmd, int *ret)
785     +static int target_check_scsi2_reservation_conflict(struct se_cmd *cmd)
786     {
787     struct se_session *se_sess = cmd->se_sess;
788     struct se_subsystem_dev *su_dev = cmd->se_dev->se_sub_dev;
789     @@ -130,7 +130,7 @@ static int target_check_scsi2_reservation_conflict(struct se_cmd *cmd, int *ret)
790     int conflict = 0;
791    
792     if (!crh)
793     - return false;
794     + return -EINVAL;
795    
796     pr_reg = core_scsi3_locate_pr_reg(cmd->se_dev, se_sess->se_node_acl,
797     se_sess);
798     @@ -158,16 +158,14 @@ static int target_check_scsi2_reservation_conflict(struct se_cmd *cmd, int *ret)
799     */
800     if (pr_reg->pr_res_holder) {
801     core_scsi3_put_pr_reg(pr_reg);
802     - *ret = 0;
803     - return false;
804     + return 1;
805     }
806     if ((pr_reg->pr_res_type == PR_TYPE_WRITE_EXCLUSIVE_REGONLY) ||
807     (pr_reg->pr_res_type == PR_TYPE_EXCLUSIVE_ACCESS_REGONLY) ||
808     (pr_reg->pr_res_type == PR_TYPE_WRITE_EXCLUSIVE_ALLREG) ||
809     (pr_reg->pr_res_type == PR_TYPE_EXCLUSIVE_ACCESS_ALLREG)) {
810     core_scsi3_put_pr_reg(pr_reg);
811     - *ret = 0;
812     - return true;
813     + return 1;
814     }
815     core_scsi3_put_pr_reg(pr_reg);
816     conflict = 1;
817     @@ -192,10 +190,10 @@ static int target_check_scsi2_reservation_conflict(struct se_cmd *cmd, int *ret)
818     " while active SPC-3 registrations exist,"
819     " returning RESERVATION_CONFLICT\n");
820     cmd->scsi_sense_reason = TCM_RESERVATION_CONFLICT;
821     - return true;
822     + return -EBUSY;
823     }
824    
825     - return false;
826     + return 0;
827     }
828    
829     int target_scsi2_reservation_release(struct se_task *task)
830     @@ -204,12 +202,18 @@ int target_scsi2_reservation_release(struct se_task *task)
831     struct se_device *dev = cmd->se_dev;
832     struct se_session *sess = cmd->se_sess;
833     struct se_portal_group *tpg = sess->se_tpg;
834     - int ret = 0;
835     + int ret = 0, rc;
836    
837     if (!sess || !tpg)
838     goto out;
839     - if (target_check_scsi2_reservation_conflict(cmd, &ret))
840     + rc = target_check_scsi2_reservation_conflict(cmd);
841     + if (rc == 1)
842     + goto out;
843     + else if (rc < 0) {
844     + cmd->scsi_sense_reason = TCM_RESERVATION_CONFLICT;
845     + ret = -EINVAL;
846     goto out;
847     + }
848    
849     ret = 0;
850     spin_lock(&dev->dev_reservation_lock);
851     @@ -246,7 +250,7 @@ int target_scsi2_reservation_reserve(struct se_task *task)
852     struct se_device *dev = cmd->se_dev;
853     struct se_session *sess = cmd->se_sess;
854     struct se_portal_group *tpg = sess->se_tpg;
855     - int ret = 0;
856     + int ret = 0, rc;
857    
858     if ((cmd->t_task_cdb[1] & 0x01) &&
859     (cmd->t_task_cdb[1] & 0x02)) {
860     @@ -262,8 +266,14 @@ int target_scsi2_reservation_reserve(struct se_task *task)
861     */
862     if (!sess || !tpg)
863     goto out;
864     - if (target_check_scsi2_reservation_conflict(cmd, &ret))
865     + rc = target_check_scsi2_reservation_conflict(cmd);
866     + if (rc == 1)
867     goto out;
868     + else if (rc < 0) {
869     + cmd->scsi_sense_reason = TCM_RESERVATION_CONFLICT;
870     + ret = -EINVAL;
871     + goto out;
872     + }
873    
874     ret = 0;
875     spin_lock(&dev->dev_reservation_lock);
876     diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
877     index e4ddb93..cdb774b 100644
878     --- a/drivers/target/target_core_transport.c
879     +++ b/drivers/target/target_core_transport.c
880     @@ -2507,6 +2507,7 @@ static int transport_generic_cmd_sequencer(
881     cmd, cdb, pr_reg_type) != 0) {
882     cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION;
883     cmd->se_cmd_flags |= SCF_SCSI_RESERVATION_CONFLICT;
884     + cmd->scsi_status = SAM_STAT_RESERVATION_CONFLICT;
885     cmd->scsi_sense_reason = TCM_RESERVATION_CONFLICT;
886     return -EBUSY;
887     }
888     diff --git a/fs/aio.c b/fs/aio.c
889     index 67e4b90..b9d64d8 100644
890     --- a/fs/aio.c
891     +++ b/fs/aio.c
892     @@ -228,12 +228,6 @@ static void __put_ioctx(struct kioctx *ctx)
893     call_rcu(&ctx->rcu_head, ctx_rcu_free);
894     }
895    
896     -static inline void get_ioctx(struct kioctx *kioctx)
897     -{
898     - BUG_ON(atomic_read(&kioctx->users) <= 0);
899     - atomic_inc(&kioctx->users);
900     -}
901     -
902     static inline int try_get_ioctx(struct kioctx *kioctx)
903     {
904     return atomic_inc_not_zero(&kioctx->users);
905     @@ -273,7 +267,7 @@ static struct kioctx *ioctx_alloc(unsigned nr_events)
906     mm = ctx->mm = current->mm;
907     atomic_inc(&mm->mm_count);
908    
909     - atomic_set(&ctx->users, 1);
910     + atomic_set(&ctx->users, 2);
911     spin_lock_init(&ctx->ctx_lock);
912     spin_lock_init(&ctx->ring_info.ring_lock);
913     init_waitqueue_head(&ctx->wait);
914     @@ -609,11 +603,16 @@ static void aio_fput_routine(struct work_struct *data)
915     fput(req->ki_filp);
916    
917     /* Link the iocb into the context's free list */
918     + rcu_read_lock();
919     spin_lock_irq(&ctx->ctx_lock);
920     really_put_req(ctx, req);
921     + /*
922     + * at that point ctx might've been killed, but actual
923     + * freeing is RCU'd
924     + */
925     spin_unlock_irq(&ctx->ctx_lock);
926     + rcu_read_unlock();
927    
928     - put_ioctx(ctx);
929     spin_lock_irq(&fput_lock);
930     }
931     spin_unlock_irq(&fput_lock);
932     @@ -644,7 +643,6 @@ static int __aio_put_req(struct kioctx *ctx, struct kiocb *req)
933     * this function will be executed w/out any aio kthread wakeup.
934     */
935     if (unlikely(!fput_atomic(req->ki_filp))) {
936     - get_ioctx(ctx);
937     spin_lock(&fput_lock);
938     list_add(&req->ki_list, &fput_head);
939     spin_unlock(&fput_lock);
940     @@ -1338,10 +1336,10 @@ SYSCALL_DEFINE2(io_setup, unsigned, nr_events, aio_context_t __user *, ctxp)
941     ret = PTR_ERR(ioctx);
942     if (!IS_ERR(ioctx)) {
943     ret = put_user(ioctx->user_id, ctxp);
944     - if (!ret)
945     + if (!ret) {
946     + put_ioctx(ioctx);
947     return 0;
948     -
949     - get_ioctx(ioctx); /* io_destroy() expects us to hold a ref */
950     + }
951     io_destroy(ioctx);
952     }
953    
954     diff --git a/fs/block_dev.c b/fs/block_dev.c
955     index b07f1da..abe9b48 100644
956     --- a/fs/block_dev.c
957     +++ b/fs/block_dev.c
958     @@ -1159,8 +1159,12 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
959     * The latter is necessary to prevent ghost
960     * partitions on a removed medium.
961     */
962     - if (bdev->bd_invalidated && (!ret || ret == -ENOMEDIUM))
963     - rescan_partitions(disk, bdev);
964     + if (bdev->bd_invalidated) {
965     + if (!ret)
966     + rescan_partitions(disk, bdev);
967     + else if (ret == -ENOMEDIUM)
968     + invalidate_partitions(disk, bdev);
969     + }
970     if (ret)
971     goto out_clear;
972     } else {
973     @@ -1190,8 +1194,12 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
974     if (bdev->bd_disk->fops->open)
975     ret = bdev->bd_disk->fops->open(bdev, mode);
976     /* the same as first opener case, read comment there */
977     - if (bdev->bd_invalidated && (!ret || ret == -ENOMEDIUM))
978     - rescan_partitions(bdev->bd_disk, bdev);
979     + if (bdev->bd_invalidated) {
980     + if (!ret)
981     + rescan_partitions(bdev->bd_disk, bdev);
982     + else if (ret == -ENOMEDIUM)
983     + invalidate_partitions(bdev->bd_disk, bdev);
984     + }
985     if (ret)
986     goto out_unlock_bdev;
987     }
988     diff --git a/fs/cifs/file.c b/fs/cifs/file.c
989     index 4dd9283..5e64748 100644
990     --- a/fs/cifs/file.c
991     +++ b/fs/cifs/file.c
992     @@ -920,16 +920,26 @@ cifs_push_mandatory_locks(struct cifsFileInfo *cfile)
993     for (lockp = &inode->i_flock; *lockp != NULL; \
994     lockp = &(*lockp)->fl_next)
995    
996     +struct lock_to_push {
997     + struct list_head llist;
998     + __u64 offset;
999     + __u64 length;
1000     + __u32 pid;
1001     + __u16 netfid;
1002     + __u8 type;
1003     +};
1004     +
1005     static int
1006     cifs_push_posix_locks(struct cifsFileInfo *cfile)
1007     {
1008     struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
1009     struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
1010     struct file_lock *flock, **before;
1011     - struct cifsLockInfo *lck, *tmp;
1012     + unsigned int count = 0, i = 0;
1013     int rc = 0, xid, type;
1014     + struct list_head locks_to_send, *el;
1015     + struct lock_to_push *lck, *tmp;
1016     __u64 length;
1017     - struct list_head locks_to_send;
1018    
1019     xid = GetXid();
1020    
1021     @@ -940,29 +950,55 @@ cifs_push_posix_locks(struct cifsFileInfo *cfile)
1022     return rc;
1023     }
1024    
1025     + lock_flocks();
1026     + cifs_for_each_lock(cfile->dentry->d_inode, before) {
1027     + if ((*before)->fl_flags & FL_POSIX)
1028     + count++;
1029     + }
1030     + unlock_flocks();
1031     +
1032     INIT_LIST_HEAD(&locks_to_send);
1033    
1034     + /*
1035     + * Allocating count locks is enough because no locks can be added to
1036     + * the list while we are holding cinode->lock_mutex that protects
1037     + * locking operations of this inode.
1038     + */
1039     + for (; i < count; i++) {
1040     + lck = kmalloc(sizeof(struct lock_to_push), GFP_KERNEL);
1041     + if (!lck) {
1042     + rc = -ENOMEM;
1043     + goto err_out;
1044     + }
1045     + list_add_tail(&lck->llist, &locks_to_send);
1046     + }
1047     +
1048     + i = 0;
1049     + el = locks_to_send.next;
1050     lock_flocks();
1051     cifs_for_each_lock(cfile->dentry->d_inode, before) {
1052     + if (el == &locks_to_send) {
1053     + /* something is really wrong */
1054     + cERROR(1, "Can't push all brlocks!");
1055     + break;
1056     + }
1057     flock = *before;
1058     + if ((flock->fl_flags & FL_POSIX) == 0)
1059     + continue;
1060     length = 1 + flock->fl_end - flock->fl_start;
1061     if (flock->fl_type == F_RDLCK || flock->fl_type == F_SHLCK)
1062     type = CIFS_RDLCK;
1063     else
1064     type = CIFS_WRLCK;
1065     -
1066     - lck = cifs_lock_init(flock->fl_start, length, type,
1067     - cfile->netfid);
1068     - if (!lck) {
1069     - rc = -ENOMEM;
1070     - goto send_locks;
1071     - }
1072     + lck = list_entry(el, struct lock_to_push, llist);
1073     lck->pid = flock->fl_pid;
1074     -
1075     - list_add_tail(&lck->llist, &locks_to_send);
1076     + lck->netfid = cfile->netfid;
1077     + lck->length = length;
1078     + lck->type = type;
1079     + lck->offset = flock->fl_start;
1080     + i++;
1081     + el = el->next;
1082     }
1083     -
1084     -send_locks:
1085     unlock_flocks();
1086    
1087     list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) {
1088     @@ -979,11 +1015,18 @@ send_locks:
1089     kfree(lck);
1090     }
1091    
1092     +out:
1093     cinode->can_cache_brlcks = false;
1094     mutex_unlock(&cinode->lock_mutex);
1095    
1096     FreeXid(xid);
1097     return rc;
1098     +err_out:
1099     + list_for_each_entry_safe(lck, tmp, &locks_to_send, llist) {
1100     + list_del(&lck->llist);
1101     + kfree(lck);
1102     + }
1103     + goto out;
1104     }
1105    
1106     static int
1107     diff --git a/fs/namei.c b/fs/namei.c
1108     index 744e942..9680cef 100644
1109     --- a/fs/namei.c
1110     +++ b/fs/namei.c
1111     @@ -2139,7 +2139,7 @@ static struct file *do_last(struct nameidata *nd, struct path *path,
1112     /* sayonara */
1113     error = complete_walk(nd);
1114     if (error)
1115     - return ERR_PTR(-ECHILD);
1116     + return ERR_PTR(error);
1117    
1118     error = -ENOTDIR;
1119     if (nd->flags & LOOKUP_DIRECTORY) {
1120     @@ -2238,7 +2238,7 @@ static struct file *do_last(struct nameidata *nd, struct path *path,
1121     /* Why this, you ask? _Now_ we might have grown LOOKUP_JUMPED... */
1122     error = complete_walk(nd);
1123     if (error)
1124     - goto exit;
1125     + return ERR_PTR(error);
1126     error = -EISDIR;
1127     if (S_ISDIR(nd->inode->i_mode))
1128     goto exit;
1129     diff --git a/fs/partitions/check.c b/fs/partitions/check.c
1130     index e3c63d1..6b5fcc5 100644
1131     --- a/fs/partitions/check.c
1132     +++ b/fs/partitions/check.c
1133     @@ -539,17 +539,11 @@ static bool disk_unlock_native_capacity(struct gendisk *disk)
1134     }
1135     }
1136    
1137     -int rescan_partitions(struct gendisk *disk, struct block_device *bdev)
1138     +static int drop_partitions(struct gendisk *disk, struct block_device *bdev)
1139     {
1140     - struct parsed_partitions *state = NULL;
1141     struct disk_part_iter piter;
1142     struct hd_struct *part;
1143     - int p, highest, res;
1144     -rescan:
1145     - if (state && !IS_ERR(state)) {
1146     - kfree(state);
1147     - state = NULL;
1148     - }
1149     + int res;
1150    
1151     if (bdev->bd_part_count)
1152     return -EBUSY;
1153     @@ -562,6 +556,24 @@ rescan:
1154     delete_partition(disk, part->partno);
1155     disk_part_iter_exit(&piter);
1156    
1157     + return 0;
1158     +}
1159     +
1160     +int rescan_partitions(struct gendisk *disk, struct block_device *bdev)
1161     +{
1162     + struct parsed_partitions *state = NULL;
1163     + struct hd_struct *part;
1164     + int p, highest, res;
1165     +rescan:
1166     + if (state && !IS_ERR(state)) {
1167     + kfree(state);
1168     + state = NULL;
1169     + }
1170     +
1171     + res = drop_partitions(disk, bdev);
1172     + if (res)
1173     + return res;
1174     +
1175     if (disk->fops->revalidate_disk)
1176     disk->fops->revalidate_disk(disk);
1177     check_disk_size_change(disk, bdev);
1178     @@ -665,6 +677,26 @@ rescan:
1179     return 0;
1180     }
1181    
1182     +int invalidate_partitions(struct gendisk *disk, struct block_device *bdev)
1183     +{
1184     + int res;
1185     +
1186     + if (!bdev->bd_invalidated)
1187     + return 0;
1188     +
1189     + res = drop_partitions(disk, bdev);
1190     + if (res)
1191     + return res;
1192     +
1193     + set_capacity(disk, 0);
1194     + check_disk_size_change(disk, bdev);
1195     + bdev->bd_invalidated = 0;
1196     + /* tell userspace that the media / partition table may have changed */
1197     + kobject_uevent(&disk_to_dev(disk)->kobj, KOBJ_CHANGE);
1198     +
1199     + return 0;
1200     +}
1201     +
1202     unsigned char *read_dev_sector(struct block_device *bdev, sector_t n, Sector *p)
1203     {
1204     struct address_space *mapping = bdev->bd_inode->i_mapping;
1205     diff --git a/include/linux/genhd.h b/include/linux/genhd.h
1206     index 6d18f35..c6f7f6a 100644
1207     --- a/include/linux/genhd.h
1208     +++ b/include/linux/genhd.h
1209     @@ -596,6 +596,7 @@ extern char *disk_name (struct gendisk *hd, int partno, char *buf);
1210    
1211     extern int disk_expand_part_tbl(struct gendisk *disk, int target);
1212     extern int rescan_partitions(struct gendisk *disk, struct block_device *bdev);
1213     +extern int invalidate_partitions(struct gendisk *disk, struct block_device *bdev);
1214     extern struct hd_struct * __must_check add_partition(struct gendisk *disk,
1215     int partno, sector_t start,
1216     sector_t len, int flags,
1217     diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
1218     index fe86488..6cf8b53 100644
1219     --- a/include/linux/skbuff.h
1220     +++ b/include/linux/skbuff.h
1221     @@ -1453,6 +1453,16 @@ static inline void skb_set_mac_header(struct sk_buff *skb, const int offset)
1222     }
1223     #endif /* NET_SKBUFF_DATA_USES_OFFSET */
1224    
1225     +static inline void skb_mac_header_rebuild(struct sk_buff *skb)
1226     +{
1227     + if (skb_mac_header_was_set(skb)) {
1228     + const unsigned char *old_mac = skb_mac_header(skb);
1229     +
1230     + skb_set_mac_header(skb, -skb->mac_len);
1231     + memmove(skb_mac_header(skb), old_mac, skb->mac_len);
1232     + }
1233     +}
1234     +
1235     static inline int skb_checksum_start_offset(const struct sk_buff *skb)
1236     {
1237     return skb->csum_start - skb_headroom(skb);
1238     diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h
1239     index 0d556de..e228ca9 100644
1240     --- a/include/linux/workqueue.h
1241     +++ b/include/linux/workqueue.h
1242     @@ -289,12 +289,16 @@ enum {
1243     *
1244     * system_freezable_wq is equivalent to system_wq except that it's
1245     * freezable.
1246     + *
1247     + * system_nrt_freezable_wq is equivalent to system_nrt_wq except that
1248     + * it's freezable.
1249     */
1250     extern struct workqueue_struct *system_wq;
1251     extern struct workqueue_struct *system_long_wq;
1252     extern struct workqueue_struct *system_nrt_wq;
1253     extern struct workqueue_struct *system_unbound_wq;
1254     extern struct workqueue_struct *system_freezable_wq;
1255     +extern struct workqueue_struct *system_nrt_freezable_wq;
1256    
1257     extern struct workqueue_struct *
1258     __alloc_workqueue_key(const char *name, unsigned int flags, int max_active,
1259     diff --git a/kernel/workqueue.c b/kernel/workqueue.c
1260     index 42fa9ad..bb425b1 100644
1261     --- a/kernel/workqueue.c
1262     +++ b/kernel/workqueue.c
1263     @@ -253,11 +253,13 @@ struct workqueue_struct *system_long_wq __read_mostly;
1264     struct workqueue_struct *system_nrt_wq __read_mostly;
1265     struct workqueue_struct *system_unbound_wq __read_mostly;
1266     struct workqueue_struct *system_freezable_wq __read_mostly;
1267     +struct workqueue_struct *system_nrt_freezable_wq __read_mostly;
1268     EXPORT_SYMBOL_GPL(system_wq);
1269     EXPORT_SYMBOL_GPL(system_long_wq);
1270     EXPORT_SYMBOL_GPL(system_nrt_wq);
1271     EXPORT_SYMBOL_GPL(system_unbound_wq);
1272     EXPORT_SYMBOL_GPL(system_freezable_wq);
1273     +EXPORT_SYMBOL_GPL(system_nrt_freezable_wq);
1274    
1275     #define CREATE_TRACE_POINTS
1276     #include <trace/events/workqueue.h>
1277     @@ -3821,8 +3823,11 @@ static int __init init_workqueues(void)
1278     WQ_UNBOUND_MAX_ACTIVE);
1279     system_freezable_wq = alloc_workqueue("events_freezable",
1280     WQ_FREEZABLE, 0);
1281     + system_nrt_freezable_wq = alloc_workqueue("events_nrt_freezable",
1282     + WQ_NON_REENTRANT | WQ_FREEZABLE, 0);
1283     BUG_ON(!system_wq || !system_long_wq || !system_nrt_wq ||
1284     - !system_unbound_wq || !system_freezable_wq);
1285     + !system_unbound_wq || !system_freezable_wq ||
1286     + !system_nrt_freezable_wq);
1287     return 0;
1288     }
1289     early_initcall(init_workqueues);
1290     diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
1291     index a5f4e57..8eb6b15 100644
1292     --- a/net/bridge/br_multicast.c
1293     +++ b/net/bridge/br_multicast.c
1294     @@ -446,8 +446,11 @@ static struct sk_buff *br_ip6_multicast_alloc_query(struct net_bridge *br,
1295     ip6h->nexthdr = IPPROTO_HOPOPTS;
1296     ip6h->hop_limit = 1;
1297     ipv6_addr_set(&ip6h->daddr, htonl(0xff020000), 0, 0, htonl(1));
1298     - ipv6_dev_get_saddr(dev_net(br->dev), br->dev, &ip6h->daddr, 0,
1299     - &ip6h->saddr);
1300     + if (ipv6_dev_get_saddr(dev_net(br->dev), br->dev, &ip6h->daddr, 0,
1301     + &ip6h->saddr)) {
1302     + kfree_skb(skb);
1303     + return NULL;
1304     + }
1305     ipv6_eth_mc_map(&ip6h->daddr, eth->h_dest);
1306    
1307     hopopt = (u8 *)(ip6h + 1);
1308     diff --git a/net/core/neighbour.c b/net/core/neighbour.c
1309     index 5ac07d3..7aafaed 100644
1310     --- a/net/core/neighbour.c
1311     +++ b/net/core/neighbour.c
1312     @@ -802,6 +802,8 @@ next_elt:
1313     write_unlock_bh(&tbl->lock);
1314     cond_resched();
1315     write_lock_bh(&tbl->lock);
1316     + nht = rcu_dereference_protected(tbl->nht,
1317     + lockdep_is_held(&tbl->lock));
1318     }
1319     /* Cycle through all hash buckets every base_reachable_time/2 ticks.
1320     * ARP entry timeouts range from 1/2 base_reachable_time to 3/2
1321     diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
1322     index 53113b9..e4d1e4a 100644
1323     --- a/net/ipv4/tcp_input.c
1324     +++ b/net/ipv4/tcp_input.c
1325     @@ -1406,8 +1406,16 @@ static int tcp_shifted_skb(struct sock *sk, struct sk_buff *skb,
1326    
1327     BUG_ON(!pcount);
1328    
1329     - /* Adjust hint for FACK. Non-FACK is handled in tcp_sacktag_one(). */
1330     - if (tcp_is_fack(tp) && (skb == tp->lost_skb_hint))
1331     + /* Adjust counters and hints for the newly sacked sequence
1332     + * range but discard the return value since prev is already
1333     + * marked. We must tag the range first because the seq
1334     + * advancement below implicitly advances
1335     + * tcp_highest_sack_seq() when skb is highest_sack.
1336     + */
1337     + tcp_sacktag_one(sk, state, TCP_SKB_CB(skb)->sacked,
1338     + start_seq, end_seq, dup_sack, pcount);
1339     +
1340     + if (skb == tp->lost_skb_hint)
1341     tp->lost_cnt_hint += pcount;
1342    
1343     TCP_SKB_CB(prev)->end_seq += shifted;
1344     @@ -1433,12 +1441,6 @@ static int tcp_shifted_skb(struct sock *sk, struct sk_buff *skb,
1345     skb_shinfo(skb)->gso_type = 0;
1346     }
1347    
1348     - /* Adjust counters and hints for the newly sacked sequence range but
1349     - * discard the return value since prev is already marked.
1350     - */
1351     - tcp_sacktag_one(sk, state, TCP_SKB_CB(skb)->sacked,
1352     - start_seq, end_seq, dup_sack, pcount);
1353     -
1354     /* Difference in this won't matter, both ACKed by the same cumul. ACK */
1355     TCP_SKB_CB(prev)->sacked |= (TCP_SKB_CB(skb)->sacked & TCPCB_EVER_RETRANS);
1356    
1357     @@ -1586,6 +1588,10 @@ static struct sk_buff *tcp_shift_skb_data(struct sock *sk, struct sk_buff *skb,
1358     }
1359     }
1360    
1361     + /* tcp_sacktag_one() won't SACK-tag ranges below snd_una */
1362     + if (!after(TCP_SKB_CB(skb)->seq + len, tp->snd_una))
1363     + goto fallback;
1364     +
1365     if (!skb_shift(prev, skb, len))
1366     goto fallback;
1367     if (!tcp_shifted_skb(sk, skb, state, pcount, len, mss, dup_sack))
1368     @@ -2569,6 +2575,7 @@ static void tcp_mark_head_lost(struct sock *sk, int packets, int mark_head)
1369    
1370     if (cnt > packets) {
1371     if ((tcp_is_sack(tp) && !tcp_is_fack(tp)) ||
1372     + (TCP_SKB_CB(skb)->sacked & TCPCB_SACKED_ACKED) ||
1373     (oldcnt >= packets))
1374     break;
1375    
1376     diff --git a/net/ipv4/xfrm4_mode_beet.c b/net/ipv4/xfrm4_mode_beet.c
1377     index 6341818..e3db3f9 100644
1378     --- a/net/ipv4/xfrm4_mode_beet.c
1379     +++ b/net/ipv4/xfrm4_mode_beet.c
1380     @@ -110,10 +110,7 @@ static int xfrm4_beet_input(struct xfrm_state *x, struct sk_buff *skb)
1381    
1382     skb_push(skb, sizeof(*iph));
1383     skb_reset_network_header(skb);
1384     -
1385     - memmove(skb->data - skb->mac_len, skb_mac_header(skb),
1386     - skb->mac_len);
1387     - skb_set_mac_header(skb, -skb->mac_len);
1388     + skb_mac_header_rebuild(skb);
1389    
1390     xfrm4_beet_make_header(skb);
1391    
1392     diff --git a/net/ipv4/xfrm4_mode_tunnel.c b/net/ipv4/xfrm4_mode_tunnel.c
1393     index 534972e..ed4bf11 100644
1394     --- a/net/ipv4/xfrm4_mode_tunnel.c
1395     +++ b/net/ipv4/xfrm4_mode_tunnel.c
1396     @@ -66,7 +66,6 @@ static int xfrm4_mode_tunnel_output(struct xfrm_state *x, struct sk_buff *skb)
1397    
1398     static int xfrm4_mode_tunnel_input(struct xfrm_state *x, struct sk_buff *skb)
1399     {
1400     - const unsigned char *old_mac;
1401     int err = -EINVAL;
1402    
1403     if (XFRM_MODE_SKB_CB(skb)->protocol != IPPROTO_IPIP)
1404     @@ -84,10 +83,9 @@ static int xfrm4_mode_tunnel_input(struct xfrm_state *x, struct sk_buff *skb)
1405     if (!(x->props.flags & XFRM_STATE_NOECN))
1406     ipip_ecn_decapsulate(skb);
1407    
1408     - old_mac = skb_mac_header(skb);
1409     - skb_set_mac_header(skb, -skb->mac_len);
1410     - memmove(skb_mac_header(skb), old_mac, skb->mac_len);
1411     skb_reset_network_header(skb);
1412     + skb_mac_header_rebuild(skb);
1413     +
1414     err = 0;
1415    
1416     out:
1417     diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
1418     index 836c4ea..a5521c5 100644
1419     --- a/net/ipv6/addrconf.c
1420     +++ b/net/ipv6/addrconf.c
1421     @@ -434,6 +434,10 @@ static struct inet6_dev * ipv6_add_dev(struct net_device *dev)
1422     /* Join all-node multicast group */
1423     ipv6_dev_mc_inc(dev, &in6addr_linklocal_allnodes);
1424    
1425     + /* Join all-router multicast group if forwarding is set */
1426     + if (ndev->cnf.forwarding && dev && (dev->flags & IFF_MULTICAST))
1427     + ipv6_dev_mc_inc(dev, &in6addr_linklocal_allrouters);
1428     +
1429     return ndev;
1430     }
1431    
1432     diff --git a/net/ipv6/xfrm6_mode_beet.c b/net/ipv6/xfrm6_mode_beet.c
1433     index 3437d7d..f37cba9 100644
1434     --- a/net/ipv6/xfrm6_mode_beet.c
1435     +++ b/net/ipv6/xfrm6_mode_beet.c
1436     @@ -80,7 +80,6 @@ static int xfrm6_beet_output(struct xfrm_state *x, struct sk_buff *skb)
1437     static int xfrm6_beet_input(struct xfrm_state *x, struct sk_buff *skb)
1438     {
1439     struct ipv6hdr *ip6h;
1440     - const unsigned char *old_mac;
1441     int size = sizeof(struct ipv6hdr);
1442     int err;
1443    
1444     @@ -90,10 +89,7 @@ static int xfrm6_beet_input(struct xfrm_state *x, struct sk_buff *skb)
1445    
1446     __skb_push(skb, size);
1447     skb_reset_network_header(skb);
1448     -
1449     - old_mac = skb_mac_header(skb);
1450     - skb_set_mac_header(skb, -skb->mac_len);
1451     - memmove(skb_mac_header(skb), old_mac, skb->mac_len);
1452     + skb_mac_header_rebuild(skb);
1453    
1454     xfrm6_beet_make_header(skb);
1455    
1456     diff --git a/net/ipv6/xfrm6_mode_tunnel.c b/net/ipv6/xfrm6_mode_tunnel.c
1457     index 4d6edff..23ecd68 100644
1458     --- a/net/ipv6/xfrm6_mode_tunnel.c
1459     +++ b/net/ipv6/xfrm6_mode_tunnel.c
1460     @@ -63,7 +63,6 @@ static int xfrm6_mode_tunnel_output(struct xfrm_state *x, struct sk_buff *skb)
1461     static int xfrm6_mode_tunnel_input(struct xfrm_state *x, struct sk_buff *skb)
1462     {
1463     int err = -EINVAL;
1464     - const unsigned char *old_mac;
1465    
1466     if (XFRM_MODE_SKB_CB(skb)->protocol != IPPROTO_IPV6)
1467     goto out;
1468     @@ -80,10 +79,9 @@ static int xfrm6_mode_tunnel_input(struct xfrm_state *x, struct sk_buff *skb)
1469     if (!(x->props.flags & XFRM_STATE_NOECN))
1470     ipip6_ecn_decapsulate(skb);
1471    
1472     - old_mac = skb_mac_header(skb);
1473     - skb_set_mac_header(skb, -skb->mac_len);
1474     - memmove(skb_mac_header(skb), old_mac, skb->mac_len);
1475     skb_reset_network_header(skb);
1476     + skb_mac_header_rebuild(skb);
1477     +
1478     err = 0;
1479    
1480     out:
1481     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
1482     index 3d8fbf4..dc8a6fc 100644
1483     --- a/sound/pci/hda/patch_realtek.c
1484     +++ b/sound/pci/hda/patch_realtek.c
1485     @@ -2063,12 +2063,16 @@ static int alc_build_controls(struct hda_codec *codec)
1486     */
1487    
1488     static void alc_init_special_input_src(struct hda_codec *codec);
1489     +static int alc269_fill_coef(struct hda_codec *codec);
1490    
1491     static int alc_init(struct hda_codec *codec)
1492     {
1493     struct alc_spec *spec = codec->spec;
1494     unsigned int i;
1495    
1496     + if (codec->vendor_id == 0x10ec0269)
1497     + alc269_fill_coef(codec);
1498     +
1499     alc_fix_pll(codec);
1500     alc_auto_init_amp(codec, spec->init_amp);
1501    
1502     @@ -5110,8 +5114,12 @@ static const struct alc_model_fixup alc269_fixup_models[] = {
1503    
1504     static int alc269_fill_coef(struct hda_codec *codec)
1505     {
1506     + struct alc_spec *spec = codec->spec;
1507     int val;
1508    
1509     + if (spec->codec_variant != ALC269_TYPE_ALC269VB)
1510     + return 0;
1511     +
1512     if ((alc_get_coef0(codec) & 0x00ff) < 0x015) {
1513     alc_write_coef_idx(codec, 0xf, 0x960b);
1514     alc_write_coef_idx(codec, 0xe, 0x8817);
1515     diff --git a/sound/soc/samsung/neo1973_wm8753.c b/sound/soc/samsung/neo1973_wm8753.c
1516     index 7207189..2fba3f7 100644
1517     --- a/sound/soc/samsung/neo1973_wm8753.c
1518     +++ b/sound/soc/samsung/neo1973_wm8753.c
1519     @@ -421,7 +421,7 @@ static struct snd_soc_dai_link neo1973_dai[] = {
1520     .platform_name = "samsung-audio",
1521     .cpu_dai_name = "s3c24xx-iis",
1522     .codec_dai_name = "wm8753-hifi",
1523     - .codec_name = "wm8753-codec.0-001a",
1524     + .codec_name = "wm8753.0-001a",
1525     .init = neo1973_wm8753_init,
1526     .ops = &neo1973_hifi_ops,
1527     },
1528     @@ -430,7 +430,7 @@ static struct snd_soc_dai_link neo1973_dai[] = {
1529     .stream_name = "Voice",
1530     .cpu_dai_name = "dfbmcs320-pcm",
1531     .codec_dai_name = "wm8753-voice",
1532     - .codec_name = "wm8753-codec.0-001a",
1533     + .codec_name = "wm8753.0-001a",
1534     .ops = &neo1973_voice_ops,
1535     },
1536     };