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