commit:     a93d74eafd8529bdb60b1dc166800e0f6cdcdfd2
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Wed Dec 29 13:13:31 2021 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Wed Dec 29 13:13:31 2021 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=a93d74ea

Linux patch 4.4.297

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

 0000_README              |   4 +
 1296_linux-4.4.297.patch | 439 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 443 insertions(+)

diff --git a/0000_README b/0000_README
index 2168e76a..2053f8cf 100644
--- a/0000_README
+++ b/0000_README
@@ -1227,6 +1227,10 @@ Patch:  1295_linux-4.4.296.patch
 From:   http://www.kernel.org
 Desc:   Linux 4.4.295
 
+Patch:  1296_linux-4.4.297.patch
+From:   http://www.kernel.org
+Desc:   Linux 4.4.297
+
 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/1296_linux-4.4.297.patch b/1296_linux-4.4.297.patch
new file mode 100644
index 00000000..dfd1eafe
--- /dev/null
+++ b/1296_linux-4.4.297.patch
@@ -0,0 +1,439 @@
+diff --git a/Documentation/networking/bonding.txt 
b/Documentation/networking/bonding.txt
+index 334b49ef02d13..5a6e70483cedf 100644
+--- a/Documentation/networking/bonding.txt
++++ b/Documentation/networking/bonding.txt
+@@ -191,11 +191,12 @@ ad_actor_sys_prio
+ ad_actor_system
+ 
+       In an AD system, this specifies the mac-address for the actor in
+-      protocol packet exchanges (LACPDUs). The value cannot be NULL or
+-      multicast. It is preferred to have the local-admin bit set for this
+-      mac but driver does not enforce it. If the value is not given then
+-      system defaults to using the masters' mac address as actors' system
+-      address.
++      protocol packet exchanges (LACPDUs). The value cannot be a multicast
++      address. If the all-zeroes MAC is specified, bonding will internally
++      use the MAC of the bond itself. It is preferred to have the
++      local-admin bit set for this mac but driver does not enforce it. If
++      the value is not given then system defaults to using the masters'
++      mac address as actors' system address.
+ 
+       This parameter has effect only in 802.3ad mode and is available through
+       SysFs interface.
+diff --git a/Makefile b/Makefile
+index 37c12303478e3..6bc764fb1b971 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ VERSION = 4
+ PATCHLEVEL = 4
+-SUBLEVEL = 296
++SUBLEVEL = 297
+ EXTRAVERSION =
+ NAME = Blurry Fish Butt
+ 
+diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
+index 3ce377f7251f3..618ceb6fe674b 100644
+--- a/arch/arm/kernel/entry-armv.S
++++ b/arch/arm/kernel/entry-armv.S
+@@ -625,11 +625,9 @@ call_fpe:
+       tstne   r0, #0x04000000                 @ bit 26 set on both ARM and 
Thumb-2
+       reteq   lr
+       and     r8, r0, #0x00000f00             @ mask out CP number
+- THUMB(       lsr     r8, r8, #8              )
+       mov     r7, #1
+-      add     r6, r10, #TI_USED_CP
+- ARM( strb    r7, [r6, r8, lsr #8]    )       @ set appropriate used_cp[]
+- THUMB(       strb    r7, [r6, r8]            )       @ set appropriate 
used_cp[]
++      add     r6, r10, r8, lsr #8             @ add used_cp[] array offset 
first
++      strb    r7, [r6, #TI_USED_CP]           @ set appropriate used_cp[]
+ #ifdef CONFIG_IWMMXT
+       @ Test if we need to give access to iWMMXt coprocessors
+       ldr     r5, [r10, #TI_FLAGS]
+@@ -638,7 +636,7 @@ call_fpe:
+       bcs     iwmmxt_task_enable
+ #endif
+  ARM( add     pc, pc, r8, lsr #6      )
+- THUMB(       lsl     r8, r8, #2              )
++ THUMB(       lsr     r8, r8, #6              )
+  THUMB(       add     pc, r8                  )
+       nop
+ 
+diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
+index 1e44b7880200d..ae2c47e99c888 100644
+--- a/drivers/block/xen-blkfront.c
++++ b/drivers/block/xen-blkfront.c
+@@ -493,8 +493,6 @@ static int blkif_queue_discard_req(struct request *req)
+       else
+               ring_req->u.discard.flag = 0;
+ 
+-      info->ring.req_prod_pvt++;
+-
+       /* Copy the request to the ring page. */
+       *final_ring_req = *ring_req;
+       info->shadow[id].inflight = true;
+@@ -711,8 +709,6 @@ static int blkif_queue_rw_req(struct request *req)
+       if (setup.segments)
+               kunmap_atomic(setup.segments);
+ 
+-      info->ring.req_prod_pvt++;
+-
+       /* Copy request(s) to the ring page. */
+       *final_ring_req = *ring_req;
+       info->shadow[id].inflight = true;
+diff --git a/drivers/hid/hid-holtek-mouse.c b/drivers/hid/hid-holtek-mouse.c
+index 27c08ddab0e1a..96db7e96fcea9 100644
+--- a/drivers/hid/hid-holtek-mouse.c
++++ b/drivers/hid/hid-holtek-mouse.c
+@@ -68,8 +68,23 @@ static __u8 *holtek_mouse_report_fixup(struct hid_device 
*hdev, __u8 *rdesc,
+ static int holtek_mouse_probe(struct hid_device *hdev,
+                             const struct hid_device_id *id)
+ {
++      int ret;
++
+       if (!hid_is_usb(hdev))
+               return -EINVAL;
++
++      ret = hid_parse(hdev);
++      if (ret) {
++              hid_err(hdev, "hid parse failed: %d\n", ret);
++              return ret;
++      }
++
++      ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
++      if (ret) {
++              hid_err(hdev, "hw start failed: %d\n", ret);
++              return ret;
++      }
++
+       return 0;
+ }
+ 
+diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
+index c9ff08dbe10ce..420f341272621 100644
+--- a/drivers/hwmon/lm90.c
++++ b/drivers/hwmon/lm90.c
+@@ -1209,12 +1209,11 @@ static int lm90_detect(struct i2c_client *client,
+       if (man_id < 0 || chip_id < 0 || config1 < 0 || convrate < 0)
+               return -ENODEV;
+ 
+-      if (man_id == 0x01 || man_id == 0x5C || man_id == 0x41) {
++      if (man_id == 0x01 || man_id == 0x5C || man_id == 0xA1) {
+               config2 = i2c_smbus_read_byte_data(client, LM90_REG_R_CONFIG2);
+               if (config2 < 0)
+                       return -ENODEV;
+-      } else
+-              config2 = 0;            /* Make compiler happy */
++      }
+ 
+       if ((address == 0x4C || address == 0x4D)
+        && man_id == 0x01) { /* National Semiconductor */
+diff --git a/drivers/infiniband/hw/qib/qib_user_sdma.c 
b/drivers/infiniband/hw/qib/qib_user_sdma.c
+index 0dc15f95e7626..2d0b992579d6f 100644
+--- a/drivers/infiniband/hw/qib/qib_user_sdma.c
++++ b/drivers/infiniband/hw/qib/qib_user_sdma.c
+@@ -946,7 +946,7 @@ static int qib_user_sdma_queue_pkts(const struct 
qib_devdata *dd,
+                                              &addrlimit) ||
+                           addrlimit > type_max(typeof(pkt->addrlimit))) {
+                               ret = -EINVAL;
+-                              goto free_pbc;
++                              goto free_pkt;
+                       }
+                       pkt->addrlimit = addrlimit;
+ 
+diff --git a/drivers/net/bonding/bond_options.c 
b/drivers/net/bonding/bond_options.c
+index 1022e80aaf974..1d95a83d2baeb 100644
+--- a/drivers/net/bonding/bond_options.c
++++ b/drivers/net/bonding/bond_options.c
+@@ -1407,7 +1407,7 @@ static int bond_option_ad_actor_system_set(struct 
bonding *bond,
+               mac = (u8 *)&newval->value;
+       }
+ 
+-      if (!is_valid_ether_addr(mac))
++      if (is_multicast_ether_addr(mac))
+               goto err;
+ 
+       netdev_info(bond->dev, "Setting ad_actor_system to %pM\n", mac);
+diff --git a/drivers/net/can/usb/kvaser_usb.c 
b/drivers/net/can/usb/kvaser_usb.c
+index 9991ee93735a5..81abb30d9ec03 100644
+--- a/drivers/net/can/usb/kvaser_usb.c
++++ b/drivers/net/can/usb/kvaser_usb.c
+@@ -31,7 +31,10 @@
+ #define USB_SEND_TIMEOUT              1000 /* msecs */
+ #define USB_RECV_TIMEOUT              1000 /* msecs */
+ #define RX_BUFFER_SIZE                        3072
+-#define CAN_USB_CLOCK                 8000000
++#define KVASER_USB_CAN_CLOCK_8MHZ     8000000
++#define KVASER_USB_CAN_CLOCK_16MHZ    16000000
++#define KVASER_USB_CAN_CLOCK_24MHZ    24000000
++#define KVASER_USB_CAN_CLOCK_32MHZ    32000000
+ #define MAX_NET_DEVICES                       3
+ #define MAX_USBCAN_NET_DEVICES                2
+ 
+@@ -139,6 +142,12 @@ static inline bool kvaser_is_usbcan(const struct 
usb_device_id *id)
+ #define CMD_LEAF_USB_THROTTLE         77
+ #define CMD_LEAF_LOG_MESSAGE          106
+ 
++/* Leaf frequency options */
++#define KVASER_USB_LEAF_SWOPTION_FREQ_MASK 0x60
++#define KVASER_USB_LEAF_SWOPTION_FREQ_16_MHZ_CLK 0
++#define KVASER_USB_LEAF_SWOPTION_FREQ_32_MHZ_CLK BIT(5)
++#define KVASER_USB_LEAF_SWOPTION_FREQ_24_MHZ_CLK BIT(6)
++
+ /* error factors */
+ #define M16C_EF_ACKE                  BIT(0)
+ #define M16C_EF_CRCE                  BIT(1)
+@@ -469,6 +478,8 @@ struct kvaser_usb {
+       bool rxinitdone;
+       void *rxbuf[MAX_RX_URBS];
+       dma_addr_t rxbuf_dma[MAX_RX_URBS];
++
++      struct can_clock clock;
+ };
+ 
+ struct kvaser_usb_net_priv {
+@@ -646,6 +657,27 @@ static int kvaser_usb_send_simple_msg(const struct 
kvaser_usb *dev,
+       return rc;
+ }
+ 
++static void kvaser_usb_get_software_info_leaf(struct kvaser_usb *dev,
++                                            const struct leaf_msg_softinfo 
*softinfo)
++{
++      u32 sw_options = le32_to_cpu(softinfo->sw_options);
++
++      dev->fw_version = le32_to_cpu(softinfo->fw_version);
++      dev->max_tx_urbs = le16_to_cpu(softinfo->max_outstanding_tx);
++
++      switch (sw_options & KVASER_USB_LEAF_SWOPTION_FREQ_MASK) {
++      case KVASER_USB_LEAF_SWOPTION_FREQ_16_MHZ_CLK:
++              dev->clock.freq = KVASER_USB_CAN_CLOCK_16MHZ;
++              break;
++      case KVASER_USB_LEAF_SWOPTION_FREQ_24_MHZ_CLK:
++              dev->clock.freq = KVASER_USB_CAN_CLOCK_24MHZ;
++              break;
++      case KVASER_USB_LEAF_SWOPTION_FREQ_32_MHZ_CLK:
++              dev->clock.freq = KVASER_USB_CAN_CLOCK_32MHZ;
++              break;
++      }
++}
++
+ static int kvaser_usb_get_software_info(struct kvaser_usb *dev)
+ {
+       struct kvaser_msg msg;
+@@ -661,14 +693,13 @@ static int kvaser_usb_get_software_info(struct 
kvaser_usb *dev)
+ 
+       switch (dev->family) {
+       case KVASER_LEAF:
+-              dev->fw_version = le32_to_cpu(msg.u.leaf.softinfo.fw_version);
+-              dev->max_tx_urbs =
+-                      le16_to_cpu(msg.u.leaf.softinfo.max_outstanding_tx);
++              kvaser_usb_get_software_info_leaf(dev, &msg.u.leaf.softinfo);
+               break;
+       case KVASER_USBCAN:
+               dev->fw_version = le32_to_cpu(msg.u.usbcan.softinfo.fw_version);
+               dev->max_tx_urbs =
+                       le16_to_cpu(msg.u.usbcan.softinfo.max_outstanding_tx);
++              dev->clock.freq = KVASER_USB_CAN_CLOCK_8MHZ;
+               break;
+       }
+ 
+@@ -1925,7 +1956,7 @@ static int kvaser_usb_init_one(struct usb_interface 
*intf,
+       kvaser_usb_reset_tx_urb_contexts(priv);
+ 
+       priv->can.state = CAN_STATE_STOPPED;
+-      priv->can.clock.freq = CAN_USB_CLOCK;
++      priv->can.clock.freq = dev->clock.freq;
+       priv->can.bittiming_const = &kvaser_usb_bittiming_const;
+       priv->can.do_set_bittiming = kvaser_usb_set_bittiming;
+       priv->can.do_set_mode = kvaser_usb_set_mode;
+diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h 
b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h
+index 017d8c2c8285a..aab2db76d9edc 100644
+--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h
++++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h
+@@ -201,7 +201,7 @@ int qlcnic_sriov_get_vf_vport_info(struct qlcnic_adapter *,
+                                  struct qlcnic_info *, u16);
+ int qlcnic_sriov_cfg_vf_guest_vlan(struct qlcnic_adapter *, u16, u8);
+ void qlcnic_sriov_free_vlans(struct qlcnic_adapter *);
+-void qlcnic_sriov_alloc_vlans(struct qlcnic_adapter *);
++int qlcnic_sriov_alloc_vlans(struct qlcnic_adapter *);
+ bool qlcnic_sriov_check_any_vlan(struct qlcnic_vf_info *);
+ void qlcnic_sriov_del_vlan_id(struct qlcnic_sriov *,
+                             struct qlcnic_vf_info *, u16);
+diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c 
b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c
+index ffa6885acfc8f..03e24fcf87a8e 100644
+--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c
++++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c
+@@ -427,7 +427,7 @@ static int qlcnic_sriov_set_guest_vlan_mode(struct 
qlcnic_adapter *adapter,
+                                           struct qlcnic_cmd_args *cmd)
+ {
+       struct qlcnic_sriov *sriov = adapter->ahw->sriov;
+-      int i, num_vlans;
++      int i, num_vlans, ret;
+       u16 *vlans;
+ 
+       if (sriov->allowed_vlans)
+@@ -438,7 +438,9 @@ static int qlcnic_sriov_set_guest_vlan_mode(struct 
qlcnic_adapter *adapter,
+       dev_info(&adapter->pdev->dev, "Number of allowed Guest VLANs = %d\n",
+                sriov->num_allowed_vlans);
+ 
+-      qlcnic_sriov_alloc_vlans(adapter);
++      ret = qlcnic_sriov_alloc_vlans(adapter);
++      if (ret)
++              return ret;
+ 
+       if (!sriov->any_vlan)
+               return 0;
+@@ -2147,7 +2149,7 @@ static int qlcnic_sriov_vf_resume(struct qlcnic_adapter 
*adapter)
+       return err;
+ }
+ 
+-void qlcnic_sriov_alloc_vlans(struct qlcnic_adapter *adapter)
++int qlcnic_sriov_alloc_vlans(struct qlcnic_adapter *adapter)
+ {
+       struct qlcnic_sriov *sriov = adapter->ahw->sriov;
+       struct qlcnic_vf_info *vf;
+@@ -2157,7 +2159,11 @@ void qlcnic_sriov_alloc_vlans(struct qlcnic_adapter 
*adapter)
+               vf = &sriov->vf_info[i];
+               vf->sriov_vlans = kcalloc(sriov->num_allowed_vlans,
+                                         sizeof(*vf->sriov_vlans), GFP_KERNEL);
++              if (!vf->sriov_vlans)
++                      return -ENOMEM;
+       }
++
++      return 0;
+ }
+ 
+ void qlcnic_sriov_free_vlans(struct qlcnic_adapter *adapter)
+diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c 
b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
+index afd687e5e7790..238a0e58342fa 100644
+--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
++++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
+@@ -598,7 +598,9 @@ static int __qlcnic_pci_sriov_enable(struct qlcnic_adapter 
*adapter,
+       if (err)
+               goto del_flr_queue;
+ 
+-      qlcnic_sriov_alloc_vlans(adapter);
++      err = qlcnic_sriov_alloc_vlans(adapter);
++      if (err)
++              goto del_flr_queue;
+ 
+       return err;
+ 
+diff --git a/drivers/net/ethernet/smsc/smc911x.c 
b/drivers/net/ethernet/smsc/smc911x.c
+index 0be9c74238fd4..092267d8a86df 100644
+--- a/drivers/net/ethernet/smsc/smc911x.c
++++ b/drivers/net/ethernet/smsc/smc911x.c
+@@ -2057,6 +2057,11 @@ static int smc911x_drv_probe(struct platform_device 
*pdev)
+ 
+       ndev->dma = (unsigned char)-1;
+       ndev->irq = platform_get_irq(pdev, 0);
++      if (ndev->irq < 0) {
++              ret = ndev->irq;
++              goto release_both;
++      }
++
+       lp = netdev_priv(ndev);
+       lp->netdev = ndev;
+ #ifdef SMC_DYNAMIC_BUS_CONFIG
+diff --git a/drivers/net/hamradio/mkiss.c b/drivers/net/hamradio/mkiss.c
+index 078eb110381c2..8249da1db53d1 100644
+--- a/drivers/net/hamradio/mkiss.c
++++ b/drivers/net/hamradio/mkiss.c
+@@ -803,13 +803,14 @@ static void mkiss_close(struct tty_struct *tty)
+        */
+       netif_stop_queue(ax->dev);
+ 
+-      /* Free all AX25 frame buffers. */
++      unregister_netdev(ax->dev);
++
++      /* Free all AX25 frame buffers after unreg. */
+       kfree(ax->rbuff);
+       kfree(ax->xbuff);
+ 
+       ax->tty = NULL;
+ 
+-      unregister_netdev(ax->dev);
+       free_netdev(ax->dev);
+ }
+ 
+diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
+index ca3c7a4402a1b..08c5c68057dac 100644
+--- a/drivers/net/usb/lan78xx.c
++++ b/drivers/net/usb/lan78xx.c
+@@ -66,6 +66,8 @@
+ #define LAN7850_USB_PRODUCT_ID                (0x7850)
+ #define LAN78XX_EEPROM_MAGIC          (0x78A5)
+ #define LAN78XX_OTP_MAGIC             (0x78F3)
++#define AT29M2AF_USB_VENDOR_ID                (0x07C9)
++#define AT29M2AF_USB_PRODUCT_ID       (0x0012)
+ 
+ #define       MII_READ                        1
+ #define       MII_WRITE                       0
+@@ -3334,6 +3336,10 @@ static const struct usb_device_id products[] = {
+       /* LAN7850 USB Gigabit Ethernet Device */
+       USB_DEVICE(LAN78XX_USB_VENDOR_ID, LAN7850_USB_PRODUCT_ID),
+       },
++      {
++      /* ATM2-AF USB Gigabit Ethernet Device */
++      USB_DEVICE(AT29M2AF_USB_VENDOR_ID, AT29M2AF_USB_PRODUCT_ID),
++      },
+       {},
+ };
+ MODULE_DEVICE_TABLE(usb, products);
+diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c
+index 64fede18aa33f..f4c8567e91b38 100644
+--- a/net/ax25/af_ax25.c
++++ b/net/ax25/af_ax25.c
+@@ -88,8 +88,10 @@ static void ax25_kill_by_device(struct net_device *dev)
+ again:
+       ax25_for_each(s, &ax25_list) {
+               if (s->ax25_dev == ax25_dev) {
+-                      s->ax25_dev = NULL;
+                       spin_unlock_bh(&ax25_list_lock);
++                      lock_sock(s->sk);
++                      s->ax25_dev = NULL;
++                      release_sock(s->sk);
+                       ax25_disconnect(s, ENETUNREACH);
+                       spin_lock_bh(&ax25_list_lock);
+ 
+diff --git a/net/phonet/pep.c b/net/phonet/pep.c
+index f6aa532bcbf64..1e7945df39928 100644
+--- a/net/phonet/pep.c
++++ b/net/phonet/pep.c
+@@ -956,6 +956,8 @@ static int pep_ioctl(struct sock *sk, int cmd, unsigned 
long arg)
+                       ret =  -EBUSY;
+               else if (sk->sk_state == TCP_ESTABLISHED)
+                       ret = -EISCONN;
++              else if (!pn->pn_sk.sobject)
++                      ret = -EADDRNOTAVAIL;
+               else
+                       ret = pep_sock_enable(sk, NULL, 0);
+               release_sock(sk);
+diff --git a/sound/core/jack.c b/sound/core/jack.c
+index 7237acbdcbbc8..fcc972fbe8ffd 100644
+--- a/sound/core/jack.c
++++ b/sound/core/jack.c
+@@ -227,6 +227,10 @@ int snd_jack_new(struct snd_card *card, const char *id, 
int type,
+               return -ENOMEM;
+ 
+       jack->id = kstrdup(id, GFP_KERNEL);
++      if (jack->id == NULL) {
++              kfree(jack);
++              return -ENOMEM;
++      }
+ 
+       /* don't creat input device for phantom jack */
+       if (!phantom_jack) {
+diff --git a/sound/drivers/opl3/opl3_midi.c b/sound/drivers/opl3/opl3_midi.c
+index 7821b07415a78..ff67c4b67e264 100644
+--- a/sound/drivers/opl3/opl3_midi.c
++++ b/sound/drivers/opl3/opl3_midi.c
+@@ -415,7 +415,7 @@ void snd_opl3_note_on(void *p, int note, int vel, struct 
snd_midi_channel *chan)
+       }
+       if (instr_4op) {
+               vp2 = &opl3->voices[voice + 3];
+-              if (vp->state > 0) {
++              if (vp2->state > 0) {
+                       opl3_reg = reg_side | (OPL3_REG_KEYON_BLOCK +
+                                              voice_offset + 3);
+                       reg_val = vp->keyon_reg & ~OPL3_KEYON_BIT;

Reply via email to