Magellan Linux

Annotation of /trunk/kernel-magellan/patches-3.7/0107-3.7.8-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2076 - (hide annotations) (download)
Mon Feb 18 12:04:15 2013 UTC (11 years, 2 months ago) by niro
File size: 73887 byte(s)
-linux-3.7.8
1 niro 2076 diff --git a/MAINTAINERS b/MAINTAINERS
2     index 9386a63..4eb1deb 100644
3     --- a/MAINTAINERS
4     +++ b/MAINTAINERS
5     @@ -2898,7 +2898,7 @@ S: Maintained
6     F: drivers/net/ethernet/i825xx/eexpress.*
7    
8     ETHERNET BRIDGE
9     -M: Stephen Hemminger <shemminger@vyatta.com>
10     +M: Stephen Hemminger <stephen@networkplumber.org>
11     L: bridge@lists.linux-foundation.org
12     L: netdev@vger.kernel.org
13     W: http://www.linuxfoundation.org/en/Net:Bridge
14     @@ -4739,7 +4739,7 @@ S: Maintained
15    
16     MARVELL GIGABIT ETHERNET DRIVERS (skge/sky2)
17     M: Mirko Lindner <mlindner@marvell.com>
18     -M: Stephen Hemminger <shemminger@vyatta.com>
19     +M: Stephen Hemminger <stephen@networkplumber.org>
20     L: netdev@vger.kernel.org
21     S: Maintained
22     F: drivers/net/ethernet/marvell/sk*
23     @@ -4993,7 +4993,7 @@ S: Supported
24     F: drivers/infiniband/hw/nes/
25    
26     NETEM NETWORK EMULATOR
27     -M: Stephen Hemminger <shemminger@vyatta.com>
28     +M: Stephen Hemminger <stephen@networkplumber.org>
29     L: netem@lists.linux-foundation.org
30     S: Maintained
31     F: net/sched/sch_netem.c
32     diff --git a/drivers/atm/iphase.h b/drivers/atm/iphase.h
33     index 6a0955e..53ecac5 100644
34     --- a/drivers/atm/iphase.h
35     +++ b/drivers/atm/iphase.h
36     @@ -636,82 +636,82 @@ struct rx_buf_desc {
37     #define SEG_BASE IPHASE5575_FRAG_CONTROL_REG_BASE
38     #define REASS_BASE IPHASE5575_REASS_CONTROL_REG_BASE
39    
40     -typedef volatile u_int freg_t;
41     +typedef volatile u_int ffreg_t;
42     typedef u_int rreg_t;
43    
44     typedef struct _ffredn_t {
45     - freg_t idlehead_high; /* Idle cell header (high) */
46     - freg_t idlehead_low; /* Idle cell header (low) */
47     - freg_t maxrate; /* Maximum rate */
48     - freg_t stparms; /* Traffic Management Parameters */
49     - freg_t abrubr_abr; /* ABRUBR Priority Byte 1, TCR Byte 0 */
50     - freg_t rm_type; /* */
51     - u_int filler5[0x17 - 0x06];
52     - freg_t cmd_reg; /* Command register */
53     - u_int filler18[0x20 - 0x18];
54     - freg_t cbr_base; /* CBR Pointer Base */
55     - freg_t vbr_base; /* VBR Pointer Base */
56     - freg_t abr_base; /* ABR Pointer Base */
57     - freg_t ubr_base; /* UBR Pointer Base */
58     - u_int filler24;
59     - freg_t vbrwq_base; /* VBR Wait Queue Base */
60     - freg_t abrwq_base; /* ABR Wait Queue Base */
61     - freg_t ubrwq_base; /* UBR Wait Queue Base */
62     - freg_t vct_base; /* Main VC Table Base */
63     - freg_t vcte_base; /* Extended Main VC Table Base */
64     - u_int filler2a[0x2C - 0x2A];
65     - freg_t cbr_tab_beg; /* CBR Table Begin */
66     - freg_t cbr_tab_end; /* CBR Table End */
67     - freg_t cbr_pointer; /* CBR Pointer */
68     - u_int filler2f[0x30 - 0x2F];
69     - freg_t prq_st_adr; /* Packet Ready Queue Start Address */
70     - freg_t prq_ed_adr; /* Packet Ready Queue End Address */
71     - freg_t prq_rd_ptr; /* Packet Ready Queue read pointer */
72     - freg_t prq_wr_ptr; /* Packet Ready Queue write pointer */
73     - freg_t tcq_st_adr; /* Transmit Complete Queue Start Address*/
74     - freg_t tcq_ed_adr; /* Transmit Complete Queue End Address */
75     - freg_t tcq_rd_ptr; /* Transmit Complete Queue read pointer */
76     - freg_t tcq_wr_ptr; /* Transmit Complete Queue write pointer*/
77     - u_int filler38[0x40 - 0x38];
78     - freg_t queue_base; /* Base address for PRQ and TCQ */
79     - freg_t desc_base; /* Base address of descriptor table */
80     - u_int filler42[0x45 - 0x42];
81     - freg_t mode_reg_0; /* Mode register 0 */
82     - freg_t mode_reg_1; /* Mode register 1 */
83     - freg_t intr_status_reg;/* Interrupt Status register */
84     - freg_t mask_reg; /* Mask Register */
85     - freg_t cell_ctr_high1; /* Total cell transfer count (high) */
86     - freg_t cell_ctr_lo1; /* Total cell transfer count (low) */
87     - freg_t state_reg; /* Status register */
88     - u_int filler4c[0x58 - 0x4c];
89     - freg_t curr_desc_num; /* Contains the current descriptor num */
90     - freg_t next_desc; /* Next descriptor */
91     - freg_t next_vc; /* Next VC */
92     - u_int filler5b[0x5d - 0x5b];
93     - freg_t present_slot_cnt;/* Present slot count */
94     - u_int filler5e[0x6a - 0x5e];
95     - freg_t new_desc_num; /* New descriptor number */
96     - freg_t new_vc; /* New VC */
97     - freg_t sched_tbl_ptr; /* Schedule table pointer */
98     - freg_t vbrwq_wptr; /* VBR wait queue write pointer */
99     - freg_t vbrwq_rptr; /* VBR wait queue read pointer */
100     - freg_t abrwq_wptr; /* ABR wait queue write pointer */
101     - freg_t abrwq_rptr; /* ABR wait queue read pointer */
102     - freg_t ubrwq_wptr; /* UBR wait queue write pointer */
103     - freg_t ubrwq_rptr; /* UBR wait queue read pointer */
104     - freg_t cbr_vc; /* CBR VC */
105     - freg_t vbr_sb_vc; /* VBR SB VC */
106     - freg_t abr_sb_vc; /* ABR SB VC */
107     - freg_t ubr_sb_vc; /* UBR SB VC */
108     - freg_t vbr_next_link; /* VBR next link */
109     - freg_t abr_next_link; /* ABR next link */
110     - freg_t ubr_next_link; /* UBR next link */
111     - u_int filler7a[0x7c-0x7a];
112     - freg_t out_rate_head; /* Out of rate head */
113     - u_int filler7d[0xca-0x7d]; /* pad out to full address space */
114     - freg_t cell_ctr_high1_nc;/* Total cell transfer count (high) */
115     - freg_t cell_ctr_lo1_nc;/* Total cell transfer count (low) */
116     - u_int fillercc[0x100-0xcc]; /* pad out to full address space */
117     + ffreg_t idlehead_high; /* Idle cell header (high) */
118     + ffreg_t idlehead_low; /* Idle cell header (low) */
119     + ffreg_t maxrate; /* Maximum rate */
120     + ffreg_t stparms; /* Traffic Management Parameters */
121     + ffreg_t abrubr_abr; /* ABRUBR Priority Byte 1, TCR Byte 0 */
122     + ffreg_t rm_type; /* */
123     + u_int filler5[0x17 - 0x06];
124     + ffreg_t cmd_reg; /* Command register */
125     + u_int filler18[0x20 - 0x18];
126     + ffreg_t cbr_base; /* CBR Pointer Base */
127     + ffreg_t vbr_base; /* VBR Pointer Base */
128     + ffreg_t abr_base; /* ABR Pointer Base */
129     + ffreg_t ubr_base; /* UBR Pointer Base */
130     + u_int filler24;
131     + ffreg_t vbrwq_base; /* VBR Wait Queue Base */
132     + ffreg_t abrwq_base; /* ABR Wait Queue Base */
133     + ffreg_t ubrwq_base; /* UBR Wait Queue Base */
134     + ffreg_t vct_base; /* Main VC Table Base */
135     + ffreg_t vcte_base; /* Extended Main VC Table Base */
136     + u_int filler2a[0x2C - 0x2A];
137     + ffreg_t cbr_tab_beg; /* CBR Table Begin */
138     + ffreg_t cbr_tab_end; /* CBR Table End */
139     + ffreg_t cbr_pointer; /* CBR Pointer */
140     + u_int filler2f[0x30 - 0x2F];
141     + ffreg_t prq_st_adr; /* Packet Ready Queue Start Address */
142     + ffreg_t prq_ed_adr; /* Packet Ready Queue End Address */
143     + ffreg_t prq_rd_ptr; /* Packet Ready Queue read pointer */
144     + ffreg_t prq_wr_ptr; /* Packet Ready Queue write pointer */
145     + ffreg_t tcq_st_adr; /* Transmit Complete Queue Start Address*/
146     + ffreg_t tcq_ed_adr; /* Transmit Complete Queue End Address */
147     + ffreg_t tcq_rd_ptr; /* Transmit Complete Queue read pointer */
148     + ffreg_t tcq_wr_ptr; /* Transmit Complete Queue write pointer*/
149     + u_int filler38[0x40 - 0x38];
150     + ffreg_t queue_base; /* Base address for PRQ and TCQ */
151     + ffreg_t desc_base; /* Base address of descriptor table */
152     + u_int filler42[0x45 - 0x42];
153     + ffreg_t mode_reg_0; /* Mode register 0 */
154     + ffreg_t mode_reg_1; /* Mode register 1 */
155     + ffreg_t intr_status_reg;/* Interrupt Status register */
156     + ffreg_t mask_reg; /* Mask Register */
157     + ffreg_t cell_ctr_high1; /* Total cell transfer count (high) */
158     + ffreg_t cell_ctr_lo1; /* Total cell transfer count (low) */
159     + ffreg_t state_reg; /* Status register */
160     + u_int filler4c[0x58 - 0x4c];
161     + ffreg_t curr_desc_num; /* Contains the current descriptor num */
162     + ffreg_t next_desc; /* Next descriptor */
163     + ffreg_t next_vc; /* Next VC */
164     + u_int filler5b[0x5d - 0x5b];
165     + ffreg_t present_slot_cnt;/* Present slot count */
166     + u_int filler5e[0x6a - 0x5e];
167     + ffreg_t new_desc_num; /* New descriptor number */
168     + ffreg_t new_vc; /* New VC */
169     + ffreg_t sched_tbl_ptr; /* Schedule table pointer */
170     + ffreg_t vbrwq_wptr; /* VBR wait queue write pointer */
171     + ffreg_t vbrwq_rptr; /* VBR wait queue read pointer */
172     + ffreg_t abrwq_wptr; /* ABR wait queue write pointer */
173     + ffreg_t abrwq_rptr; /* ABR wait queue read pointer */
174     + ffreg_t ubrwq_wptr; /* UBR wait queue write pointer */
175     + ffreg_t ubrwq_rptr; /* UBR wait queue read pointer */
176     + ffreg_t cbr_vc; /* CBR VC */
177     + ffreg_t vbr_sb_vc; /* VBR SB VC */
178     + ffreg_t abr_sb_vc; /* ABR SB VC */
179     + ffreg_t ubr_sb_vc; /* UBR SB VC */
180     + ffreg_t vbr_next_link; /* VBR next link */
181     + ffreg_t abr_next_link; /* ABR next link */
182     + ffreg_t ubr_next_link; /* UBR next link */
183     + u_int filler7a[0x7c-0x7a];
184     + ffreg_t out_rate_head; /* Out of rate head */
185     + u_int filler7d[0xca-0x7d]; /* pad out to full address space */
186     + ffreg_t cell_ctr_high1_nc;/* Total cell transfer count (high) */
187     + ffreg_t cell_ctr_lo1_nc;/* Total cell transfer count (low) */
188     + u_int fillercc[0x100-0xcc]; /* pad out to full address space */
189     } ffredn_t;
190    
191     typedef struct _rfredn_t {
192     diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
193     index 8ab9c3d..088c8fd 100644
194     --- a/drivers/char/virtio_console.c
195     +++ b/drivers/char/virtio_console.c
196     @@ -1966,7 +1966,8 @@ static void virtcons_remove(struct virtio_device *vdev)
197     /* Disable interrupts for vqs */
198     vdev->config->reset(vdev);
199     /* Finish up work that's lined up */
200     - cancel_work_sync(&portdev->control_work);
201     + if (use_multiport(portdev))
202     + cancel_work_sync(&portdev->control_work);
203    
204     list_for_each_entry_safe(port, port2, &portdev->ports, list)
205     unplug_port(port);
206     diff --git a/drivers/gpu/drm/nouveau/core/core/subdev.c b/drivers/gpu/drm/nouveau/core/core/subdev.c
207     index f74c30a..48f0637 100644
208     --- a/drivers/gpu/drm/nouveau/core/core/subdev.c
209     +++ b/drivers/gpu/drm/nouveau/core/core/subdev.c
210     @@ -99,7 +99,7 @@ nouveau_subdev_create_(struct nouveau_object *parent,
211     if (ret)
212     return ret;
213    
214     - mutex_init(&subdev->mutex);
215     + __mutex_init(&subdev->mutex, subname, &oclass->lock_class_key);
216     subdev->name = subname;
217    
218     if (parent) {
219     diff --git a/drivers/gpu/drm/nouveau/core/include/core/object.h b/drivers/gpu/drm/nouveau/core/include/core/object.h
220     index 486f1a9..727ba4f 100644
221     --- a/drivers/gpu/drm/nouveau/core/include/core/object.h
222     +++ b/drivers/gpu/drm/nouveau/core/include/core/object.h
223     @@ -50,10 +50,13 @@ int nouveau_object_fini(struct nouveau_object *, bool suspend);
224    
225     extern struct nouveau_ofuncs nouveau_object_ofuncs;
226    
227     +/* Don't allocate dynamically, because lockdep needs lock_class_keys to be in
228     + * ".data". */
229     struct nouveau_oclass {
230     u32 handle;
231     - struct nouveau_ofuncs *ofuncs;
232     - struct nouveau_omthds *omthds;
233     + struct nouveau_ofuncs * ofuncs;
234     + struct nouveau_omthds * const omthds;
235     + struct lock_class_key lock_class_key;
236     };
237    
238     #define nv_oclass(o) nv_object(o)->oclass
239     diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
240     index 8503b2e..572c216 100644
241     --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
242     +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
243     @@ -241,6 +241,8 @@ nouveau_drm_probe(struct pci_dev *pdev, const struct pci_device_id *pent)
244     return 0;
245     }
246    
247     +static struct lock_class_key drm_client_lock_class_key;
248     +
249     static int
250     nouveau_drm_load(struct drm_device *dev, unsigned long flags)
251     {
252     @@ -252,6 +254,7 @@ nouveau_drm_load(struct drm_device *dev, unsigned long flags)
253     ret = nouveau_cli_create(pdev, "DRM", sizeof(*drm), (void**)&drm);
254     if (ret)
255     return ret;
256     + lockdep_set_class(&drm->client.mutex, &drm_client_lock_class_key);
257    
258     dev->dev_private = drm;
259     drm->dev = dev;
260     diff --git a/drivers/infiniband/hw/qib/qib_qp.c b/drivers/infiniband/hw/qib/qib_qp.c
261     index 4850d03..3527509 100644
262     --- a/drivers/infiniband/hw/qib/qib_qp.c
263     +++ b/drivers/infiniband/hw/qib/qib_qp.c
264     @@ -263,20 +263,15 @@ static void remove_qp(struct qib_ibdev *dev, struct qib_qp *qp)
265     struct qib_qp __rcu **qpp;
266    
267     qpp = &dev->qp_table[n];
268     - q = rcu_dereference_protected(*qpp,
269     - lockdep_is_held(&dev->qpt_lock));
270     - for (; q; qpp = &q->next) {
271     + for (; (q = rcu_dereference_protected(*qpp,
272     + lockdep_is_held(&dev->qpt_lock))) != NULL;
273     + qpp = &q->next)
274     if (q == qp) {
275     atomic_dec(&qp->refcount);
276     *qpp = qp->next;
277     rcu_assign_pointer(qp->next, NULL);
278     - q = rcu_dereference_protected(*qpp,
279     - lockdep_is_held(&dev->qpt_lock));
280     break;
281     }
282     - q = rcu_dereference_protected(*qpp,
283     - lockdep_is_held(&dev->qpt_lock));
284     - }
285     }
286    
287     spin_unlock_irqrestore(&dev->qpt_lock, flags);
288     diff --git a/drivers/isdn/gigaset/capi.c b/drivers/isdn/gigaset/capi.c
289     index 68452b7..03a0a01 100644
290     --- a/drivers/isdn/gigaset/capi.c
291     +++ b/drivers/isdn/gigaset/capi.c
292     @@ -248,6 +248,8 @@ static inline void dump_rawmsg(enum debuglevel level, const char *tag,
293     CAPIMSG_APPID(data), CAPIMSG_MSGID(data), l,
294     CAPIMSG_CONTROL(data));
295     l -= 12;
296     + if (l <= 0)
297     + return;
298     dbgline = kmalloc(3 * l, GFP_ATOMIC);
299     if (!dbgline)
300     return;
301     diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
302     index 41c9e81..3fc12b9 100644
303     --- a/drivers/md/dm-thin.c
304     +++ b/drivers/md/dm-thin.c
305     @@ -2766,19 +2766,9 @@ static int thin_iterate_devices(struct dm_target *ti,
306     return 0;
307     }
308    
309     -/*
310     - * A thin device always inherits its queue limits from its pool.
311     - */
312     -static void thin_io_hints(struct dm_target *ti, struct queue_limits *limits)
313     -{
314     - struct thin_c *tc = ti->private;
315     -
316     - *limits = bdev_get_queue(tc->pool_dev->bdev)->limits;
317     -}
318     -
319     static struct target_type thin_target = {
320     .name = "thin",
321     - .version = {1, 5, 0},
322     + .version = {1, 5, 1},
323     .module = THIS_MODULE,
324     .ctr = thin_ctr,
325     .dtr = thin_dtr,
326     @@ -2787,7 +2777,6 @@ static struct target_type thin_target = {
327     .postsuspend = thin_postsuspend,
328     .status = thin_status,
329     .iterate_devices = thin_iterate_devices,
330     - .io_hints = thin_io_hints,
331     };
332    
333     /*----------------------------------------------------------------*/
334     diff --git a/drivers/media/usb/pwc/pwc-if.c b/drivers/media/usb/pwc/pwc-if.c
335     index 42e36ba..4d12397 100644
336     --- a/drivers/media/usb/pwc/pwc-if.c
337     +++ b/drivers/media/usb/pwc/pwc-if.c
338     @@ -1000,7 +1000,11 @@ static int usb_pwc_probe(struct usb_interface *intf, const struct usb_device_id
339     pdev->vb_queue.buf_struct_size = sizeof(struct pwc_frame_buf);
340     pdev->vb_queue.ops = &pwc_vb_queue_ops;
341     pdev->vb_queue.mem_ops = &vb2_vmalloc_memops;
342     - vb2_queue_init(&pdev->vb_queue);
343     + rc = vb2_queue_init(&pdev->vb_queue);
344     + if (rc < 0) {
345     + PWC_ERROR("Oops, could not initialize vb2 queue.\n");
346     + goto err_free_mem;
347     + }
348    
349     /* Init video_device structure */
350     memcpy(&pdev->vdev, &pwc_template, sizeof(pwc_template));
351     diff --git a/drivers/mfd/db8500-prcmu.c b/drivers/mfd/db8500-prcmu.c
352     index 00b8b0f..296e3c4 100644
353     --- a/drivers/mfd/db8500-prcmu.c
354     +++ b/drivers/mfd/db8500-prcmu.c
355     @@ -2478,7 +2478,7 @@ static bool read_mailbox_0(void)
356    
357     for (n = 0; n < NUM_PRCMU_WAKEUPS; n++) {
358     if (ev & prcmu_irq_bit[n])
359     - generic_handle_irq(IRQ_PRCMU_BASE + n);
360     + generic_handle_irq(irq_find_mapping(db8500_irq_domain, n));
361     }
362     r = true;
363     break;
364     @@ -2706,6 +2706,10 @@ static int db8500_irq_init(struct device_node *np)
365     return -ENOSYS;
366     }
367    
368     + /* All wakeups will be used, so create mappings for all */
369     + for (i = 0; i < NUM_PRCMU_WAKEUPS; i++)
370     + irq_create_mapping(db8500_irq_domain, i);
371     +
372     return 0;
373     }
374    
375     diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c
376     index 3391bdd..d301f8a 100644
377     --- a/drivers/net/can/c_can/c_can.c
378     +++ b/drivers/net/can/c_can/c_can.c
379     @@ -482,8 +482,12 @@ static void c_can_setup_receive_object(struct net_device *dev, int iface,
380    
381     priv->write_reg(priv, C_CAN_IFACE(MASK1_REG, iface),
382     IFX_WRITE_LOW_16BIT(mask));
383     +
384     + /* According to C_CAN documentation, the reserved bit
385     + * in IFx_MASK2 register is fixed 1
386     + */
387     priv->write_reg(priv, C_CAN_IFACE(MASK2_REG, iface),
388     - IFX_WRITE_HIGH_16BIT(mask));
389     + IFX_WRITE_HIGH_16BIT(mask) | BIT(13));
390    
391     priv->write_reg(priv, C_CAN_IFACE(ARB1_REG, iface),
392     IFX_WRITE_LOW_16BIT(id));
393     diff --git a/drivers/net/ethernet/calxeda/xgmac.c b/drivers/net/ethernet/calxeda/xgmac.c
394     index 16814b3..e29c1b6 100644
395     --- a/drivers/net/ethernet/calxeda/xgmac.c
396     +++ b/drivers/net/ethernet/calxeda/xgmac.c
397     @@ -546,6 +546,10 @@ static int desc_get_rx_status(struct xgmac_priv *priv, struct xgmac_dma_desc *p)
398     return -1;
399     }
400    
401     + /* All frames should fit into a single buffer */
402     + if (!(status & RXDESC_FIRST_SEG) || !(status & RXDESC_LAST_SEG))
403     + return -1;
404     +
405     /* Check if packet has checksum already */
406     if ((status & RXDESC_FRAME_TYPE) && (status & RXDESC_EXT_STATUS) &&
407     !(ext_status & RXDESC_IP_PAYLOAD_MASK))
408     diff --git a/drivers/net/ethernet/intel/e1000e/defines.h b/drivers/net/ethernet/intel/e1000e/defines.h
409     index 76edbc1..cccbbe8 100644
410     --- a/drivers/net/ethernet/intel/e1000e/defines.h
411     +++ b/drivers/net/ethernet/intel/e1000e/defines.h
412     @@ -233,6 +233,7 @@
413     #define E1000_CTRL_FRCDPX 0x00001000 /* Force Duplex */
414     #define E1000_CTRL_LANPHYPC_OVERRIDE 0x00010000 /* SW control of LANPHYPC */
415     #define E1000_CTRL_LANPHYPC_VALUE 0x00020000 /* SW value of LANPHYPC */
416     +#define E1000_CTRL_MEHE 0x00080000 /* Memory Error Handling Enable */
417     #define E1000_CTRL_SWDPIN0 0x00040000 /* SWDPIN 0 value */
418     #define E1000_CTRL_SWDPIN1 0x00080000 /* SWDPIN 1 value */
419     #define E1000_CTRL_SWDPIO0 0x00400000 /* SWDPIN 0 Input or output */
420     @@ -391,6 +392,12 @@
421    
422     #define E1000_PBS_16K E1000_PBA_16K
423    
424     +/* Uncorrectable/correctable ECC Error counts and enable bits */
425     +#define E1000_PBECCSTS_CORR_ERR_CNT_MASK 0x000000FF
426     +#define E1000_PBECCSTS_UNCORR_ERR_CNT_MASK 0x0000FF00
427     +#define E1000_PBECCSTS_UNCORR_ERR_CNT_SHIFT 8
428     +#define E1000_PBECCSTS_ECC_ENABLE 0x00010000
429     +
430     #define IFS_MAX 80
431     #define IFS_MIN 40
432     #define IFS_RATIO 4
433     @@ -410,6 +417,7 @@
434     #define E1000_ICR_RXSEQ 0x00000008 /* Rx sequence error */
435     #define E1000_ICR_RXDMT0 0x00000010 /* Rx desc min. threshold (0) */
436     #define E1000_ICR_RXT0 0x00000080 /* Rx timer intr (ring 0) */
437     +#define E1000_ICR_ECCER 0x00400000 /* Uncorrectable ECC Error */
438     #define E1000_ICR_INT_ASSERTED 0x80000000 /* If this bit asserted, the driver should claim the interrupt */
439     #define E1000_ICR_RXQ0 0x00100000 /* Rx Queue 0 Interrupt */
440     #define E1000_ICR_RXQ1 0x00200000 /* Rx Queue 1 Interrupt */
441     @@ -446,6 +454,7 @@
442     #define E1000_IMS_RXSEQ E1000_ICR_RXSEQ /* Rx sequence error */
443     #define E1000_IMS_RXDMT0 E1000_ICR_RXDMT0 /* Rx desc min. threshold */
444     #define E1000_IMS_RXT0 E1000_ICR_RXT0 /* Rx timer intr */
445     +#define E1000_IMS_ECCER E1000_ICR_ECCER /* Uncorrectable ECC Error */
446     #define E1000_IMS_RXQ0 E1000_ICR_RXQ0 /* Rx Queue 0 Interrupt */
447     #define E1000_IMS_RXQ1 E1000_ICR_RXQ1 /* Rx Queue 1 Interrupt */
448     #define E1000_IMS_TXQ0 E1000_ICR_TXQ0 /* Tx Queue 0 Interrupt */
449     diff --git a/drivers/net/ethernet/intel/e1000e/e1000.h b/drivers/net/ethernet/intel/e1000e/e1000.h
450     index 04668b4..5faa1a8 100644
451     --- a/drivers/net/ethernet/intel/e1000e/e1000.h
452     +++ b/drivers/net/ethernet/intel/e1000e/e1000.h
453     @@ -314,6 +314,8 @@ struct e1000_adapter {
454    
455     struct napi_struct napi;
456    
457     + unsigned int uncorr_errors; /* uncorrectable ECC errors */
458     + unsigned int corr_errors; /* correctable ECC errors */
459     unsigned int restart_queue;
460     u32 txd_cmd;
461    
462     diff --git a/drivers/net/ethernet/intel/e1000e/ethtool.c b/drivers/net/ethernet/intel/e1000e/ethtool.c
463     index c11ac27..da048f3 100644
464     --- a/drivers/net/ethernet/intel/e1000e/ethtool.c
465     +++ b/drivers/net/ethernet/intel/e1000e/ethtool.c
466     @@ -108,6 +108,8 @@ static const struct e1000_stats e1000_gstrings_stats[] = {
467     E1000_STAT("dropped_smbus", stats.mgpdc),
468     E1000_STAT("rx_dma_failed", rx_dma_failed),
469     E1000_STAT("tx_dma_failed", tx_dma_failed),
470     + E1000_STAT("uncorr_ecc_errors", uncorr_errors),
471     + E1000_STAT("corr_ecc_errors", corr_errors),
472     };
473    
474     #define E1000_GLOBAL_STATS_LEN ARRAY_SIZE(e1000_gstrings_stats)
475     diff --git a/drivers/net/ethernet/intel/e1000e/hw.h b/drivers/net/ethernet/intel/e1000e/hw.h
476     index d37bfd9..a64f22e 100644
477     --- a/drivers/net/ethernet/intel/e1000e/hw.h
478     +++ b/drivers/net/ethernet/intel/e1000e/hw.h
479     @@ -77,6 +77,7 @@ enum e1e_registers {
480     #define E1000_POEMB E1000_PHY_CTRL /* PHY OEM Bits */
481     E1000_PBA = 0x01000, /* Packet Buffer Allocation - RW */
482     E1000_PBS = 0x01008, /* Packet Buffer Size */
483     + E1000_PBECCSTS = 0x0100C, /* Packet Buffer ECC Status - RW */
484     E1000_EEMNGCTL = 0x01010, /* MNG EEprom Control */
485     E1000_EEWR = 0x0102C, /* EEPROM Write Register - RW */
486     E1000_FLOP = 0x0103C, /* FLASH Opcode Register */
487     diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c
488     index e3a7b07..abc9770 100644
489     --- a/drivers/net/ethernet/intel/e1000e/ich8lan.c
490     +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c
491     @@ -3690,6 +3690,17 @@ static void e1000_initialize_hw_bits_ich8lan(struct e1000_hw *hw)
492     if (hw->mac.type == e1000_ich8lan)
493     reg |= (E1000_RFCTL_IPV6_EX_DIS | E1000_RFCTL_NEW_IPV6_EXT_DIS);
494     ew32(RFCTL, reg);
495     +
496     + /* Enable ECC on Lynxpoint */
497     + if (hw->mac.type == e1000_pch_lpt) {
498     + reg = er32(PBECCSTS);
499     + reg |= E1000_PBECCSTS_ECC_ENABLE;
500     + ew32(PBECCSTS, reg);
501     +
502     + reg = er32(CTRL);
503     + reg |= E1000_CTRL_MEHE;
504     + ew32(CTRL, reg);
505     + }
506     }
507    
508     /**
509     diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
510     index f444eb0..0fb7947 100644
511     --- a/drivers/net/ethernet/intel/e1000e/netdev.c
512     +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
513     @@ -1687,6 +1687,23 @@ static irqreturn_t e1000_intr_msi(int irq, void *data)
514     mod_timer(&adapter->watchdog_timer, jiffies + 1);
515     }
516    
517     + /* Reset on uncorrectable ECC error */
518     + if ((icr & E1000_ICR_ECCER) && (hw->mac.type == e1000_pch_lpt)) {
519     + u32 pbeccsts = er32(PBECCSTS);
520     +
521     + adapter->corr_errors +=
522     + pbeccsts & E1000_PBECCSTS_CORR_ERR_CNT_MASK;
523     + adapter->uncorr_errors +=
524     + (pbeccsts & E1000_PBECCSTS_UNCORR_ERR_CNT_MASK) >>
525     + E1000_PBECCSTS_UNCORR_ERR_CNT_SHIFT;
526     +
527     + /* Do the reset outside of interrupt context */
528     + schedule_work(&adapter->reset_task);
529     +
530     + /* return immediately since reset is imminent */
531     + return IRQ_HANDLED;
532     + }
533     +
534     if (napi_schedule_prep(&adapter->napi)) {
535     adapter->total_tx_bytes = 0;
536     adapter->total_tx_packets = 0;
537     @@ -1754,6 +1771,23 @@ static irqreturn_t e1000_intr(int irq, void *data)
538     mod_timer(&adapter->watchdog_timer, jiffies + 1);
539     }
540    
541     + /* Reset on uncorrectable ECC error */
542     + if ((icr & E1000_ICR_ECCER) && (hw->mac.type == e1000_pch_lpt)) {
543     + u32 pbeccsts = er32(PBECCSTS);
544     +
545     + adapter->corr_errors +=
546     + pbeccsts & E1000_PBECCSTS_CORR_ERR_CNT_MASK;
547     + adapter->uncorr_errors +=
548     + (pbeccsts & E1000_PBECCSTS_UNCORR_ERR_CNT_MASK) >>
549     + E1000_PBECCSTS_UNCORR_ERR_CNT_SHIFT;
550     +
551     + /* Do the reset outside of interrupt context */
552     + schedule_work(&adapter->reset_task);
553     +
554     + /* return immediately since reset is imminent */
555     + return IRQ_HANDLED;
556     + }
557     +
558     if (napi_schedule_prep(&adapter->napi)) {
559     adapter->total_tx_bytes = 0;
560     adapter->total_tx_packets = 0;
561     @@ -2117,6 +2151,8 @@ static void e1000_irq_enable(struct e1000_adapter *adapter)
562     if (adapter->msix_entries) {
563     ew32(EIAC_82574, adapter->eiac_mask & E1000_EIAC_MASK_82574);
564     ew32(IMS, adapter->eiac_mask | E1000_IMS_OTHER | E1000_IMS_LSC);
565     + } else if (hw->mac.type == e1000_pch_lpt) {
566     + ew32(IMS, IMS_ENABLE_MASK | E1000_IMS_ECCER);
567     } else {
568     ew32(IMS, IMS_ENABLE_MASK);
569     }
570     @@ -4297,6 +4333,16 @@ static void e1000e_update_stats(struct e1000_adapter *adapter)
571     adapter->stats.mgptc += er32(MGTPTC);
572     adapter->stats.mgprc += er32(MGTPRC);
573     adapter->stats.mgpdc += er32(MGTPDC);
574     +
575     + /* Correctable ECC Errors */
576     + if (hw->mac.type == e1000_pch_lpt) {
577     + u32 pbeccsts = er32(PBECCSTS);
578     + adapter->corr_errors +=
579     + pbeccsts & E1000_PBECCSTS_CORR_ERR_CNT_MASK;
580     + adapter->uncorr_errors +=
581     + (pbeccsts & E1000_PBECCSTS_UNCORR_ERR_CNT_MASK) >>
582     + E1000_PBECCSTS_UNCORR_ERR_CNT_SHIFT;
583     + }
584     }
585    
586     /**
587     diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
588     index b35094c..fc1ac65 100644
589     --- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c
590     +++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
591     @@ -629,10 +629,15 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev)
592     ring->tx_csum++;
593     }
594    
595     - /* Copy dst mac address to wqe */
596     - ethh = (struct ethhdr *)skb->data;
597     - tx_desc->ctrl.srcrb_flags16[0] = get_unaligned((__be16 *)ethh->h_dest);
598     - tx_desc->ctrl.imm = get_unaligned((__be32 *)(ethh->h_dest + 2));
599     + if (mlx4_is_mfunc(mdev->dev) || priv->validate_loopback) {
600     + /* Copy dst mac address to wqe. This allows loopback in eSwitch,
601     + * so that VFs and PF can communicate with each other
602     + */
603     + ethh = (struct ethhdr *)skb->data;
604     + tx_desc->ctrl.srcrb_flags16[0] = get_unaligned((__be16 *)ethh->h_dest);
605     + tx_desc->ctrl.imm = get_unaligned((__be32 *)(ethh->h_dest + 2));
606     + }
607     +
608     /* Handle LSO (TSO) packets */
609     if (lso_header_size) {
610     /* Mark opcode as LSO */
611     diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
612     index 2aa80af..d4b3935 100644
613     --- a/drivers/net/ethernet/mellanox/mlx4/main.c
614     +++ b/drivers/net/ethernet/mellanox/mlx4/main.c
615     @@ -1702,15 +1702,8 @@ static void mlx4_enable_msi_x(struct mlx4_dev *dev)
616     int i;
617    
618     if (msi_x) {
619     - /* In multifunction mode each function gets 2 msi-X vectors
620     - * one for data path completions anf the other for asynch events
621     - * or command completions */
622     - if (mlx4_is_mfunc(dev)) {
623     - nreq = 2;
624     - } else {
625     - nreq = min_t(int, dev->caps.num_eqs -
626     - dev->caps.reserved_eqs, nreq);
627     - }
628     + nreq = min_t(int, dev->caps.num_eqs - dev->caps.reserved_eqs,
629     + nreq);
630    
631     entries = kcalloc(nreq, sizeof *entries, GFP_KERNEL);
632     if (!entries)
633     diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
634     index bc165f4..695667d 100644
635     --- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
636     +++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
637     @@ -144,7 +144,7 @@ void netxen_release_tx_buffers(struct netxen_adapter *adapter)
638     buffrag->length, PCI_DMA_TODEVICE);
639     buffrag->dma = 0ULL;
640     }
641     - for (j = 0; j < cmd_buf->frag_count; j++) {
642     + for (j = 1; j < cmd_buf->frag_count; j++) {
643     buffrag++;
644     if (buffrag->dma) {
645     pci_unmap_page(adapter->pdev, buffrag->dma,
646     diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
647     index df45061..1b55ca1 100644
648     --- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
649     +++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
650     @@ -1963,10 +1963,12 @@ unwind:
651     while (--i >= 0) {
652     nf = &pbuf->frag_array[i+1];
653     pci_unmap_page(pdev, nf->dma, nf->length, PCI_DMA_TODEVICE);
654     + nf->dma = 0ULL;
655     }
656    
657     nf = &pbuf->frag_array[0];
658     pci_unmap_single(pdev, nf->dma, skb_headlen(skb), PCI_DMA_TODEVICE);
659     + nf->dma = 0ULL;
660    
661     out_err:
662     return -ENOMEM;
663     diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
664     index 927aa33..6afe74e 100644
665     --- a/drivers/net/ethernet/realtek/r8169.c
666     +++ b/drivers/net/ethernet/realtek/r8169.c
667     @@ -6064,13 +6064,6 @@ process_pkt:
668     tp->rx_stats.bytes += pkt_size;
669     u64_stats_update_end(&tp->rx_stats.syncp);
670     }
671     -
672     - /* Work around for AMD plateform. */
673     - if ((desc->opts2 & cpu_to_le32(0xfffe000)) &&
674     - (tp->mac_version == RTL_GIGA_MAC_VER_05)) {
675     - desc->opts2 = 0;
676     - cur_rx++;
677     - }
678     }
679    
680     count = cur_rx - tp->cur_rx;
681     diff --git a/drivers/net/ethernet/via/via-rhine.c b/drivers/net/ethernet/via/via-rhine.c
682     index 0459c09..046526e0 100644
683     --- a/drivers/net/ethernet/via/via-rhine.c
684     +++ b/drivers/net/ethernet/via/via-rhine.c
685     @@ -1802,7 +1802,7 @@ static void rhine_tx(struct net_device *dev)
686     rp->tx_skbuff[entry]->len,
687     PCI_DMA_TODEVICE);
688     }
689     - dev_kfree_skb_irq(rp->tx_skbuff[entry]);
690     + dev_kfree_skb(rp->tx_skbuff[entry]);
691     rp->tx_skbuff[entry] = NULL;
692     entry = (++rp->dirty_tx) % TX_RING_SIZE;
693     }
694     @@ -2011,11 +2011,7 @@ static void rhine_slow_event_task(struct work_struct *work)
695     if (intr_status & IntrPCIErr)
696     netif_warn(rp, hw, dev, "PCI error\n");
697    
698     - napi_disable(&rp->napi);
699     - rhine_irq_disable(rp);
700     - /* Slow and safe. Consider __napi_schedule as a replacement ? */
701     - napi_enable(&rp->napi);
702     - napi_schedule(&rp->napi);
703     + iowrite16(RHINE_EVENT & 0xffff, rp->base + IntrEnable);
704    
705     out_unlock:
706     mutex_unlock(&rp->task_lock);
707     diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c
708     index 81f8f9e..fcbf680 100644
709     --- a/drivers/net/loopback.c
710     +++ b/drivers/net/loopback.c
711     @@ -77,6 +77,11 @@ static netdev_tx_t loopback_xmit(struct sk_buff *skb,
712    
713     skb_orphan(skb);
714    
715     + /* Before queueing this packet to netif_rx(),
716     + * make sure dst is refcounted.
717     + */
718     + skb_dst_force(skb);
719     +
720     skb->protocol = eth_type_trans(skb, dev);
721    
722     /* it's OK to use per_cpu_ptr() because BHs are off */
723     diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
724     index 68a43fe..d3fb97d 100644
725     --- a/drivers/net/macvlan.c
726     +++ b/drivers/net/macvlan.c
727     @@ -822,7 +822,10 @@ static int macvlan_changelink(struct net_device *dev,
728    
729     static size_t macvlan_get_size(const struct net_device *dev)
730     {
731     - return nla_total_size(4);
732     + return (0
733     + + nla_total_size(4) /* IFLA_MACVLAN_MODE */
734     + + nla_total_size(2) /* IFLA_MACVLAN_FLAGS */
735     + );
736     }
737    
738     static int macvlan_fill_info(struct sk_buff *skb,
739     diff --git a/drivers/net/wireless/ath/ath9k/ar9003_calib.c b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
740     index 84b558d..678854a 100644
741     --- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c
742     +++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
743     @@ -903,6 +903,8 @@ static bool ar9003_hw_init_cal(struct ath_hw *ah,
744     AR_PHY_CL_TAB_1,
745     AR_PHY_CL_TAB_2 };
746    
747     + ar9003_hw_set_chain_masks(ah, ah->caps.rx_chainmask, ah->caps.tx_chainmask);
748     +
749     if (rtt) {
750     if (!ar9003_hw_rtt_restore(ah, chan))
751     run_rtt_cal = true;
752     diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
753     index 8a38ff2..6784986 100644
754     --- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
755     +++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
756     @@ -586,7 +586,7 @@ static void ar9003_hw_init_bb(struct ath_hw *ah,
757     ath9k_hw_synth_delay(ah, chan, synthDelay);
758     }
759    
760     -static void ar9003_hw_set_chain_masks(struct ath_hw *ah, u8 rx, u8 tx)
761     +void ar9003_hw_set_chain_masks(struct ath_hw *ah, u8 rx, u8 tx)
762     {
763     if (ah->caps.tx_chainmask == 5 || ah->caps.rx_chainmask == 5)
764     REG_SET_BIT(ah, AR_PHY_ANALOG_SWAP,
765     diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h
766     index dbc1b7a..b68aaf5 100644
767     --- a/drivers/net/wireless/ath/ath9k/hw.h
768     +++ b/drivers/net/wireless/ath/ath9k/hw.h
769     @@ -1063,6 +1063,7 @@ int ar9003_paprd_create_curve(struct ath_hw *ah,
770     int ar9003_paprd_setup_gain_table(struct ath_hw *ah, int chain);
771     int ar9003_paprd_init_table(struct ath_hw *ah);
772     bool ar9003_paprd_is_done(struct ath_hw *ah);
773     +void ar9003_hw_set_chain_masks(struct ath_hw *ah, u8 rx, u8 tx);
774    
775     /* Hardware family op attach helpers */
776     void ar5008_hw_attach_phy_ops(struct ath_hw *ah);
777     diff --git a/drivers/net/wireless/iwlwifi/dvm/tx.c b/drivers/net/wireless/iwlwifi/dvm/tx.c
778     index aecf1ce..b09adab 100644
779     --- a/drivers/net/wireless/iwlwifi/dvm/tx.c
780     +++ b/drivers/net/wireless/iwlwifi/dvm/tx.c
781     @@ -1154,6 +1154,13 @@ int iwlagn_rx_reply_tx(struct iwl_priv *priv, struct iwl_rx_cmd_buffer *rxb,
782     next_reclaimed = ssn;
783     }
784    
785     + if (tid != IWL_TID_NON_QOS) {
786     + priv->tid_data[sta_id][tid].next_reclaimed =
787     + next_reclaimed;
788     + IWL_DEBUG_TX_REPLY(priv, "Next reclaimed packet:%d\n",
789     + next_reclaimed);
790     + }
791     +
792     iwl_trans_reclaim(priv->trans, txq_id, ssn, &skbs);
793    
794     iwlagn_check_ratid_empty(priv, sta_id, tid);
795     @@ -1204,28 +1211,11 @@ int iwlagn_rx_reply_tx(struct iwl_priv *priv, struct iwl_rx_cmd_buffer *rxb,
796     if (!is_agg)
797     iwlagn_non_agg_tx_status(priv, ctx, hdr->addr1);
798    
799     - /*
800     - * W/A for FW bug - the seq_ctl isn't updated when the
801     - * queues are flushed. Fetch it from the packet itself
802     - */
803     - if (!is_agg && status == TX_STATUS_FAIL_FIFO_FLUSHED) {
804     - next_reclaimed = le16_to_cpu(hdr->seq_ctrl);
805     - next_reclaimed =
806     - SEQ_TO_SN(next_reclaimed + 0x10);
807     - }
808     -
809     is_offchannel_skb =
810     (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN);
811     freed++;
812     }
813    
814     - if (tid != IWL_TID_NON_QOS) {
815     - priv->tid_data[sta_id][tid].next_reclaimed =
816     - next_reclaimed;
817     - IWL_DEBUG_TX_REPLY(priv, "Next reclaimed packet:%d\n",
818     - next_reclaimed);
819     - }
820     -
821     WARN_ON(!is_agg && freed != 1);
822    
823     /*
824     diff --git a/drivers/net/wireless/mwifiex/scan.c b/drivers/net/wireless/mwifiex/scan.c
825     index 9171aae..bd84069 100644
826     --- a/drivers/net/wireless/mwifiex/scan.c
827     +++ b/drivers/net/wireless/mwifiex/scan.c
828     @@ -1555,7 +1555,7 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv,
829     dev_err(adapter->dev, "SCAN_RESP: too many AP returned (%d)\n",
830     scan_rsp->number_of_sets);
831     ret = -1;
832     - goto done;
833     + goto check_next_scan;
834     }
835    
836     bytes_left = le16_to_cpu(scan_rsp->bss_descript_size);
837     @@ -1626,7 +1626,8 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv,
838     if (!beacon_size || beacon_size > bytes_left) {
839     bss_info += bytes_left;
840     bytes_left = 0;
841     - return -1;
842     + ret = -1;
843     + goto check_next_scan;
844     }
845    
846     /* Initialize the current working beacon pointer for this BSS
847     @@ -1682,7 +1683,7 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv,
848     dev_err(priv->adapter->dev,
849     "%s: bytes left < IE length\n",
850     __func__);
851     - goto done;
852     + goto check_next_scan;
853     }
854     if (element_id == WLAN_EID_DS_PARAMS) {
855     channel = *(current_ptr + sizeof(struct ieee_types_header));
856     @@ -1745,6 +1746,7 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv,
857     }
858     }
859    
860     +check_next_scan:
861     spin_lock_irqsave(&adapter->scan_pending_q_lock, flags);
862     if (list_empty(&adapter->scan_pending_q)) {
863     spin_unlock_irqrestore(&adapter->scan_pending_q_lock, flags);
864     @@ -1792,7 +1794,6 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv,
865     }
866     }
867    
868     -done:
869     return ret;
870     }
871    
872     diff --git a/drivers/net/wireless/rtlwifi/base.c b/drivers/net/wireless/rtlwifi/base.c
873     index 59381fe..9f32b09 100644
874     --- a/drivers/net/wireless/rtlwifi/base.c
875     +++ b/drivers/net/wireless/rtlwifi/base.c
876     @@ -980,7 +980,8 @@ u8 rtl_is_special_data(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx)
877     is_tx ? "Tx" : "Rx");
878    
879     if (is_tx) {
880     - rtl_lps_leave(hw);
881     + schedule_work(&rtlpriv->
882     + works.lps_leave_work);
883     ppsc->last_delaylps_stamp_jiffies =
884     jiffies;
885     }
886     @@ -990,7 +991,7 @@ u8 rtl_is_special_data(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx)
887     }
888     } else if (ETH_P_ARP == ether_type) {
889     if (is_tx) {
890     - rtl_lps_leave(hw);
891     + schedule_work(&rtlpriv->works.lps_leave_work);
892     ppsc->last_delaylps_stamp_jiffies = jiffies;
893     }
894    
895     @@ -1000,7 +1001,7 @@ u8 rtl_is_special_data(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx)
896     "802.1X %s EAPOL pkt!!\n", is_tx ? "Tx" : "Rx");
897    
898     if (is_tx) {
899     - rtl_lps_leave(hw);
900     + schedule_work(&rtlpriv->works.lps_leave_work);
901     ppsc->last_delaylps_stamp_jiffies = jiffies;
902     }
903    
904     diff --git a/drivers/net/wireless/rtlwifi/usb.c b/drivers/net/wireless/rtlwifi/usb.c
905     index 46ccbf7..d1c3a7e 100644
906     --- a/drivers/net/wireless/rtlwifi/usb.c
907     +++ b/drivers/net/wireless/rtlwifi/usb.c
908     @@ -542,8 +542,8 @@ static void _rtl_rx_pre_process(struct ieee80211_hw *hw, struct sk_buff *skb)
909     WARN_ON(skb_queue_empty(&rx_queue));
910     while (!skb_queue_empty(&rx_queue)) {
911     _skb = skb_dequeue(&rx_queue);
912     - _rtl_usb_rx_process_agg(hw, skb);
913     - ieee80211_rx_irqsafe(hw, skb);
914     + _rtl_usb_rx_process_agg(hw, _skb);
915     + ieee80211_rx_irqsafe(hw, _skb);
916     }
917     }
918    
919     diff --git a/drivers/net/xen-netback/common.h b/drivers/net/xen-netback/common.h
920     index 94b79c3..9d7f172 100644
921     --- a/drivers/net/xen-netback/common.h
922     +++ b/drivers/net/xen-netback/common.h
923     @@ -151,6 +151,9 @@ void xen_netbk_queue_tx_skb(struct xenvif *vif, struct sk_buff *skb);
924     /* Notify xenvif that ring now has space to send an skb to the frontend */
925     void xenvif_notify_tx_completion(struct xenvif *vif);
926    
927     +/* Prevent the device from generating any further traffic. */
928     +void xenvif_carrier_off(struct xenvif *vif);
929     +
930     /* Returns number of ring slots required to send an skb to the frontend */
931     unsigned int xen_netbk_count_skb_slots(struct xenvif *vif, struct sk_buff *skb);
932    
933     diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c
934     index b7d41f8..b8c5193 100644
935     --- a/drivers/net/xen-netback/interface.c
936     +++ b/drivers/net/xen-netback/interface.c
937     @@ -343,17 +343,22 @@ err:
938     return err;
939     }
940    
941     -void xenvif_disconnect(struct xenvif *vif)
942     +void xenvif_carrier_off(struct xenvif *vif)
943     {
944     struct net_device *dev = vif->dev;
945     - if (netif_carrier_ok(dev)) {
946     - rtnl_lock();
947     - netif_carrier_off(dev); /* discard queued packets */
948     - if (netif_running(dev))
949     - xenvif_down(vif);
950     - rtnl_unlock();
951     - xenvif_put(vif);
952     - }
953     +
954     + rtnl_lock();
955     + netif_carrier_off(dev); /* discard queued packets */
956     + if (netif_running(dev))
957     + xenvif_down(vif);
958     + rtnl_unlock();
959     + xenvif_put(vif);
960     +}
961     +
962     +void xenvif_disconnect(struct xenvif *vif)
963     +{
964     + if (netif_carrier_ok(vif->dev))
965     + xenvif_carrier_off(vif);
966    
967     atomic_dec(&vif->refcnt);
968     wait_event(vif->waiting_to_free, atomic_read(&vif->refcnt) == 0);
969     diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
970     index f2d6b78..2b9520c 100644
971     --- a/drivers/net/xen-netback/netback.c
972     +++ b/drivers/net/xen-netback/netback.c
973     @@ -147,7 +147,8 @@ void xen_netbk_remove_xenvif(struct xenvif *vif)
974     atomic_dec(&netbk->netfront_count);
975     }
976    
977     -static void xen_netbk_idx_release(struct xen_netbk *netbk, u16 pending_idx);
978     +static void xen_netbk_idx_release(struct xen_netbk *netbk, u16 pending_idx,
979     + u8 status);
980     static void make_tx_response(struct xenvif *vif,
981     struct xen_netif_tx_request *txp,
982     s8 st);
983     @@ -879,7 +880,7 @@ static void netbk_tx_err(struct xenvif *vif,
984    
985     do {
986     make_tx_response(vif, txp, XEN_NETIF_RSP_ERROR);
987     - if (cons >= end)
988     + if (cons == end)
989     break;
990     txp = RING_GET_REQUEST(&vif->tx, cons++);
991     } while (1);
992     @@ -888,6 +889,13 @@ static void netbk_tx_err(struct xenvif *vif,
993     xenvif_put(vif);
994     }
995    
996     +static void netbk_fatal_tx_err(struct xenvif *vif)
997     +{
998     + netdev_err(vif->dev, "fatal error; disabling device\n");
999     + xenvif_carrier_off(vif);
1000     + xenvif_put(vif);
1001     +}
1002     +
1003     static int netbk_count_requests(struct xenvif *vif,
1004     struct xen_netif_tx_request *first,
1005     struct xen_netif_tx_request *txp,
1006     @@ -901,19 +909,22 @@ static int netbk_count_requests(struct xenvif *vif,
1007    
1008     do {
1009     if (frags >= work_to_do) {
1010     - netdev_dbg(vif->dev, "Need more frags\n");
1011     + netdev_err(vif->dev, "Need more frags\n");
1012     + netbk_fatal_tx_err(vif);
1013     return -frags;
1014     }
1015    
1016     if (unlikely(frags >= MAX_SKB_FRAGS)) {
1017     - netdev_dbg(vif->dev, "Too many frags\n");
1018     + netdev_err(vif->dev, "Too many frags\n");
1019     + netbk_fatal_tx_err(vif);
1020     return -frags;
1021     }
1022    
1023     memcpy(txp, RING_GET_REQUEST(&vif->tx, cons + frags),
1024     sizeof(*txp));
1025     if (txp->size > first->size) {
1026     - netdev_dbg(vif->dev, "Frags galore\n");
1027     + netdev_err(vif->dev, "Frag is bigger than frame.\n");
1028     + netbk_fatal_tx_err(vif);
1029     return -frags;
1030     }
1031    
1032     @@ -921,8 +932,9 @@ static int netbk_count_requests(struct xenvif *vif,
1033     frags++;
1034    
1035     if (unlikely((txp->offset + txp->size) > PAGE_SIZE)) {
1036     - netdev_dbg(vif->dev, "txp->offset: %x, size: %u\n",
1037     + netdev_err(vif->dev, "txp->offset: %x, size: %u\n",
1038     txp->offset, txp->size);
1039     + netbk_fatal_tx_err(vif);
1040     return -frags;
1041     }
1042     } while ((txp++)->flags & XEN_NETTXF_more_data);
1043     @@ -966,7 +978,7 @@ static struct gnttab_copy *xen_netbk_get_requests(struct xen_netbk *netbk,
1044     pending_idx = netbk->pending_ring[index];
1045     page = xen_netbk_alloc_page(netbk, skb, pending_idx);
1046     if (!page)
1047     - return NULL;
1048     + goto err;
1049    
1050     gop->source.u.ref = txp->gref;
1051     gop->source.domid = vif->domid;
1052     @@ -988,6 +1000,17 @@ static struct gnttab_copy *xen_netbk_get_requests(struct xen_netbk *netbk,
1053     }
1054    
1055     return gop;
1056     +err:
1057     + /* Unwind, freeing all pages and sending error responses. */
1058     + while (i-- > start) {
1059     + xen_netbk_idx_release(netbk, frag_get_pending_idx(&frags[i]),
1060     + XEN_NETIF_RSP_ERROR);
1061     + }
1062     + /* The head too, if necessary. */
1063     + if (start)
1064     + xen_netbk_idx_release(netbk, pending_idx, XEN_NETIF_RSP_ERROR);
1065     +
1066     + return NULL;
1067     }
1068    
1069     static int xen_netbk_tx_check_gop(struct xen_netbk *netbk,
1070     @@ -996,30 +1019,20 @@ static int xen_netbk_tx_check_gop(struct xen_netbk *netbk,
1071     {
1072     struct gnttab_copy *gop = *gopp;
1073     u16 pending_idx = *((u16 *)skb->data);
1074     - struct pending_tx_info *pending_tx_info = netbk->pending_tx_info;
1075     - struct xenvif *vif = pending_tx_info[pending_idx].vif;
1076     - struct xen_netif_tx_request *txp;
1077     struct skb_shared_info *shinfo = skb_shinfo(skb);
1078     int nr_frags = shinfo->nr_frags;
1079     int i, err, start;
1080    
1081     /* Check status of header. */
1082     err = gop->status;
1083     - if (unlikely(err)) {
1084     - pending_ring_idx_t index;
1085     - index = pending_index(netbk->pending_prod++);
1086     - txp = &pending_tx_info[pending_idx].req;
1087     - make_tx_response(vif, txp, XEN_NETIF_RSP_ERROR);
1088     - netbk->pending_ring[index] = pending_idx;
1089     - xenvif_put(vif);
1090     - }
1091     + if (unlikely(err))
1092     + xen_netbk_idx_release(netbk, pending_idx, XEN_NETIF_RSP_ERROR);
1093    
1094     /* Skip first skb fragment if it is on same page as header fragment. */
1095     start = (frag_get_pending_idx(&shinfo->frags[0]) == pending_idx);
1096    
1097     for (i = start; i < nr_frags; i++) {
1098     int j, newerr;
1099     - pending_ring_idx_t index;
1100    
1101     pending_idx = frag_get_pending_idx(&shinfo->frags[i]);
1102    
1103     @@ -1028,16 +1041,12 @@ static int xen_netbk_tx_check_gop(struct xen_netbk *netbk,
1104     if (likely(!newerr)) {
1105     /* Had a previous error? Invalidate this fragment. */
1106     if (unlikely(err))
1107     - xen_netbk_idx_release(netbk, pending_idx);
1108     + xen_netbk_idx_release(netbk, pending_idx, XEN_NETIF_RSP_OKAY);
1109     continue;
1110     }
1111    
1112     /* Error on this fragment: respond to client with an error. */
1113     - txp = &netbk->pending_tx_info[pending_idx].req;
1114     - make_tx_response(vif, txp, XEN_NETIF_RSP_ERROR);
1115     - index = pending_index(netbk->pending_prod++);
1116     - netbk->pending_ring[index] = pending_idx;
1117     - xenvif_put(vif);
1118     + xen_netbk_idx_release(netbk, pending_idx, XEN_NETIF_RSP_ERROR);
1119    
1120     /* Not the first error? Preceding frags already invalidated. */
1121     if (err)
1122     @@ -1045,10 +1054,10 @@ static int xen_netbk_tx_check_gop(struct xen_netbk *netbk,
1123    
1124     /* First error: invalidate header and preceding fragments. */
1125     pending_idx = *((u16 *)skb->data);
1126     - xen_netbk_idx_release(netbk, pending_idx);
1127     + xen_netbk_idx_release(netbk, pending_idx, XEN_NETIF_RSP_OKAY);
1128     for (j = start; j < i; j++) {
1129     pending_idx = frag_get_pending_idx(&shinfo->frags[j]);
1130     - xen_netbk_idx_release(netbk, pending_idx);
1131     + xen_netbk_idx_release(netbk, pending_idx, XEN_NETIF_RSP_OKAY);
1132     }
1133    
1134     /* Remember the error: invalidate all subsequent fragments. */
1135     @@ -1082,7 +1091,7 @@ static void xen_netbk_fill_frags(struct xen_netbk *netbk, struct sk_buff *skb)
1136    
1137     /* Take an extra reference to offset xen_netbk_idx_release */
1138     get_page(netbk->mmap_pages[pending_idx]);
1139     - xen_netbk_idx_release(netbk, pending_idx);
1140     + xen_netbk_idx_release(netbk, pending_idx, XEN_NETIF_RSP_OKAY);
1141     }
1142     }
1143    
1144     @@ -1095,7 +1104,8 @@ static int xen_netbk_get_extras(struct xenvif *vif,
1145    
1146     do {
1147     if (unlikely(work_to_do-- <= 0)) {
1148     - netdev_dbg(vif->dev, "Missing extra info\n");
1149     + netdev_err(vif->dev, "Missing extra info\n");
1150     + netbk_fatal_tx_err(vif);
1151     return -EBADR;
1152     }
1153    
1154     @@ -1104,8 +1114,9 @@ static int xen_netbk_get_extras(struct xenvif *vif,
1155     if (unlikely(!extra.type ||
1156     extra.type >= XEN_NETIF_EXTRA_TYPE_MAX)) {
1157     vif->tx.req_cons = ++cons;
1158     - netdev_dbg(vif->dev,
1159     + netdev_err(vif->dev,
1160     "Invalid extra type: %d\n", extra.type);
1161     + netbk_fatal_tx_err(vif);
1162     return -EINVAL;
1163     }
1164    
1165     @@ -1121,13 +1132,15 @@ static int netbk_set_skb_gso(struct xenvif *vif,
1166     struct xen_netif_extra_info *gso)
1167     {
1168     if (!gso->u.gso.size) {
1169     - netdev_dbg(vif->dev, "GSO size must not be zero.\n");
1170     + netdev_err(vif->dev, "GSO size must not be zero.\n");
1171     + netbk_fatal_tx_err(vif);
1172     return -EINVAL;
1173     }
1174    
1175     /* Currently only TCPv4 S.O. is supported. */
1176     if (gso->u.gso.type != XEN_NETIF_GSO_TYPE_TCPV4) {
1177     - netdev_dbg(vif->dev, "Bad GSO type %d.\n", gso->u.gso.type);
1178     + netdev_err(vif->dev, "Bad GSO type %d.\n", gso->u.gso.type);
1179     + netbk_fatal_tx_err(vif);
1180     return -EINVAL;
1181     }
1182    
1183     @@ -1264,9 +1277,25 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
1184    
1185     /* Get a netif from the list with work to do. */
1186     vif = poll_net_schedule_list(netbk);
1187     + /* This can sometimes happen because the test of
1188     + * list_empty(net_schedule_list) at the top of the
1189     + * loop is unlocked. Just go back and have another
1190     + * look.
1191     + */
1192     if (!vif)
1193     continue;
1194    
1195     + if (vif->tx.sring->req_prod - vif->tx.req_cons >
1196     + XEN_NETIF_TX_RING_SIZE) {
1197     + netdev_err(vif->dev,
1198     + "Impossible number of requests. "
1199     + "req_prod %d, req_cons %d, size %ld\n",
1200     + vif->tx.sring->req_prod, vif->tx.req_cons,
1201     + XEN_NETIF_TX_RING_SIZE);
1202     + netbk_fatal_tx_err(vif);
1203     + continue;
1204     + }
1205     +
1206     RING_FINAL_CHECK_FOR_REQUESTS(&vif->tx, work_to_do);
1207     if (!work_to_do) {
1208     xenvif_put(vif);
1209     @@ -1294,17 +1323,14 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
1210     work_to_do = xen_netbk_get_extras(vif, extras,
1211     work_to_do);
1212     idx = vif->tx.req_cons;
1213     - if (unlikely(work_to_do < 0)) {
1214     - netbk_tx_err(vif, &txreq, idx);
1215     + if (unlikely(work_to_do < 0))
1216     continue;
1217     - }
1218     }
1219    
1220     ret = netbk_count_requests(vif, &txreq, txfrags, work_to_do);
1221     - if (unlikely(ret < 0)) {
1222     - netbk_tx_err(vif, &txreq, idx - ret);
1223     + if (unlikely(ret < 0))
1224     continue;
1225     - }
1226     +
1227     idx += ret;
1228    
1229     if (unlikely(txreq.size < ETH_HLEN)) {
1230     @@ -1316,11 +1342,11 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
1231    
1232     /* No crossing a page as the payload mustn't fragment. */
1233     if (unlikely((txreq.offset + txreq.size) > PAGE_SIZE)) {
1234     - netdev_dbg(vif->dev,
1235     + netdev_err(vif->dev,
1236     "txreq.offset: %x, size: %u, end: %lu\n",
1237     txreq.offset, txreq.size,
1238     (txreq.offset&~PAGE_MASK) + txreq.size);
1239     - netbk_tx_err(vif, &txreq, idx);
1240     + netbk_fatal_tx_err(vif);
1241     continue;
1242     }
1243    
1244     @@ -1348,8 +1374,8 @@ static unsigned xen_netbk_tx_build_gops(struct xen_netbk *netbk)
1245     gso = &extras[XEN_NETIF_EXTRA_TYPE_GSO - 1];
1246    
1247     if (netbk_set_skb_gso(vif, skb, gso)) {
1248     + /* Failure in netbk_set_skb_gso is fatal. */
1249     kfree_skb(skb);
1250     - netbk_tx_err(vif, &txreq, idx);
1251     continue;
1252     }
1253     }
1254     @@ -1448,7 +1474,7 @@ static void xen_netbk_tx_submit(struct xen_netbk *netbk)
1255     txp->size -= data_len;
1256     } else {
1257     /* Schedule a response immediately. */
1258     - xen_netbk_idx_release(netbk, pending_idx);
1259     + xen_netbk_idx_release(netbk, pending_idx, XEN_NETIF_RSP_OKAY);
1260     }
1261    
1262     if (txp->flags & XEN_NETTXF_csum_blank)
1263     @@ -1500,7 +1526,8 @@ static void xen_netbk_tx_action(struct xen_netbk *netbk)
1264     xen_netbk_tx_submit(netbk);
1265     }
1266    
1267     -static void xen_netbk_idx_release(struct xen_netbk *netbk, u16 pending_idx)
1268     +static void xen_netbk_idx_release(struct xen_netbk *netbk, u16 pending_idx,
1269     + u8 status)
1270     {
1271     struct xenvif *vif;
1272     struct pending_tx_info *pending_tx_info;
1273     @@ -1514,7 +1541,7 @@ static void xen_netbk_idx_release(struct xen_netbk *netbk, u16 pending_idx)
1274    
1275     vif = pending_tx_info->vif;
1276    
1277     - make_tx_response(vif, &pending_tx_info->req, XEN_NETIF_RSP_OKAY);
1278     + make_tx_response(vif, &pending_tx_info->req, status);
1279    
1280     index = pending_index(netbk->pending_prod++);
1281     netbk->pending_ring[index] = pending_idx;
1282     diff --git a/drivers/regulator/max8998.c b/drivers/regulator/max8998.c
1283     index 6a20019..6b431a7 100644
1284     --- a/drivers/regulator/max8998.c
1285     +++ b/drivers/regulator/max8998.c
1286     @@ -65,7 +65,7 @@ static const struct voltage_map_desc ldo9_voltage_map_desc = {
1287     .min = 2800000, .step = 100000, .max = 3100000,
1288     };
1289     static const struct voltage_map_desc ldo10_voltage_map_desc = {
1290     - .min = 95000, .step = 50000, .max = 1300000,
1291     + .min = 950000, .step = 50000, .max = 1300000,
1292     };
1293     static const struct voltage_map_desc ldo1213_voltage_map_desc = {
1294     .min = 800000, .step = 100000, .max = 3300000,
1295     diff --git a/drivers/regulator/of_regulator.c b/drivers/regulator/of_regulator.c
1296     index 6f68491..66ca769 100644
1297     --- a/drivers/regulator/of_regulator.c
1298     +++ b/drivers/regulator/of_regulator.c
1299     @@ -120,6 +120,12 @@ int of_regulator_match(struct device *dev, struct device_node *node,
1300     if (!dev || !node)
1301     return -EINVAL;
1302    
1303     + for (i = 0; i < num_matches; i++) {
1304     + struct of_regulator_match *match = &matches[i];
1305     + match->init_data = NULL;
1306     + match->of_node = NULL;
1307     + }
1308     +
1309     for_each_child_of_node(node, child) {
1310     name = of_get_property(child,
1311     "regulator-compatible", NULL);
1312     diff --git a/drivers/regulator/s2mps11.c b/drivers/regulator/s2mps11.c
1313     index 3fd1b88..d6e4e1c 100644
1314     --- a/drivers/regulator/s2mps11.c
1315     +++ b/drivers/regulator/s2mps11.c
1316     @@ -174,9 +174,9 @@ static struct regulator_ops s2mps11_buck_ops = {
1317     .min_uV = S2MPS11_BUCK_MIN2, \
1318     .uV_step = S2MPS11_BUCK_STEP2, \
1319     .n_voltages = S2MPS11_BUCK_N_VOLTAGES, \
1320     - .vsel_reg = S2MPS11_REG_B9CTRL2, \
1321     + .vsel_reg = S2MPS11_REG_B10CTRL2, \
1322     .vsel_mask = S2MPS11_BUCK_VSEL_MASK, \
1323     - .enable_reg = S2MPS11_REG_B9CTRL1, \
1324     + .enable_reg = S2MPS11_REG_B10CTRL1, \
1325     .enable_mask = S2MPS11_ENABLE_MASK \
1326     }
1327    
1328     diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
1329     index a848ffc..825fb7e 100644
1330     --- a/include/linux/netdevice.h
1331     +++ b/include/linux/netdevice.h
1332     @@ -60,6 +60,9 @@ struct wireless_dev;
1333     #define SET_ETHTOOL_OPS(netdev,ops) \
1334     ( (netdev)->ethtool_ops = (ops) )
1335    
1336     +extern void netdev_set_default_ethtool_ops(struct net_device *dev,
1337     + const struct ethtool_ops *ops);
1338     +
1339     /* hardware address assignment types */
1340     #define NET_ADDR_PERM 0 /* address is permanent (default) */
1341     #define NET_ADDR_RANDOM 1 /* address is generated randomly */
1342     diff --git a/include/net/ip.h b/include/net/ip.h
1343     index 0707fb9..a68f838 100644
1344     --- a/include/net/ip.h
1345     +++ b/include/net/ip.h
1346     @@ -143,6 +143,8 @@ static inline struct sk_buff *ip_finish_skb(struct sock *sk, struct flowi4 *fl4)
1347     extern int ip4_datagram_connect(struct sock *sk,
1348     struct sockaddr *uaddr, int addr_len);
1349    
1350     +extern void ip4_datagram_release_cb(struct sock *sk);
1351     +
1352     struct ip_reply_arg {
1353     struct kvec iov[1];
1354     int flags;
1355     diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
1356     index a592337..cf31bad 100644
1357     --- a/net/bluetooth/smp.c
1358     +++ b/net/bluetooth/smp.c
1359     @@ -859,6 +859,19 @@ int smp_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
1360    
1361     skb_pull(skb, sizeof(code));
1362    
1363     + /*
1364     + * The SMP context must be initialized for all other PDUs except
1365     + * pairing and security requests. If we get any other PDU when
1366     + * not initialized simply disconnect (done if this function
1367     + * returns an error).
1368     + */
1369     + if (code != SMP_CMD_PAIRING_REQ && code != SMP_CMD_SECURITY_REQ &&
1370     + !conn->smp_chan) {
1371     + BT_ERR("Unexpected SMP command 0x%02x. Disconnecting.", code);
1372     + kfree_skb(skb);
1373     + return -ENOTSUPP;
1374     + }
1375     +
1376     switch (code) {
1377     case SMP_CMD_PAIRING_REQ:
1378     reason = smp_cmd_pairing_req(conn, skb);
1379     diff --git a/net/core/dev.c b/net/core/dev.c
1380     index e5942bf..3470794 100644
1381     --- a/net/core/dev.c
1382     +++ b/net/core/dev.c
1383     @@ -6012,6 +6012,14 @@ struct netdev_queue *dev_ingress_queue_create(struct net_device *dev)
1384    
1385     static const struct ethtool_ops default_ethtool_ops;
1386    
1387     +void netdev_set_default_ethtool_ops(struct net_device *dev,
1388     + const struct ethtool_ops *ops)
1389     +{
1390     + if (dev->ethtool_ops == &default_ethtool_ops)
1391     + dev->ethtool_ops = ops;
1392     +}
1393     +EXPORT_SYMBOL_GPL(netdev_set_default_ethtool_ops);
1394     +
1395     /**
1396     * alloc_netdev_mqs - allocate network device
1397     * @sizeof_priv: size of private data to allocate space for
1398     diff --git a/net/core/pktgen.c b/net/core/pktgen.c
1399     index d1dc14c..21350db 100644
1400     --- a/net/core/pktgen.c
1401     +++ b/net/core/pktgen.c
1402     @@ -1795,10 +1795,13 @@ static ssize_t pktgen_thread_write(struct file *file,
1403     return -EFAULT;
1404     i += len;
1405     mutex_lock(&pktgen_thread_lock);
1406     - pktgen_add_device(t, f);
1407     + ret = pktgen_add_device(t, f);
1408     mutex_unlock(&pktgen_thread_lock);
1409     - ret = count;
1410     - sprintf(pg_result, "OK: add_device=%s", f);
1411     + if (!ret) {
1412     + ret = count;
1413     + sprintf(pg_result, "OK: add_device=%s", f);
1414     + } else
1415     + sprintf(pg_result, "ERROR: can not add device %s", f);
1416     goto out;
1417     }
1418    
1419     diff --git a/net/core/request_sock.c b/net/core/request_sock.c
1420     index c31d9e8..4425148 100644
1421     --- a/net/core/request_sock.c
1422     +++ b/net/core/request_sock.c
1423     @@ -186,8 +186,6 @@ void reqsk_fastopen_remove(struct sock *sk, struct request_sock *req,
1424     struct fastopen_queue *fastopenq =
1425     inet_csk(lsk)->icsk_accept_queue.fastopenq;
1426    
1427     - BUG_ON(!spin_is_locked(&sk->sk_lock.slock) && !sock_owned_by_user(sk));
1428     -
1429     tcp_sk(sk)->fastopen_rsk = NULL;
1430     spin_lock_bh(&fastopenq->lock);
1431     fastopenq->qlen--;
1432     diff --git a/net/core/skbuff.c b/net/core/skbuff.c
1433     index 3f0636c..1899d83 100644
1434     --- a/net/core/skbuff.c
1435     +++ b/net/core/skbuff.c
1436     @@ -1620,7 +1620,7 @@ static void sock_spd_release(struct splice_pipe_desc *spd, unsigned int i)
1437    
1438     static struct page *linear_to_page(struct page *page, unsigned int *len,
1439     unsigned int *offset,
1440     - struct sk_buff *skb, struct sock *sk)
1441     + struct sock *sk)
1442     {
1443     struct page_frag *pfrag = sk_page_frag(sk);
1444    
1445     @@ -1653,14 +1653,14 @@ static bool spd_can_coalesce(const struct splice_pipe_desc *spd,
1446     static bool spd_fill_page(struct splice_pipe_desc *spd,
1447     struct pipe_inode_info *pipe, struct page *page,
1448     unsigned int *len, unsigned int offset,
1449     - struct sk_buff *skb, bool linear,
1450     + bool linear,
1451     struct sock *sk)
1452     {
1453     if (unlikely(spd->nr_pages == MAX_SKB_FRAGS))
1454     return true;
1455    
1456     if (linear) {
1457     - page = linear_to_page(page, len, &offset, skb, sk);
1458     + page = linear_to_page(page, len, &offset, sk);
1459     if (!page)
1460     return true;
1461     }
1462     @@ -1677,23 +1677,9 @@ static bool spd_fill_page(struct splice_pipe_desc *spd,
1463     return false;
1464     }
1465    
1466     -static inline void __segment_seek(struct page **page, unsigned int *poff,
1467     - unsigned int *plen, unsigned int off)
1468     -{
1469     - unsigned long n;
1470     -
1471     - *poff += off;
1472     - n = *poff / PAGE_SIZE;
1473     - if (n)
1474     - *page = nth_page(*page, n);
1475     -
1476     - *poff = *poff % PAGE_SIZE;
1477     - *plen -= off;
1478     -}
1479     -
1480     static bool __splice_segment(struct page *page, unsigned int poff,
1481     unsigned int plen, unsigned int *off,
1482     - unsigned int *len, struct sk_buff *skb,
1483     + unsigned int *len,
1484     struct splice_pipe_desc *spd, bool linear,
1485     struct sock *sk,
1486     struct pipe_inode_info *pipe)
1487     @@ -1708,23 +1694,19 @@ static bool __splice_segment(struct page *page, unsigned int poff,
1488     }
1489    
1490     /* ignore any bits we already processed */
1491     - if (*off) {
1492     - __segment_seek(&page, &poff, &plen, *off);
1493     - *off = 0;
1494     - }
1495     + poff += *off;
1496     + plen -= *off;
1497     + *off = 0;
1498    
1499     do {
1500     unsigned int flen = min(*len, plen);
1501    
1502     - /* the linear region may spread across several pages */
1503     - flen = min_t(unsigned int, flen, PAGE_SIZE - poff);
1504     -
1505     - if (spd_fill_page(spd, pipe, page, &flen, poff, skb, linear, sk))
1506     + if (spd_fill_page(spd, pipe, page, &flen, poff,
1507     + linear, sk))
1508     return true;
1509     -
1510     - __segment_seek(&page, &poff, &plen, flen);
1511     + poff += flen;
1512     + plen -= flen;
1513     *len -= flen;
1514     -
1515     } while (*len && plen);
1516    
1517     return false;
1518     @@ -1748,7 +1730,7 @@ static bool __skb_splice_bits(struct sk_buff *skb, struct pipe_inode_info *pipe,
1519     if (__splice_segment(virt_to_page(skb->data),
1520     (unsigned long) skb->data & (PAGE_SIZE - 1),
1521     skb_headlen(skb),
1522     - offset, len, skb, spd,
1523     + offset, len, spd,
1524     skb_head_is_locked(skb),
1525     sk, pipe))
1526     return true;
1527     @@ -1761,7 +1743,7 @@ static bool __skb_splice_bits(struct sk_buff *skb, struct pipe_inode_info *pipe,
1528    
1529     if (__splice_segment(skb_frag_page(f),
1530     f->page_offset, skb_frag_size(f),
1531     - offset, len, skb, spd, false, sk, pipe))
1532     + offset, len, spd, false, sk, pipe))
1533     return true;
1534     }
1535    
1536     diff --git a/net/ipv4/datagram.c b/net/ipv4/datagram.c
1537     index 424fafb..b28e863 100644
1538     --- a/net/ipv4/datagram.c
1539     +++ b/net/ipv4/datagram.c
1540     @@ -85,3 +85,28 @@ out:
1541     return err;
1542     }
1543     EXPORT_SYMBOL(ip4_datagram_connect);
1544     +
1545     +void ip4_datagram_release_cb(struct sock *sk)
1546     +{
1547     + const struct inet_sock *inet = inet_sk(sk);
1548     + const struct ip_options_rcu *inet_opt;
1549     + __be32 daddr = inet->inet_daddr;
1550     + struct flowi4 fl4;
1551     + struct rtable *rt;
1552     +
1553     + if (! __sk_dst_get(sk) || __sk_dst_check(sk, 0))
1554     + return;
1555     +
1556     + rcu_read_lock();
1557     + inet_opt = rcu_dereference(inet->inet_opt);
1558     + if (inet_opt && inet_opt->opt.srr)
1559     + daddr = inet_opt->opt.faddr;
1560     + rt = ip_route_output_ports(sock_net(sk), &fl4, sk, daddr,
1561     + inet->inet_saddr, inet->inet_dport,
1562     + inet->inet_sport, sk->sk_protocol,
1563     + RT_CONN_FLAGS(sk), sk->sk_bound_dev_if);
1564     + if (!IS_ERR(rt))
1565     + __sk_dst_set(sk, &rt->dst);
1566     + rcu_read_unlock();
1567     +}
1568     +EXPORT_SYMBOL_GPL(ip4_datagram_release_cb);
1569     diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
1570     index 7240f8e..07538a7 100644
1571     --- a/net/ipv4/ip_gre.c
1572     +++ b/net/ipv4/ip_gre.c
1573     @@ -972,8 +972,12 @@ static netdev_tx_t ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev
1574     ptr--;
1575     }
1576     if (tunnel->parms.o_flags&GRE_CSUM) {
1577     + int offset = skb_transport_offset(skb);
1578     +
1579     *ptr = 0;
1580     - *(__sum16 *)ptr = ip_compute_csum((void *)(iph+1), skb->len - sizeof(struct iphdr));
1581     + *(__sum16 *)ptr = csum_fold(skb_checksum(skb, offset,
1582     + skb->len - offset,
1583     + 0));
1584     }
1585     }
1586    
1587     diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
1588     index 14bbfcf..e95d72b 100644
1589     --- a/net/ipv4/ip_sockglue.c
1590     +++ b/net/ipv4/ip_sockglue.c
1591     @@ -590,7 +590,7 @@ static int do_ip_setsockopt(struct sock *sk, int level,
1592     case IP_TTL:
1593     if (optlen < 1)
1594     goto e_inval;
1595     - if (val != -1 && (val < 0 || val > 255))
1596     + if (val != -1 && (val < 1 || val > 255))
1597     goto e_inval;
1598     inet->uc_ttl = val;
1599     break;
1600     diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
1601     index 8f3d054..6f9c072 100644
1602     --- a/net/ipv4/ping.c
1603     +++ b/net/ipv4/ping.c
1604     @@ -738,6 +738,7 @@ struct proto ping_prot = {
1605     .recvmsg = ping_recvmsg,
1606     .bind = ping_bind,
1607     .backlog_rcv = ping_queue_rcv_skb,
1608     + .release_cb = ip4_datagram_release_cb,
1609     .hash = ping_v4_hash,
1610     .unhash = ping_v4_unhash,
1611     .get_port = ping_v4_get_port,
1612     diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
1613     index 73d1e4d..6f08991 100644
1614     --- a/net/ipv4/raw.c
1615     +++ b/net/ipv4/raw.c
1616     @@ -894,6 +894,7 @@ struct proto raw_prot = {
1617     .recvmsg = raw_recvmsg,
1618     .bind = raw_bind,
1619     .backlog_rcv = raw_rcv_skb,
1620     + .release_cb = ip4_datagram_release_cb,
1621     .hash = raw_hash_sk,
1622     .unhash = raw_unhash_sk,
1623     .obj_size = sizeof(struct raw_sock),
1624     diff --git a/net/ipv4/route.c b/net/ipv4/route.c
1625     index df25142..0fdfe4c 100644
1626     --- a/net/ipv4/route.c
1627     +++ b/net/ipv4/route.c
1628     @@ -912,6 +912,9 @@ static void __ip_rt_update_pmtu(struct rtable *rt, struct flowi4 *fl4, u32 mtu)
1629     struct dst_entry *dst = &rt->dst;
1630     struct fib_result res;
1631    
1632     + if (dst_metric_locked(dst, RTAX_MTU))
1633     + return;
1634     +
1635     if (dst->dev->mtu < mtu)
1636     return;
1637    
1638     @@ -962,7 +965,7 @@ void ipv4_update_pmtu(struct sk_buff *skb, struct net *net, u32 mtu,
1639     }
1640     EXPORT_SYMBOL_GPL(ipv4_update_pmtu);
1641    
1642     -void ipv4_sk_update_pmtu(struct sk_buff *skb, struct sock *sk, u32 mtu)
1643     +static void __ipv4_sk_update_pmtu(struct sk_buff *skb, struct sock *sk, u32 mtu)
1644     {
1645     const struct iphdr *iph = (const struct iphdr *) skb->data;
1646     struct flowi4 fl4;
1647     @@ -975,6 +978,53 @@ void ipv4_sk_update_pmtu(struct sk_buff *skb, struct sock *sk, u32 mtu)
1648     ip_rt_put(rt);
1649     }
1650     }
1651     +
1652     +void ipv4_sk_update_pmtu(struct sk_buff *skb, struct sock *sk, u32 mtu)
1653     +{
1654     + const struct iphdr *iph = (const struct iphdr *) skb->data;
1655     + struct flowi4 fl4;
1656     + struct rtable *rt;
1657     + struct dst_entry *dst;
1658     + bool new = false;
1659     +
1660     + bh_lock_sock(sk);
1661     + rt = (struct rtable *) __sk_dst_get(sk);
1662     +
1663     + if (sock_owned_by_user(sk) || !rt) {
1664     + __ipv4_sk_update_pmtu(skb, sk, mtu);
1665     + goto out;
1666     + }
1667     +
1668     + __build_flow_key(&fl4, sk, iph, 0, 0, 0, 0, 0);
1669     +
1670     + if (!__sk_dst_check(sk, 0)) {
1671     + rt = ip_route_output_flow(sock_net(sk), &fl4, sk);
1672     + if (IS_ERR(rt))
1673     + goto out;
1674     +
1675     + new = true;
1676     + }
1677     +
1678     + __ip_rt_update_pmtu((struct rtable *) rt->dst.path, &fl4, mtu);
1679     +
1680     + dst = dst_check(&rt->dst, 0);
1681     + if (!dst) {
1682     + if (new)
1683     + dst_release(&rt->dst);
1684     +
1685     + rt = ip_route_output_flow(sock_net(sk), &fl4, sk);
1686     + if (IS_ERR(rt))
1687     + goto out;
1688     +
1689     + new = true;
1690     + }
1691     +
1692     + if (new)
1693     + __sk_dst_set(sk, &rt->dst);
1694     +
1695     +out:
1696     + bh_unlock_sock(sk);
1697     +}
1698     EXPORT_SYMBOL_GPL(ipv4_sk_update_pmtu);
1699    
1700     void ipv4_redirect(struct sk_buff *skb, struct net *net,
1701     @@ -1120,7 +1170,7 @@ static unsigned int ipv4_mtu(const struct dst_entry *dst)
1702     if (!mtu || time_after_eq(jiffies, rt->dst.expires))
1703     mtu = dst_metric_raw(dst, RTAX_MTU);
1704    
1705     - if (mtu && rt_is_output_route(rt))
1706     + if (mtu)
1707     return mtu;
1708    
1709     mtu = dst->dev->mtu;
1710     diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
1711     index e457c7a..667e8a0 100644
1712     --- a/net/ipv4/tcp.c
1713     +++ b/net/ipv4/tcp.c
1714     @@ -1427,12 +1427,12 @@ static void tcp_service_net_dma(struct sock *sk, bool wait)
1715     }
1716     #endif
1717    
1718     -static inline struct sk_buff *tcp_recv_skb(struct sock *sk, u32 seq, u32 *off)
1719     +static struct sk_buff *tcp_recv_skb(struct sock *sk, u32 seq, u32 *off)
1720     {
1721     struct sk_buff *skb;
1722     u32 offset;
1723    
1724     - skb_queue_walk(&sk->sk_receive_queue, skb) {
1725     + while ((skb = skb_peek(&sk->sk_receive_queue)) != NULL) {
1726     offset = seq - TCP_SKB_CB(skb)->seq;
1727     if (tcp_hdr(skb)->syn)
1728     offset--;
1729     @@ -1440,6 +1440,11 @@ static inline struct sk_buff *tcp_recv_skb(struct sock *sk, u32 seq, u32 *off)
1730     *off = offset;
1731     return skb;
1732     }
1733     + /* This looks weird, but this can happen if TCP collapsing
1734     + * splitted a fat GRO packet, while we released socket lock
1735     + * in skb_splice_bits()
1736     + */
1737     + sk_eat_skb(sk, skb, false);
1738     }
1739     return NULL;
1740     }
1741     @@ -1481,7 +1486,7 @@ int tcp_read_sock(struct sock *sk, read_descriptor_t *desc,
1742     break;
1743     }
1744     used = recv_actor(desc, skb, offset, len);
1745     - if (used < 0) {
1746     + if (used <= 0) {
1747     if (!copied)
1748     copied = used;
1749     break;
1750     @@ -1490,15 +1495,19 @@ int tcp_read_sock(struct sock *sk, read_descriptor_t *desc,
1751     copied += used;
1752     offset += used;
1753     }
1754     - /*
1755     - * If recv_actor drops the lock (e.g. TCP splice
1756     + /* If recv_actor drops the lock (e.g. TCP splice
1757     * receive) the skb pointer might be invalid when
1758     * getting here: tcp_collapse might have deleted it
1759     * while aggregating skbs from the socket queue.
1760     */
1761     - skb = tcp_recv_skb(sk, seq-1, &offset);
1762     - if (!skb || (offset+1 != skb->len))
1763     + skb = tcp_recv_skb(sk, seq - 1, &offset);
1764     + if (!skb)
1765     break;
1766     + /* TCP coalescing might have appended data to the skb.
1767     + * Try to splice more frags
1768     + */
1769     + if (offset + 1 != skb->len)
1770     + continue;
1771     }
1772     if (tcp_hdr(skb)->fin) {
1773     sk_eat_skb(sk, skb, false);
1774     @@ -1515,8 +1524,10 @@ int tcp_read_sock(struct sock *sk, read_descriptor_t *desc,
1775     tcp_rcv_space_adjust(sk);
1776    
1777     /* Clean up data we have read: This will do ACK frames. */
1778     - if (copied > 0)
1779     + if (copied > 0) {
1780     + tcp_recv_skb(sk, seq, &offset);
1781     tcp_cleanup_rbuf(sk, copied);
1782     + }
1783     return copied;
1784     }
1785     EXPORT_SYMBOL(tcp_read_sock);
1786     diff --git a/net/ipv4/tcp_cong.c b/net/ipv4/tcp_cong.c
1787     index 1432cdb..fc582a7 100644
1788     --- a/net/ipv4/tcp_cong.c
1789     +++ b/net/ipv4/tcp_cong.c
1790     @@ -309,6 +309,12 @@ void tcp_slow_start(struct tcp_sock *tp)
1791     {
1792     int cnt; /* increase in packets */
1793     unsigned int delta = 0;
1794     + u32 snd_cwnd = tp->snd_cwnd;
1795     +
1796     + if (unlikely(!snd_cwnd)) {
1797     + pr_err_once("snd_cwnd is nul, please report this bug.\n");
1798     + snd_cwnd = 1U;
1799     + }
1800    
1801     /* RFC3465: ABC Slow start
1802     * Increase only after a full MSS of bytes is acked
1803     @@ -323,7 +329,7 @@ void tcp_slow_start(struct tcp_sock *tp)
1804     if (sysctl_tcp_max_ssthresh > 0 && tp->snd_cwnd > sysctl_tcp_max_ssthresh)
1805     cnt = sysctl_tcp_max_ssthresh >> 1; /* limited slow start */
1806     else
1807     - cnt = tp->snd_cwnd; /* exponential increase */
1808     + cnt = snd_cwnd; /* exponential increase */
1809    
1810     /* RFC3465: ABC
1811     * We MAY increase by 2 if discovered delayed ack
1812     @@ -333,11 +339,11 @@ void tcp_slow_start(struct tcp_sock *tp)
1813     tp->bytes_acked = 0;
1814    
1815     tp->snd_cwnd_cnt += cnt;
1816     - while (tp->snd_cwnd_cnt >= tp->snd_cwnd) {
1817     - tp->snd_cwnd_cnt -= tp->snd_cwnd;
1818     + while (tp->snd_cwnd_cnt >= snd_cwnd) {
1819     + tp->snd_cwnd_cnt -= snd_cwnd;
1820     delta++;
1821     }
1822     - tp->snd_cwnd = min(tp->snd_cwnd + delta, tp->snd_cwnd_clamp);
1823     + tp->snd_cwnd = min(snd_cwnd + delta, tp->snd_cwnd_clamp);
1824     }
1825     EXPORT_SYMBOL_GPL(tcp_slow_start);
1826    
1827     diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
1828     index 181fc82..beabc80 100644
1829     --- a/net/ipv4/tcp_input.c
1830     +++ b/net/ipv4/tcp_input.c
1831     @@ -3504,6 +3504,11 @@ static bool tcp_process_frto(struct sock *sk, int flag)
1832     }
1833     } else {
1834     if (!(flag & FLAG_DATA_ACKED) && (tp->frto_counter == 1)) {
1835     + if (!tcp_packets_in_flight(tp)) {
1836     + tcp_enter_frto_loss(sk, 2, flag);
1837     + return true;
1838     + }
1839     +
1840     /* Prevent sending of new data. */
1841     tp->snd_cwnd = min(tp->snd_cwnd,
1842     tcp_packets_in_flight(tp));
1843     @@ -5639,8 +5644,7 @@ static bool tcp_rcv_fastopen_synack(struct sock *sk, struct sk_buff *synack,
1844     * the remote receives only the retransmitted (regular) SYNs: either
1845     * the original SYN-data or the corresponding SYN-ACK is lost.
1846     */
1847     - syn_drop = (cookie->len <= 0 && data &&
1848     - inet_csk(sk)->icsk_retransmits);
1849     + syn_drop = (cookie->len <= 0 && data && tp->total_retrans);
1850    
1851     tcp_fastopen_cache_set(sk, mss, cookie, syn_drop);
1852    
1853     diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
1854     index bc3cb46..e637770 100644
1855     --- a/net/ipv4/tcp_ipv4.c
1856     +++ b/net/ipv4/tcp_ipv4.c
1857     @@ -380,11 +380,10 @@ void tcp_v4_err(struct sk_buff *icmp_skb, u32 info)
1858     * We do take care of PMTU discovery (RFC1191) special case :
1859     * we can receive locally generated ICMP messages while socket is held.
1860     */
1861     - if (sock_owned_by_user(sk) &&
1862     - type != ICMP_DEST_UNREACH &&
1863     - code != ICMP_FRAG_NEEDED)
1864     - NET_INC_STATS_BH(net, LINUX_MIB_LOCKDROPPEDICMPS);
1865     -
1866     + if (sock_owned_by_user(sk)) {
1867     + if (!(type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED))
1868     + NET_INC_STATS_BH(net, LINUX_MIB_LOCKDROPPEDICMPS);
1869     + }
1870     if (sk->sk_state == TCP_CLOSE)
1871     goto out;
1872    
1873     diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
1874     index 79c8dbe..1f4d405 100644
1875     --- a/net/ipv4/udp.c
1876     +++ b/net/ipv4/udp.c
1877     @@ -1952,6 +1952,7 @@ struct proto udp_prot = {
1878     .recvmsg = udp_recvmsg,
1879     .sendpage = udp_sendpage,
1880     .backlog_rcv = __udp_queue_rcv_skb,
1881     + .release_cb = ip4_datagram_release_cb,
1882     .hash = udp_lib_hash,
1883     .unhash = udp_lib_unhash,
1884     .rehash = udp_v4_rehash,
1885     diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
1886     index 0424e4e..a468a36 100644
1887     --- a/net/ipv6/addrconf.c
1888     +++ b/net/ipv6/addrconf.c
1889     @@ -1723,7 +1723,7 @@ static struct rt6_info *addrconf_get_prefix_route(const struct in6_addr *pfx,
1890     continue;
1891     if ((rt->rt6i_flags & flags) != flags)
1892     continue;
1893     - if ((noflags != 0) && ((rt->rt6i_flags & flags) != 0))
1894     + if ((rt->rt6i_flags & noflags) != 0)
1895     continue;
1896     dst_hold(&rt->dst);
1897     break;
1898     diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c
1899     index 24d69db..4d844d7 100644
1900     --- a/net/ipv6/icmp.c
1901     +++ b/net/ipv6/icmp.c
1902     @@ -81,10 +81,22 @@ static inline struct sock *icmpv6_sk(struct net *net)
1903     return net->ipv6.icmp_sk[smp_processor_id()];
1904     }
1905    
1906     +static void icmpv6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
1907     + u8 type, u8 code, int offset, __be32 info)
1908     +{
1909     + struct net *net = dev_net(skb->dev);
1910     +
1911     + if (type == ICMPV6_PKT_TOOBIG)
1912     + ip6_update_pmtu(skb, net, info, 0, 0);
1913     + else if (type == NDISC_REDIRECT)
1914     + ip6_redirect(skb, net, 0, 0);
1915     +}
1916     +
1917     static int icmpv6_rcv(struct sk_buff *skb);
1918    
1919     static const struct inet6_protocol icmpv6_protocol = {
1920     .handler = icmpv6_rcv,
1921     + .err_handler = icmpv6_err,
1922     .flags = INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL,
1923     };
1924    
1925     diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
1926     index d5cb3c4..a23350c 100644
1927     --- a/net/ipv6/ip6_gre.c
1928     +++ b/net/ipv6/ip6_gre.c
1929     @@ -976,7 +976,7 @@ static netdev_tx_t ip6gre_tunnel_xmit(struct sk_buff *skb,
1930     int ret;
1931    
1932     if (!ip6_tnl_xmit_ctl(t))
1933     - return -1;
1934     + goto tx_err;
1935    
1936     switch (skb->protocol) {
1937     case htons(ETH_P_IP):
1938     diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
1939     index aece3e7..8dea314 100644
1940     --- a/net/ipv6/ip6_output.c
1941     +++ b/net/ipv6/ip6_output.c
1942     @@ -1279,10 +1279,10 @@ int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to,
1943     if (dst_allfrag(rt->dst.path))
1944     cork->flags |= IPCORK_ALLFRAG;
1945     cork->length = 0;
1946     - exthdrlen = (opt ? opt->opt_flen : 0) - rt->rt6i_nfheader_len;
1947     + exthdrlen = (opt ? opt->opt_flen : 0);
1948     length += exthdrlen;
1949     transhdrlen += exthdrlen;
1950     - dst_exthdrlen = rt->dst.header_len;
1951     + dst_exthdrlen = rt->dst.header_len - rt->rt6i_nfheader_len;
1952     } else {
1953     rt = (struct rt6_info *)cork->dst;
1954     fl6 = &inet->cork.fl.u.ip6;
1955     diff --git a/net/ipv6/route.c b/net/ipv6/route.c
1956     index b1e6cf0..b140ef2 100644
1957     --- a/net/ipv6/route.c
1958     +++ b/net/ipv6/route.c
1959     @@ -872,7 +872,7 @@ restart:
1960     dst_hold(&rt->dst);
1961     read_unlock_bh(&table->tb6_lock);
1962    
1963     - if (!rt->n && !(rt->rt6i_flags & RTF_NONEXTHOP))
1964     + if (!rt->n && !(rt->rt6i_flags & (RTF_NONEXTHOP | RTF_LOCAL)))
1965     nrt = rt6_alloc_cow(rt, &fl6->daddr, &fl6->saddr);
1966     else if (!(rt->dst.flags & DST_HOST))
1967     nrt = rt6_alloc_clone(rt, &fl6->daddr);
1968     diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
1969     index 94060ed..5db6316 100644
1970     --- a/net/packet/af_packet.c
1971     +++ b/net/packet/af_packet.c
1972     @@ -2335,13 +2335,15 @@ static int packet_release(struct socket *sock)
1973    
1974     packet_flush_mclist(sk);
1975    
1976     - memset(&req_u, 0, sizeof(req_u));
1977     -
1978     - if (po->rx_ring.pg_vec)
1979     + if (po->rx_ring.pg_vec) {
1980     + memset(&req_u, 0, sizeof(req_u));
1981     packet_set_ring(sk, &req_u, 1, 0);
1982     + }
1983    
1984     - if (po->tx_ring.pg_vec)
1985     + if (po->tx_ring.pg_vec) {
1986     + memset(&req_u, 0, sizeof(req_u));
1987     packet_set_ring(sk, &req_u, 1, 1);
1988     + }
1989    
1990     fanout_release(sk);
1991    
1992     diff --git a/net/sctp/endpointola.c b/net/sctp/endpointola.c
1993     index 1859e2b..80a7264 100644
1994     --- a/net/sctp/endpointola.c
1995     +++ b/net/sctp/endpointola.c
1996     @@ -249,6 +249,8 @@ void sctp_endpoint_free(struct sctp_endpoint *ep)
1997     /* Final destructor for endpoint. */
1998     static void sctp_endpoint_destroy(struct sctp_endpoint *ep)
1999     {
2000     + int i;
2001     +
2002     SCTP_ASSERT(ep->base.dead, "Endpoint is not dead", return);
2003    
2004     /* Free up the HMAC transform. */
2005     @@ -271,6 +273,9 @@ static void sctp_endpoint_destroy(struct sctp_endpoint *ep)
2006     sctp_inq_free(&ep->base.inqueue);
2007     sctp_bind_addr_free(&ep->base.bind_addr);
2008    
2009     + for (i = 0; i < SCTP_HOW_MANY_SECRETS; ++i)
2010     + memset(&ep->secret_key[i], 0, SCTP_SECRET_SIZE);
2011     +
2012     /* Remove and free the port */
2013     if (sctp_sk(ep->base.sk)->bind_hash)
2014     sctp_put_port(ep->base.sk);
2015     diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c
2016     index 1b4a7f8..bcaa4c8 100644
2017     --- a/net/sctp/outqueue.c
2018     +++ b/net/sctp/outqueue.c
2019     @@ -224,7 +224,7 @@ void sctp_outq_init(struct sctp_association *asoc, struct sctp_outq *q)
2020    
2021     /* Free the outqueue structure and any related pending chunks.
2022     */
2023     -void sctp_outq_teardown(struct sctp_outq *q)
2024     +static void __sctp_outq_teardown(struct sctp_outq *q)
2025     {
2026     struct sctp_transport *transport;
2027     struct list_head *lchunk, *temp;
2028     @@ -277,8 +277,6 @@ void sctp_outq_teardown(struct sctp_outq *q)
2029     sctp_chunk_free(chunk);
2030     }
2031    
2032     - q->error = 0;
2033     -
2034     /* Throw away any leftover control chunks. */
2035     list_for_each_entry_safe(chunk, tmp, &q->control_chunk_list, list) {
2036     list_del_init(&chunk->list);
2037     @@ -286,11 +284,17 @@ void sctp_outq_teardown(struct sctp_outq *q)
2038     }
2039     }
2040    
2041     +void sctp_outq_teardown(struct sctp_outq *q)
2042     +{
2043     + __sctp_outq_teardown(q);
2044     + sctp_outq_init(q->asoc, q);
2045     +}
2046     +
2047     /* Free the outqueue structure and any related pending chunks. */
2048     void sctp_outq_free(struct sctp_outq *q)
2049     {
2050     /* Throw away leftover chunks. */
2051     - sctp_outq_teardown(q);
2052     + __sctp_outq_teardown(q);
2053    
2054     /* If we were kmalloc()'d, free the memory. */
2055     if (q->malloced)
2056     diff --git a/net/sctp/socket.c b/net/sctp/socket.c
2057     index 406d957..9261d9a 100644
2058     --- a/net/sctp/socket.c
2059     +++ b/net/sctp/socket.c
2060     @@ -3388,7 +3388,7 @@ static int sctp_setsockopt_auth_key(struct sock *sk,
2061    
2062     ret = sctp_auth_set_key(sctp_sk(sk)->ep, asoc, authkey);
2063     out:
2064     - kfree(authkey);
2065     + kzfree(authkey);
2066     return ret;
2067     }
2068    
2069     diff --git a/net/wireless/core.c b/net/wireless/core.c
2070     index 3f72530..d1531e5 100644
2071     --- a/net/wireless/core.c
2072     +++ b/net/wireless/core.c
2073     @@ -856,8 +856,7 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
2074     /* allow mac80211 to determine the timeout */
2075     wdev->ps_timeout = -1;
2076    
2077     - if (!dev->ethtool_ops)
2078     - dev->ethtool_ops = &cfg80211_ethtool_ops;
2079     + netdev_set_default_ethtool_ops(dev, &cfg80211_ethtool_ops);
2080    
2081     if ((wdev->iftype == NL80211_IFTYPE_STATION ||
2082     wdev->iftype == NL80211_IFTYPE_P2P_CLIENT ||