commit:     d731d8da8be6481eb8662677c5b956b017df6240
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Tue Sep 10 11:09:49 2019 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Tue Sep 10 11:09:49 2019 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=d731d8da

Linux patch 4.4.192

Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>

 0000_README              |   4 +
 1191_linux-4.4.192.patch | 539 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 543 insertions(+)

diff --git a/0000_README b/0000_README
index af92bf6..c4cc1b6 100644
--- a/0000_README
+++ b/0000_README
@@ -807,6 +807,10 @@ Patch:  1190_linux-4.4.191.patch
 From:   http://www.kernel.org
 Desc:   Linux 4.4.191
 
+Patch:  1191_linux-4.4.192.patch
+From:   http://www.kernel.org
+Desc:   Linux 4.4.192
+
 Patch:  1500_XATTR_USER_PREFIX.patch
 From:   https://bugs.gentoo.org/show_bug.cgi?id=470644
 Desc:   Support for namespace user.pax.* on tmpfs.

diff --git a/1191_linux-4.4.192.patch b/1191_linux-4.4.192.patch
new file mode 100644
index 0000000..7cff433
--- /dev/null
+++ b/1191_linux-4.4.192.patch
@@ -0,0 +1,539 @@
+diff --git a/Makefile b/Makefile
+index 266c3d7e0120..18889fbbebb1 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ VERSION = 4
+ PATCHLEVEL = 4
+-SUBLEVEL = 191
++SUBLEVEL = 192
+ EXTRAVERSION =
+ NAME = Blurry Fish Butt
+ 
+diff --git a/arch/arm/kvm/mmio.c b/arch/arm/kvm/mmio.c
+index ae61e2ea7255..d2efc033ef8b 100644
+--- a/arch/arm/kvm/mmio.c
++++ b/arch/arm/kvm/mmio.c
+@@ -98,6 +98,12 @@ int kvm_handle_mmio_return(struct kvm_vcpu *vcpu, struct 
kvm_run *run)
+       unsigned int len;
+       int mask;
+ 
++      /* Detect an already handled MMIO return */
++      if (unlikely(!vcpu->mmio_needed))
++              return 0;
++
++      vcpu->mmio_needed = 0;
++
+       if (!run->mmio.is_write) {
+               len = run->mmio.len;
+               if (len > sizeof(unsigned long))
+@@ -206,6 +212,7 @@ int io_mem_abort(struct kvm_vcpu *vcpu, struct kvm_run 
*run,
+       run->mmio.is_write      = is_write;
+       run->mmio.phys_addr     = fault_ipa;
+       run->mmio.len           = len;
++      vcpu->mmio_needed       = 1;
+ 
+       if (!ret) {
+               /* We handled the access successfully in the kernel. */
+diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
+index 80c94fc8ad5a..834d1b5b4355 100644
+--- a/arch/x86/kernel/apic/apic.c
++++ b/arch/x86/kernel/apic/apic.c
+@@ -1031,10 +1031,6 @@ void clear_local_APIC(void)
+       apic_write(APIC_LVT0, v | APIC_LVT_MASKED);
+       v = apic_read(APIC_LVT1);
+       apic_write(APIC_LVT1, v | APIC_LVT_MASKED);
+-      if (!x2apic_enabled()) {
+-              v = apic_read(APIC_LDR) & ~APIC_LDR_MASK;
+-              apic_write(APIC_LDR, v);
+-      }
+       if (maxlvt >= 4) {
+               v = apic_read(APIC_LVTPC);
+               apic_write(APIC_LVTPC, v | APIC_LVT_MASKED);
+diff --git a/drivers/bluetooth/btqca.c b/drivers/bluetooth/btqca.c
+index 4a6208168850..593fc2a5be0f 100644
+--- a/drivers/bluetooth/btqca.c
++++ b/drivers/bluetooth/btqca.c
+@@ -363,6 +363,9 @@ int qca_uart_setup_rome(struct hci_dev *hdev, uint8_t 
baudrate)
+               return err;
+       }
+ 
++      /* Give the controller some time to get ready to receive the NVM */
++      msleep(10);
++
+       /* Download NVM configuration */
+       config.type = TLV_TYPE_NVM;
+       snprintf(config.fwname, sizeof(config.fwname), "qca/nvm_%08x.bin",
+diff --git a/drivers/infiniband/hw/mlx4/mad.c 
b/drivers/infiniband/hw/mlx4/mad.c
+index 199a9cdd0d12..531c985f6fd7 100644
+--- a/drivers/infiniband/hw/mlx4/mad.c
++++ b/drivers/infiniband/hw/mlx4/mad.c
+@@ -1526,8 +1526,6 @@ tx_err:
+                                   tx_buf_size, DMA_TO_DEVICE);
+               kfree(tun_qp->tx_ring[i].buf.addr);
+       }
+-      kfree(tun_qp->tx_ring);
+-      tun_qp->tx_ring = NULL;
+       i = MLX4_NUM_TUNNEL_BUFS;
+ err:
+       while (i > 0) {
+@@ -1536,6 +1534,8 @@ err:
+                                   rx_buf_size, DMA_FROM_DEVICE);
+               kfree(tun_qp->ring[i].addr);
+       }
++      kfree(tun_qp->tx_ring);
++      tun_qp->tx_ring = NULL;
+       kfree(tun_qp->ring);
+       tun_qp->ring = NULL;
+       return -ENOMEM;
+diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c 
b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c
+index 4269944c5db5..129d6095749a 100644
+--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c
++++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c
+@@ -2673,8 +2673,10 @@ static ssize_t blocked_fl_write(struct file *filp, 
const char __user *ubuf,
+               return -ENOMEM;
+ 
+       err = bitmap_parse_user(ubuf, count, t, adap->sge.egr_sz);
+-      if (err)
++      if (err) {
++              kvfree(t);
+               return err;
++      }
+ 
+       bitmap_copy(adap->sge.blocked_fl, t, adap->sge.egr_sz);
+       t4_free_mem(t);
+diff --git a/drivers/net/ethernet/ibm/ibmveth.c 
b/drivers/net/ethernet/ibm/ibmveth.c
+index 70b3253e7ed5..b46fc37c1a94 100644
+--- a/drivers/net/ethernet/ibm/ibmveth.c
++++ b/drivers/net/ethernet/ibm/ibmveth.c
+@@ -1555,7 +1555,7 @@ static int ibmveth_probe(struct vio_dev *dev, const 
struct vio_device_id *id)
+       struct net_device *netdev;
+       struct ibmveth_adapter *adapter;
+       unsigned char *mac_addr_p;
+-      unsigned int *mcastFilterSize_p;
++      __be32 *mcastFilterSize_p;
+       long ret;
+       unsigned long ret_attr;
+ 
+@@ -1577,8 +1577,9 @@ static int ibmveth_probe(struct vio_dev *dev, const 
struct vio_device_id *id)
+               return -EINVAL;
+       }
+ 
+-      mcastFilterSize_p = (unsigned int *)vio_get_attribute(dev,
+-                                              VETH_MCAST_FILTER_SIZE, NULL);
++      mcastFilterSize_p = (__be32 *)vio_get_attribute(dev,
++                                                      VETH_MCAST_FILTER_SIZE,
++                                                      NULL);
+       if (!mcastFilterSize_p) {
+               dev_err(&dev->dev, "Can't find VETH_MCAST_FILTER_SIZE "
+                       "attribute\n");
+@@ -1595,7 +1596,7 @@ static int ibmveth_probe(struct vio_dev *dev, const 
struct vio_device_id *id)
+ 
+       adapter->vdev = dev;
+       adapter->netdev = netdev;
+-      adapter->mcastFilterSize = *mcastFilterSize_p;
++      adapter->mcastFilterSize = be32_to_cpu(*mcastFilterSize_p);
+       adapter->pool_config = 0;
+ 
+       netif_napi_add(netdev, &adapter->napi, ibmveth_poll, 16);
+diff --git a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c 
b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
+index 83651ac8ddb9..8ebf3611aba3 100644
+--- a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
++++ b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
+@@ -4114,7 +4114,7 @@ static int myri10ge_probe(struct pci_dev *pdev, const 
struct pci_device_id *ent)
+        * setup (if available). */
+       status = myri10ge_request_irq(mgp);
+       if (status != 0)
+-              goto abort_with_firmware;
++              goto abort_with_slices;
+       myri10ge_free_irq(mgp);
+ 
+       /* Save configuration space to be restored if the
+diff --git a/drivers/net/ethernet/renesas/ravb_main.c 
b/drivers/net/ethernet/renesas/ravb_main.c
+index 29d31eb995d7..fedfd94699cb 100644
+--- a/drivers/net/ethernet/renesas/ravb_main.c
++++ b/drivers/net/ethernet/renesas/ravb_main.c
+@@ -1,6 +1,6 @@
+ /* Renesas Ethernet AVB device driver
+  *
+- * Copyright (C) 2014-2015 Renesas Electronics Corporation
++ * Copyright (C) 2014-2019 Renesas Electronics Corporation
+  * Copyright (C) 2015 Renesas Solutions Corp.
+  * Copyright (C) 2015 Cogent Embedded, Inc. <[email protected]>
+  *
+@@ -501,7 +501,10 @@ static void ravb_get_tx_tstamp(struct net_device *ndev)
+                       kfree(ts_skb);
+                       if (tag == tfa_tag) {
+                               skb_tstamp_tx(skb, &shhwtstamps);
++                              dev_consume_skb_any(skb);
+                               break;
++                      } else {
++                              dev_kfree_skb_any(skb);
+                       }
+               }
+               ravb_write(ndev, ravb_read(ndev, TCCR) | TCCR_TFR, TCCR);
+@@ -1382,7 +1385,7 @@ static netdev_tx_t ravb_start_xmit(struct sk_buff *skb, 
struct net_device *ndev)
+                                        DMA_TO_DEVICE);
+                       goto unmap;
+               }
+-              ts_skb->skb = skb;
++              ts_skb->skb = skb_get(skb);
+               ts_skb->tag = priv->ts_skb_tag++;
+               priv->ts_skb_tag &= 0x3ff;
+               list_add_tail(&ts_skb->list, &priv->ts_skb_list);
+@@ -1514,6 +1517,7 @@ static int ravb_close(struct net_device *ndev)
+       /* Clear the timestamp list */
+       list_for_each_entry_safe(ts_skb, ts_skb2, &priv->ts_skb_list, list) {
+               list_del(&ts_skb->list);
++              kfree_skb(ts_skb->skb);
+               kfree(ts_skb);
+       }
+ 
+diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c 
b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
+index 398b08e07149..68a58333bd74 100644
+--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
++++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
+@@ -429,10 +429,8 @@ static int phy_power_on(struct rk_priv_data *bsp_priv, 
bool enable)
+       int ret;
+       struct device *dev = &bsp_priv->pdev->dev;
+ 
+-      if (!ldo) {
+-              dev_err(dev, "no regulator found\n");
+-              return -1;
+-      }
++      if (!ldo)
++              return 0;
+ 
+       if (enable) {
+               ret = regulator_enable(ldo);
+diff --git a/drivers/net/ethernet/toshiba/tc35815.c 
b/drivers/net/ethernet/toshiba/tc35815.c
+index 45ac38d29ed8..868fb6306df0 100644
+--- a/drivers/net/ethernet/toshiba/tc35815.c
++++ b/drivers/net/ethernet/toshiba/tc35815.c
+@@ -1528,7 +1528,7 @@ tc35815_rx(struct net_device *dev, int limit)
+                       pci_unmap_single(lp->pci_dev,
+                                        lp->rx_skbs[cur_bd].skb_dma,
+                                        RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
+-                      if (!HAVE_DMA_RXALIGN(lp) && NET_IP_ALIGN)
++                      if (!HAVE_DMA_RXALIGN(lp) && NET_IP_ALIGN != 0)
+                               memmove(skb->data, skb->data - NET_IP_ALIGN,
+                                       pkt_len);
+                       data = skb_put(skb, pkt_len);
+diff --git a/drivers/net/ethernet/tundra/tsi108_eth.c 
b/drivers/net/ethernet/tundra/tsi108_eth.c
+index 520cf50a3d5a..93fe0da0f15e 100644
+--- a/drivers/net/ethernet/tundra/tsi108_eth.c
++++ b/drivers/net/ethernet/tundra/tsi108_eth.c
+@@ -379,9 +379,10 @@ tsi108_stat_carry_one(int carry, int carry_bit, int 
carry_shift,
+ static void tsi108_stat_carry(struct net_device *dev)
+ {
+       struct tsi108_prv_data *data = netdev_priv(dev);
++      unsigned long flags;
+       u32 carry1, carry2;
+ 
+-      spin_lock_irq(&data->misclock);
++      spin_lock_irqsave(&data->misclock, flags);
+ 
+       carry1 = TSI_READ(TSI108_STAT_CARRY1);
+       carry2 = TSI_READ(TSI108_STAT_CARRY2);
+@@ -449,7 +450,7 @@ static void tsi108_stat_carry(struct net_device *dev)
+                             TSI108_STAT_TXPAUSEDROP_CARRY,
+                             &data->tx_pause_drop);
+ 
+-      spin_unlock_irq(&data->misclock);
++      spin_unlock_irqrestore(&data->misclock, flags);
+ }
+ 
+ /* Read a stat counter atomically with respect to carries.
+diff --git a/drivers/net/usb/cx82310_eth.c b/drivers/net/usb/cx82310_eth.c
+index 947bea81d924..dfbdea22fbad 100644
+--- a/drivers/net/usb/cx82310_eth.c
++++ b/drivers/net/usb/cx82310_eth.c
+@@ -175,7 +175,8 @@ static int cx82310_bind(struct usbnet *dev, struct 
usb_interface *intf)
+       }
+       if (!timeout) {
+               dev_err(&udev->dev, "firmware not ready in time\n");
+-              return -ETIMEDOUT;
++              ret = -ETIMEDOUT;
++              goto err;
+       }
+ 
+       /* enable ethernet mode (?) */
+diff --git a/drivers/net/usb/kalmia.c b/drivers/net/usb/kalmia.c
+index 5662babf0583..d385b67258c7 100644
+--- a/drivers/net/usb/kalmia.c
++++ b/drivers/net/usb/kalmia.c
+@@ -117,16 +117,16 @@ kalmia_init_and_get_ethernet_addr(struct usbnet *dev, u8 
*ethernet_addr)
+       status = kalmia_send_init_packet(dev, usb_buf, sizeof(init_msg_1)
+               / sizeof(init_msg_1[0]), usb_buf, 24);
+       if (status != 0)
+-              return status;
++              goto out;
+ 
+       memcpy(usb_buf, init_msg_2, 12);
+       status = kalmia_send_init_packet(dev, usb_buf, sizeof(init_msg_2)
+               / sizeof(init_msg_2[0]), usb_buf, 28);
+       if (status != 0)
+-              return status;
++              goto out;
+ 
+       memcpy(ethernet_addr, usb_buf + 10, ETH_ALEN);
+-
++out:
+       kfree(usb_buf);
+       return status;
+ }
+diff --git a/drivers/net/wimax/i2400m/fw.c b/drivers/net/wimax/i2400m/fw.c
+index c9c711dcd0e6..0e6c665a4de8 100644
+--- a/drivers/net/wimax/i2400m/fw.c
++++ b/drivers/net/wimax/i2400m/fw.c
+@@ -351,13 +351,15 @@ int i2400m_barker_db_init(const char *_options)
+                       }
+                       result = i2400m_barker_db_add(barker);
+                       if (result < 0)
+-                              goto error_add;
++                              goto error_parse_add;
+               }
+               kfree(options_orig);
+       }
+       return 0;
+ 
++error_parse_add:
+ error_parse:
++      kfree(options_orig);
+ error_add:
+       kfree(i2400m_barker_db);
+       return result;
+diff --git a/drivers/spi/spi-bcm2835aux.c b/drivers/spi/spi-bcm2835aux.c
+index 7de6f8472a81..ca655593c5e0 100644
+--- a/drivers/spi/spi-bcm2835aux.c
++++ b/drivers/spi/spi-bcm2835aux.c
+@@ -181,19 +181,14 @@ static void bcm2835aux_spi_reset_hw(struct 
bcm2835aux_spi *bs)
+                     BCM2835_AUX_SPI_CNTL0_CLEARFIFO);
+ }
+ 
+-static irqreturn_t bcm2835aux_spi_interrupt(int irq, void *dev_id)
++static void bcm2835aux_spi_transfer_helper(struct bcm2835aux_spi *bs)
+ {
+-      struct spi_master *master = dev_id;
+-      struct bcm2835aux_spi *bs = spi_master_get_devdata(master);
+-      irqreturn_t ret = IRQ_NONE;
++      u32 stat = bcm2835aux_rd(bs, BCM2835_AUX_SPI_STAT);
+ 
+       /* check if we have data to read */
+-      while (bs->rx_len &&
+-             (!(bcm2835aux_rd(bs, BCM2835_AUX_SPI_STAT) &
+-                BCM2835_AUX_SPI_STAT_RX_EMPTY))) {
++      for (; bs->rx_len && (stat & BCM2835_AUX_SPI_STAT_RX_LVL);
++           stat = bcm2835aux_rd(bs, BCM2835_AUX_SPI_STAT))
+               bcm2835aux_rd_fifo(bs);
+-              ret = IRQ_HANDLED;
+-      }
+ 
+       /* check if we have data to write */
+       while (bs->tx_len &&
+@@ -201,16 +196,21 @@ static irqreturn_t bcm2835aux_spi_interrupt(int irq, 
void *dev_id)
+              (!(bcm2835aux_rd(bs, BCM2835_AUX_SPI_STAT) &
+                 BCM2835_AUX_SPI_STAT_TX_FULL))) {
+               bcm2835aux_wr_fifo(bs);
+-              ret = IRQ_HANDLED;
+       }
++}
+ 
+-      /* and check if we have reached "done" */
+-      while (bs->rx_len &&
+-             (!(bcm2835aux_rd(bs, BCM2835_AUX_SPI_STAT) &
+-                BCM2835_AUX_SPI_STAT_BUSY))) {
+-              bcm2835aux_rd_fifo(bs);
+-              ret = IRQ_HANDLED;
+-      }
++static irqreturn_t bcm2835aux_spi_interrupt(int irq, void *dev_id)
++{
++      struct spi_master *master = dev_id;
++      struct bcm2835aux_spi *bs = spi_master_get_devdata(master);
++
++      /* IRQ may be shared, so return if our interrupts are disabled */
++      if (!(bcm2835aux_rd(bs, BCM2835_AUX_SPI_CNTL1) &
++            (BCM2835_AUX_SPI_CNTL1_TXEMPTY | BCM2835_AUX_SPI_CNTL1_IDLE)))
++              return IRQ_NONE;
++
++      /* do common fifo handling */
++      bcm2835aux_spi_transfer_helper(bs);
+ 
+       /* and if rx_len is 0 then wake up completion and disable spi */
+       if (!bs->rx_len) {
+@@ -218,8 +218,7 @@ static irqreturn_t bcm2835aux_spi_interrupt(int irq, void 
*dev_id)
+               complete(&master->xfer_completion);
+       }
+ 
+-      /* and return */
+-      return ret;
++      return IRQ_HANDLED;
+ }
+ 
+ static int __bcm2835aux_spi_transfer_one_irq(struct spi_master *master,
+@@ -265,7 +264,6 @@ static int bcm2835aux_spi_transfer_one_poll(struct 
spi_master *master,
+ {
+       struct bcm2835aux_spi *bs = spi_master_get_devdata(master);
+       unsigned long timeout;
+-      u32 stat;
+ 
+       /* configure spi */
+       bcm2835aux_wr(bs, BCM2835_AUX_SPI_CNTL1, bs->cntl[1]);
+@@ -276,24 +274,9 @@ static int bcm2835aux_spi_transfer_one_poll(struct 
spi_master *master,
+ 
+       /* loop until finished the transfer */
+       while (bs->rx_len) {
+-              /* read status */
+-              stat = bcm2835aux_rd(bs, BCM2835_AUX_SPI_STAT);
+ 
+-              /* fill in tx fifo with remaining data */
+-              if ((bs->tx_len) && (!(stat & BCM2835_AUX_SPI_STAT_TX_FULL))) {
+-                      bcm2835aux_wr_fifo(bs);
+-                      continue;
+-              }
+-
+-              /* read data from fifo for both cases */
+-              if (!(stat & BCM2835_AUX_SPI_STAT_RX_EMPTY)) {
+-                      bcm2835aux_rd_fifo(bs);
+-                      continue;
+-              }
+-              if (!(stat & BCM2835_AUX_SPI_STAT_BUSY)) {
+-                      bcm2835aux_rd_fifo(bs);
+-                      continue;
+-              }
++              /* do common fifo handling */
++              bcm2835aux_spi_transfer_helper(bs);
+ 
+               /* there is still data pending to read check the timeout */
+               if (bs->rx_len && time_after(jiffies, timeout)) {
+diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c
+index b24275ef97f7..22e5f3432abb 100644
+--- a/fs/ceph/xattr.c
++++ b/fs/ceph/xattr.c
+@@ -916,6 +916,7 @@ int __ceph_setxattr(struct dentry *dentry, const char 
*name,
+       struct ceph_inode_info *ci = ceph_inode(inode);
+       struct ceph_mds_client *mdsc = ceph_sb_to_client(dentry->d_sb)->mdsc;
+       struct ceph_cap_flush *prealloc_cf = NULL;
++      struct ceph_buffer *old_blob = NULL;
+       int issued;
+       int err;
+       int dirty = 0;
+@@ -984,13 +985,15 @@ retry:
+               struct ceph_buffer *blob;
+ 
+               spin_unlock(&ci->i_ceph_lock);
+-              dout(" preaallocating new blob size=%d\n", required_blob_size);
++              ceph_buffer_put(old_blob); /* Shouldn't be required */
++              dout(" pre-allocating new blob size=%d\n", required_blob_size);
+               blob = ceph_buffer_new(required_blob_size, GFP_NOFS);
+               if (!blob)
+                       goto do_sync_unlocked;
+               spin_lock(&ci->i_ceph_lock);
++              /* prealloc_blob can't be released while holding i_ceph_lock */
+               if (ci->i_xattrs.prealloc_blob)
+-                      ceph_buffer_put(ci->i_xattrs.prealloc_blob);
++                      old_blob = ci->i_xattrs.prealloc_blob;
+               ci->i_xattrs.prealloc_blob = blob;
+               goto retry;
+       }
+@@ -1006,6 +1009,7 @@ retry:
+       }
+ 
+       spin_unlock(&ci->i_ceph_lock);
++      ceph_buffer_put(old_blob);
+       if (lock_snap_rwsem)
+               up_read(&mdsc->snap_rwsem);
+       if (dirty)
+diff --git a/include/linux/ceph/buffer.h b/include/linux/ceph/buffer.h
+index 07ca15e76100..dada47a4360f 100644
+--- a/include/linux/ceph/buffer.h
++++ b/include/linux/ceph/buffer.h
+@@ -29,7 +29,8 @@ static inline struct ceph_buffer *ceph_buffer_get(struct 
ceph_buffer *b)
+ 
+ static inline void ceph_buffer_put(struct ceph_buffer *b)
+ {
+-      kref_put(&b->kref, ceph_buffer_release);
++      if (b)
++              kref_put(&b->kref, ceph_buffer_release);
+ }
+ 
+ extern int ceph_decode_buffer(struct ceph_buffer **b, void **p, void *end);
+diff --git a/include/linux/gpio.h b/include/linux/gpio.h
+index d12b5d566e4b..11555bd821b7 100644
+--- a/include/linux/gpio.h
++++ b/include/linux/gpio.h
+@@ -229,30 +229,6 @@ static inline int irq_to_gpio(unsigned irq)
+       return -EINVAL;
+ }
+ 
+-static inline int
+-gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
+-                     unsigned int gpio_offset, unsigned int pin_offset,
+-                     unsigned int npins)
+-{
+-      WARN_ON(1);
+-      return -EINVAL;
+-}
+-
+-static inline int
+-gpiochip_add_pingroup_range(struct gpio_chip *chip,
+-                      struct pinctrl_dev *pctldev,
+-                      unsigned int gpio_offset, const char *pin_group)
+-{
+-      WARN_ON(1);
+-      return -EINVAL;
+-}
+-
+-static inline void
+-gpiochip_remove_pin_ranges(struct gpio_chip *chip)
+-{
+-      WARN_ON(1);
+-}
+-
+ static inline int devm_gpio_request(struct device *dev, unsigned gpio,
+                                   const char *label)
+ {
+diff --git a/net/core/netpoll.c b/net/core/netpoll.c
+index 440aa9f6e0a8..0d7c2cc1ff09 100644
+--- a/net/core/netpoll.c
++++ b/net/core/netpoll.c
+@@ -122,7 +122,7 @@ static void queue_process(struct work_struct *work)
+               txq = netdev_get_tx_queue(dev, q_index);
+               HARD_TX_LOCK(dev, txq, smp_processor_id());
+               if (netif_xmit_frozen_or_stopped(txq) ||
+-                  netpoll_start_xmit(skb, dev, txq) != NETDEV_TX_OK) {
++                  !dev_xmit_complete(netpoll_start_xmit(skb, dev, txq))) {
+                       skb_queue_head(&npinfo->txq, skb);
+                       HARD_TX_UNLOCK(dev, txq);
+                       local_irq_restore(flags);
+@@ -357,7 +357,7 @@ void netpoll_send_skb_on_dev(struct netpoll *np, struct 
sk_buff *skb,
+ 
+                               HARD_TX_UNLOCK(dev, txq);
+ 
+-                              if (status == NETDEV_TX_OK)
++                              if (dev_xmit_complete(status))
+                                       break;
+ 
+                       }
+@@ -374,7 +374,7 @@ void netpoll_send_skb_on_dev(struct netpoll *np, struct 
sk_buff *skb,
+ 
+       }
+ 
+-      if (status != NETDEV_TX_OK) {
++      if (!dev_xmit_complete(status)) {
+               skb_queue_tail(&npinfo->txq, skb);
+               schedule_delayed_work(&npinfo->tx_work,0);
+       }
+diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
+index fffc7c418459..834008639c4b 100644
+--- a/tools/hv/hv_kvp_daemon.c
++++ b/tools/hv/hv_kvp_daemon.c
+@@ -878,7 +878,7 @@ kvp_get_ip_info(int family, char *if_name, int op,
+       int sn_offset = 0;
+       int error = 0;
+       char *buffer;
+-      struct hv_kvp_ipaddr_value *ip_buffer;
++      struct hv_kvp_ipaddr_value *ip_buffer = NULL;
+       char cidr_mask[5]; /* /xyz */
+       int weight;
+       int i;

Reply via email to