Magellan Linux

Annotation of /trunk/kernel-lts/patches-3.4/0156-3.4.57-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2261 - (hide annotations) (download)
Mon Aug 19 09:25:41 2013 UTC (10 years, 10 months ago) by niro
File size: 24669 byte(s)
-linux-3.4.57
1 niro 2261 diff --git a/Makefile b/Makefile
2     index 2fe1f6d..7f4df0c 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 3
7     PATCHLEVEL = 4
8     -SUBLEVEL = 56
9     +SUBLEVEL = 57
10     EXTRAVERSION =
11     NAME = Saber-toothed Squirrel
12    
13     diff --git a/arch/x86/kernel/i387.c b/arch/x86/kernel/i387.c
14     index 2d6e649..6610e81 100644
15     --- a/arch/x86/kernel/i387.c
16     +++ b/arch/x86/kernel/i387.c
17     @@ -132,7 +132,7 @@ static void __cpuinit mxcsr_feature_mask_init(void)
18     clts();
19     if (cpu_has_fxsr) {
20     memset(&fx_scratch, 0, sizeof(struct i387_fxsave_struct));
21     - asm volatile("fxsave %0" : : "m" (fx_scratch));
22     + asm volatile("fxsave %0" : "+m" (fx_scratch));
23     mask = fx_scratch.mxcsr_mask;
24     if (mask == 0)
25     mask = 0x0000ffbf;
26     diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
27     index 6ea287e2..9bdfcf5 100644
28     --- a/drivers/acpi/battery.c
29     +++ b/drivers/acpi/battery.c
30     @@ -117,6 +117,7 @@ struct acpi_battery {
31     struct acpi_device *device;
32     struct notifier_block pm_nb;
33     unsigned long update_time;
34     + int revision;
35     int rate_now;
36     int capacity_now;
37     int voltage_now;
38     @@ -350,6 +351,7 @@ static struct acpi_offsets info_offsets[] = {
39     };
40    
41     static struct acpi_offsets extended_info_offsets[] = {
42     + {offsetof(struct acpi_battery, revision), 0},
43     {offsetof(struct acpi_battery, power_unit), 0},
44     {offsetof(struct acpi_battery, design_capacity), 0},
45     {offsetof(struct acpi_battery, full_charge_capacity), 0},
46     diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
47     index 45c5cf8..232119a 100644
48     --- a/drivers/gpu/drm/i915/i915_drv.h
49     +++ b/drivers/gpu/drm/i915/i915_drv.h
50     @@ -296,6 +296,7 @@ enum intel_pch {
51    
52     #define QUIRK_PIPEA_FORCE (1<<0)
53     #define QUIRK_LVDS_SSC_DISABLE (1<<1)
54     +#define QUIRK_NO_PCH_PWM_ENABLE (1<<2)
55    
56     struct intel_fbdev;
57     struct intel_fbc_work;
58     diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
59     index 84867a8..0e35922 100644
60     --- a/drivers/gpu/drm/i915/intel_display.c
61     +++ b/drivers/gpu/drm/i915/intel_display.c
62     @@ -9160,6 +9160,17 @@ static void quirk_ssc_force_disable(struct drm_device *dev)
63     dev_priv->quirks |= QUIRK_LVDS_SSC_DISABLE;
64     }
65    
66     +/*
67     + * Some machines (Dell XPS13) suffer broken backlight controls if
68     + * BLM_PCH_PWM_ENABLE is set.
69     + */
70     +static void quirk_no_pcm_pwm_enable(struct drm_device *dev)
71     +{
72     + struct drm_i915_private *dev_priv = dev->dev_private;
73     + dev_priv->quirks |= QUIRK_NO_PCH_PWM_ENABLE;
74     + DRM_INFO("applying no-PCH_PWM_ENABLE quirk\n");
75     +}
76     +
77     struct intel_quirk {
78     int device;
79     int subsystem_vendor;
80     @@ -9192,6 +9203,11 @@ struct intel_quirk intel_quirks[] = {
81    
82     /* Sony Vaio Y cannot use SSC on LVDS */
83     { 0x0046, 0x104d, 0x9076, quirk_ssc_force_disable },
84     +
85     + /* Dell XPS13 HD Sandy Bridge */
86     + { 0x0116, 0x1028, 0x052e, quirk_no_pcm_pwm_enable },
87     + /* Dell XPS13 HD and XPS13 FHD Ivy Bridge */
88     + { 0x0166, 0x1028, 0x058b, quirk_no_pcm_pwm_enable },
89     };
90    
91     static void intel_init_quirks(struct drm_device *dev)
92     diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
93     index 207180d..ab4d990 100644
94     --- a/drivers/gpu/drm/i915/intel_lvds.c
95     +++ b/drivers/gpu/drm/i915/intel_lvds.c
96     @@ -1097,7 +1097,8 @@ bool intel_lvds_init(struct drm_device *dev)
97     goto failed;
98    
99     out:
100     - if (HAS_PCH_SPLIT(dev)) {
101     + if (HAS_PCH_SPLIT(dev) &&
102     + !(dev_priv->quirks & QUIRK_NO_PCH_PWM_ENABLE)) {
103     u32 pwm;
104    
105     pipe = (I915_READ(PCH_LVDS) & LVDS_PIPEB_SELECT) ? 1 : 0;
106     diff --git a/drivers/net/arcnet/arcnet.c b/drivers/net/arcnet/arcnet.c
107     index a746ba2..a956053 100644
108     --- a/drivers/net/arcnet/arcnet.c
109     +++ b/drivers/net/arcnet/arcnet.c
110     @@ -1007,7 +1007,7 @@ static void arcnet_rx(struct net_device *dev, int bufnum)
111    
112     soft = &pkt.soft.rfc1201;
113    
114     - lp->hw.copy_from_card(dev, bufnum, 0, &pkt, sizeof(ARC_HDR_SIZE));
115     + lp->hw.copy_from_card(dev, bufnum, 0, &pkt, ARC_HDR_SIZE);
116     if (pkt.hard.offset[0]) {
117     ofs = pkt.hard.offset[0];
118     length = 256 - ofs;
119     diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.c
120     index d3695ed..a061e37 100644
121     --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.c
122     +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.c
123     @@ -108,9 +108,8 @@ s32 ixgbe_dcb_config_tx_desc_arbiter_82598(struct ixgbe_hw *hw,
124    
125     /* Enable arbiter */
126     reg &= ~IXGBE_DPMCS_ARBDIS;
127     - /* Enable DFP and Recycle mode */
128     - reg |= (IXGBE_DPMCS_TDPAC | IXGBE_DPMCS_TRM);
129     reg |= IXGBE_DPMCS_TSOEF;
130     +
131     /* Configure Max TSO packet size 34KB including payload and headers */
132     reg |= (0x4 << IXGBE_DPMCS_MTSOS_SHIFT);
133    
134     diff --git a/drivers/net/ethernet/realtek/8139cp.c b/drivers/net/ethernet/realtek/8139cp.c
135     index 4ce981c..2205db7 100644
136     --- a/drivers/net/ethernet/realtek/8139cp.c
137     +++ b/drivers/net/ethernet/realtek/8139cp.c
138     @@ -478,7 +478,7 @@ rx_status_loop:
139    
140     while (1) {
141     u32 status, len;
142     - dma_addr_t mapping;
143     + dma_addr_t mapping, new_mapping;
144     struct sk_buff *skb, *new_skb;
145     struct cp_desc *desc;
146     const unsigned buflen = cp->rx_buf_sz;
147     @@ -520,6 +520,13 @@ rx_status_loop:
148     goto rx_next;
149     }
150    
151     + new_mapping = dma_map_single(&cp->pdev->dev, new_skb->data, buflen,
152     + PCI_DMA_FROMDEVICE);
153     + if (dma_mapping_error(&cp->pdev->dev, new_mapping)) {
154     + dev->stats.rx_dropped++;
155     + goto rx_next;
156     + }
157     +
158     dma_unmap_single(&cp->pdev->dev, mapping,
159     buflen, PCI_DMA_FROMDEVICE);
160    
161     @@ -531,12 +538,11 @@ rx_status_loop:
162    
163     skb_put(skb, len);
164    
165     - mapping = dma_map_single(&cp->pdev->dev, new_skb->data, buflen,
166     - PCI_DMA_FROMDEVICE);
167     cp->rx_skb[rx_tail] = new_skb;
168    
169     cp_rx_skb(cp, skb, desc);
170     rx++;
171     + mapping = new_mapping;
172    
173     rx_next:
174     cp->rx_ring[rx_tail].opts2 = 0;
175     @@ -704,6 +710,22 @@ static inline u32 cp_tx_vlan_tag(struct sk_buff *skb)
176     TxVlanTag | swab16(vlan_tx_tag_get(skb)) : 0x00;
177     }
178    
179     +static void unwind_tx_frag_mapping(struct cp_private *cp, struct sk_buff *skb,
180     + int first, int entry_last)
181     +{
182     + int frag, index;
183     + struct cp_desc *txd;
184     + skb_frag_t *this_frag;
185     + for (frag = 0; frag+first < entry_last; frag++) {
186     + index = first+frag;
187     + cp->tx_skb[index] = NULL;
188     + txd = &cp->tx_ring[index];
189     + this_frag = &skb_shinfo(skb)->frags[frag];
190     + dma_unmap_single(&cp->pdev->dev, le64_to_cpu(txd->addr),
191     + skb_frag_size(this_frag), PCI_DMA_TODEVICE);
192     + }
193     +}
194     +
195     static netdev_tx_t cp_start_xmit (struct sk_buff *skb,
196     struct net_device *dev)
197     {
198     @@ -737,6 +759,9 @@ static netdev_tx_t cp_start_xmit (struct sk_buff *skb,
199    
200     len = skb->len;
201     mapping = dma_map_single(&cp->pdev->dev, skb->data, len, PCI_DMA_TODEVICE);
202     + if (dma_mapping_error(&cp->pdev->dev, mapping))
203     + goto out_dma_error;
204     +
205     txd->opts2 = opts2;
206     txd->addr = cpu_to_le64(mapping);
207     wmb();
208     @@ -774,6 +799,9 @@ static netdev_tx_t cp_start_xmit (struct sk_buff *skb,
209     first_len = skb_headlen(skb);
210     first_mapping = dma_map_single(&cp->pdev->dev, skb->data,
211     first_len, PCI_DMA_TODEVICE);
212     + if (dma_mapping_error(&cp->pdev->dev, first_mapping))
213     + goto out_dma_error;
214     +
215     cp->tx_skb[entry] = skb;
216     entry = NEXT_TX(entry);
217    
218     @@ -787,6 +815,11 @@ static netdev_tx_t cp_start_xmit (struct sk_buff *skb,
219     mapping = dma_map_single(&cp->pdev->dev,
220     skb_frag_address(this_frag),
221     len, PCI_DMA_TODEVICE);
222     + if (dma_mapping_error(&cp->pdev->dev, mapping)) {
223     + unwind_tx_frag_mapping(cp, skb, first_entry, entry);
224     + goto out_dma_error;
225     + }
226     +
227     eor = (entry == (CP_TX_RING_SIZE - 1)) ? RingEnd : 0;
228    
229     ctrl = eor | len | DescOwn;
230     @@ -845,11 +878,16 @@ static netdev_tx_t cp_start_xmit (struct sk_buff *skb,
231     if (TX_BUFFS_AVAIL(cp) <= (MAX_SKB_FRAGS + 1))
232     netif_stop_queue(dev);
233    
234     +out_unlock:
235     spin_unlock_irqrestore(&cp->lock, intr_flags);
236    
237     cpw8(TxPoll, NormalTxPoll);
238    
239     return NETDEV_TX_OK;
240     +out_dma_error:
241     + kfree_skb(skb);
242     + cp->dev->stats.tx_dropped++;
243     + goto out_unlock;
244     }
245    
246     /* Set or clear the multicast filter for this adaptor.
247     @@ -1020,6 +1058,10 @@ static int cp_refill_rx(struct cp_private *cp)
248    
249     mapping = dma_map_single(&cp->pdev->dev, skb->data,
250     cp->rx_buf_sz, PCI_DMA_FROMDEVICE);
251     + if (dma_mapping_error(&cp->pdev->dev, mapping)) {
252     + kfree_skb(skb);
253     + goto err_out;
254     + }
255     cp->rx_skb[i] = skb;
256    
257     cp->rx_ring[i].opts2 = 0;
258     diff --git a/drivers/net/usb/smsc75xx.c b/drivers/net/usb/smsc75xx.c
259     index 5caba55..d89747a 100644
260     --- a/drivers/net/usb/smsc75xx.c
261     +++ b/drivers/net/usb/smsc75xx.c
262     @@ -43,7 +43,6 @@
263     #define EEPROM_MAC_OFFSET (0x01)
264     #define DEFAULT_TX_CSUM_ENABLE (true)
265     #define DEFAULT_RX_CSUM_ENABLE (true)
266     -#define DEFAULT_TSO_ENABLE (true)
267     #define SMSC75XX_INTERNAL_PHY_ID (1)
268     #define SMSC75XX_TX_OVERHEAD (8)
269     #define MAX_RX_FIFO_SIZE (20 * 1024)
270     @@ -1049,17 +1048,14 @@ static int smsc75xx_bind(struct usbnet *dev, struct usb_interface *intf)
271    
272     INIT_WORK(&pdata->set_multicast, smsc75xx_deferred_multicast_write);
273    
274     - if (DEFAULT_TX_CSUM_ENABLE) {
275     + if (DEFAULT_TX_CSUM_ENABLE)
276     dev->net->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
277     - if (DEFAULT_TSO_ENABLE)
278     - dev->net->features |= NETIF_F_SG |
279     - NETIF_F_TSO | NETIF_F_TSO6;
280     - }
281     +
282     if (DEFAULT_RX_CSUM_ENABLE)
283     dev->net->features |= NETIF_F_RXCSUM;
284    
285     dev->net->hw_features = NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
286     - NETIF_F_SG | NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_RXCSUM;
287     + NETIF_F_RXCSUM;
288    
289     /* Init all registers */
290     ret = smsc75xx_reset(dev);
291     @@ -1184,8 +1180,6 @@ static struct sk_buff *smsc75xx_tx_fixup(struct usbnet *dev,
292     {
293     u32 tx_cmd_a, tx_cmd_b;
294    
295     - skb_linearize(skb);
296     -
297     if (skb_headroom(skb) < SMSC75XX_TX_OVERHEAD) {
298     struct sk_buff *skb2 =
299     skb_copy_expand(skb, SMSC75XX_TX_OVERHEAD, 0, flags);
300     diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
301     index 41c5237..2b8406a 100644
302     --- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c
303     +++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
304     @@ -821,6 +821,7 @@ static int ath9k_init_device(struct ath9k_htc_priv *priv,
305     if (error != 0)
306     goto err_rx;
307    
308     + ath9k_hw_disable(priv->ah);
309     #ifdef CONFIG_MAC80211_LEDS
310     /* must be initialized before ieee80211_register_hw */
311     priv->led_cdev.default_trigger = ieee80211_create_tpt_led_trigger(priv->hw,
312     diff --git a/drivers/net/wireless/mwifiex/sdio.c b/drivers/net/wireless/mwifiex/sdio.c
313     index 7d00a87..4be8ccc 100644
314     --- a/drivers/net/wireless/mwifiex/sdio.c
315     +++ b/drivers/net/wireless/mwifiex/sdio.c
316     @@ -1449,8 +1449,8 @@ static int mwifiex_sdio_host_to_card(struct mwifiex_adapter *adapter,
317     /* Allocate buffer and copy payload */
318     blk_size = MWIFIEX_SDIO_BLOCK_SIZE;
319     buf_block_len = (pkt_len + blk_size - 1) / blk_size;
320     - *(u16 *) &payload[0] = (u16) pkt_len;
321     - *(u16 *) &payload[2] = type;
322     + *(__le16 *)&payload[0] = cpu_to_le16((u16)pkt_len);
323     + *(__le16 *)&payload[2] = cpu_to_le16(type);
324    
325     /*
326     * This is SDIO specific header
327     diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c
328     index 50f92d5..4d792a2 100644
329     --- a/drivers/net/wireless/rt2x00/rt2x00queue.c
330     +++ b/drivers/net/wireless/rt2x00/rt2x00queue.c
331     @@ -856,13 +856,8 @@ void rt2x00queue_index_inc(struct queue_entry *entry, enum queue_index index)
332     spin_unlock_irqrestore(&queue->index_lock, irqflags);
333     }
334    
335     -void rt2x00queue_pause_queue(struct data_queue *queue)
336     +void rt2x00queue_pause_queue_nocheck(struct data_queue *queue)
337     {
338     - if (!test_bit(DEVICE_STATE_PRESENT, &queue->rt2x00dev->flags) ||
339     - !test_bit(QUEUE_STARTED, &queue->flags) ||
340     - test_and_set_bit(QUEUE_PAUSED, &queue->flags))
341     - return;
342     -
343     switch (queue->qid) {
344     case QID_AC_VO:
345     case QID_AC_VI:
346     @@ -878,6 +873,15 @@ void rt2x00queue_pause_queue(struct data_queue *queue)
347     break;
348     }
349     }
350     +void rt2x00queue_pause_queue(struct data_queue *queue)
351     +{
352     + if (!test_bit(DEVICE_STATE_PRESENT, &queue->rt2x00dev->flags) ||
353     + !test_bit(QUEUE_STARTED, &queue->flags) ||
354     + test_and_set_bit(QUEUE_PAUSED, &queue->flags))
355     + return;
356     +
357     + rt2x00queue_pause_queue_nocheck(queue);
358     +}
359     EXPORT_SYMBOL_GPL(rt2x00queue_pause_queue);
360    
361     void rt2x00queue_unpause_queue(struct data_queue *queue)
362     @@ -939,7 +943,7 @@ void rt2x00queue_stop_queue(struct data_queue *queue)
363     return;
364     }
365    
366     - rt2x00queue_pause_queue(queue);
367     + rt2x00queue_pause_queue_nocheck(queue);
368    
369     queue->rt2x00dev->ops->lib->stop_queue(queue);
370    
371     diff --git a/drivers/tty/serial/mxs-auart.c b/drivers/tty/serial/mxs-auart.c
372     index 039c054..c75b27b 100644
373     --- a/drivers/tty/serial/mxs-auart.c
374     +++ b/drivers/tty/serial/mxs-auart.c
375     @@ -375,11 +375,18 @@ static void mxs_auart_settermios(struct uart_port *u,
376    
377     static irqreturn_t mxs_auart_irq_handle(int irq, void *context)
378     {
379     - u32 istatus, istat;
380     + u32 istat;
381     struct mxs_auart_port *s = context;
382     u32 stat = readl(s->port.membase + AUART_STAT);
383    
384     - istatus = istat = readl(s->port.membase + AUART_INTR);
385     + istat = readl(s->port.membase + AUART_INTR);
386     +
387     + /* ack irq */
388     + writel(istat & (AUART_INTR_RTIS
389     + | AUART_INTR_TXIS
390     + | AUART_INTR_RXIS
391     + | AUART_INTR_CTSMIS),
392     + s->port.membase + AUART_INTR_CLR);
393    
394     if (istat & AUART_INTR_CTSMIS) {
395     uart_handle_cts_change(&s->port, stat & AUART_STAT_CTS);
396     @@ -398,12 +405,6 @@ static irqreturn_t mxs_auart_irq_handle(int irq, void *context)
397     istat &= ~AUART_INTR_TXIS;
398     }
399    
400     - writel(istatus & (AUART_INTR_RTIS
401     - | AUART_INTR_TXIS
402     - | AUART_INTR_RXIS
403     - | AUART_INTR_CTSMIS),
404     - s->port.membase + AUART_INTR_CLR);
405     -
406     return IRQ_HANDLED;
407     }
408    
409     @@ -543,7 +544,7 @@ auart_console_write(struct console *co, const char *str, unsigned int count)
410     struct mxs_auart_port *s;
411     struct uart_port *port;
412     unsigned int old_ctrl0, old_ctrl2;
413     - unsigned int to = 1000;
414     + unsigned int to = 20000;
415    
416     if (co->index > MXS_AUART_PORTS || co->index < 0)
417     return;
418     @@ -564,18 +565,23 @@ auart_console_write(struct console *co, const char *str, unsigned int count)
419    
420     uart_console_write(port, str, count, mxs_auart_console_putchar);
421    
422     - /*
423     - * Finally, wait for transmitter to become empty
424     - * and restore the TCR
425     - */
426     + /* Finally, wait for transmitter to become empty ... */
427     while (readl(port->membase + AUART_STAT) & AUART_STAT_BUSY) {
428     + udelay(1);
429     if (!to--)
430     break;
431     - udelay(1);
432     }
433    
434     - writel(old_ctrl0, port->membase + AUART_CTRL0);
435     - writel(old_ctrl2, port->membase + AUART_CTRL2);
436     + /*
437     + * ... and restore the TCR if we waited long enough for the transmitter
438     + * to be idle. This might keep the transmitter enabled although it is
439     + * unused, but that is better than to disable it while it is still
440     + * transmitting.
441     + */
442     + if (!(readl(port->membase + AUART_STAT) & AUART_STAT_BUSY)) {
443     + writel(old_ctrl0, port->membase + AUART_CTRL0);
444     + writel(old_ctrl2, port->membase + AUART_CTRL2);
445     + }
446    
447     clk_disable(s->clk);
448     }
449     diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c
450     index 3568c8a..48bc91d 100644
451     --- a/fs/notify/fanotify/fanotify_user.c
452     +++ b/fs/notify/fanotify/fanotify_user.c
453     @@ -120,6 +120,7 @@ static int fill_event_metadata(struct fsnotify_group *group,
454     metadata->event_len = FAN_EVENT_METADATA_LEN;
455     metadata->metadata_len = FAN_EVENT_METADATA_LEN;
456     metadata->vers = FANOTIFY_METADATA_VERSION;
457     + metadata->reserved = 0;
458     metadata->mask = event->mask & FAN_ALL_OUTGOING_EVENTS;
459     metadata->pid = pid_vnr(event->tgid);
460     if (unlikely(event->mask & FAN_Q_OVERFLOW))
461     diff --git a/kernel/events/core.c b/kernel/events/core.c
462     index d074cf0..8e810ba 100644
463     --- a/kernel/events/core.c
464     +++ b/kernel/events/core.c
465     @@ -250,9 +250,9 @@ perf_cgroup_match(struct perf_event *event)
466     return !event->cgrp || event->cgrp == cpuctx->cgrp;
467     }
468    
469     -static inline void perf_get_cgroup(struct perf_event *event)
470     +static inline bool perf_tryget_cgroup(struct perf_event *event)
471     {
472     - css_get(&event->cgrp->css);
473     + return css_tryget(&event->cgrp->css);
474     }
475    
476     static inline void perf_put_cgroup(struct perf_event *event)
477     @@ -481,7 +481,11 @@ static inline int perf_cgroup_connect(int fd, struct perf_event *event,
478     event->cgrp = cgrp;
479    
480     /* must be done before we fput() the file */
481     - perf_get_cgroup(event);
482     + if (!perf_tryget_cgroup(event)) {
483     + event->cgrp = NULL;
484     + ret = -ENOENT;
485     + goto out;
486     + }
487    
488     /*
489     * all events in a group must monitor
490     @@ -911,6 +915,15 @@ list_add_event(struct perf_event *event, struct perf_event_context *ctx)
491     }
492    
493     /*
494     + * Initialize event state based on the perf_event_attr::disabled.
495     + */
496     +static inline void perf_event__state_init(struct perf_event *event)
497     +{
498     + event->state = event->attr.disabled ? PERF_EVENT_STATE_OFF :
499     + PERF_EVENT_STATE_INACTIVE;
500     +}
501     +
502     +/*
503     * Called at perf_event creation and when events are attached/detached from a
504     * group.
505     */
506     @@ -6058,8 +6071,7 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,
507     event->overflow_handler = overflow_handler;
508     event->overflow_handler_context = context;
509    
510     - if (attr->disabled)
511     - event->state = PERF_EVENT_STATE_OFF;
512     + perf_event__state_init(event);
513    
514     pmu = NULL;
515    
516     @@ -6481,9 +6493,17 @@ SYSCALL_DEFINE5(perf_event_open,
517    
518     mutex_lock(&gctx->mutex);
519     perf_remove_from_context(group_leader);
520     +
521     + /*
522     + * Removing from the context ends up with disabled
523     + * event. What we want here is event in the initial
524     + * startup state, ready to be add into new context.
525     + */
526     + perf_event__state_init(group_leader);
527     list_for_each_entry(sibling, &group_leader->sibling_list,
528     group_entry) {
529     perf_remove_from_context(sibling);
530     + perf_event__state_init(sibling);
531     put_ctx(gctx);
532     }
533     mutex_unlock(&gctx->mutex);
534     diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
535     index e955364..da4512f 100644
536     --- a/kernel/sched/fair.c
537     +++ b/kernel/sched/fair.c
538     @@ -5511,7 +5511,7 @@ static unsigned int get_rr_interval_fair(struct rq *rq, struct task_struct *task
539     * idle runqueue:
540     */
541     if (rq->cfs.load.weight)
542     - rr_interval = NS_TO_JIFFIES(sched_slice(&rq->cfs, se));
543     + rr_interval = NS_TO_JIFFIES(sched_slice(cfs_rq_of(se), se));
544    
545     return rr_interval;
546     }
547     diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c
548     index bf7a604..086c973 100644
549     --- a/net/ipv4/sysctl_net_ipv4.c
550     +++ b/net/ipv4/sysctl_net_ipv4.c
551     @@ -34,6 +34,8 @@ static int tcp_adv_win_scale_min = -31;
552     static int tcp_adv_win_scale_max = 31;
553     static int ip_ttl_min = 1;
554     static int ip_ttl_max = 255;
555     +static int tcp_syn_retries_min = 1;
556     +static int tcp_syn_retries_max = MAX_TCP_SYNCNT;
557     static int ip_ping_group_range_min[] = { 0, 0 };
558     static int ip_ping_group_range_max[] = { GID_T_MAX, GID_T_MAX };
559    
560     @@ -276,7 +278,9 @@ static struct ctl_table ipv4_table[] = {
561     .data = &sysctl_tcp_syn_retries,
562     .maxlen = sizeof(int),
563     .mode = 0644,
564     - .proc_handler = proc_dointvec
565     + .proc_handler = proc_dointvec_minmax,
566     + .extra1 = &tcp_syn_retries_min,
567     + .extra2 = &tcp_syn_retries_max
568     },
569     {
570     .procname = "tcp_synack_retries",
571     diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c
572     index 8110362..d5e4615 100644
573     --- a/net/ipv6/ip6mr.c
574     +++ b/net/ipv6/ip6mr.c
575     @@ -256,10 +256,12 @@ static void __net_exit ip6mr_rules_exit(struct net *net)
576     {
577     struct mr6_table *mrt, *next;
578    
579     + rtnl_lock();
580     list_for_each_entry_safe(mrt, next, &net->ipv6.mr6_tables, list) {
581     list_del(&mrt->list);
582     ip6mr_free_table(mrt);
583     }
584     + rtnl_unlock();
585     fib_rules_unregister(net->ipv6.mr6_rules_ops);
586     }
587     #else
588     @@ -286,7 +288,10 @@ static int __net_init ip6mr_rules_init(struct net *net)
589    
590     static void __net_exit ip6mr_rules_exit(struct net *net)
591     {
592     + rtnl_lock();
593     ip6mr_free_table(net->ipv6.mrt6);
594     + net->ipv6.mrt6 = NULL;
595     + rtnl_unlock();
596     }
597     #endif
598    
599     diff --git a/net/key/af_key.c b/net/key/af_key.c
600     index 5bbab6a..60109f4 100644
601     --- a/net/key/af_key.c
602     +++ b/net/key/af_key.c
603     @@ -2073,6 +2073,7 @@ static int pfkey_xfrm_policy2msg(struct sk_buff *skb, const struct xfrm_policy *
604     pol->sadb_x_policy_type = IPSEC_POLICY_NONE;
605     }
606     pol->sadb_x_policy_dir = dir+1;
607     + pol->sadb_x_policy_reserved = 0;
608     pol->sadb_x_policy_id = xp->index;
609     pol->sadb_x_policy_priority = xp->priority;
610    
611     @@ -3108,7 +3109,9 @@ static int pfkey_send_acquire(struct xfrm_state *x, struct xfrm_tmpl *t, struct
612     pol->sadb_x_policy_exttype = SADB_X_EXT_POLICY;
613     pol->sadb_x_policy_type = IPSEC_POLICY_IPSEC;
614     pol->sadb_x_policy_dir = dir+1;
615     + pol->sadb_x_policy_reserved = 0;
616     pol->sadb_x_policy_id = xp->index;
617     + pol->sadb_x_policy_priority = xp->priority;
618    
619     /* Set sadb_comb's. */
620     if (x->id.proto == IPPROTO_AH)
621     @@ -3496,6 +3499,7 @@ static int pfkey_send_migrate(const struct xfrm_selector *sel, u8 dir, u8 type,
622     pol->sadb_x_policy_exttype = SADB_X_EXT_POLICY;
623     pol->sadb_x_policy_type = IPSEC_POLICY_IPSEC;
624     pol->sadb_x_policy_dir = dir + 1;
625     + pol->sadb_x_policy_reserved = 0;
626     pol->sadb_x_policy_id = 0;
627     pol->sadb_x_policy_priority = 0;
628    
629     diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
630     index 8ce9feb..067aa2a 100644
631     --- a/net/mac80211/rx.c
632     +++ b/net/mac80211/rx.c
633     @@ -831,8 +831,14 @@ ieee80211_rx_h_check(struct ieee80211_rx_data *rx)
634     struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
635     struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
636    
637     - /* Drop duplicate 802.11 retransmissions (IEEE 802.11 Chap. 9.2.9) */
638     - if (rx->sta && !is_multicast_ether_addr(hdr->addr1)) {
639     + /*
640     + * Drop duplicate 802.11 retransmissions
641     + * (IEEE 802.11-2012: 9.3.2.10 "Duplicate detection and recovery")
642     + */
643     + if (rx->skb->len >= 24 && rx->sta &&
644     + !ieee80211_is_ctl(hdr->frame_control) &&
645     + !ieee80211_is_qos_nullfunc(hdr->frame_control) &&
646     + !is_multicast_ether_addr(hdr->addr1)) {
647     if (unlikely(ieee80211_has_retry(hdr->frame_control) &&
648     rx->sta->last_seq_ctrl[rx->seqno_idx] ==
649     hdr->seq_ctrl)) {
650     diff --git a/net/sched/sch_atm.c b/net/sched/sch_atm.c
651     index e25e490..6e38ef0 100644
652     --- a/net/sched/sch_atm.c
653     +++ b/net/sched/sch_atm.c
654     @@ -606,6 +606,7 @@ static int atm_tc_dump_class(struct Qdisc *sch, unsigned long cl,
655     struct sockaddr_atmpvc pvc;
656     int state;
657    
658     + memset(&pvc, 0, sizeof(pvc));
659     pvc.sap_family = AF_ATMPVC;
660     pvc.sap_addr.itf = flow->vcc->dev ? flow->vcc->dev->number : -1;
661     pvc.sap_addr.vpi = flow->vcc->vpi;
662     diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c
663     index b7cddb9..7f59944 100644
664     --- a/net/sched/sch_cbq.c
665     +++ b/net/sched/sch_cbq.c
666     @@ -1467,6 +1467,7 @@ static int cbq_dump_wrr(struct sk_buff *skb, struct cbq_class *cl)
667     unsigned char *b = skb_tail_pointer(skb);
668     struct tc_cbq_wrropt opt;
669    
670     + memset(&opt, 0, sizeof(opt));
671     opt.flags = 0;
672     opt.allot = cl->allot;
673     opt.priority = cl->priority + 1;
674     diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c
675     index 96eb168..3dd7207 100644
676     --- a/net/sctp/outqueue.c
677     +++ b/net/sctp/outqueue.c
678     @@ -205,6 +205,8 @@ static inline int sctp_cacc_skip(struct sctp_transport *primary,
679     */
680     void sctp_outq_init(struct sctp_association *asoc, struct sctp_outq *q)
681     {
682     + memset(q, 0, sizeof(struct sctp_outq));
683     +
684     q->asoc = asoc;
685     INIT_LIST_HEAD(&q->out_chunk_list);
686     INIT_LIST_HEAD(&q->control_chunk_list);
687     @@ -212,13 +214,7 @@ void sctp_outq_init(struct sctp_association *asoc, struct sctp_outq *q)
688     INIT_LIST_HEAD(&q->sacked);
689     INIT_LIST_HEAD(&q->abandoned);
690    
691     - q->fast_rtx = 0;
692     - q->outstanding_bytes = 0;
693     q->empty = 1;
694     - q->cork = 0;
695     -
696     - q->malloced = 0;
697     - q->out_qlen = 0;
698     }
699    
700     /* Free the outqueue structure and any related pending chunks.
701     diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
702     index f432c57..add9f94 100644
703     --- a/net/wireless/nl80211.c
704     +++ b/net/wireless/nl80211.c
705     @@ -5081,12 +5081,14 @@ EXPORT_SYMBOL(cfg80211_testmode_alloc_event_skb);
706    
707     void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp)
708     {
709     + struct cfg80211_registered_device *rdev = ((void **)skb->cb)[0];
710     void *hdr = ((void **)skb->cb)[1];
711     struct nlattr *data = ((void **)skb->cb)[2];
712    
713     nla_nest_end(skb, data);
714     genlmsg_end(skb, hdr);
715     - genlmsg_multicast(skb, 0, nl80211_testmode_mcgrp.id, gfp);
716     + genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), skb, 0,
717     + nl80211_testmode_mcgrp.id, gfp);
718     }
719     EXPORT_SYMBOL(cfg80211_testmode_event);
720     #endif
721     @@ -7768,7 +7770,8 @@ void nl80211_send_mgmt_tx_status(struct cfg80211_registered_device *rdev,
722    
723     genlmsg_end(msg, hdr);
724    
725     - genlmsg_multicast(msg, 0, nl80211_mlme_mcgrp.id, gfp);
726     + genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0,
727     + nl80211_mlme_mcgrp.id, gfp);
728     return;
729    
730     nla_put_failure:
731     diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c
732     index a58cf35..84717ce 100644
733     --- a/sound/core/compress_offload.c
734     +++ b/sound/core/compress_offload.c
735     @@ -582,7 +582,7 @@ static long snd_compr_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
736     mutex_lock(&stream->device->lock);
737     switch (_IOC_NR(cmd)) {
738     case _IOC_NR(SNDRV_COMPRESS_IOCTL_VERSION):
739     - put_user(SNDRV_COMPRESS_VERSION,
740     + retval = put_user(SNDRV_COMPRESS_VERSION,
741     (int __user *)arg) ? -EFAULT : 0;
742     break;
743     case _IOC_NR(SNDRV_COMPRESS_GET_CAPS):