Magellan Linux

Annotation of /trunk/kernel-magellan/patches-3.11/0106-3.11.7-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2317 - (hide annotations) (download)
Mon Nov 18 11:55:25 2013 UTC (10 years, 6 months ago) by niro
File size: 79622 byte(s)
-linux-3.11.7
1 niro 2317 diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt
2     index 10742902146f..b522883a5a84 100644
3     --- a/Documentation/networking/ip-sysctl.txt
4     +++ b/Documentation/networking/ip-sysctl.txt
5     @@ -478,6 +478,15 @@ tcp_syn_retries - INTEGER
6     tcp_timestamps - BOOLEAN
7     Enable timestamps as defined in RFC1323.
8    
9     +tcp_min_tso_segs - INTEGER
10     + Minimal number of segments per TSO frame.
11     + Since linux-3.12, TCP does an automatic sizing of TSO frames,
12     + depending on flow rate, instead of filling 64Kbytes packets.
13     + For specific usages, it's possible to force TCP to build big
14     + TSO frames. Note that TCP stack might split too big TSO packets
15     + if available window is too small.
16     + Default: 2
17     +
18     tcp_tso_win_divisor - INTEGER
19     This allows control over what percentage of the congestion window
20     can be consumed by a single TSO frame.
21     diff --git a/Makefile b/Makefile
22     index e87ba831bd2d..686adf7f2035 100644
23     --- a/Makefile
24     +++ b/Makefile
25     @@ -1,6 +1,6 @@
26     VERSION = 3
27     PATCHLEVEL = 11
28     -SUBLEVEL = 6
29     +SUBLEVEL = 7
30     EXTRAVERSION =
31     NAME = Linux for Workgroups
32    
33     diff --git a/arch/arm/boot/dts/integratorcp.dts b/arch/arm/boot/dts/integratorcp.dts
34     index ff1aea0ee043..72693a69f830 100644
35     --- a/arch/arm/boot/dts/integratorcp.dts
36     +++ b/arch/arm/boot/dts/integratorcp.dts
37     @@ -9,11 +9,6 @@
38     model = "ARM Integrator/CP";
39     compatible = "arm,integrator-cp";
40    
41     - aliases {
42     - arm,timer-primary = &timer2;
43     - arm,timer-secondary = &timer1;
44     - };
45     -
46     chosen {
47     bootargs = "root=/dev/ram0 console=ttyAMA0,38400n8 earlyprintk";
48     };
49     @@ -24,14 +19,18 @@
50     };
51    
52     timer0: timer@13000000 {
53     + /* TIMER0 runs @ 25MHz */
54     compatible = "arm,integrator-cp-timer";
55     + status = "disabled";
56     };
57    
58     timer1: timer@13000100 {
59     + /* TIMER1 runs @ 1MHz */
60     compatible = "arm,integrator-cp-timer";
61     };
62    
63     timer2: timer@13000200 {
64     + /* TIMER2 runs @ 1MHz */
65     compatible = "arm,integrator-cp-timer";
66     };
67    
68     diff --git a/arch/arm/include/asm/syscall.h b/arch/arm/include/asm/syscall.h
69     index f1d96d4e8092..73ddd7239b33 100644
70     --- a/arch/arm/include/asm/syscall.h
71     +++ b/arch/arm/include/asm/syscall.h
72     @@ -57,6 +57,9 @@ static inline void syscall_get_arguments(struct task_struct *task,
73     unsigned int i, unsigned int n,
74     unsigned long *args)
75     {
76     + if (n == 0)
77     + return;
78     +
79     if (i + n > SYSCALL_MAX_ARGS) {
80     unsigned long *args_bad = args + SYSCALL_MAX_ARGS - i;
81     unsigned int n_bad = n + i - SYSCALL_MAX_ARGS;
82     @@ -81,6 +84,9 @@ static inline void syscall_set_arguments(struct task_struct *task,
83     unsigned int i, unsigned int n,
84     const unsigned long *args)
85     {
86     + if (n == 0)
87     + return;
88     +
89     if (i + n > SYSCALL_MAX_ARGS) {
90     pr_warning("%s called with max args %d, handling only %d\n",
91     __func__, i + n, SYSCALL_MAX_ARGS);
92     diff --git a/drivers/connector/cn_proc.c b/drivers/connector/cn_proc.c
93     index 08ae128cce9b..c73fc2b74de2 100644
94     --- a/drivers/connector/cn_proc.c
95     +++ b/drivers/connector/cn_proc.c
96     @@ -65,6 +65,7 @@ void proc_fork_connector(struct task_struct *task)
97    
98     msg = (struct cn_msg *)buffer;
99     ev = (struct proc_event *)msg->data;
100     + memset(&ev->event_data, 0, sizeof(ev->event_data));
101     get_seq(&msg->seq, &ev->cpu);
102     ktime_get_ts(&ts); /* get high res monotonic timestamp */
103     put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
104     @@ -80,6 +81,7 @@ void proc_fork_connector(struct task_struct *task)
105     memcpy(&msg->id, &cn_proc_event_id, sizeof(msg->id));
106     msg->ack = 0; /* not used */
107     msg->len = sizeof(*ev);
108     + msg->flags = 0; /* not used */
109     /* If cn_netlink_send() failed, the data is not sent */
110     cn_netlink_send(msg, CN_IDX_PROC, GFP_KERNEL);
111     }
112     @@ -96,6 +98,7 @@ void proc_exec_connector(struct task_struct *task)
113    
114     msg = (struct cn_msg *)buffer;
115     ev = (struct proc_event *)msg->data;
116     + memset(&ev->event_data, 0, sizeof(ev->event_data));
117     get_seq(&msg->seq, &ev->cpu);
118     ktime_get_ts(&ts); /* get high res monotonic timestamp */
119     put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
120     @@ -106,6 +109,7 @@ void proc_exec_connector(struct task_struct *task)
121     memcpy(&msg->id, &cn_proc_event_id, sizeof(msg->id));
122     msg->ack = 0; /* not used */
123     msg->len = sizeof(*ev);
124     + msg->flags = 0; /* not used */
125     cn_netlink_send(msg, CN_IDX_PROC, GFP_KERNEL);
126     }
127    
128     @@ -122,6 +126,7 @@ void proc_id_connector(struct task_struct *task, int which_id)
129    
130     msg = (struct cn_msg *)buffer;
131     ev = (struct proc_event *)msg->data;
132     + memset(&ev->event_data, 0, sizeof(ev->event_data));
133     ev->what = which_id;
134     ev->event_data.id.process_pid = task->pid;
135     ev->event_data.id.process_tgid = task->tgid;
136     @@ -145,6 +150,7 @@ void proc_id_connector(struct task_struct *task, int which_id)
137     memcpy(&msg->id, &cn_proc_event_id, sizeof(msg->id));
138     msg->ack = 0; /* not used */
139     msg->len = sizeof(*ev);
140     + msg->flags = 0; /* not used */
141     cn_netlink_send(msg, CN_IDX_PROC, GFP_KERNEL);
142     }
143    
144     @@ -160,6 +166,7 @@ void proc_sid_connector(struct task_struct *task)
145    
146     msg = (struct cn_msg *)buffer;
147     ev = (struct proc_event *)msg->data;
148     + memset(&ev->event_data, 0, sizeof(ev->event_data));
149     get_seq(&msg->seq, &ev->cpu);
150     ktime_get_ts(&ts); /* get high res monotonic timestamp */
151     put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
152     @@ -170,6 +177,7 @@ void proc_sid_connector(struct task_struct *task)
153     memcpy(&msg->id, &cn_proc_event_id, sizeof(msg->id));
154     msg->ack = 0; /* not used */
155     msg->len = sizeof(*ev);
156     + msg->flags = 0; /* not used */
157     cn_netlink_send(msg, CN_IDX_PROC, GFP_KERNEL);
158     }
159    
160     @@ -185,6 +193,7 @@ void proc_ptrace_connector(struct task_struct *task, int ptrace_id)
161    
162     msg = (struct cn_msg *)buffer;
163     ev = (struct proc_event *)msg->data;
164     + memset(&ev->event_data, 0, sizeof(ev->event_data));
165     get_seq(&msg->seq, &ev->cpu);
166     ktime_get_ts(&ts); /* get high res monotonic timestamp */
167     put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
168     @@ -203,6 +212,7 @@ void proc_ptrace_connector(struct task_struct *task, int ptrace_id)
169     memcpy(&msg->id, &cn_proc_event_id, sizeof(msg->id));
170     msg->ack = 0; /* not used */
171     msg->len = sizeof(*ev);
172     + msg->flags = 0; /* not used */
173     cn_netlink_send(msg, CN_IDX_PROC, GFP_KERNEL);
174     }
175    
176     @@ -218,6 +228,7 @@ void proc_comm_connector(struct task_struct *task)
177    
178     msg = (struct cn_msg *)buffer;
179     ev = (struct proc_event *)msg->data;
180     + memset(&ev->event_data, 0, sizeof(ev->event_data));
181     get_seq(&msg->seq, &ev->cpu);
182     ktime_get_ts(&ts); /* get high res monotonic timestamp */
183     put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
184     @@ -229,6 +240,7 @@ void proc_comm_connector(struct task_struct *task)
185     memcpy(&msg->id, &cn_proc_event_id, sizeof(msg->id));
186     msg->ack = 0; /* not used */
187     msg->len = sizeof(*ev);
188     + msg->flags = 0; /* not used */
189     cn_netlink_send(msg, CN_IDX_PROC, GFP_KERNEL);
190     }
191    
192     @@ -244,6 +256,7 @@ void proc_coredump_connector(struct task_struct *task)
193    
194     msg = (struct cn_msg *)buffer;
195     ev = (struct proc_event *)msg->data;
196     + memset(&ev->event_data, 0, sizeof(ev->event_data));
197     get_seq(&msg->seq, &ev->cpu);
198     ktime_get_ts(&ts); /* get high res monotonic timestamp */
199     put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
200     @@ -254,6 +267,7 @@ void proc_coredump_connector(struct task_struct *task)
201     memcpy(&msg->id, &cn_proc_event_id, sizeof(msg->id));
202     msg->ack = 0; /* not used */
203     msg->len = sizeof(*ev);
204     + msg->flags = 0; /* not used */
205     cn_netlink_send(msg, CN_IDX_PROC, GFP_KERNEL);
206     }
207    
208     @@ -269,6 +283,7 @@ void proc_exit_connector(struct task_struct *task)
209    
210     msg = (struct cn_msg *)buffer;
211     ev = (struct proc_event *)msg->data;
212     + memset(&ev->event_data, 0, sizeof(ev->event_data));
213     get_seq(&msg->seq, &ev->cpu);
214     ktime_get_ts(&ts); /* get high res monotonic timestamp */
215     put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
216     @@ -281,6 +296,7 @@ void proc_exit_connector(struct task_struct *task)
217     memcpy(&msg->id, &cn_proc_event_id, sizeof(msg->id));
218     msg->ack = 0; /* not used */
219     msg->len = sizeof(*ev);
220     + msg->flags = 0; /* not used */
221     cn_netlink_send(msg, CN_IDX_PROC, GFP_KERNEL);
222     }
223    
224     @@ -304,6 +320,7 @@ static void cn_proc_ack(int err, int rcvd_seq, int rcvd_ack)
225    
226     msg = (struct cn_msg *)buffer;
227     ev = (struct proc_event *)msg->data;
228     + memset(&ev->event_data, 0, sizeof(ev->event_data));
229     msg->seq = rcvd_seq;
230     ktime_get_ts(&ts); /* get high res monotonic timestamp */
231     put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
232     @@ -313,6 +330,7 @@ static void cn_proc_ack(int err, int rcvd_seq, int rcvd_ack)
233     memcpy(&msg->id, &cn_proc_event_id, sizeof(msg->id));
234     msg->ack = rcvd_ack + 1;
235     msg->len = sizeof(*ev);
236     + msg->flags = 0; /* not used */
237     cn_netlink_send(msg, CN_IDX_PROC, GFP_KERNEL);
238     }
239    
240     diff --git a/drivers/connector/connector.c b/drivers/connector/connector.c
241     index 6ecfa758942c..0daa11e418b1 100644
242     --- a/drivers/connector/connector.c
243     +++ b/drivers/connector/connector.c
244     @@ -157,17 +157,18 @@ static int cn_call_callback(struct sk_buff *skb)
245     static void cn_rx_skb(struct sk_buff *__skb)
246     {
247     struct nlmsghdr *nlh;
248     - int err;
249     struct sk_buff *skb;
250     + int len, err;
251    
252     skb = skb_get(__skb);
253    
254     if (skb->len >= NLMSG_HDRLEN) {
255     nlh = nlmsg_hdr(skb);
256     + len = nlmsg_len(nlh);
257    
258     - if (nlh->nlmsg_len < sizeof(struct cn_msg) ||
259     + if (len < (int)sizeof(struct cn_msg) ||
260     skb->len < nlh->nlmsg_len ||
261     - nlh->nlmsg_len > CONNECTOR_MAX_MSG_SIZE) {
262     + len > CONNECTOR_MAX_MSG_SIZE) {
263     kfree_skb(skb);
264     return;
265     }
266     diff --git a/drivers/gpio/gpio-lynxpoint.c b/drivers/gpio/gpio-lynxpoint.c
267     index 761c4705dfbb..baf301f36b42 100644
268     --- a/drivers/gpio/gpio-lynxpoint.c
269     +++ b/drivers/gpio/gpio-lynxpoint.c
270     @@ -248,14 +248,15 @@ static void lp_gpio_irq_handler(unsigned irq, struct irq_desc *desc)
271     struct lp_gpio *lg = irq_data_get_irq_handler_data(data);
272     struct irq_chip *chip = irq_data_get_irq_chip(data);
273     u32 base, pin, mask;
274     - unsigned long reg, pending;
275     + unsigned long reg, ena, pending;
276     unsigned virq;
277    
278     /* check from GPIO controller which pin triggered the interrupt */
279     for (base = 0; base < lg->chip.ngpio; base += 32) {
280     reg = lp_gpio_reg(&lg->chip, base, LP_INT_STAT);
281     + ena = lp_gpio_reg(&lg->chip, base, LP_INT_ENABLE);
282    
283     - while ((pending = inl(reg))) {
284     + while ((pending = (inl(reg) & inl(ena)))) {
285     pin = __ffs(pending);
286     mask = BIT(pin);
287     /* Clear before handling so we don't lose an edge */
288     diff --git a/drivers/i2c/busses/i2c-ismt.c b/drivers/i2c/busses/i2c-ismt.c
289     index cd82eb44e4c4..7c9f053556f2 100644
290     --- a/drivers/i2c/busses/i2c-ismt.c
291     +++ b/drivers/i2c/busses/i2c-ismt.c
292     @@ -393,6 +393,9 @@ static int ismt_access(struct i2c_adapter *adap, u16 addr,
293    
294     desc = &priv->hw[priv->head];
295    
296     + /* Initialize the DMA buffer */
297     + memset(priv->dma_buffer, 0, sizeof(priv->dma_buffer));
298     +
299     /* Initialize the descriptor */
300     memset(desc, 0, sizeof(struct ismt_desc));
301     desc->tgtaddr_rw = ISMT_DESC_ADDR_RW(addr, read_write);
302     diff --git a/drivers/md/dm-snap-persistent.c b/drivers/md/dm-snap-persistent.c
303     index 4caa8e6d59d7..2d2b1b7588d7 100644
304     --- a/drivers/md/dm-snap-persistent.c
305     +++ b/drivers/md/dm-snap-persistent.c
306     @@ -269,6 +269,14 @@ static chunk_t area_location(struct pstore *ps, chunk_t area)
307     return NUM_SNAPSHOT_HDR_CHUNKS + ((ps->exceptions_per_area + 1) * area);
308     }
309    
310     +static void skip_metadata(struct pstore *ps)
311     +{
312     + uint32_t stride = ps->exceptions_per_area + 1;
313     + chunk_t next_free = ps->next_free;
314     + if (sector_div(next_free, stride) == NUM_SNAPSHOT_HDR_CHUNKS)
315     + ps->next_free++;
316     +}
317     +
318     /*
319     * Read or write a metadata area. Remembering to skip the first
320     * chunk which holds the header.
321     @@ -502,6 +510,8 @@ static int read_exceptions(struct pstore *ps,
322    
323     ps->current_area--;
324    
325     + skip_metadata(ps);
326     +
327     return 0;
328     }
329    
330     @@ -616,8 +626,6 @@ static int persistent_prepare_exception(struct dm_exception_store *store,
331     struct dm_exception *e)
332     {
333     struct pstore *ps = get_info(store);
334     - uint32_t stride;
335     - chunk_t next_free;
336     sector_t size = get_dev_size(dm_snap_cow(store->snap)->bdev);
337    
338     /* Is there enough room ? */
339     @@ -630,10 +638,8 @@ static int persistent_prepare_exception(struct dm_exception_store *store,
340     * Move onto the next free pending, making sure to take
341     * into account the location of the metadata chunks.
342     */
343     - stride = (ps->exceptions_per_area + 1);
344     - next_free = ++ps->next_free;
345     - if (sector_div(next_free, stride) == 1)
346     - ps->next_free++;
347     + ps->next_free++;
348     + skip_metadata(ps);
349    
350     atomic_inc(&ps->pending_count);
351     return 0;
352     diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
353     index f9cba4123c66..1870c4731a57 100644
354     --- a/drivers/net/can/dev.c
355     +++ b/drivers/net/can/dev.c
356     @@ -705,14 +705,14 @@ static size_t can_get_size(const struct net_device *dev)
357     size_t size;
358    
359     size = nla_total_size(sizeof(u32)); /* IFLA_CAN_STATE */
360     - size += sizeof(struct can_ctrlmode); /* IFLA_CAN_CTRLMODE */
361     + size += nla_total_size(sizeof(struct can_ctrlmode)); /* IFLA_CAN_CTRLMODE */
362     size += nla_total_size(sizeof(u32)); /* IFLA_CAN_RESTART_MS */
363     - size += sizeof(struct can_bittiming); /* IFLA_CAN_BITTIMING */
364     - size += sizeof(struct can_clock); /* IFLA_CAN_CLOCK */
365     + size += nla_total_size(sizeof(struct can_bittiming)); /* IFLA_CAN_BITTIMING */
366     + size += nla_total_size(sizeof(struct can_clock)); /* IFLA_CAN_CLOCK */
367     if (priv->do_get_berr_counter) /* IFLA_CAN_BERR_COUNTER */
368     - size += sizeof(struct can_berr_counter);
369     + size += nla_total_size(sizeof(struct can_berr_counter));
370     if (priv->bittiming_const) /* IFLA_CAN_BITTIMING_CONST */
371     - size += sizeof(struct can_bittiming_const);
372     + size += nla_total_size(sizeof(struct can_bittiming_const));
373    
374     return size;
375     }
376     diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
377     index 0cc26110868d..4b0877e68653 100644
378     --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
379     +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
380     @@ -676,6 +676,7 @@ static void bnx2x_gro_receive(struct bnx2x *bp, struct bnx2x_fastpath *fp,
381     }
382     }
383     #endif
384     + skb_record_rx_queue(skb, fp->rx_queue);
385     napi_gro_receive(&fp->napi, skb);
386     }
387    
388     diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c b/drivers/net/ethernet/emulex/benet/be_cmds.c
389     index 8ec5d74ad44d..13ac104bbf4b 100644
390     --- a/drivers/net/ethernet/emulex/benet/be_cmds.c
391     +++ b/drivers/net/ethernet/emulex/benet/be_cmds.c
392     @@ -1150,7 +1150,6 @@ int be_cmd_txq_create(struct be_adapter *adapter, struct be_tx_obj *txo)
393    
394     if (lancer_chip(adapter)) {
395     req->hdr.version = 1;
396     - req->if_id = cpu_to_le16(adapter->if_handle);
397     } else if (BEx_chip(adapter)) {
398     if (adapter->function_caps & BE_FUNCTION_CAPS_SUPER_NIC)
399     req->hdr.version = 2;
400     @@ -1158,6 +1157,8 @@ int be_cmd_txq_create(struct be_adapter *adapter, struct be_tx_obj *txo)
401     req->hdr.version = 2;
402     }
403    
404     + if (req->hdr.version > 0)
405     + req->if_id = cpu_to_le16(adapter->if_handle);
406     req->num_pages = PAGES_4K_SPANNED(q_mem->va, q_mem->size);
407     req->ulp_num = BE_ULP1_NUM;
408     req->type = BE_ETH_TX_RING_TYPE_STANDARD;
409     diff --git a/drivers/net/ethernet/marvell/mv643xx_eth.c b/drivers/net/ethernet/marvell/mv643xx_eth.c
410     index c35db735958f..39334d428891 100644
411     --- a/drivers/net/ethernet/marvell/mv643xx_eth.c
412     +++ b/drivers/net/ethernet/marvell/mv643xx_eth.c
413     @@ -1131,15 +1131,13 @@ static void mib_counters_update(struct mv643xx_eth_private *mp)
414     p->rx_discard += rdlp(mp, RX_DISCARD_FRAME_CNT);
415     p->rx_overrun += rdlp(mp, RX_OVERRUN_FRAME_CNT);
416     spin_unlock_bh(&mp->mib_counters_lock);
417     -
418     - mod_timer(&mp->mib_counters_timer, jiffies + 30 * HZ);
419     }
420    
421     static void mib_counters_timer_wrapper(unsigned long _mp)
422     {
423     struct mv643xx_eth_private *mp = (void *)_mp;
424     -
425     mib_counters_update(mp);
426     + mod_timer(&mp->mib_counters_timer, jiffies + 30 * HZ);
427     }
428    
429    
430     @@ -2237,6 +2235,7 @@ static int mv643xx_eth_open(struct net_device *dev)
431     mp->int_mask |= INT_TX_END_0 << i;
432     }
433    
434     + add_timer(&mp->mib_counters_timer);
435     port_start(mp);
436    
437     wrlp(mp, INT_MASK_EXT, INT_EXT_LINK_PHY | INT_EXT_TX);
438     @@ -2916,7 +2915,6 @@ static int mv643xx_eth_probe(struct platform_device *pdev)
439     mp->mib_counters_timer.data = (unsigned long)mp;
440     mp->mib_counters_timer.function = mib_counters_timer_wrapper;
441     mp->mib_counters_timer.expires = jiffies + 30 * HZ;
442     - add_timer(&mp->mib_counters_timer);
443    
444     spin_lock_init(&mp->mib_counters_lock);
445    
446     diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
447     index dec455c8f627..afe2efa69c86 100644
448     --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c
449     +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
450     @@ -70,14 +70,15 @@ static int mlx4_alloc_pages(struct mlx4_en_priv *priv,
451     put_page(page);
452     return -ENOMEM;
453     }
454     - page_alloc->size = PAGE_SIZE << order;
455     + page_alloc->page_size = PAGE_SIZE << order;
456     page_alloc->page = page;
457     page_alloc->dma = dma;
458     - page_alloc->offset = frag_info->frag_align;
459     + page_alloc->page_offset = frag_info->frag_align;
460     /* Not doing get_page() for each frag is a big win
461     * on asymetric workloads.
462     */
463     - atomic_set(&page->_count, page_alloc->size / frag_info->frag_stride);
464     + atomic_set(&page->_count,
465     + page_alloc->page_size / frag_info->frag_stride);
466     return 0;
467     }
468    
469     @@ -96,16 +97,19 @@ static int mlx4_en_alloc_frags(struct mlx4_en_priv *priv,
470     for (i = 0; i < priv->num_frags; i++) {
471     frag_info = &priv->frag_info[i];
472     page_alloc[i] = ring_alloc[i];
473     - page_alloc[i].offset += frag_info->frag_stride;
474     - if (page_alloc[i].offset + frag_info->frag_stride <= ring_alloc[i].size)
475     + page_alloc[i].page_offset += frag_info->frag_stride;
476     +
477     + if (page_alloc[i].page_offset + frag_info->frag_stride <=
478     + ring_alloc[i].page_size)
479     continue;
480     +
481     if (mlx4_alloc_pages(priv, &page_alloc[i], frag_info, gfp))
482     goto out;
483     }
484    
485     for (i = 0; i < priv->num_frags; i++) {
486     frags[i] = ring_alloc[i];
487     - dma = ring_alloc[i].dma + ring_alloc[i].offset;
488     + dma = ring_alloc[i].dma + ring_alloc[i].page_offset;
489     ring_alloc[i] = page_alloc[i];
490     rx_desc->data[i].addr = cpu_to_be64(dma);
491     }
492     @@ -117,7 +121,7 @@ out:
493     frag_info = &priv->frag_info[i];
494     if (page_alloc[i].page != ring_alloc[i].page) {
495     dma_unmap_page(priv->ddev, page_alloc[i].dma,
496     - page_alloc[i].size, PCI_DMA_FROMDEVICE);
497     + page_alloc[i].page_size, PCI_DMA_FROMDEVICE);
498     page = page_alloc[i].page;
499     atomic_set(&page->_count, 1);
500     put_page(page);
501     @@ -131,10 +135,12 @@ static void mlx4_en_free_frag(struct mlx4_en_priv *priv,
502     int i)
503     {
504     const struct mlx4_en_frag_info *frag_info = &priv->frag_info[i];
505     + u32 next_frag_end = frags[i].page_offset + 2 * frag_info->frag_stride;
506     +
507    
508     - if (frags[i].offset + frag_info->frag_stride > frags[i].size)
509     - dma_unmap_page(priv->ddev, frags[i].dma, frags[i].size,
510     - PCI_DMA_FROMDEVICE);
511     + if (next_frag_end > frags[i].page_size)
512     + dma_unmap_page(priv->ddev, frags[i].dma, frags[i].page_size,
513     + PCI_DMA_FROMDEVICE);
514    
515     if (frags[i].page)
516     put_page(frags[i].page);
517     @@ -161,7 +167,7 @@ out:
518    
519     page_alloc = &ring->page_alloc[i];
520     dma_unmap_page(priv->ddev, page_alloc->dma,
521     - page_alloc->size, PCI_DMA_FROMDEVICE);
522     + page_alloc->page_size, PCI_DMA_FROMDEVICE);
523     page = page_alloc->page;
524     atomic_set(&page->_count, 1);
525     put_page(page);
526     @@ -184,10 +190,11 @@ static void mlx4_en_destroy_allocator(struct mlx4_en_priv *priv,
527     i, page_count(page_alloc->page));
528    
529     dma_unmap_page(priv->ddev, page_alloc->dma,
530     - page_alloc->size, PCI_DMA_FROMDEVICE);
531     - while (page_alloc->offset + frag_info->frag_stride < page_alloc->size) {
532     + page_alloc->page_size, PCI_DMA_FROMDEVICE);
533     + while (page_alloc->page_offset + frag_info->frag_stride <
534     + page_alloc->page_size) {
535     put_page(page_alloc->page);
536     - page_alloc->offset += frag_info->frag_stride;
537     + page_alloc->page_offset += frag_info->frag_stride;
538     }
539     page_alloc->page = NULL;
540     }
541     @@ -478,7 +485,7 @@ static int mlx4_en_complete_rx_desc(struct mlx4_en_priv *priv,
542     /* Save page reference in skb */
543     __skb_frag_set_page(&skb_frags_rx[nr], frags[nr].page);
544     skb_frag_size_set(&skb_frags_rx[nr], frag_info->frag_size);
545     - skb_frags_rx[nr].page_offset = frags[nr].offset;
546     + skb_frags_rx[nr].page_offset = frags[nr].page_offset;
547     skb->truesize += frag_info->frag_stride;
548     frags[nr].page = NULL;
549     }
550     @@ -517,7 +524,7 @@ static struct sk_buff *mlx4_en_rx_skb(struct mlx4_en_priv *priv,
551    
552     /* Get pointer to first fragment so we could copy the headers into the
553     * (linear part of the) skb */
554     - va = page_address(frags[0].page) + frags[0].offset;
555     + va = page_address(frags[0].page) + frags[0].page_offset;
556    
557     if (length <= SMALL_PACKET_SIZE) {
558     /* We are copying all relevant data to the skb - temporarily
559     @@ -645,7 +652,7 @@ int mlx4_en_process_rx_cq(struct net_device *dev, struct mlx4_en_cq *cq, int bud
560     dma_sync_single_for_cpu(priv->ddev, dma, sizeof(*ethh),
561     DMA_FROM_DEVICE);
562     ethh = (struct ethhdr *)(page_address(frags[0].page) +
563     - frags[0].offset);
564     + frags[0].page_offset);
565    
566     if (is_multicast_ether_addr(ethh->h_dest)) {
567     struct mlx4_mac_entry *entry;
568     diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
569     index 5e0aa569306a..bf06e3610d27 100644
570     --- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
571     +++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
572     @@ -237,8 +237,8 @@ struct mlx4_en_tx_desc {
573     struct mlx4_en_rx_alloc {
574     struct page *page;
575     dma_addr_t dma;
576     - u32 offset;
577     - u32 size;
578     + u32 page_offset;
579     + u32 page_size;
580     };
581    
582     struct mlx4_en_tx_ring {
583     diff --git a/drivers/net/ethernet/ti/davinci_emac.c b/drivers/net/ethernet/ti/davinci_emac.c
584     index 1a222bce4bd7..45c167fc96c5 100644
585     --- a/drivers/net/ethernet/ti/davinci_emac.c
586     +++ b/drivers/net/ethernet/ti/davinci_emac.c
587     @@ -876,8 +876,7 @@ static void emac_dev_mcast_set(struct net_device *ndev)
588     netdev_mc_count(ndev) > EMAC_DEF_MAX_MULTICAST_ADDRESSES) {
589     mbp_enable = (mbp_enable | EMAC_MBP_RXMCAST);
590     emac_add_mcast(priv, EMAC_ALL_MULTI_SET, NULL);
591     - }
592     - if (!netdev_mc_empty(ndev)) {
593     + } else if (!netdev_mc_empty(ndev)) {
594     struct netdev_hw_addr *ha;
595    
596     mbp_enable = (mbp_enable | EMAC_MBP_RXMCAST);
597     diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
598     index 3d2a90a62649..1d01534c2020 100644
599     --- a/drivers/net/virtio_net.c
600     +++ b/drivers/net/virtio_net.c
601     @@ -916,7 +916,9 @@ static int virtnet_set_queues(struct virtnet_info *vi, u16 queue_pairs)
602     return -EINVAL;
603     } else {
604     vi->curr_queue_pairs = queue_pairs;
605     - schedule_delayed_work(&vi->refill, 0);
606     + /* virtnet_open() will refill when device is going to up. */
607     + if (dev->flags & IFF_UP)
608     + schedule_delayed_work(&vi->refill, 0);
609     }
610    
611     return 0;
612     @@ -1094,6 +1096,11 @@ static int virtnet_cpu_callback(struct notifier_block *nfb,
613     {
614     struct virtnet_info *vi = container_of(nfb, struct virtnet_info, nb);
615    
616     + mutex_lock(&vi->config_lock);
617     +
618     + if (!vi->config_enable)
619     + goto done;
620     +
621     switch(action & ~CPU_TASKS_FROZEN) {
622     case CPU_ONLINE:
623     case CPU_DOWN_FAILED:
624     @@ -1106,6 +1113,9 @@ static int virtnet_cpu_callback(struct notifier_block *nfb,
625     default:
626     break;
627     }
628     +
629     +done:
630     + mutex_unlock(&vi->config_lock);
631     return NOTIFY_OK;
632     }
633    
634     @@ -1706,7 +1716,9 @@ static int virtnet_restore(struct virtio_device *vdev)
635     vi->config_enable = true;
636     mutex_unlock(&vi->config_lock);
637    
638     + rtnl_lock();
639     virtnet_set_queues(vi, vi->curr_queue_pairs);
640     + rtnl_unlock();
641    
642     return 0;
643     }
644     diff --git a/drivers/net/wan/farsync.c b/drivers/net/wan/farsync.c
645     index 3f0c4f268751..bcfff0d62de4 100644
646     --- a/drivers/net/wan/farsync.c
647     +++ b/drivers/net/wan/farsync.c
648     @@ -1972,6 +1972,7 @@ fst_get_iface(struct fst_card_info *card, struct fst_port_info *port,
649     }
650    
651     i = port->index;
652     + memset(&sync, 0, sizeof(sync));
653     sync.clock_rate = FST_RDL(card, portConfig[i].lineSpeed);
654     /* Lucky card and linux use same encoding here */
655     sync.clock_type = FST_RDB(card, portConfig[i].internalClock) ==
656     diff --git a/drivers/net/wan/wanxl.c b/drivers/net/wan/wanxl.c
657     index 6a24a5a70cc7..4c0a69779b89 100644
658     --- a/drivers/net/wan/wanxl.c
659     +++ b/drivers/net/wan/wanxl.c
660     @@ -355,6 +355,7 @@ static int wanxl_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
661     ifr->ifr_settings.size = size; /* data size wanted */
662     return -ENOBUFS;
663     }
664     + memset(&line, 0, sizeof(line));
665     line.clock_type = get_status(port)->clocking;
666     line.clock_rate = 0;
667     line.loopback = 0;
668     diff --git a/drivers/net/wireless/cw1200/cw1200_spi.c b/drivers/net/wireless/cw1200/cw1200_spi.c
669     index 899cad34ccd3..755a0c8edfe1 100644
670     --- a/drivers/net/wireless/cw1200/cw1200_spi.c
671     +++ b/drivers/net/wireless/cw1200/cw1200_spi.c
672     @@ -237,7 +237,9 @@ static irqreturn_t cw1200_spi_irq_handler(int irq, void *dev_id)
673     struct hwbus_priv *self = dev_id;
674    
675     if (self->core) {
676     + cw1200_spi_lock(self);
677     cw1200_irq_handler(self->core);
678     + cw1200_spi_unlock(self);
679     return IRQ_HANDLED;
680     } else {
681     return IRQ_NONE;
682     diff --git a/drivers/net/xen-netback/common.h b/drivers/net/xen-netback/common.h
683     index 8a4d77ee9c5b..4d9a5e70c992 100644
684     --- a/drivers/net/xen-netback/common.h
685     +++ b/drivers/net/xen-netback/common.h
686     @@ -120,6 +120,7 @@ int xenvif_connect(struct xenvif *vif, unsigned long tx_ring_ref,
687     unsigned long rx_ring_ref, unsigned int tx_evtchn,
688     unsigned int rx_evtchn);
689     void xenvif_disconnect(struct xenvif *vif);
690     +void xenvif_free(struct xenvif *vif);
691    
692     void xenvif_get(struct xenvif *vif);
693     void xenvif_put(struct xenvif *vif);
694     diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c
695     index 087d2db0389d..73336c144d92 100644
696     --- a/drivers/net/xen-netback/interface.c
697     +++ b/drivers/net/xen-netback/interface.c
698     @@ -326,6 +326,9 @@ struct xenvif *xenvif_alloc(struct device *parent, domid_t domid,
699     }
700    
701     netdev_dbg(dev, "Successfully created xenvif\n");
702     +
703     + __module_get(THIS_MODULE);
704     +
705     return vif;
706     }
707    
708     @@ -413,12 +416,6 @@ void xenvif_carrier_off(struct xenvif *vif)
709    
710     void xenvif_disconnect(struct xenvif *vif)
711     {
712     - /* Disconnect funtion might get called by generic framework
713     - * even before vif connects, so we need to check if we really
714     - * need to do a module_put.
715     - */
716     - int need_module_put = 0;
717     -
718     if (netif_carrier_ok(vif->dev))
719     xenvif_carrier_off(vif);
720    
721     @@ -432,18 +429,16 @@ void xenvif_disconnect(struct xenvif *vif)
722     unbind_from_irqhandler(vif->tx_irq, vif);
723     unbind_from_irqhandler(vif->rx_irq, vif);
724     }
725     - /* vif->irq is valid, we had a module_get in
726     - * xenvif_connect.
727     - */
728     - need_module_put = 1;
729     }
730    
731     - unregister_netdev(vif->dev);
732     -
733     xen_netbk_unmap_frontend_rings(vif);
734     +}
735     +
736     +void xenvif_free(struct xenvif *vif)
737     +{
738     + unregister_netdev(vif->dev);
739    
740     free_netdev(vif->dev);
741    
742     - if (need_module_put)
743     - module_put(THIS_MODULE);
744     + module_put(THIS_MODULE);
745     }
746     diff --git a/drivers/net/xen-netback/xenbus.c b/drivers/net/xen-netback/xenbus.c
747     index 1fe48fe364ed..a53782ef1540 100644
748     --- a/drivers/net/xen-netback/xenbus.c
749     +++ b/drivers/net/xen-netback/xenbus.c
750     @@ -42,7 +42,7 @@ static int netback_remove(struct xenbus_device *dev)
751     if (be->vif) {
752     kobject_uevent(&dev->dev.kobj, KOBJ_OFFLINE);
753     xenbus_rm(XBT_NIL, dev->nodename, "hotplug-status");
754     - xenvif_disconnect(be->vif);
755     + xenvif_free(be->vif);
756     be->vif = NULL;
757     }
758     kfree(be);
759     @@ -213,9 +213,18 @@ static void disconnect_backend(struct xenbus_device *dev)
760     {
761     struct backend_info *be = dev_get_drvdata(&dev->dev);
762    
763     + if (be->vif)
764     + xenvif_disconnect(be->vif);
765     +}
766     +
767     +static void destroy_backend(struct xenbus_device *dev)
768     +{
769     + struct backend_info *be = dev_get_drvdata(&dev->dev);
770     +
771     if (be->vif) {
772     + kobject_uevent(&dev->dev.kobj, KOBJ_OFFLINE);
773     xenbus_rm(XBT_NIL, dev->nodename, "hotplug-status");
774     - xenvif_disconnect(be->vif);
775     + xenvif_free(be->vif);
776     be->vif = NULL;
777     }
778     }
779     @@ -246,14 +255,11 @@ static void frontend_changed(struct xenbus_device *dev,
780     case XenbusStateConnected:
781     if (dev->state == XenbusStateConnected)
782     break;
783     - backend_create_xenvif(be);
784     if (be->vif)
785     connect(be);
786     break;
787    
788     case XenbusStateClosing:
789     - if (be->vif)
790     - kobject_uevent(&dev->dev.kobj, KOBJ_OFFLINE);
791     disconnect_backend(dev);
792     xenbus_switch_state(dev, XenbusStateClosing);
793     break;
794     @@ -262,6 +268,7 @@ static void frontend_changed(struct xenbus_device *dev,
795     xenbus_switch_state(dev, XenbusStateClosed);
796     if (xenbus_dev_is_online(dev))
797     break;
798     + destroy_backend(dev);
799     /* fall through if not online */
800     case XenbusStateUnknown:
801     device_unregister(&dev->dev);
802     diff --git a/drivers/tty/serial/vt8500_serial.c b/drivers/tty/serial/vt8500_serial.c
803     index 48af43de3467..007c2c1ee8c0 100644
804     --- a/drivers/tty/serial/vt8500_serial.c
805     +++ b/drivers/tty/serial/vt8500_serial.c
806     @@ -559,12 +559,13 @@ static int vt8500_serial_probe(struct platform_device *pdev)
807     if (!mmres || !irqres)
808     return -ENODEV;
809    
810     - if (np)
811     + if (np) {
812     port = of_alias_get_id(np, "serial");
813     if (port >= VT8500_MAX_PORTS)
814     port = -1;
815     - else
816     + } else {
817     port = -1;
818     + }
819    
820     if (port < 0) {
821     /* calculate the port id */
822     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
823     index 80a7104d5ddb..f1507c052a2e 100644
824     --- a/drivers/usb/serial/option.c
825     +++ b/drivers/usb/serial/option.c
826     @@ -451,6 +451,10 @@ static void option_instat_callback(struct urb *urb);
827     #define CHANGHONG_VENDOR_ID 0x2077
828     #define CHANGHONG_PRODUCT_CH690 0x7001
829    
830     +/* Inovia */
831     +#define INOVIA_VENDOR_ID 0x20a6
832     +#define INOVIA_SEW858 0x1105
833     +
834     /* some devices interfaces need special handling due to a number of reasons */
835     enum option_blacklist_reason {
836     OPTION_BLACKLIST_NONE = 0,
837     @@ -1257,7 +1261,9 @@ static const struct usb_device_id option_ids[] = {
838    
839     { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100) },
840     { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD145) },
841     - { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD200) },
842     + { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD200),
843     + .driver_info = (kernel_ulong_t)&net_intf6_blacklist
844     + },
845     { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */
846     { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/
847     { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM600) },
848     @@ -1345,6 +1351,7 @@ static const struct usb_device_id option_ids[] = {
849     { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x00, 0x00) },
850     { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */
851     { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */
852     + { USB_DEVICE(INOVIA_VENDOR_ID, INOVIA_SEW858) },
853     { } /* Terminating entry */
854     };
855     MODULE_DEVICE_TABLE(usb, option_ids);
856     diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
857     index 5c9f9b1d7736..4ced88ebcecb 100644
858     --- a/drivers/usb/serial/ti_usb_3410_5052.c
859     +++ b/drivers/usb/serial/ti_usb_3410_5052.c
860     @@ -203,6 +203,7 @@ static struct usb_device_id ti_id_table_combined[19+2*TI_EXTRA_VID_PID_COUNT+1]
861     { USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) },
862     { USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) },
863     { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_PRODUCT_ID) },
864     + { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STRIP_PORT_ID) },
865     { USB_DEVICE(TI_VENDOR_ID, FRI2_PRODUCT_ID) },
866     { }
867     };
868     diff --git a/drivers/w1/w1.c b/drivers/w1/w1.c
869     index 0459df843c58..15a6ddf7f3ca 100644
870     --- a/drivers/w1/w1.c
871     +++ b/drivers/w1/w1.c
872     @@ -680,7 +680,10 @@ static int w1_attach_slave_device(struct w1_master *dev, struct w1_reg_num *rn)
873     atomic_set(&sl->refcnt, 0);
874     init_completion(&sl->released);
875    
876     + /* slave modules need to be loaded in a context with unlocked mutex */
877     + mutex_unlock(&dev->mutex);
878     request_module("w1-family-0x%0x", rn->family);
879     + mutex_lock(&dev->mutex);
880    
881     spin_lock(&w1_flock);
882     f = w1_family_registered(rn->family);
883     diff --git a/fs/ext3/namei.c b/fs/ext3/namei.c
884     index 1194b1f0f839..f8cde46de9cd 100644
885     --- a/fs/ext3/namei.c
886     +++ b/fs/ext3/namei.c
887     @@ -1783,7 +1783,7 @@ retry:
888     d_tmpfile(dentry, inode);
889     err = ext3_orphan_add(handle, inode);
890     if (err)
891     - goto err_drop_inode;
892     + goto err_unlock_inode;
893     mark_inode_dirty(inode);
894     unlock_new_inode(inode);
895     }
896     @@ -1791,10 +1791,9 @@ retry:
897     if (err == -ENOSPC && ext3_should_retry_alloc(dir->i_sb, &retries))
898     goto retry;
899     return err;
900     -err_drop_inode:
901     +err_unlock_inode:
902     ext3_journal_stop(handle);
903     unlock_new_inode(inode);
904     - iput(inode);
905     return err;
906     }
907    
908     diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
909     index 35f55a0dbc4b..b53cbc6966a2 100644
910     --- a/fs/ext4/namei.c
911     +++ b/fs/ext4/namei.c
912     @@ -2319,7 +2319,7 @@ retry:
913     d_tmpfile(dentry, inode);
914     err = ext4_orphan_add(handle, inode);
915     if (err)
916     - goto err_drop_inode;
917     + goto err_unlock_inode;
918     mark_inode_dirty(inode);
919     unlock_new_inode(inode);
920     }
921     @@ -2328,10 +2328,9 @@ retry:
922     if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries))
923     goto retry;
924     return err;
925     -err_drop_inode:
926     +err_unlock_inode:
927     ext4_journal_stop(handle);
928     unlock_new_inode(inode);
929     - iput(inode);
930     return err;
931     }
932    
933     diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
934     index 3b71a4e83642..6bd165be52e3 100644
935     --- a/include/linux/skbuff.h
936     +++ b/include/linux/skbuff.h
937     @@ -1316,6 +1316,11 @@ static inline int skb_pagelen(const struct sk_buff *skb)
938     return len + skb_headlen(skb);
939     }
940    
941     +static inline bool skb_has_frags(const struct sk_buff *skb)
942     +{
943     + return skb_shinfo(skb)->nr_frags;
944     +}
945     +
946     /**
947     * __skb_fill_page_desc - initialise a paged fragment in an skb
948     * @skb: buffer containing fragment to be initialised
949     diff --git a/include/net/cipso_ipv4.h b/include/net/cipso_ipv4.h
950     index a7a683e30b64..a8c2ef6d3b93 100644
951     --- a/include/net/cipso_ipv4.h
952     +++ b/include/net/cipso_ipv4.h
953     @@ -290,6 +290,7 @@ static inline int cipso_v4_validate(const struct sk_buff *skb,
954     unsigned char err_offset = 0;
955     u8 opt_len = opt[1];
956     u8 opt_iter;
957     + u8 tag_len;
958    
959     if (opt_len < 8) {
960     err_offset = 1;
961     @@ -302,11 +303,12 @@ static inline int cipso_v4_validate(const struct sk_buff *skb,
962     }
963    
964     for (opt_iter = 6; opt_iter < opt_len;) {
965     - if (opt[opt_iter + 1] > (opt_len - opt_iter)) {
966     + tag_len = opt[opt_iter + 1];
967     + if ((tag_len == 0) || (opt[opt_iter + 1] > (opt_len - opt_iter))) {
968     err_offset = opt_iter + 1;
969     goto out;
970     }
971     - opt_iter += opt[opt_iter + 1];
972     + opt_iter += tag_len;
973     }
974    
975     out:
976     diff --git a/include/net/dst.h b/include/net/dst.h
977     index 1f8fd109e225..e0c97f5a57cf 100644
978     --- a/include/net/dst.h
979     +++ b/include/net/dst.h
980     @@ -477,10 +477,22 @@ static inline struct dst_entry *xfrm_lookup(struct net *net,
981     {
982     return dst_orig;
983     }
984     +
985     +static inline struct xfrm_state *dst_xfrm(const struct dst_entry *dst)
986     +{
987     + return NULL;
988     +}
989     +
990     #else
991     extern struct dst_entry *xfrm_lookup(struct net *net, struct dst_entry *dst_orig,
992     const struct flowi *fl, struct sock *sk,
993     int flags);
994     +
995     +/* skb attached with this dst needs transformation if dst->xfrm is valid */
996     +static inline struct xfrm_state *dst_xfrm(const struct dst_entry *dst)
997     +{
998     + return dst->xfrm;
999     +}
1000     #endif
1001    
1002     #endif /* _NET_DST_H */
1003     diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h
1004     index f667248202b6..c7b8860f29fd 100644
1005     --- a/include/net/ip6_route.h
1006     +++ b/include/net/ip6_route.h
1007     @@ -196,11 +196,9 @@ static inline int ip6_skb_dst_mtu(struct sk_buff *skb)
1008     skb_dst(skb)->dev->mtu : dst_mtu(skb_dst(skb));
1009     }
1010    
1011     -static inline struct in6_addr *rt6_nexthop(struct rt6_info *rt, struct in6_addr *dest)
1012     +static inline struct in6_addr *rt6_nexthop(struct rt6_info *rt)
1013     {
1014     - if (rt->rt6i_flags & RTF_GATEWAY)
1015     - return &rt->rt6i_gateway;
1016     - return dest;
1017     + return &rt->rt6i_gateway;
1018     }
1019    
1020     #endif
1021     diff --git a/include/net/sock.h b/include/net/sock.h
1022     index 31d5cfbb51ec..04e148f45277 100644
1023     --- a/include/net/sock.h
1024     +++ b/include/net/sock.h
1025     @@ -232,6 +232,7 @@ struct cg_proto;
1026     * @sk_napi_id: id of the last napi context to receive data for sk
1027     * @sk_ll_usec: usecs to busypoll when there is no data
1028     * @sk_allocation: allocation mode
1029     + * @sk_pacing_rate: Pacing rate (if supported by transport/packet scheduler)
1030     * @sk_sndbuf: size of send buffer in bytes
1031     * @sk_flags: %SO_LINGER (l_onoff), %SO_BROADCAST, %SO_KEEPALIVE,
1032     * %SO_OOBINLINE settings, %SO_TIMESTAMPING settings
1033     @@ -361,6 +362,7 @@ struct sock {
1034     kmemcheck_bitfield_end(flags);
1035     int sk_wmem_queued;
1036     gfp_t sk_allocation;
1037     + u32 sk_pacing_rate; /* bytes per second */
1038     netdev_features_t sk_route_caps;
1039     netdev_features_t sk_route_nocaps;
1040     int sk_gso_type;
1041     diff --git a/include/net/tcp.h b/include/net/tcp.h
1042     index d1980054ec75..46cb8a406b8f 100644
1043     --- a/include/net/tcp.h
1044     +++ b/include/net/tcp.h
1045     @@ -284,6 +284,7 @@ extern int sysctl_tcp_thin_dupack;
1046     extern int sysctl_tcp_early_retrans;
1047     extern int sysctl_tcp_limit_output_bytes;
1048     extern int sysctl_tcp_challenge_ack_limit;
1049     +extern int sysctl_tcp_min_tso_segs;
1050    
1051     extern atomic_long_t tcp_memory_allocated;
1052     extern struct percpu_counter tcp_sockets_allocated;
1053     diff --git a/mm/huge_memory.c b/mm/huge_memory.c
1054     index f2820fbf67c9..70861a1fdd64 100644
1055     --- a/mm/huge_memory.c
1056     +++ b/mm/huge_memory.c
1057     @@ -2709,6 +2709,7 @@ void __split_huge_page_pmd(struct vm_area_struct *vma, unsigned long address,
1058    
1059     mmun_start = haddr;
1060     mmun_end = haddr + HPAGE_PMD_SIZE;
1061     +again:
1062     mmu_notifier_invalidate_range_start(mm, mmun_start, mmun_end);
1063     spin_lock(&mm->page_table_lock);
1064     if (unlikely(!pmd_trans_huge(*pmd))) {
1065     @@ -2731,7 +2732,14 @@ void __split_huge_page_pmd(struct vm_area_struct *vma, unsigned long address,
1066     split_huge_page(page);
1067    
1068     put_page(page);
1069     - BUG_ON(pmd_trans_huge(*pmd));
1070     +
1071     + /*
1072     + * We don't always have down_write of mmap_sem here: a racing
1073     + * do_huge_pmd_wp_page() might have copied-on-write to another
1074     + * huge page before our split_huge_page() got the anon_vma lock.
1075     + */
1076     + if (unlikely(pmd_trans_huge(*pmd)))
1077     + goto again;
1078     }
1079    
1080     void split_huge_page_pmd_mm(struct mm_struct *mm, unsigned long address,
1081     diff --git a/mm/memory.c b/mm/memory.c
1082     index af84bc0ec17c..440986e57218 100644
1083     --- a/mm/memory.c
1084     +++ b/mm/memory.c
1085     @@ -861,6 +861,8 @@ copy_one_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
1086     */
1087     make_migration_entry_read(&entry);
1088     pte = swp_entry_to_pte(entry);
1089     + if (pte_swp_soft_dirty(*src_pte))
1090     + pte = pte_swp_mksoft_dirty(pte);
1091     set_pte_at(src_mm, addr, src_pte, pte);
1092     }
1093     }
1094     diff --git a/mm/migrate.c b/mm/migrate.c
1095     index 25ca7caf9092..81af4e678101 100644
1096     --- a/mm/migrate.c
1097     +++ b/mm/migrate.c
1098     @@ -157,6 +157,8 @@ static int remove_migration_pte(struct page *new, struct vm_area_struct *vma,
1099    
1100     get_page(new);
1101     pte = pte_mkold(mk_pte(new, vma->vm_page_prot));
1102     + if (pte_swp_soft_dirty(*ptep))
1103     + pte = pte_mksoft_dirty(pte);
1104     if (is_write_migration_entry(entry))
1105     pte = pte_mkwrite(pte);
1106     #ifdef CONFIG_HUGETLB_PAGE
1107     diff --git a/mm/mprotect.c b/mm/mprotect.c
1108     index 94722a4d6b43..a3af058f68e4 100644
1109     --- a/mm/mprotect.c
1110     +++ b/mm/mprotect.c
1111     @@ -94,13 +94,16 @@ static unsigned long change_pte_range(struct vm_area_struct *vma, pmd_t *pmd,
1112     swp_entry_t entry = pte_to_swp_entry(oldpte);
1113    
1114     if (is_write_migration_entry(entry)) {
1115     + pte_t newpte;
1116     /*
1117     * A protection check is difficult so
1118     * just be safe and disable write
1119     */
1120     make_migration_entry_read(&entry);
1121     - set_pte_at(mm, addr, pte,
1122     - swp_entry_to_pte(entry));
1123     + newpte = swp_entry_to_pte(entry);
1124     + if (pte_swp_soft_dirty(oldpte))
1125     + newpte = pte_swp_mksoft_dirty(newpte);
1126     + set_pte_at(mm, addr, pte, newpte);
1127     }
1128     pages++;
1129     }
1130     diff --git a/mm/page-writeback.c b/mm/page-writeback.c
1131     index 3f0c895c71fe..241a746f864c 100644
1132     --- a/mm/page-writeback.c
1133     +++ b/mm/page-writeback.c
1134     @@ -1104,11 +1104,11 @@ static unsigned long dirty_poll_interval(unsigned long dirty,
1135     return 1;
1136     }
1137    
1138     -static long bdi_max_pause(struct backing_dev_info *bdi,
1139     - unsigned long bdi_dirty)
1140     +static unsigned long bdi_max_pause(struct backing_dev_info *bdi,
1141     + unsigned long bdi_dirty)
1142     {
1143     - long bw = bdi->avg_write_bandwidth;
1144     - long t;
1145     + unsigned long bw = bdi->avg_write_bandwidth;
1146     + unsigned long t;
1147    
1148     /*
1149     * Limit pause time for small memory systems. If sleeping for too long
1150     @@ -1120,7 +1120,7 @@ static long bdi_max_pause(struct backing_dev_info *bdi,
1151     t = bdi_dirty / (1 + bw / roundup_pow_of_two(1 + HZ / 8));
1152     t++;
1153    
1154     - return min_t(long, t, MAX_PAUSE);
1155     + return min_t(unsigned long, t, MAX_PAUSE);
1156     }
1157    
1158     static long bdi_min_pause(struct backing_dev_info *bdi,
1159     diff --git a/mm/zswap.c b/mm/zswap.c
1160     index deda2b671e12..cbd9578c1e88 100644
1161     --- a/mm/zswap.c
1162     +++ b/mm/zswap.c
1163     @@ -816,6 +816,10 @@ static void zswap_frontswap_invalidate_area(unsigned type)
1164     }
1165     tree->rbroot = RB_ROOT;
1166     spin_unlock(&tree->lock);
1167     +
1168     + zbud_destroy_pool(tree->pool);
1169     + kfree(tree);
1170     + zswap_trees[type] = NULL;
1171     }
1172    
1173     static struct zbud_ops zswap_zbud_ops = {
1174     diff --git a/net/8021q/vlan_netlink.c b/net/8021q/vlan_netlink.c
1175     index 309129732285..c7e634af8516 100644
1176     --- a/net/8021q/vlan_netlink.c
1177     +++ b/net/8021q/vlan_netlink.c
1178     @@ -171,7 +171,7 @@ static size_t vlan_get_size(const struct net_device *dev)
1179    
1180     return nla_total_size(2) + /* IFLA_VLAN_PROTOCOL */
1181     nla_total_size(2) + /* IFLA_VLAN_ID */
1182     - sizeof(struct ifla_vlan_flags) + /* IFLA_VLAN_FLAGS */
1183     + nla_total_size(sizeof(struct ifla_vlan_flags)) + /* IFLA_VLAN_FLAGS */
1184     vlan_qos_map_size(vlan->nr_ingress_mappings) +
1185     vlan_qos_map_size(vlan->nr_egress_mappings);
1186     }
1187     diff --git a/net/batman-adv/main.c b/net/batman-adv/main.c
1188     index 08125f3f6064..c8e0671422a3 100644
1189     --- a/net/batman-adv/main.c
1190     +++ b/net/batman-adv/main.c
1191     @@ -61,6 +61,7 @@ static int __init batadv_init(void)
1192     batadv_recv_handler_init();
1193    
1194     batadv_iv_init();
1195     + batadv_nc_init();
1196    
1197     batadv_event_workqueue = create_singlethread_workqueue("bat_events");
1198    
1199     @@ -138,7 +139,7 @@ int batadv_mesh_init(struct net_device *soft_iface)
1200     if (ret < 0)
1201     goto err;
1202    
1203     - ret = batadv_nc_init(bat_priv);
1204     + ret = batadv_nc_mesh_init(bat_priv);
1205     if (ret < 0)
1206     goto err;
1207    
1208     @@ -163,7 +164,7 @@ void batadv_mesh_free(struct net_device *soft_iface)
1209     batadv_vis_quit(bat_priv);
1210    
1211     batadv_gw_node_purge(bat_priv);
1212     - batadv_nc_free(bat_priv);
1213     + batadv_nc_mesh_free(bat_priv);
1214     batadv_dat_free(bat_priv);
1215     batadv_bla_free(bat_priv);
1216    
1217     diff --git a/net/batman-adv/network-coding.c b/net/batman-adv/network-coding.c
1218     index a487d46e0aec..4ecc0b6bf8ab 100644
1219     --- a/net/batman-adv/network-coding.c
1220     +++ b/net/batman-adv/network-coding.c
1221     @@ -35,6 +35,20 @@ static int batadv_nc_recv_coded_packet(struct sk_buff *skb,
1222     struct batadv_hard_iface *recv_if);
1223    
1224     /**
1225     + * batadv_nc_init - one-time initialization for network coding
1226     + */
1227     +int __init batadv_nc_init(void)
1228     +{
1229     + int ret;
1230     +
1231     + /* Register our packet type */
1232     + ret = batadv_recv_handler_register(BATADV_CODED,
1233     + batadv_nc_recv_coded_packet);
1234     +
1235     + return ret;
1236     +}
1237     +
1238     +/**
1239     * batadv_nc_start_timer - initialise the nc periodic worker
1240     * @bat_priv: the bat priv with all the soft interface information
1241     */
1242     @@ -45,10 +59,10 @@ static void batadv_nc_start_timer(struct batadv_priv *bat_priv)
1243     }
1244    
1245     /**
1246     - * batadv_nc_init - initialise coding hash table and start house keeping
1247     + * batadv_nc_mesh_init - initialise coding hash table and start house keeping
1248     * @bat_priv: the bat priv with all the soft interface information
1249     */
1250     -int batadv_nc_init(struct batadv_priv *bat_priv)
1251     +int batadv_nc_mesh_init(struct batadv_priv *bat_priv)
1252     {
1253     bat_priv->nc.timestamp_fwd_flush = jiffies;
1254     bat_priv->nc.timestamp_sniffed_purge = jiffies;
1255     @@ -70,11 +84,6 @@ int batadv_nc_init(struct batadv_priv *bat_priv)
1256     batadv_hash_set_lock_class(bat_priv->nc.coding_hash,
1257     &batadv_nc_decoding_hash_lock_class_key);
1258    
1259     - /* Register our packet type */
1260     - if (batadv_recv_handler_register(BATADV_CODED,
1261     - batadv_nc_recv_coded_packet) < 0)
1262     - goto err;
1263     -
1264     INIT_DELAYED_WORK(&bat_priv->nc.work, batadv_nc_worker);
1265     batadv_nc_start_timer(bat_priv);
1266    
1267     @@ -1721,12 +1730,11 @@ free_nc_packet:
1268     }
1269    
1270     /**
1271     - * batadv_nc_free - clean up network coding memory
1272     + * batadv_nc_mesh_free - clean up network coding memory
1273     * @bat_priv: the bat priv with all the soft interface information
1274     */
1275     -void batadv_nc_free(struct batadv_priv *bat_priv)
1276     +void batadv_nc_mesh_free(struct batadv_priv *bat_priv)
1277     {
1278     - batadv_recv_handler_unregister(BATADV_CODED);
1279     cancel_delayed_work_sync(&bat_priv->nc.work);
1280    
1281     batadv_nc_purge_paths(bat_priv, bat_priv->nc.coding_hash, NULL);
1282     diff --git a/net/batman-adv/network-coding.h b/net/batman-adv/network-coding.h
1283     index 85a4ec81ad50..ddfa618e80bf 100644
1284     --- a/net/batman-adv/network-coding.h
1285     +++ b/net/batman-adv/network-coding.h
1286     @@ -22,8 +22,9 @@
1287    
1288     #ifdef CONFIG_BATMAN_ADV_NC
1289    
1290     -int batadv_nc_init(struct batadv_priv *bat_priv);
1291     -void batadv_nc_free(struct batadv_priv *bat_priv);
1292     +int batadv_nc_init(void);
1293     +int batadv_nc_mesh_init(struct batadv_priv *bat_priv);
1294     +void batadv_nc_mesh_free(struct batadv_priv *bat_priv);
1295     void batadv_nc_update_nc_node(struct batadv_priv *bat_priv,
1296     struct batadv_orig_node *orig_node,
1297     struct batadv_orig_node *orig_neigh_node,
1298     @@ -46,12 +47,17 @@ int batadv_nc_init_debugfs(struct batadv_priv *bat_priv);
1299    
1300     #else /* ifdef CONFIG_BATMAN_ADV_NC */
1301    
1302     -static inline int batadv_nc_init(struct batadv_priv *bat_priv)
1303     +static inline int batadv_nc_init(void)
1304     {
1305     return 0;
1306     }
1307    
1308     -static inline void batadv_nc_free(struct batadv_priv *bat_priv)
1309     +static inline int batadv_nc_mesh_init(struct batadv_priv *bat_priv)
1310     +{
1311     + return 0;
1312     +}
1313     +
1314     +static inline void batadv_nc_mesh_free(struct batadv_priv *bat_priv)
1315     {
1316     return;
1317     }
1318     diff --git a/net/bridge/br_mdb.c b/net/bridge/br_mdb.c
1319     index 6319c4333c39..de3a0e76ab75 100644
1320     --- a/net/bridge/br_mdb.c
1321     +++ b/net/bridge/br_mdb.c
1322     @@ -451,7 +451,7 @@ static int __br_mdb_del(struct net_bridge *br, struct br_mdb_entry *entry)
1323     call_rcu_bh(&p->rcu, br_multicast_free_pg);
1324     err = 0;
1325    
1326     - if (!mp->ports && !mp->mglist && mp->timer_armed &&
1327     + if (!mp->ports && !mp->mglist &&
1328     netif_running(br->dev))
1329     mod_timer(&mp->timer, jiffies);
1330     break;
1331     diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
1332     index bbcb43582496..fbad619c70b7 100644
1333     --- a/net/bridge/br_multicast.c
1334     +++ b/net/bridge/br_multicast.c
1335     @@ -271,7 +271,7 @@ static void br_multicast_del_pg(struct net_bridge *br,
1336     del_timer(&p->timer);
1337     call_rcu_bh(&p->rcu, br_multicast_free_pg);
1338    
1339     - if (!mp->ports && !mp->mglist && mp->timer_armed &&
1340     + if (!mp->ports && !mp->mglist &&
1341     netif_running(br->dev))
1342     mod_timer(&mp->timer, jiffies);
1343    
1344     @@ -619,7 +619,6 @@ rehash:
1345    
1346     mp->br = br;
1347     mp->addr = *group;
1348     -
1349     setup_timer(&mp->timer, br_multicast_group_expired,
1350     (unsigned long)mp);
1351    
1352     @@ -659,6 +658,7 @@ static int br_multicast_add_group(struct net_bridge *br,
1353     struct net_bridge_mdb_entry *mp;
1354     struct net_bridge_port_group *p;
1355     struct net_bridge_port_group __rcu **pp;
1356     + unsigned long now = jiffies;
1357     int err;
1358    
1359     spin_lock(&br->multicast_lock);
1360     @@ -673,6 +673,7 @@ static int br_multicast_add_group(struct net_bridge *br,
1361    
1362     if (!port) {
1363     mp->mglist = true;
1364     + mod_timer(&mp->timer, now + br->multicast_membership_interval);
1365     goto out;
1366     }
1367    
1368     @@ -680,7 +681,7 @@ static int br_multicast_add_group(struct net_bridge *br,
1369     (p = mlock_dereference(*pp, br)) != NULL;
1370     pp = &p->next) {
1371     if (p->port == port)
1372     - goto out;
1373     + goto found;
1374     if ((unsigned long)p->port < (unsigned long)port)
1375     break;
1376     }
1377     @@ -691,6 +692,8 @@ static int br_multicast_add_group(struct net_bridge *br,
1378     rcu_assign_pointer(*pp, p);
1379     br_mdb_notify(br->dev, port, group, RTM_NEWMDB);
1380    
1381     +found:
1382     + mod_timer(&p->timer, now + br->multicast_membership_interval);
1383     out:
1384     err = 0;
1385    
1386     @@ -1190,9 +1193,6 @@ static int br_ip4_multicast_query(struct net_bridge *br,
1387     if (!mp)
1388     goto out;
1389    
1390     - mod_timer(&mp->timer, now + br->multicast_membership_interval);
1391     - mp->timer_armed = true;
1392     -
1393     max_delay *= br->multicast_last_member_count;
1394    
1395     if (mp->mglist &&
1396     @@ -1269,9 +1269,6 @@ static int br_ip6_multicast_query(struct net_bridge *br,
1397     if (!mp)
1398     goto out;
1399    
1400     - mod_timer(&mp->timer, now + br->multicast_membership_interval);
1401     - mp->timer_armed = true;
1402     -
1403     max_delay *= br->multicast_last_member_count;
1404     if (mp->mglist &&
1405     (timer_pending(&mp->timer) ?
1406     @@ -1357,7 +1354,7 @@ static void br_multicast_leave_group(struct net_bridge *br,
1407     call_rcu_bh(&p->rcu, br_multicast_free_pg);
1408     br_mdb_notify(br->dev, port, group, RTM_DELMDB);
1409    
1410     - if (!mp->ports && !mp->mglist && mp->timer_armed &&
1411     + if (!mp->ports && !mp->mglist &&
1412     netif_running(br->dev))
1413     mod_timer(&mp->timer, jiffies);
1414     }
1415     @@ -1369,12 +1366,30 @@ static void br_multicast_leave_group(struct net_bridge *br,
1416     br->multicast_last_member_interval;
1417    
1418     if (!port) {
1419     - if (mp->mglist && mp->timer_armed &&
1420     + if (mp->mglist &&
1421     (timer_pending(&mp->timer) ?
1422     time_after(mp->timer.expires, time) :
1423     try_to_del_timer_sync(&mp->timer) >= 0)) {
1424     mod_timer(&mp->timer, time);
1425     }
1426     +
1427     + goto out;
1428     + }
1429     +
1430     + for (p = mlock_dereference(mp->ports, br);
1431     + p != NULL;
1432     + p = mlock_dereference(p->next, br)) {
1433     + if (p->port != port)
1434     + continue;
1435     +
1436     + if (!hlist_unhashed(&p->mglist) &&
1437     + (timer_pending(&p->timer) ?
1438     + time_after(p->timer.expires, time) :
1439     + try_to_del_timer_sync(&p->timer) >= 0)) {
1440     + mod_timer(&p->timer, time);
1441     + }
1442     +
1443     + break;
1444     }
1445     out:
1446     spin_unlock(&br->multicast_lock);
1447     @@ -1791,7 +1806,6 @@ void br_multicast_stop(struct net_bridge *br)
1448     hlist_for_each_entry_safe(mp, n, &mdb->mhash[i],
1449     hlist[ver]) {
1450     del_timer(&mp->timer);
1451     - mp->timer_armed = false;
1452     call_rcu_bh(&mp->rcu, br_multicast_free_group);
1453     }
1454     }
1455     diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
1456     index cde1eb14d9a2..aa05bd80e9bb 100644
1457     --- a/net/bridge/br_private.h
1458     +++ b/net/bridge/br_private.h
1459     @@ -126,7 +126,6 @@ struct net_bridge_mdb_entry
1460     struct timer_list timer;
1461     struct br_ip addr;
1462     bool mglist;
1463     - bool timer_armed;
1464     };
1465    
1466     struct net_bridge_mdb_htable
1467     diff --git a/net/bridge/br_stp_if.c b/net/bridge/br_stp_if.c
1468     index 108084a04671..656a6f3e40de 100644
1469     --- a/net/bridge/br_stp_if.c
1470     +++ b/net/bridge/br_stp_if.c
1471     @@ -134,7 +134,7 @@ static void br_stp_start(struct net_bridge *br)
1472    
1473     if (br->bridge_forward_delay < BR_MIN_FORWARD_DELAY)
1474     __br_set_forward_delay(br, BR_MIN_FORWARD_DELAY);
1475     - else if (br->bridge_forward_delay < BR_MAX_FORWARD_DELAY)
1476     + else if (br->bridge_forward_delay > BR_MAX_FORWARD_DELAY)
1477     __br_set_forward_delay(br, BR_MAX_FORWARD_DELAY);
1478    
1479     if (r == 0) {
1480     diff --git a/net/compat.c b/net/compat.c
1481     index f0a1ba6c8086..89032580bd1d 100644
1482     --- a/net/compat.c
1483     +++ b/net/compat.c
1484     @@ -71,6 +71,8 @@ int get_compat_msghdr(struct msghdr *kmsg, struct compat_msghdr __user *umsg)
1485     __get_user(kmsg->msg_controllen, &umsg->msg_controllen) ||
1486     __get_user(kmsg->msg_flags, &umsg->msg_flags))
1487     return -EFAULT;
1488     + if (kmsg->msg_namelen > sizeof(struct sockaddr_storage))
1489     + return -EINVAL;
1490     kmsg->msg_name = compat_ptr(tmp1);
1491     kmsg->msg_iov = compat_ptr(tmp2);
1492     kmsg->msg_control = compat_ptr(tmp3);
1493     diff --git a/net/core/secure_seq.c b/net/core/secure_seq.c
1494     index 3f1ec1586ae1..8d9d05edd2eb 100644
1495     --- a/net/core/secure_seq.c
1496     +++ b/net/core/secure_seq.c
1497     @@ -10,6 +10,7 @@
1498    
1499     #include <net/secure_seq.h>
1500    
1501     +#if IS_ENABLED(CONFIG_IPV6) || IS_ENABLED(CONFIG_INET)
1502     #define NET_SECRET_SIZE (MD5_MESSAGE_BYTES / 4)
1503    
1504     static u32 net_secret[NET_SECRET_SIZE] ____cacheline_aligned;
1505     @@ -29,6 +30,7 @@ static void net_secret_init(void)
1506     cmpxchg(&net_secret[--i], 0, tmp);
1507     }
1508     }
1509     +#endif
1510    
1511     #ifdef CONFIG_INET
1512     static u32 seq_scale(u32 seq)
1513     diff --git a/net/core/sock.c b/net/core/sock.c
1514     index 2c097c5a35dd..8729d9135790 100644
1515     --- a/net/core/sock.c
1516     +++ b/net/core/sock.c
1517     @@ -2297,6 +2297,7 @@ void sock_init_data(struct socket *sock, struct sock *sk)
1518     sk->sk_ll_usec = sysctl_net_busy_read;
1519     #endif
1520    
1521     + sk->sk_pacing_rate = ~0U;
1522     /*
1523     * Before updating sk_refcnt, we must commit prior changes to memory
1524     * (Documentation/RCU/rculist_nulls.txt for details)
1525     diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c
1526     index 7bd8983dbfcf..96da9c77deca 100644
1527     --- a/net/ipv4/inet_hashtables.c
1528     +++ b/net/ipv4/inet_hashtables.c
1529     @@ -287,7 +287,7 @@ begintw:
1530     if (unlikely(!INET_TW_MATCH(sk, net, acookie,
1531     saddr, daddr, ports,
1532     dif))) {
1533     - sock_put(sk);
1534     + inet_twsk_put(inet_twsk(sk));
1535     goto begintw;
1536     }
1537     goto out;
1538     diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
1539     index a04d872c54f9..7f4ab5d31c16 100644
1540     --- a/net/ipv4/ip_output.c
1541     +++ b/net/ipv4/ip_output.c
1542     @@ -836,7 +836,7 @@ static int __ip_append_data(struct sock *sk,
1543     csummode = CHECKSUM_PARTIAL;
1544    
1545     cork->length += length;
1546     - if (((length > mtu) || (skb && skb_is_gso(skb))) &&
1547     + if (((length > mtu) || (skb && skb_has_frags(skb))) &&
1548     (sk->sk_protocol == IPPROTO_UDP) &&
1549     (rt->dst.dev->features & NETIF_F_UFO) && !rt->dst.header_len) {
1550     err = ip_ufo_append_data(sk, queue, getfrag, from, length,
1551     diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c
1552     index 17cc0ffa8c0d..065604127418 100644
1553     --- a/net/ipv4/ip_vti.c
1554     +++ b/net/ipv4/ip_vti.c
1555     @@ -285,8 +285,17 @@ static int vti_rcv(struct sk_buff *skb)
1556     tunnel = vti_tunnel_lookup(dev_net(skb->dev), iph->saddr, iph->daddr);
1557     if (tunnel != NULL) {
1558     struct pcpu_tstats *tstats;
1559     + u32 oldmark = skb->mark;
1560     + int ret;
1561    
1562     - if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb))
1563     +
1564     + /* temporarily mark the skb with the tunnel o_key, to
1565     + * only match policies with this mark.
1566     + */
1567     + skb->mark = be32_to_cpu(tunnel->parms.o_key);
1568     + ret = xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb);
1569     + skb->mark = oldmark;
1570     + if (!ret)
1571     return -1;
1572    
1573     tstats = this_cpu_ptr(tunnel->dev->tstats);
1574     @@ -295,7 +304,6 @@ static int vti_rcv(struct sk_buff *skb)
1575     tstats->rx_bytes += skb->len;
1576     u64_stats_update_end(&tstats->syncp);
1577    
1578     - skb->mark = 0;
1579     secpath_reset(skb);
1580     skb->dev = tunnel->dev;
1581     return 1;
1582     @@ -327,7 +335,7 @@ static netdev_tx_t vti_tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
1583    
1584     memset(&fl4, 0, sizeof(fl4));
1585     flowi4_init_output(&fl4, tunnel->parms.link,
1586     - be32_to_cpu(tunnel->parms.i_key), RT_TOS(tos),
1587     + be32_to_cpu(tunnel->parms.o_key), RT_TOS(tos),
1588     RT_SCOPE_UNIVERSE,
1589     IPPROTO_IPIP, 0,
1590     dst, tiph->saddr, 0, 0);
1591     diff --git a/net/ipv4/route.c b/net/ipv4/route.c
1592     index a9a54a236832..2de16d940528 100644
1593     --- a/net/ipv4/route.c
1594     +++ b/net/ipv4/route.c
1595     @@ -2074,7 +2074,7 @@ struct rtable *__ip_route_output_key(struct net *net, struct flowi4 *fl4)
1596     RT_SCOPE_LINK);
1597     goto make_route;
1598     }
1599     - if (fl4->saddr) {
1600     + if (!fl4->saddr) {
1601     if (ipv4_is_multicast(fl4->daddr))
1602     fl4->saddr = inet_select_addr(dev_out, 0,
1603     fl4->flowi4_scope);
1604     diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c
1605     index 610e324348d1..6900b8b97d93 100644
1606     --- a/net/ipv4/sysctl_net_ipv4.c
1607     +++ b/net/ipv4/sysctl_net_ipv4.c
1608     @@ -29,6 +29,7 @@
1609     static int zero;
1610     static int one = 1;
1611     static int four = 4;
1612     +static int gso_max_segs = GSO_MAX_SEGS;
1613     static int tcp_retr1_max = 255;
1614     static int ip_local_port_range_min[] = { 1, 1 };
1615     static int ip_local_port_range_max[] = { 65535, 65535 };
1616     @@ -754,6 +755,15 @@ static struct ctl_table ipv4_table[] = {
1617     .extra2 = &four,
1618     },
1619     {
1620     + .procname = "tcp_min_tso_segs",
1621     + .data = &sysctl_tcp_min_tso_segs,
1622     + .maxlen = sizeof(int),
1623     + .mode = 0644,
1624     + .proc_handler = proc_dointvec_minmax,
1625     + .extra1 = &zero,
1626     + .extra2 = &gso_max_segs,
1627     + },
1628     + {
1629     .procname = "udp_mem",
1630     .data = &sysctl_udp_mem,
1631     .maxlen = sizeof(sysctl_udp_mem),
1632     diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
1633     index 95544e4028c0..ec586e553361 100644
1634     --- a/net/ipv4/tcp.c
1635     +++ b/net/ipv4/tcp.c
1636     @@ -283,6 +283,8 @@
1637    
1638     int sysctl_tcp_fin_timeout __read_mostly = TCP_FIN_TIMEOUT;
1639    
1640     +int sysctl_tcp_min_tso_segs __read_mostly = 2;
1641     +
1642     struct percpu_counter tcp_orphan_count;
1643     EXPORT_SYMBOL_GPL(tcp_orphan_count);
1644    
1645     @@ -789,12 +791,28 @@ static unsigned int tcp_xmit_size_goal(struct sock *sk, u32 mss_now,
1646     xmit_size_goal = mss_now;
1647    
1648     if (large_allowed && sk_can_gso(sk)) {
1649     - xmit_size_goal = ((sk->sk_gso_max_size - 1) -
1650     - inet_csk(sk)->icsk_af_ops->net_header_len -
1651     - inet_csk(sk)->icsk_ext_hdr_len -
1652     - tp->tcp_header_len);
1653     + u32 gso_size, hlen;
1654     +
1655     + /* Maybe we should/could use sk->sk_prot->max_header here ? */
1656     + hlen = inet_csk(sk)->icsk_af_ops->net_header_len +
1657     + inet_csk(sk)->icsk_ext_hdr_len +
1658     + tp->tcp_header_len;
1659     +
1660     + /* Goal is to send at least one packet per ms,
1661     + * not one big TSO packet every 100 ms.
1662     + * This preserves ACK clocking and is consistent
1663     + * with tcp_tso_should_defer() heuristic.
1664     + */
1665     + gso_size = sk->sk_pacing_rate / (2 * MSEC_PER_SEC);
1666     + gso_size = max_t(u32, gso_size,
1667     + sysctl_tcp_min_tso_segs * mss_now);
1668     +
1669     + xmit_size_goal = min_t(u32, gso_size,
1670     + sk->sk_gso_max_size - 1 - hlen);
1671    
1672     - /* TSQ : try to have two TSO segments in flight */
1673     + /* TSQ : try to have at least two segments in flight
1674     + * (one in NIC TX ring, another in Qdisc)
1675     + */
1676     xmit_size_goal = min_t(u32, xmit_size_goal,
1677     sysctl_tcp_limit_output_bytes >> 1);
1678    
1679     diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
1680     index 3ca2139a130b..723951aec07e 100644
1681     --- a/net/ipv4/tcp_input.c
1682     +++ b/net/ipv4/tcp_input.c
1683     @@ -688,6 +688,34 @@ static void tcp_rtt_estimator(struct sock *sk, const __u32 mrtt)
1684     }
1685     }
1686    
1687     +/* Set the sk_pacing_rate to allow proper sizing of TSO packets.
1688     + * Note: TCP stack does not yet implement pacing.
1689     + * FQ packet scheduler can be used to implement cheap but effective
1690     + * TCP pacing, to smooth the burst on large writes when packets
1691     + * in flight is significantly lower than cwnd (or rwin)
1692     + */
1693     +static void tcp_update_pacing_rate(struct sock *sk)
1694     +{
1695     + const struct tcp_sock *tp = tcp_sk(sk);
1696     + u64 rate;
1697     +
1698     + /* set sk_pacing_rate to 200 % of current rate (mss * cwnd / srtt) */
1699     + rate = (u64)tp->mss_cache * 2 * (HZ << 3);
1700     +
1701     + rate *= max(tp->snd_cwnd, tp->packets_out);
1702     +
1703     + /* Correction for small srtt : minimum srtt being 8 (1 jiffy << 3),
1704     + * be conservative and assume srtt = 1 (125 us instead of 1.25 ms)
1705     + * We probably need usec resolution in the future.
1706     + * Note: This also takes care of possible srtt=0 case,
1707     + * when tcp_rtt_estimator() was not yet called.
1708     + */
1709     + if (tp->srtt > 8 + 2)
1710     + do_div(rate, tp->srtt);
1711     +
1712     + sk->sk_pacing_rate = min_t(u64, rate, ~0U);
1713     +}
1714     +
1715     /* Calculate rto without backoff. This is the second half of Van Jacobson's
1716     * routine referred to above.
1717     */
1718     @@ -1251,7 +1279,10 @@ static bool tcp_shifted_skb(struct sock *sk, struct sk_buff *skb,
1719     tp->lost_cnt_hint -= tcp_skb_pcount(prev);
1720     }
1721    
1722     - TCP_SKB_CB(skb)->tcp_flags |= TCP_SKB_CB(prev)->tcp_flags;
1723     + TCP_SKB_CB(prev)->tcp_flags |= TCP_SKB_CB(skb)->tcp_flags;
1724     + if (TCP_SKB_CB(skb)->tcp_flags & TCPHDR_FIN)
1725     + TCP_SKB_CB(prev)->end_seq++;
1726     +
1727     if (skb == tcp_highest_sack(sk))
1728     tcp_advance_highest_sack(sk, skb);
1729    
1730     @@ -3253,7 +3284,7 @@ static void tcp_process_tlp_ack(struct sock *sk, u32 ack, int flag)
1731     tcp_init_cwnd_reduction(sk, true);
1732     tcp_set_ca_state(sk, TCP_CA_CWR);
1733     tcp_end_cwnd_reduction(sk);
1734     - tcp_set_ca_state(sk, TCP_CA_Open);
1735     + tcp_try_keep_open(sk);
1736     NET_INC_STATS_BH(sock_net(sk),
1737     LINUX_MIB_TCPLOSSPROBERECOVERY);
1738     }
1739     @@ -3269,7 +3300,7 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
1740     u32 ack_seq = TCP_SKB_CB(skb)->seq;
1741     u32 ack = TCP_SKB_CB(skb)->ack_seq;
1742     bool is_dupack = false;
1743     - u32 prior_in_flight;
1744     + u32 prior_in_flight, prior_cwnd = tp->snd_cwnd, prior_rtt = tp->srtt;
1745     u32 prior_fackets;
1746     int prior_packets = tp->packets_out;
1747     const int prior_unsacked = tp->packets_out - tp->sacked_out;
1748     @@ -3375,6 +3406,8 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
1749    
1750     if (icsk->icsk_pending == ICSK_TIME_RETRANS)
1751     tcp_schedule_loss_probe(sk);
1752     + if (tp->srtt != prior_rtt || tp->snd_cwnd != prior_cwnd)
1753     + tcp_update_pacing_rate(sk);
1754     return 1;
1755    
1756     no_queue:
1757     @@ -5671,6 +5704,8 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb,
1758     } else
1759     tcp_init_metrics(sk);
1760    
1761     + tcp_update_pacing_rate(sk);
1762     +
1763     /* Prevent spurious tcp_cwnd_restart() on first data packet */
1764     tp->lsndtime = tcp_time_stamp;
1765    
1766     diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
1767     index 170737a9d56d..28c0d6a00d96 100644
1768     --- a/net/ipv4/tcp_output.c
1769     +++ b/net/ipv4/tcp_output.c
1770     @@ -892,8 +892,7 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,
1771    
1772     skb_orphan(skb);
1773     skb->sk = sk;
1774     - skb->destructor = (sysctl_tcp_limit_output_bytes > 0) ?
1775     - tcp_wfree : sock_wfree;
1776     + skb->destructor = tcp_wfree;
1777     atomic_add(skb->truesize, &sk->sk_wmem_alloc);
1778    
1779     /* Build TCP header and checksum it. */
1780     @@ -982,6 +981,9 @@ static void tcp_queue_skb(struct sock *sk, struct sk_buff *skb)
1781     static void tcp_set_skb_tso_segs(const struct sock *sk, struct sk_buff *skb,
1782     unsigned int mss_now)
1783     {
1784     + /* Make sure we own this skb before messing gso_size/gso_segs */
1785     + WARN_ON_ONCE(skb_cloned(skb));
1786     +
1787     if (skb->len <= mss_now || !sk_can_gso(sk) ||
1788     skb->ip_summed == CHECKSUM_NONE) {
1789     /* Avoid the costly divide in the normal
1790     @@ -1063,9 +1065,7 @@ int tcp_fragment(struct sock *sk, struct sk_buff *skb, u32 len,
1791     if (nsize < 0)
1792     nsize = 0;
1793    
1794     - if (skb_cloned(skb) &&
1795     - skb_is_nonlinear(skb) &&
1796     - pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
1797     + if (skb_unclone(skb, GFP_ATOMIC))
1798     return -ENOMEM;
1799    
1800     /* Get a new skb... force flag on. */
1801     @@ -1628,7 +1628,7 @@ static bool tcp_tso_should_defer(struct sock *sk, struct sk_buff *skb)
1802    
1803     /* If a full-sized TSO skb can be sent, do it. */
1804     if (limit >= min_t(unsigned int, sk->sk_gso_max_size,
1805     - sk->sk_gso_max_segs * tp->mss_cache))
1806     + tp->xmit_size_goal_segs * tp->mss_cache))
1807     goto send_now;
1808    
1809     /* Middle in queue won't get any more data, full sendable already? */
1810     @@ -1837,7 +1837,6 @@ static bool tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle,
1811     while ((skb = tcp_send_head(sk))) {
1812     unsigned int limit;
1813    
1814     -
1815     tso_segs = tcp_init_tso_segs(sk, skb, mss_now);
1816     BUG_ON(!tso_segs);
1817    
1818     @@ -1866,13 +1865,20 @@ static bool tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle,
1819     break;
1820     }
1821    
1822     - /* TSQ : sk_wmem_alloc accounts skb truesize,
1823     - * including skb overhead. But thats OK.
1824     + /* TCP Small Queues :
1825     + * Control number of packets in qdisc/devices to two packets / or ~1 ms.
1826     + * This allows for :
1827     + * - better RTT estimation and ACK scheduling
1828     + * - faster recovery
1829     + * - high rates
1830     */
1831     - if (atomic_read(&sk->sk_wmem_alloc) >= sysctl_tcp_limit_output_bytes) {
1832     + limit = max(skb->truesize, sk->sk_pacing_rate >> 10);
1833     +
1834     + if (atomic_read(&sk->sk_wmem_alloc) > limit) {
1835     set_bit(TSQ_THROTTLED, &tp->tsq_flags);
1836     break;
1837     }
1838     +
1839     limit = mss_now;
1840     if (tso_segs > 1 && !tcp_urg_mode(tp))
1841     limit = tcp_mss_split_point(sk, skb, mss_now,
1842     @@ -2334,6 +2340,8 @@ int __tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb)
1843     int oldpcount = tcp_skb_pcount(skb);
1844    
1845     if (unlikely(oldpcount > 1)) {
1846     + if (skb_unclone(skb, GFP_ATOMIC))
1847     + return -ENOMEM;
1848     tcp_init_tso_segs(sk, skb, cur_mss);
1849     tcp_adjust_pcount(sk, skb, oldpcount - tcp_skb_pcount(skb));
1850     }
1851     diff --git a/net/ipv6/inet6_hashtables.c b/net/ipv6/inet6_hashtables.c
1852     index 32b4a1675d82..066640e0ba8e 100644
1853     --- a/net/ipv6/inet6_hashtables.c
1854     +++ b/net/ipv6/inet6_hashtables.c
1855     @@ -116,7 +116,7 @@ begintw:
1856     }
1857     if (unlikely(!INET6_TW_MATCH(sk, net, saddr, daddr,
1858     ports, dif))) {
1859     - sock_put(sk);
1860     + inet_twsk_put(inet_twsk(sk));
1861     goto begintw;
1862     }
1863     goto out;
1864     diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
1865     index 44df1c92a0d6..5b25f850faf9 100644
1866     --- a/net/ipv6/ip6_output.c
1867     +++ b/net/ipv6/ip6_output.c
1868     @@ -130,7 +130,7 @@ static int ip6_finish_output2(struct sk_buff *skb)
1869     }
1870    
1871     rcu_read_lock_bh();
1872     - nexthop = rt6_nexthop((struct rt6_info *)dst, &ipv6_hdr(skb)->daddr);
1873     + nexthop = rt6_nexthop((struct rt6_info *)dst);
1874     neigh = __ipv6_neigh_lookup_noref(dst->dev, nexthop);
1875     if (unlikely(!neigh))
1876     neigh = __neigh_create(&nd_tbl, nexthop, dst->dev, false);
1877     @@ -899,7 +899,7 @@ static int ip6_dst_lookup_tail(struct sock *sk,
1878     */
1879     rt = (struct rt6_info *) *dst;
1880     rcu_read_lock_bh();
1881     - n = __ipv6_neigh_lookup_noref(rt->dst.dev, rt6_nexthop(rt, &fl6->daddr));
1882     + n = __ipv6_neigh_lookup_noref(rt->dst.dev, rt6_nexthop(rt));
1883     err = n && !(n->nud_state & NUD_VALID) ? -EINVAL : 0;
1884     rcu_read_unlock_bh();
1885    
1886     @@ -1252,7 +1252,7 @@ int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to,
1887     skb = skb_peek_tail(&sk->sk_write_queue);
1888     cork->length += length;
1889     if (((length > mtu) ||
1890     - (skb && skb_is_gso(skb))) &&
1891     + (skb && skb_has_frags(skb))) &&
1892     (sk->sk_protocol == IPPROTO_UDP) &&
1893     (rt->dst.dev->features & NETIF_F_UFO)) {
1894     err = ip6_ufo_append_data(sk, getfrag, from, length,
1895     diff --git a/net/ipv6/route.c b/net/ipv6/route.c
1896     index 8d9a93ed9c59..1e32d5c0b615 100644
1897     --- a/net/ipv6/route.c
1898     +++ b/net/ipv6/route.c
1899     @@ -477,6 +477,24 @@ out:
1900     }
1901    
1902     #ifdef CONFIG_IPV6_ROUTER_PREF
1903     +struct __rt6_probe_work {
1904     + struct work_struct work;
1905     + struct in6_addr target;
1906     + struct net_device *dev;
1907     +};
1908     +
1909     +static void rt6_probe_deferred(struct work_struct *w)
1910     +{
1911     + struct in6_addr mcaddr;
1912     + struct __rt6_probe_work *work =
1913     + container_of(w, struct __rt6_probe_work, work);
1914     +
1915     + addrconf_addr_solict_mult(&work->target, &mcaddr);
1916     + ndisc_send_ns(work->dev, NULL, &work->target, &mcaddr, NULL);
1917     + dev_put(work->dev);
1918     + kfree(w);
1919     +}
1920     +
1921     static void rt6_probe(struct rt6_info *rt)
1922     {
1923     struct neighbour *neigh;
1924     @@ -500,17 +518,23 @@ static void rt6_probe(struct rt6_info *rt)
1925    
1926     if (!neigh ||
1927     time_after(jiffies, neigh->updated + rt->rt6i_idev->cnf.rtr_probe_interval)) {
1928     - struct in6_addr mcaddr;
1929     - struct in6_addr *target;
1930     + struct __rt6_probe_work *work;
1931    
1932     - if (neigh) {
1933     + work = kmalloc(sizeof(*work), GFP_ATOMIC);
1934     +
1935     + if (neigh && work)
1936     neigh->updated = jiffies;
1937     +
1938     + if (neigh)
1939     write_unlock(&neigh->lock);
1940     - }
1941    
1942     - target = (struct in6_addr *)&rt->rt6i_gateway;
1943     - addrconf_addr_solict_mult(target, &mcaddr);
1944     - ndisc_send_ns(rt->dst.dev, NULL, target, &mcaddr, NULL);
1945     + if (work) {
1946     + INIT_WORK(&work->work, rt6_probe_deferred);
1947     + work->target = rt->rt6i_gateway;
1948     + dev_hold(rt->dst.dev);
1949     + work->dev = rt->dst.dev;
1950     + schedule_work(&work->work);
1951     + }
1952     } else {
1953     out:
1954     write_unlock(&neigh->lock);
1955     @@ -852,7 +876,6 @@ static struct rt6_info *rt6_alloc_cow(struct rt6_info *ort,
1956     if (ort->rt6i_dst.plen != 128 &&
1957     ipv6_addr_equal(&ort->rt6i_dst.addr, daddr))
1958     rt->rt6i_flags |= RTF_ANYCAST;
1959     - rt->rt6i_gateway = *daddr;
1960     }
1961    
1962     rt->rt6i_flags |= RTF_CACHE;
1963     @@ -1270,6 +1293,7 @@ struct dst_entry *icmp6_dst_alloc(struct net_device *dev,
1964     rt->dst.flags |= DST_HOST;
1965     rt->dst.output = ip6_output;
1966     atomic_set(&rt->dst.__refcnt, 1);
1967     + rt->rt6i_gateway = fl6->daddr;
1968     rt->rt6i_dst.addr = fl6->daddr;
1969     rt->rt6i_dst.plen = 128;
1970     rt->rt6i_idev = idev;
1971     @@ -1824,7 +1848,10 @@ static struct rt6_info *ip6_rt_copy(struct rt6_info *ort,
1972     in6_dev_hold(rt->rt6i_idev);
1973     rt->dst.lastuse = jiffies;
1974    
1975     - rt->rt6i_gateway = ort->rt6i_gateway;
1976     + if (ort->rt6i_flags & RTF_GATEWAY)
1977     + rt->rt6i_gateway = ort->rt6i_gateway;
1978     + else
1979     + rt->rt6i_gateway = *dest;
1980     rt->rt6i_flags = ort->rt6i_flags;
1981     if ((ort->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) ==
1982     (RTF_DEFAULT | RTF_ADDRCONF))
1983     @@ -2111,6 +2138,7 @@ struct rt6_info *addrconf_dst_alloc(struct inet6_dev *idev,
1984     else
1985     rt->rt6i_flags |= RTF_LOCAL;
1986    
1987     + rt->rt6i_gateway = *addr;
1988     rt->rt6i_dst.addr = *addr;
1989     rt->rt6i_dst.plen = 128;
1990     rt->rt6i_table = fib6_get_table(net, RT6_TABLE_LOCAL);
1991     diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
1992     index 86f639ba5407..a51ad079ee58 100644
1993     --- a/net/ipv6/sit.c
1994     +++ b/net/ipv6/sit.c
1995     @@ -1708,7 +1708,6 @@ static void __net_exit sit_exit_net(struct net *net)
1996    
1997     rtnl_lock();
1998     sit_destroy_tunnels(sitn, &list);
1999     - unregister_netdevice_queue(sitn->fb_tunnel_dev, &list);
2000     unregister_netdevice_many(&list);
2001     rtnl_unlock();
2002     }
2003     diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c
2004     index feae495a0a30..b076e8309bc2 100644
2005     --- a/net/l2tp/l2tp_core.c
2006     +++ b/net/l2tp/l2tp_core.c
2007     @@ -115,6 +115,11 @@ struct l2tp_net {
2008     static void l2tp_session_set_header_len(struct l2tp_session *session, int version);
2009     static void l2tp_tunnel_free(struct l2tp_tunnel *tunnel);
2010    
2011     +static inline struct l2tp_tunnel *l2tp_tunnel(struct sock *sk)
2012     +{
2013     + return sk->sk_user_data;
2014     +}
2015     +
2016     static inline struct l2tp_net *l2tp_pernet(struct net *net)
2017     {
2018     BUG_ON(!net);
2019     @@ -504,7 +509,7 @@ static inline int l2tp_verify_udp_checksum(struct sock *sk,
2020     return 0;
2021    
2022     #if IS_ENABLED(CONFIG_IPV6)
2023     - if (sk->sk_family == PF_INET6) {
2024     + if (sk->sk_family == PF_INET6 && !l2tp_tunnel(sk)->v4mapped) {
2025     if (!uh->check) {
2026     LIMIT_NETDEBUG(KERN_INFO "L2TP: IPv6: checksum is 0\n");
2027     return 1;
2028     @@ -1128,7 +1133,7 @@ static int l2tp_xmit_core(struct l2tp_session *session, struct sk_buff *skb,
2029     /* Queue the packet to IP for output */
2030     skb->local_df = 1;
2031     #if IS_ENABLED(CONFIG_IPV6)
2032     - if (skb->sk->sk_family == PF_INET6)
2033     + if (skb->sk->sk_family == PF_INET6 && !tunnel->v4mapped)
2034     error = inet6_csk_xmit(skb, NULL);
2035     else
2036     #endif
2037     @@ -1255,7 +1260,7 @@ int l2tp_xmit_skb(struct l2tp_session *session, struct sk_buff *skb, int hdr_len
2038    
2039     /* Calculate UDP checksum if configured to do so */
2040     #if IS_ENABLED(CONFIG_IPV6)
2041     - if (sk->sk_family == PF_INET6)
2042     + if (sk->sk_family == PF_INET6 && !tunnel->v4mapped)
2043     l2tp_xmit_ipv6_csum(sk, skb, udp_len);
2044     else
2045     #endif
2046     @@ -1304,10 +1309,9 @@ EXPORT_SYMBOL_GPL(l2tp_xmit_skb);
2047     */
2048     static void l2tp_tunnel_destruct(struct sock *sk)
2049     {
2050     - struct l2tp_tunnel *tunnel;
2051     + struct l2tp_tunnel *tunnel = l2tp_tunnel(sk);
2052     struct l2tp_net *pn;
2053    
2054     - tunnel = sk->sk_user_data;
2055     if (tunnel == NULL)
2056     goto end;
2057    
2058     @@ -1675,7 +1679,7 @@ int l2tp_tunnel_create(struct net *net, int fd, int version, u32 tunnel_id, u32
2059     }
2060    
2061     /* Check if this socket has already been prepped */
2062     - tunnel = (struct l2tp_tunnel *)sk->sk_user_data;
2063     + tunnel = l2tp_tunnel(sk);
2064     if (tunnel != NULL) {
2065     /* This socket has already been prepped */
2066     err = -EBUSY;
2067     @@ -1704,6 +1708,24 @@ int l2tp_tunnel_create(struct net *net, int fd, int version, u32 tunnel_id, u32
2068     if (cfg != NULL)
2069     tunnel->debug = cfg->debug;
2070    
2071     +#if IS_ENABLED(CONFIG_IPV6)
2072     + if (sk->sk_family == PF_INET6) {
2073     + struct ipv6_pinfo *np = inet6_sk(sk);
2074     +
2075     + if (ipv6_addr_v4mapped(&np->saddr) &&
2076     + ipv6_addr_v4mapped(&np->daddr)) {
2077     + struct inet_sock *inet = inet_sk(sk);
2078     +
2079     + tunnel->v4mapped = true;
2080     + inet->inet_saddr = np->saddr.s6_addr32[3];
2081     + inet->inet_rcv_saddr = np->rcv_saddr.s6_addr32[3];
2082     + inet->inet_daddr = np->daddr.s6_addr32[3];
2083     + } else {
2084     + tunnel->v4mapped = false;
2085     + }
2086     + }
2087     +#endif
2088     +
2089     /* Mark socket as an encapsulation socket. See net/ipv4/udp.c */
2090     tunnel->encap = encap;
2091     if (encap == L2TP_ENCAPTYPE_UDP) {
2092     @@ -1712,7 +1734,7 @@ int l2tp_tunnel_create(struct net *net, int fd, int version, u32 tunnel_id, u32
2093     udp_sk(sk)->encap_rcv = l2tp_udp_encap_recv;
2094     udp_sk(sk)->encap_destroy = l2tp_udp_encap_destroy;
2095     #if IS_ENABLED(CONFIG_IPV6)
2096     - if (sk->sk_family == PF_INET6)
2097     + if (sk->sk_family == PF_INET6 && !tunnel->v4mapped)
2098     udpv6_encap_enable();
2099     else
2100     #endif
2101     diff --git a/net/l2tp/l2tp_core.h b/net/l2tp/l2tp_core.h
2102     index 66a559b104b6..6f251cbc2ed7 100644
2103     --- a/net/l2tp/l2tp_core.h
2104     +++ b/net/l2tp/l2tp_core.h
2105     @@ -194,6 +194,9 @@ struct l2tp_tunnel {
2106     struct sock *sock; /* Parent socket */
2107     int fd; /* Parent fd, if tunnel socket
2108     * was created by userspace */
2109     +#if IS_ENABLED(CONFIG_IPV6)
2110     + bool v4mapped;
2111     +#endif
2112    
2113     struct work_struct del_work;
2114    
2115     diff --git a/net/l2tp/l2tp_ppp.c b/net/l2tp/l2tp_ppp.c
2116     index 5ebee2ded9e9..8c46b271064a 100644
2117     --- a/net/l2tp/l2tp_ppp.c
2118     +++ b/net/l2tp/l2tp_ppp.c
2119     @@ -353,7 +353,9 @@ static int pppol2tp_sendmsg(struct kiocb *iocb, struct socket *sock, struct msgh
2120     goto error_put_sess_tun;
2121     }
2122    
2123     + local_bh_disable();
2124     l2tp_xmit_skb(session, skb, session->hdr_len);
2125     + local_bh_enable();
2126    
2127     sock_put(ps->tunnel_sock);
2128     sock_put(sk);
2129     @@ -422,7 +424,9 @@ static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb)
2130     skb->data[0] = ppph[0];
2131     skb->data[1] = ppph[1];
2132    
2133     + local_bh_disable();
2134     l2tp_xmit_skb(session, skb, session->hdr_len);
2135     + local_bh_enable();
2136    
2137     sock_put(sk_tun);
2138     sock_put(sk);
2139     diff --git a/net/netfilter/nf_conntrack_h323_main.c b/net/netfilter/nf_conntrack_h323_main.c
2140     index bdebd03bc8cd..70866d192efc 100644
2141     --- a/net/netfilter/nf_conntrack_h323_main.c
2142     +++ b/net/netfilter/nf_conntrack_h323_main.c
2143     @@ -778,8 +778,8 @@ static int callforward_do_filter(const union nf_inet_addr *src,
2144     flowi6_to_flowi(&fl1), false)) {
2145     if (!afinfo->route(&init_net, (struct dst_entry **)&rt2,
2146     flowi6_to_flowi(&fl2), false)) {
2147     - if (!memcmp(&rt1->rt6i_gateway, &rt2->rt6i_gateway,
2148     - sizeof(rt1->rt6i_gateway)) &&
2149     + if (ipv6_addr_equal(rt6_nexthop(rt1),
2150     + rt6_nexthop(rt2)) &&
2151     rt1->dst.dev == rt2->dst.dev)
2152     ret = 1;
2153     dst_release(&rt2->dst);
2154     diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c
2155     index 82f6016d89ab..3626010e8f0b 100644
2156     --- a/net/sched/sch_netem.c
2157     +++ b/net/sched/sch_netem.c
2158     @@ -358,6 +358,21 @@ static psched_time_t packet_len_2_sched_time(unsigned int len, struct netem_sche
2159     return PSCHED_NS2TICKS(ticks);
2160     }
2161    
2162     +static void tfifo_reset(struct Qdisc *sch)
2163     +{
2164     + struct netem_sched_data *q = qdisc_priv(sch);
2165     + struct rb_node *p;
2166     +
2167     + while ((p = rb_first(&q->t_root))) {
2168     + struct sk_buff *skb = netem_rb_to_skb(p);
2169     +
2170     + rb_erase(p, &q->t_root);
2171     + skb->next = NULL;
2172     + skb->prev = NULL;
2173     + kfree_skb(skb);
2174     + }
2175     +}
2176     +
2177     static void tfifo_enqueue(struct sk_buff *nskb, struct Qdisc *sch)
2178     {
2179     struct netem_sched_data *q = qdisc_priv(sch);
2180     @@ -523,6 +538,7 @@ static unsigned int netem_drop(struct Qdisc *sch)
2181     skb->next = NULL;
2182     skb->prev = NULL;
2183     len = qdisc_pkt_len(skb);
2184     + sch->qstats.backlog -= len;
2185     kfree_skb(skb);
2186     }
2187     }
2188     @@ -612,6 +628,7 @@ static void netem_reset(struct Qdisc *sch)
2189     struct netem_sched_data *q = qdisc_priv(sch);
2190    
2191     qdisc_reset_queue(sch);
2192     + tfifo_reset(sch);
2193     if (q->qdisc)
2194     qdisc_reset(q->qdisc);
2195     qdisc_watchdog_cancel(&q->watchdog);
2196     diff --git a/net/sctp/output.c b/net/sctp/output.c
2197     index a46d1eb41762..013a07d9c454 100644
2198     --- a/net/sctp/output.c
2199     +++ b/net/sctp/output.c
2200     @@ -542,7 +542,8 @@ int sctp_packet_transmit(struct sctp_packet *packet)
2201     * by CRC32-C as described in <draft-ietf-tsvwg-sctpcsum-02.txt>.
2202     */
2203     if (!sctp_checksum_disable) {
2204     - if (!(dst->dev->features & NETIF_F_SCTP_CSUM)) {
2205     + if (!(dst->dev->features & NETIF_F_SCTP_CSUM) ||
2206     + (dst_xfrm(dst) != NULL) || packet->ipfragok) {
2207     __u32 crc32 = sctp_start_cksum((__u8 *)sh, cksum_buf_len);
2208    
2209     /* 3) Put the resultant value into the checksum field in the
2210     diff --git a/net/socket.c b/net/socket.c
2211     index b2d7c629eeb9..4b946438d560 100644
2212     --- a/net/socket.c
2213     +++ b/net/socket.c
2214     @@ -1973,6 +1973,16 @@ struct used_address {
2215     unsigned int name_len;
2216     };
2217    
2218     +static int copy_msghdr_from_user(struct msghdr *kmsg,
2219     + struct msghdr __user *umsg)
2220     +{
2221     + if (copy_from_user(kmsg, umsg, sizeof(struct msghdr)))
2222     + return -EFAULT;
2223     + if (kmsg->msg_namelen > sizeof(struct sockaddr_storage))
2224     + return -EINVAL;
2225     + return 0;
2226     +}
2227     +
2228     static int ___sys_sendmsg(struct socket *sock, struct msghdr __user *msg,
2229     struct msghdr *msg_sys, unsigned int flags,
2230     struct used_address *used_address)
2231     @@ -1991,8 +2001,11 @@ static int ___sys_sendmsg(struct socket *sock, struct msghdr __user *msg,
2232     if (MSG_CMSG_COMPAT & flags) {
2233     if (get_compat_msghdr(msg_sys, msg_compat))
2234     return -EFAULT;
2235     - } else if (copy_from_user(msg_sys, msg, sizeof(struct msghdr)))
2236     - return -EFAULT;
2237     + } else {
2238     + err = copy_msghdr_from_user(msg_sys, msg);
2239     + if (err)
2240     + return err;
2241     + }
2242    
2243     if (msg_sys->msg_iovlen > UIO_FASTIOV) {
2244     err = -EMSGSIZE;
2245     @@ -2200,8 +2213,11 @@ static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg,
2246     if (MSG_CMSG_COMPAT & flags) {
2247     if (get_compat_msghdr(msg_sys, msg_compat))
2248     return -EFAULT;
2249     - } else if (copy_from_user(msg_sys, msg, sizeof(struct msghdr)))
2250     - return -EFAULT;
2251     + } else {
2252     + err = copy_msghdr_from_user(msg_sys, msg);
2253     + if (err)
2254     + return err;
2255     + }
2256    
2257     if (msg_sys->msg_iovlen > UIO_FASTIOV) {
2258     err = -EMSGSIZE;
2259     diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
2260     index c4ce243824bb..e64bbcf5fb2c 100644
2261     --- a/net/unix/af_unix.c
2262     +++ b/net/unix/af_unix.c
2263     @@ -1246,6 +1246,15 @@ static int unix_socketpair(struct socket *socka, struct socket *sockb)
2264     return 0;
2265     }
2266    
2267     +static void unix_sock_inherit_flags(const struct socket *old,
2268     + struct socket *new)
2269     +{
2270     + if (test_bit(SOCK_PASSCRED, &old->flags))
2271     + set_bit(SOCK_PASSCRED, &new->flags);
2272     + if (test_bit(SOCK_PASSSEC, &old->flags))
2273     + set_bit(SOCK_PASSSEC, &new->flags);
2274     +}
2275     +
2276     static int unix_accept(struct socket *sock, struct socket *newsock, int flags)
2277     {
2278     struct sock *sk = sock->sk;
2279     @@ -1280,6 +1289,7 @@ static int unix_accept(struct socket *sock, struct socket *newsock, int flags)
2280     /* attach accepted sock to socket */
2281     unix_state_lock(tsk);
2282     newsock->state = SS_CONNECTED;
2283     + unix_sock_inherit_flags(sock, newsock);
2284     sock_graft(tsk, newsock);
2285     unix_state_unlock(tsk);
2286     return 0;
2287     diff --git a/net/unix/diag.c b/net/unix/diag.c
2288     index d591091603bf..86fa0f3b2caf 100644
2289     --- a/net/unix/diag.c
2290     +++ b/net/unix/diag.c
2291     @@ -124,6 +124,7 @@ static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct unix_diag_r
2292     rep->udiag_family = AF_UNIX;
2293     rep->udiag_type = sk->sk_type;
2294     rep->udiag_state = sk->sk_state;
2295     + rep->pad = 0;
2296     rep->udiag_ino = sk_ino;
2297     sock_diag_save_cookie(sk, rep->udiag_cookie);
2298    
2299     diff --git a/net/wireless/radiotap.c b/net/wireless/radiotap.c
2300     index 7d604c06c3dc..a271c27fac77 100644
2301     --- a/net/wireless/radiotap.c
2302     +++ b/net/wireless/radiotap.c
2303     @@ -97,6 +97,10 @@ int ieee80211_radiotap_iterator_init(
2304     struct ieee80211_radiotap_header *radiotap_header,
2305     int max_length, const struct ieee80211_radiotap_vendor_namespaces *vns)
2306     {
2307     + /* check the radiotap header can actually be present */
2308     + if (max_length < sizeof(struct ieee80211_radiotap_header))
2309     + return -EINVAL;
2310     +
2311     /* Linux only supports version 0 radiotap format */
2312     if (radiotap_header->it_version)
2313     return -EINVAL;
2314     @@ -131,7 +135,8 @@ int ieee80211_radiotap_iterator_init(
2315     */
2316    
2317     if ((unsigned long)iterator->_arg -
2318     - (unsigned long)iterator->_rtheader >
2319     + (unsigned long)iterator->_rtheader +
2320     + sizeof(uint32_t) >
2321     (unsigned long)iterator->_max_length)
2322     return -EINVAL;
2323     }
2324     diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
2325     index e3c7ba8d7582..adabdeb7b15d 100644
2326     --- a/sound/pci/hda/hda_generic.c
2327     +++ b/sound/pci/hda/hda_generic.c
2328     @@ -3505,7 +3505,7 @@ static int create_capture_mixers(struct hda_codec *codec)
2329     if (!multi)
2330     err = create_single_cap_vol_ctl(codec, n, vol, sw,
2331     inv_dmic);
2332     - else if (!multi_cap_vol)
2333     + else if (!multi_cap_vol && !inv_dmic)
2334     err = create_bind_cap_vol_ctl(codec, n, vol, sw);
2335     else
2336     err = create_multi_cap_vol_ctl(codec);
2337     diff --git a/sound/usb/usx2y/us122l.c b/sound/usb/usx2y/us122l.c
2338     index d0323a693ba2..999550bbad40 100644
2339     --- a/sound/usb/usx2y/us122l.c
2340     +++ b/sound/usb/usx2y/us122l.c
2341     @@ -262,7 +262,9 @@ static int usb_stream_hwdep_mmap(struct snd_hwdep *hw,
2342     }
2343    
2344     area->vm_ops = &usb_stream_hwdep_vm_ops;
2345     - area->vm_flags |= VM_DONTEXPAND | VM_DONTDUMP;
2346     + area->vm_flags |= VM_DONTDUMP;
2347     + if (!read)
2348     + area->vm_flags |= VM_DONTEXPAND;
2349     area->vm_private_data = us122l;
2350     atomic_inc(&us122l->mmap_count);
2351     out: