Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.9/0291-4.9.192-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3566 - (hide annotations) (download)
Thu Aug 13 10:21:10 2020 UTC (3 years, 9 months ago) by niro
File size: 20435 byte(s)
linux-192
1 niro 3566 diff --git a/Makefile b/Makefile
2     index 311e861afb15..946951930f62 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 4
7     PATCHLEVEL = 9
8     -SUBLEVEL = 191
9     +SUBLEVEL = 192
10     EXTRAVERSION =
11     NAME = Roaring Lionus
12    
13     diff --git a/arch/arm/kvm/mmio.c b/arch/arm/kvm/mmio.c
14     index 08443a15e6be..3caee91bca08 100644
15     --- a/arch/arm/kvm/mmio.c
16     +++ b/arch/arm/kvm/mmio.c
17     @@ -98,6 +98,12 @@ int kvm_handle_mmio_return(struct kvm_vcpu *vcpu, struct kvm_run *run)
18     unsigned int len;
19     int mask;
20    
21     + /* Detect an already handled MMIO return */
22     + if (unlikely(!vcpu->mmio_needed))
23     + return 0;
24     +
25     + vcpu->mmio_needed = 0;
26     +
27     if (!run->mmio.is_write) {
28     len = run->mmio.len;
29     if (len > sizeof(unsigned long))
30     @@ -200,6 +206,7 @@ int io_mem_abort(struct kvm_vcpu *vcpu, struct kvm_run *run,
31     run->mmio.is_write = is_write;
32     run->mmio.phys_addr = fault_ipa;
33     run->mmio.len = len;
34     + vcpu->mmio_needed = 1;
35    
36     if (!ret) {
37     /* We handled the access successfully in the kernel. */
38     diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
39     index 37666c536741..928ffdc21873 100644
40     --- a/arch/x86/kernel/apic/apic.c
41     +++ b/arch/x86/kernel/apic/apic.c
42     @@ -1067,10 +1067,6 @@ void clear_local_APIC(void)
43     apic_write(APIC_LVT0, v | APIC_LVT_MASKED);
44     v = apic_read(APIC_LVT1);
45     apic_write(APIC_LVT1, v | APIC_LVT_MASKED);
46     - if (!x2apic_enabled()) {
47     - v = apic_read(APIC_LDR) & ~APIC_LDR_MASK;
48     - apic_write(APIC_LDR, v);
49     - }
50     if (maxlvt >= 4) {
51     v = apic_read(APIC_LVTPC);
52     apic_write(APIC_LVTPC, v | APIC_LVT_MASKED);
53     diff --git a/drivers/bluetooth/btqca.c b/drivers/bluetooth/btqca.c
54     index 28afd5d585f9..b7dfa4afd516 100644
55     --- a/drivers/bluetooth/btqca.c
56     +++ b/drivers/bluetooth/btqca.c
57     @@ -363,6 +363,9 @@ int qca_uart_setup_rome(struct hci_dev *hdev, uint8_t baudrate)
58     return err;
59     }
60    
61     + /* Give the controller some time to get ready to receive the NVM */
62     + msleep(10);
63     +
64     /* Download NVM configuration */
65     config.type = TLV_TYPE_NVM;
66     snprintf(config.fwname, sizeof(config.fwname), "qca/nvm_%08x.bin",
67     diff --git a/drivers/infiniband/hw/mlx4/mad.c b/drivers/infiniband/hw/mlx4/mad.c
68     index d9323d7c479c..f32ffd74ec47 100644
69     --- a/drivers/infiniband/hw/mlx4/mad.c
70     +++ b/drivers/infiniband/hw/mlx4/mad.c
71     @@ -1643,8 +1643,6 @@ tx_err:
72     tx_buf_size, DMA_TO_DEVICE);
73     kfree(tun_qp->tx_ring[i].buf.addr);
74     }
75     - kfree(tun_qp->tx_ring);
76     - tun_qp->tx_ring = NULL;
77     i = MLX4_NUM_TUNNEL_BUFS;
78     err:
79     while (i > 0) {
80     @@ -1653,6 +1651,8 @@ err:
81     rx_buf_size, DMA_FROM_DEVICE);
82     kfree(tun_qp->ring[i].addr);
83     }
84     + kfree(tun_qp->tx_ring);
85     + tun_qp->tx_ring = NULL;
86     kfree(tun_qp->ring);
87     tun_qp->ring = NULL;
88     return -ENOMEM;
89     diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c
90     index 20455d082cb8..61c55621b958 100644
91     --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c
92     +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c
93     @@ -2781,8 +2781,10 @@ static ssize_t blocked_fl_write(struct file *filp, const char __user *ubuf,
94     return -ENOMEM;
95    
96     err = bitmap_parse_user(ubuf, count, t, adap->sge.egr_sz);
97     - if (err)
98     + if (err) {
99     + kvfree(t);
100     return err;
101     + }
102    
103     bitmap_copy(adap->sge.blocked_fl, t, adap->sge.egr_sz);
104     t4_free_mem(t);
105     diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
106     index 955f658f3b65..de9897c8e933 100644
107     --- a/drivers/net/ethernet/ibm/ibmveth.c
108     +++ b/drivers/net/ethernet/ibm/ibmveth.c
109     @@ -1557,7 +1557,7 @@ static int ibmveth_probe(struct vio_dev *dev, const struct vio_device_id *id)
110     struct net_device *netdev;
111     struct ibmveth_adapter *adapter;
112     unsigned char *mac_addr_p;
113     - unsigned int *mcastFilterSize_p;
114     + __be32 *mcastFilterSize_p;
115     long ret;
116     unsigned long ret_attr;
117    
118     @@ -1579,8 +1579,9 @@ static int ibmveth_probe(struct vio_dev *dev, const struct vio_device_id *id)
119     return -EINVAL;
120     }
121    
122     - mcastFilterSize_p = (unsigned int *)vio_get_attribute(dev,
123     - VETH_MCAST_FILTER_SIZE, NULL);
124     + mcastFilterSize_p = (__be32 *)vio_get_attribute(dev,
125     + VETH_MCAST_FILTER_SIZE,
126     + NULL);
127     if (!mcastFilterSize_p) {
128     dev_err(&dev->dev, "Can't find VETH_MCAST_FILTER_SIZE "
129     "attribute\n");
130     @@ -1597,7 +1598,7 @@ static int ibmveth_probe(struct vio_dev *dev, const struct vio_device_id *id)
131    
132     adapter->vdev = dev;
133     adapter->netdev = netdev;
134     - adapter->mcastFilterSize = *mcastFilterSize_p;
135     + adapter->mcastFilterSize = be32_to_cpu(*mcastFilterSize_p);
136     adapter->pool_config = 0;
137    
138     netif_napi_add(netdev, &adapter->napi, ibmveth_poll, 16);
139     diff --git a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
140     index 6d1a956e3f77..02ec326cb129 100644
141     --- a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
142     +++ b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
143     @@ -4113,7 +4113,7 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
144     * setup (if available). */
145     status = myri10ge_request_irq(mgp);
146     if (status != 0)
147     - goto abort_with_firmware;
148     + goto abort_with_slices;
149     myri10ge_free_irq(mgp);
150    
151     /* Save configuration space to be restored if the
152     diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
153     index 480883a7a3e5..545cb6262cff 100644
154     --- a/drivers/net/ethernet/renesas/ravb_main.c
155     +++ b/drivers/net/ethernet/renesas/ravb_main.c
156     @@ -1,6 +1,6 @@
157     /* Renesas Ethernet AVB device driver
158     *
159     - * Copyright (C) 2014-2015 Renesas Electronics Corporation
160     + * Copyright (C) 2014-2019 Renesas Electronics Corporation
161     * Copyright (C) 2015 Renesas Solutions Corp.
162     * Copyright (C) 2015-2016 Cogent Embedded, Inc. <source@cogentembedded.com>
163     *
164     @@ -512,7 +512,10 @@ static void ravb_get_tx_tstamp(struct net_device *ndev)
165     kfree(ts_skb);
166     if (tag == tfa_tag) {
167     skb_tstamp_tx(skb, &shhwtstamps);
168     + dev_consume_skb_any(skb);
169     break;
170     + } else {
171     + dev_kfree_skb_any(skb);
172     }
173     }
174     ravb_modify(ndev, TCCR, TCCR_TFR, TCCR_TFR);
175     @@ -1537,7 +1540,7 @@ static netdev_tx_t ravb_start_xmit(struct sk_buff *skb, struct net_device *ndev)
176     DMA_TO_DEVICE);
177     goto unmap;
178     }
179     - ts_skb->skb = skb;
180     + ts_skb->skb = skb_get(skb);
181     ts_skb->tag = priv->ts_skb_tag++;
182     priv->ts_skb_tag &= 0x3ff;
183     list_add_tail(&ts_skb->list, &priv->ts_skb_list);
184     @@ -1665,6 +1668,7 @@ static int ravb_close(struct net_device *ndev)
185     /* Clear the timestamp list */
186     list_for_each_entry_safe(ts_skb, ts_skb2, &priv->ts_skb_list, list) {
187     list_del(&ts_skb->list);
188     + kfree_skb(ts_skb->skb);
189     kfree(ts_skb);
190     }
191    
192     diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
193     index 6e61bccc90b3..15c063880f88 100644
194     --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
195     +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
196     @@ -771,10 +771,8 @@ static int phy_power_on(struct rk_priv_data *bsp_priv, bool enable)
197     int ret;
198     struct device *dev = &bsp_priv->pdev->dev;
199    
200     - if (!ldo) {
201     - dev_err(dev, "no regulator found\n");
202     - return -1;
203     - }
204     + if (!ldo)
205     + return 0;
206    
207     if (enable) {
208     ret = regulator_enable(ldo);
209     diff --git a/drivers/net/ethernet/toshiba/tc35815.c b/drivers/net/ethernet/toshiba/tc35815.c
210     index 5b01b3fa9fec..47ebac456ae5 100644
211     --- a/drivers/net/ethernet/toshiba/tc35815.c
212     +++ b/drivers/net/ethernet/toshiba/tc35815.c
213     @@ -1498,7 +1498,7 @@ tc35815_rx(struct net_device *dev, int limit)
214     pci_unmap_single(lp->pci_dev,
215     lp->rx_skbs[cur_bd].skb_dma,
216     RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
217     - if (!HAVE_DMA_RXALIGN(lp) && NET_IP_ALIGN)
218     + if (!HAVE_DMA_RXALIGN(lp) && NET_IP_ALIGN != 0)
219     memmove(skb->data, skb->data - NET_IP_ALIGN,
220     pkt_len);
221     data = skb_put(skb, pkt_len);
222     diff --git a/drivers/net/ethernet/tundra/tsi108_eth.c b/drivers/net/ethernet/tundra/tsi108_eth.c
223     index 8fd131207ee1..499abe9108fa 100644
224     --- a/drivers/net/ethernet/tundra/tsi108_eth.c
225     +++ b/drivers/net/ethernet/tundra/tsi108_eth.c
226     @@ -381,9 +381,10 @@ tsi108_stat_carry_one(int carry, int carry_bit, int carry_shift,
227     static void tsi108_stat_carry(struct net_device *dev)
228     {
229     struct tsi108_prv_data *data = netdev_priv(dev);
230     + unsigned long flags;
231     u32 carry1, carry2;
232    
233     - spin_lock_irq(&data->misclock);
234     + spin_lock_irqsave(&data->misclock, flags);
235    
236     carry1 = TSI_READ(TSI108_STAT_CARRY1);
237     carry2 = TSI_READ(TSI108_STAT_CARRY2);
238     @@ -451,7 +452,7 @@ static void tsi108_stat_carry(struct net_device *dev)
239     TSI108_STAT_TXPAUSEDROP_CARRY,
240     &data->tx_pause_drop);
241    
242     - spin_unlock_irq(&data->misclock);
243     + spin_unlock_irqrestore(&data->misclock, flags);
244     }
245    
246     /* Read a stat counter atomically with respect to carries.
247     diff --git a/drivers/net/usb/cx82310_eth.c b/drivers/net/usb/cx82310_eth.c
248     index 947bea81d924..dfbdea22fbad 100644
249     --- a/drivers/net/usb/cx82310_eth.c
250     +++ b/drivers/net/usb/cx82310_eth.c
251     @@ -175,7 +175,8 @@ static int cx82310_bind(struct usbnet *dev, struct usb_interface *intf)
252     }
253     if (!timeout) {
254     dev_err(&udev->dev, "firmware not ready in time\n");
255     - return -ETIMEDOUT;
256     + ret = -ETIMEDOUT;
257     + goto err;
258     }
259    
260     /* enable ethernet mode (?) */
261     diff --git a/drivers/net/usb/kalmia.c b/drivers/net/usb/kalmia.c
262     index 3e37724d30ae..0c4f4190c58e 100644
263     --- a/drivers/net/usb/kalmia.c
264     +++ b/drivers/net/usb/kalmia.c
265     @@ -117,16 +117,16 @@ kalmia_init_and_get_ethernet_addr(struct usbnet *dev, u8 *ethernet_addr)
266     status = kalmia_send_init_packet(dev, usb_buf, sizeof(init_msg_1)
267     / sizeof(init_msg_1[0]), usb_buf, 24);
268     if (status != 0)
269     - return status;
270     + goto out;
271    
272     memcpy(usb_buf, init_msg_2, 12);
273     status = kalmia_send_init_packet(dev, usb_buf, sizeof(init_msg_2)
274     / sizeof(init_msg_2[0]), usb_buf, 28);
275     if (status != 0)
276     - return status;
277     + goto out;
278    
279     memcpy(ethernet_addr, usb_buf + 10, ETH_ALEN);
280     -
281     +out:
282     kfree(usb_buf);
283     return status;
284     }
285     diff --git a/drivers/net/wimax/i2400m/fw.c b/drivers/net/wimax/i2400m/fw.c
286     index c9c711dcd0e6..0e6c665a4de8 100644
287     --- a/drivers/net/wimax/i2400m/fw.c
288     +++ b/drivers/net/wimax/i2400m/fw.c
289     @@ -351,13 +351,15 @@ int i2400m_barker_db_init(const char *_options)
290     }
291     result = i2400m_barker_db_add(barker);
292     if (result < 0)
293     - goto error_add;
294     + goto error_parse_add;
295     }
296     kfree(options_orig);
297     }
298     return 0;
299    
300     +error_parse_add:
301     error_parse:
302     + kfree(options_orig);
303     error_add:
304     kfree(i2400m_barker_db);
305     return result;
306     diff --git a/drivers/spi/spi-bcm2835aux.c b/drivers/spi/spi-bcm2835aux.c
307     index 7428091d3f5b..5c89bbb05441 100644
308     --- a/drivers/spi/spi-bcm2835aux.c
309     +++ b/drivers/spi/spi-bcm2835aux.c
310     @@ -178,19 +178,14 @@ static void bcm2835aux_spi_reset_hw(struct bcm2835aux_spi *bs)
311     BCM2835_AUX_SPI_CNTL0_CLEARFIFO);
312     }
313    
314     -static irqreturn_t bcm2835aux_spi_interrupt(int irq, void *dev_id)
315     +static void bcm2835aux_spi_transfer_helper(struct bcm2835aux_spi *bs)
316     {
317     - struct spi_master *master = dev_id;
318     - struct bcm2835aux_spi *bs = spi_master_get_devdata(master);
319     - irqreturn_t ret = IRQ_NONE;
320     + u32 stat = bcm2835aux_rd(bs, BCM2835_AUX_SPI_STAT);
321    
322     /* check if we have data to read */
323     - while (bs->rx_len &&
324     - (!(bcm2835aux_rd(bs, BCM2835_AUX_SPI_STAT) &
325     - BCM2835_AUX_SPI_STAT_RX_EMPTY))) {
326     + for (; bs->rx_len && (stat & BCM2835_AUX_SPI_STAT_RX_LVL);
327     + stat = bcm2835aux_rd(bs, BCM2835_AUX_SPI_STAT))
328     bcm2835aux_rd_fifo(bs);
329     - ret = IRQ_HANDLED;
330     - }
331    
332     /* check if we have data to write */
333     while (bs->tx_len &&
334     @@ -198,16 +193,21 @@ static irqreturn_t bcm2835aux_spi_interrupt(int irq, void *dev_id)
335     (!(bcm2835aux_rd(bs, BCM2835_AUX_SPI_STAT) &
336     BCM2835_AUX_SPI_STAT_TX_FULL))) {
337     bcm2835aux_wr_fifo(bs);
338     - ret = IRQ_HANDLED;
339     }
340     +}
341    
342     - /* and check if we have reached "done" */
343     - while (bs->rx_len &&
344     - (!(bcm2835aux_rd(bs, BCM2835_AUX_SPI_STAT) &
345     - BCM2835_AUX_SPI_STAT_BUSY))) {
346     - bcm2835aux_rd_fifo(bs);
347     - ret = IRQ_HANDLED;
348     - }
349     +static irqreturn_t bcm2835aux_spi_interrupt(int irq, void *dev_id)
350     +{
351     + struct spi_master *master = dev_id;
352     + struct bcm2835aux_spi *bs = spi_master_get_devdata(master);
353     +
354     + /* IRQ may be shared, so return if our interrupts are disabled */
355     + if (!(bcm2835aux_rd(bs, BCM2835_AUX_SPI_CNTL1) &
356     + (BCM2835_AUX_SPI_CNTL1_TXEMPTY | BCM2835_AUX_SPI_CNTL1_IDLE)))
357     + return IRQ_NONE;
358     +
359     + /* do common fifo handling */
360     + bcm2835aux_spi_transfer_helper(bs);
361    
362     if (!bs->tx_len) {
363     /* disable tx fifo empty interrupt */
364     @@ -221,8 +221,7 @@ static irqreturn_t bcm2835aux_spi_interrupt(int irq, void *dev_id)
365     complete(&master->xfer_completion);
366     }
367    
368     - /* and return */
369     - return ret;
370     + return IRQ_HANDLED;
371     }
372    
373     static int __bcm2835aux_spi_transfer_one_irq(struct spi_master *master,
374     @@ -268,7 +267,6 @@ static int bcm2835aux_spi_transfer_one_poll(struct spi_master *master,
375     {
376     struct bcm2835aux_spi *bs = spi_master_get_devdata(master);
377     unsigned long timeout;
378     - u32 stat;
379    
380     /* configure spi */
381     bcm2835aux_wr(bs, BCM2835_AUX_SPI_CNTL1, bs->cntl[1]);
382     @@ -279,24 +277,9 @@ static int bcm2835aux_spi_transfer_one_poll(struct spi_master *master,
383    
384     /* loop until finished the transfer */
385     while (bs->rx_len) {
386     - /* read status */
387     - stat = bcm2835aux_rd(bs, BCM2835_AUX_SPI_STAT);
388    
389     - /* fill in tx fifo with remaining data */
390     - if ((bs->tx_len) && (!(stat & BCM2835_AUX_SPI_STAT_TX_FULL))) {
391     - bcm2835aux_wr_fifo(bs);
392     - continue;
393     - }
394     -
395     - /* read data from fifo for both cases */
396     - if (!(stat & BCM2835_AUX_SPI_STAT_RX_EMPTY)) {
397     - bcm2835aux_rd_fifo(bs);
398     - continue;
399     - }
400     - if (!(stat & BCM2835_AUX_SPI_STAT_BUSY)) {
401     - bcm2835aux_rd_fifo(bs);
402     - continue;
403     - }
404     + /* do common fifo handling */
405     + bcm2835aux_spi_transfer_helper(bs);
406    
407     /* there is still data pending to read check the timeout */
408     if (bs->rx_len && time_after(jiffies, timeout)) {
409     diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c
410     index 7a4052501866..339fdf6355df 100644
411     --- a/fs/ceph/inode.c
412     +++ b/fs/ceph/inode.c
413     @@ -741,6 +741,7 @@ static int fill_inode(struct inode *inode, struct page *locked_page,
414     int issued = 0, implemented, new_issued;
415     struct timespec mtime, atime, ctime;
416     struct ceph_buffer *xattr_blob = NULL;
417     + struct ceph_buffer *old_blob = NULL;
418     struct ceph_string *pool_ns = NULL;
419     struct ceph_cap *new_cap = NULL;
420     int err = 0;
421     @@ -858,7 +859,7 @@ static int fill_inode(struct inode *inode, struct page *locked_page,
422     if ((ci->i_xattrs.version == 0 || !(issued & CEPH_CAP_XATTR_EXCL)) &&
423     le64_to_cpu(info->xattr_version) > ci->i_xattrs.version) {
424     if (ci->i_xattrs.blob)
425     - ceph_buffer_put(ci->i_xattrs.blob);
426     + old_blob = ci->i_xattrs.blob;
427     ci->i_xattrs.blob = xattr_blob;
428     if (xattr_blob)
429     memcpy(ci->i_xattrs.blob->vec.iov_base,
430     @@ -1004,8 +1005,8 @@ static int fill_inode(struct inode *inode, struct page *locked_page,
431     out:
432     if (new_cap)
433     ceph_put_cap(mdsc, new_cap);
434     - if (xattr_blob)
435     - ceph_buffer_put(xattr_blob);
436     + ceph_buffer_put(old_blob);
437     + ceph_buffer_put(xattr_blob);
438     ceph_put_string(pool_ns);
439     return err;
440     }
441     diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c
442     index 81144a8c0927..18b999deed03 100644
443     --- a/fs/ceph/xattr.c
444     +++ b/fs/ceph/xattr.c
445     @@ -951,6 +951,7 @@ int __ceph_setxattr(struct inode *inode, const char *name,
446     struct ceph_inode_info *ci = ceph_inode(inode);
447     struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc;
448     struct ceph_cap_flush *prealloc_cf = NULL;
449     + struct ceph_buffer *old_blob = NULL;
450     int issued;
451     int err;
452     int dirty = 0;
453     @@ -1019,13 +1020,15 @@ retry:
454     struct ceph_buffer *blob;
455    
456     spin_unlock(&ci->i_ceph_lock);
457     - dout(" preaallocating new blob size=%d\n", required_blob_size);
458     + ceph_buffer_put(old_blob); /* Shouldn't be required */
459     + dout(" pre-allocating new blob size=%d\n", required_blob_size);
460     blob = ceph_buffer_new(required_blob_size, GFP_NOFS);
461     if (!blob)
462     goto do_sync_unlocked;
463     spin_lock(&ci->i_ceph_lock);
464     + /* prealloc_blob can't be released while holding i_ceph_lock */
465     if (ci->i_xattrs.prealloc_blob)
466     - ceph_buffer_put(ci->i_xattrs.prealloc_blob);
467     + old_blob = ci->i_xattrs.prealloc_blob;
468     ci->i_xattrs.prealloc_blob = blob;
469     goto retry;
470     }
471     @@ -1041,6 +1044,7 @@ retry:
472     }
473    
474     spin_unlock(&ci->i_ceph_lock);
475     + ceph_buffer_put(old_blob);
476     if (lock_snap_rwsem)
477     up_read(&mdsc->snap_rwsem);
478     if (dirty)
479     diff --git a/include/linux/ceph/buffer.h b/include/linux/ceph/buffer.h
480     index 07ca15e76100..dada47a4360f 100644
481     --- a/include/linux/ceph/buffer.h
482     +++ b/include/linux/ceph/buffer.h
483     @@ -29,7 +29,8 @@ static inline struct ceph_buffer *ceph_buffer_get(struct ceph_buffer *b)
484    
485     static inline void ceph_buffer_put(struct ceph_buffer *b)
486     {
487     - kref_put(&b->kref, ceph_buffer_release);
488     + if (b)
489     + kref_put(&b->kref, ceph_buffer_release);
490     }
491    
492     extern int ceph_decode_buffer(struct ceph_buffer **b, void **p, void *end);
493     diff --git a/include/linux/gpio.h b/include/linux/gpio.h
494     index d12b5d566e4b..11555bd821b7 100644
495     --- a/include/linux/gpio.h
496     +++ b/include/linux/gpio.h
497     @@ -229,30 +229,6 @@ static inline int irq_to_gpio(unsigned irq)
498     return -EINVAL;
499     }
500    
501     -static inline int
502     -gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
503     - unsigned int gpio_offset, unsigned int pin_offset,
504     - unsigned int npins)
505     -{
506     - WARN_ON(1);
507     - return -EINVAL;
508     -}
509     -
510     -static inline int
511     -gpiochip_add_pingroup_range(struct gpio_chip *chip,
512     - struct pinctrl_dev *pctldev,
513     - unsigned int gpio_offset, const char *pin_group)
514     -{
515     - WARN_ON(1);
516     - return -EINVAL;
517     -}
518     -
519     -static inline void
520     -gpiochip_remove_pin_ranges(struct gpio_chip *chip)
521     -{
522     - WARN_ON(1);
523     -}
524     -
525     static inline int devm_gpio_request(struct device *dev, unsigned gpio,
526     const char *label)
527     {
528     diff --git a/net/core/netpoll.c b/net/core/netpoll.c
529     index 9b2d61120c0d..5de180a9b7f5 100644
530     --- a/net/core/netpoll.c
531     +++ b/net/core/netpoll.c
532     @@ -122,7 +122,7 @@ static void queue_process(struct work_struct *work)
533     txq = netdev_get_tx_queue(dev, q_index);
534     HARD_TX_LOCK(dev, txq, smp_processor_id());
535     if (netif_xmit_frozen_or_stopped(txq) ||
536     - netpoll_start_xmit(skb, dev, txq) != NETDEV_TX_OK) {
537     + !dev_xmit_complete(netpoll_start_xmit(skb, dev, txq))) {
538     skb_queue_head(&npinfo->txq, skb);
539     HARD_TX_UNLOCK(dev, txq);
540     local_irq_restore(flags);
541     @@ -357,7 +357,7 @@ void netpoll_send_skb_on_dev(struct netpoll *np, struct sk_buff *skb,
542    
543     HARD_TX_UNLOCK(dev, txq);
544    
545     - if (status == NETDEV_TX_OK)
546     + if (dev_xmit_complete(status))
547     break;
548    
549     }
550     @@ -374,7 +374,7 @@ void netpoll_send_skb_on_dev(struct netpoll *np, struct sk_buff *skb,
551    
552     }
553    
554     - if (status != NETDEV_TX_OK) {
555     + if (!dev_xmit_complete(status)) {
556     skb_queue_tail(&npinfo->txq, skb);
557     schedule_delayed_work(&npinfo->tx_work,0);
558     }
559     diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
560     index 9ddb05b98312..2e77e78ab226 100644
561     --- a/net/ipv4/tcp_output.c
562     +++ b/net/ipv4/tcp_output.c
563     @@ -1943,7 +1943,7 @@ static bool tcp_can_coalesce_send_queue_head(struct sock *sk, int len)
564     if (len <= skb->len)
565     break;
566    
567     - if (unlikely(TCP_SKB_CB(skb)->eor))
568     + if (unlikely(TCP_SKB_CB(skb)->eor) || tcp_has_tx_tstamp(skb))
569     return false;
570    
571     len -= skb->len;
572     @@ -2066,6 +2066,7 @@ static int tcp_mtu_probe(struct sock *sk)
573     * we need to propagate it to the new skb.
574     */
575     TCP_SKB_CB(nskb)->eor = TCP_SKB_CB(skb)->eor;
576     + tcp_skb_collapse_tstamp(nskb, skb);
577     tcp_unlink_write_queue(skb, sk);
578     sk_wmem_free_skb(sk, skb);
579     } else {
580     diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
581     index 40262abb15db..e065d48b31b9 100644
582     --- a/net/ipv6/mcast.c
583     +++ b/net/ipv6/mcast.c
584     @@ -772,12 +772,13 @@ static void mld_del_delrec(struct inet6_dev *idev, struct ifmcaddr6 *im)
585     im->idev = pmc->idev;
586     im->mca_crcount = idev->mc_qrv;
587     if (im->mca_sfmode == MCAST_INCLUDE) {
588     - im->mca_tomb = pmc->mca_tomb;
589     - im->mca_sources = pmc->mca_sources;
590     + swap(im->mca_tomb, pmc->mca_tomb);
591     + swap(im->mca_sources, pmc->mca_sources);
592     for (psf = im->mca_sources; psf; psf = psf->sf_next)
593     psf->sf_crcount = im->mca_crcount;
594     }
595     in6_dev_put(pmc->idev);
596     + ip6_mc_clear_src(pmc);
597     kfree(pmc);
598     }
599     spin_unlock_bh(&im->mca_lock);
600     diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
601     index fffc7c418459..834008639c4b 100644
602     --- a/tools/hv/hv_kvp_daemon.c
603     +++ b/tools/hv/hv_kvp_daemon.c
604     @@ -878,7 +878,7 @@ kvp_get_ip_info(int family, char *if_name, int op,
605     int sn_offset = 0;
606     int error = 0;
607     char *buffer;
608     - struct hv_kvp_ipaddr_value *ip_buffer;
609     + struct hv_kvp_ipaddr_value *ip_buffer = NULL;
610     char cidr_mask[5]; /* /xyz */
611     int weight;
612     int i;