commit:     5d96da7a860c2c7edbc3b744b4e3cacab6354ae7
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Sun May 15 22:13:48 2022 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Sun May 15 22:13:48 2022 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=5d96da7a

Linux patch 4.9.314

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

 0000_README              |   4 +
 1313_linux-4.9.314.patch | 345 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 349 insertions(+)

diff --git a/0000_README b/0000_README
index b5574842..337e2173 100644
--- a/0000_README
+++ b/0000_README
@@ -1295,6 +1295,10 @@ Patch:  1312_linux-4.9.313.patch
 From:   http://www.kernel.org
 Desc:   Linux 4.9.313
 
+Patch:  1313_linux-4.9.314.patch
+From:   http://www.kernel.org
+Desc:   Linux 4.9.314
+
 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/1313_linux-4.9.314.patch b/1313_linux-4.9.314.patch
new file mode 100644
index 00000000..3090f928
--- /dev/null
+++ b/1313_linux-4.9.314.patch
@@ -0,0 +1,345 @@
+diff --git a/Makefile b/Makefile
+index 0c13bf09d17dc..734a4cc6ac464 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ VERSION = 4
+ PATCHLEVEL = 9
+-SUBLEVEL = 313
++SUBLEVEL = 314
+ EXTRAVERSION =
+ NAME = Roaring Lionus
+ 
+diff --git a/arch/mips/bmips/setup.c b/arch/mips/bmips/setup.c
+index 3b6f687f177cd..32f8c501f6cb1 100644
+--- a/arch/mips/bmips/setup.c
++++ b/arch/mips/bmips/setup.c
+@@ -174,7 +174,7 @@ void __init plat_mem_setup(void)
+               dtb = phys_to_virt(fw_arg2);
+       else if (fw_passed_dtb) /* UHI interface */
+               dtb = (void *)fw_passed_dtb;
+-      else if (__dtb_start != __dtb_end)
++      else if (&__dtb_start != &__dtb_end)
+               dtb = (void *)__dtb_start;
+       else
+               panic("no dtb found");
+diff --git a/arch/mips/lantiq/prom.c b/arch/mips/lantiq/prom.c
+index 4cbb000e778e3..9b30e46e91a75 100644
+--- a/arch/mips/lantiq/prom.c
++++ b/arch/mips/lantiq/prom.c
+@@ -76,7 +76,7 @@ void __init plat_mem_setup(void)
+ 
+       if (fw_passed_dtb) /* UHI interface */
+               dtb = (void *)fw_passed_dtb;
+-      else if (__dtb_start != __dtb_end)
++      else if (&__dtb_start != &__dtb_end)
+               dtb = (void *)__dtb_start;
+       else
+               panic("no dtb found");
+diff --git a/arch/mips/pic32/pic32mzda/init.c 
b/arch/mips/pic32/pic32mzda/init.c
+index 51599710472bc..406c6c5cec29b 100644
+--- a/arch/mips/pic32/pic32mzda/init.c
++++ b/arch/mips/pic32/pic32mzda/init.c
+@@ -36,7 +36,7 @@ static ulong get_fdtaddr(void)
+       if (fw_passed_dtb && !fw_arg2 && !fw_arg3)
+               return (ulong)fw_passed_dtb;
+ 
+-      if (__dtb_start < __dtb_end)
++      if (&__dtb_start < &__dtb_end)
+               ftaddr = (ulong)__dtb_start;
+ 
+       return ftaddr;
+diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c
+index 3c9cee9520ed5..ef51f811d4d9c 100644
+--- a/drivers/block/drbd/drbd_nl.c
++++ b/drivers/block/drbd/drbd_nl.c
+@@ -774,9 +774,11 @@ int drbd_adm_set_role(struct sk_buff *skb, struct 
genl_info *info)
+       mutex_lock(&adm_ctx.resource->adm_mutex);
+ 
+       if (info->genlhdr->cmd == DRBD_ADM_PRIMARY)
+-              retcode = drbd_set_role(adm_ctx.device, R_PRIMARY, 
parms.assume_uptodate);
++              retcode = (enum drbd_ret_code)drbd_set_role(adm_ctx.device,
++                                              R_PRIMARY, 
parms.assume_uptodate);
+       else
+-              retcode = drbd_set_role(adm_ctx.device, R_SECONDARY, 0);
++              retcode = (enum drbd_ret_code)drbd_set_role(adm_ctx.device,
++                                              R_SECONDARY, 0);
+ 
+       mutex_unlock(&adm_ctx.resource->adm_mutex);
+       genl_lock();
+@@ -1933,7 +1935,7 @@ int drbd_adm_attach(struct sk_buff *skb, struct 
genl_info *info)
+       drbd_flush_workqueue(&connection->sender_work);
+ 
+       rv = _drbd_request_state(device, NS(disk, D_ATTACHING), CS_VERBOSE);
+-      retcode = rv;  /* FIXME: Type mismatch. */
++      retcode = (enum drbd_ret_code)rv;
+       drbd_resume_io(device);
+       if (rv < SS_SUCCESS)
+               goto fail;
+@@ -2684,7 +2686,8 @@ int drbd_adm_connect(struct sk_buff *skb, struct 
genl_info *info)
+       }
+       rcu_read_unlock();
+ 
+-      retcode = conn_request_state(connection, NS(conn, C_UNCONNECTED), 
CS_VERBOSE);
++      retcode = (enum drbd_ret_code)conn_request_state(connection,
++                                      NS(conn, C_UNCONNECTED), CS_VERBOSE);
+ 
+       conn_reconfig_done(connection);
+       mutex_unlock(&adm_ctx.resource->adm_mutex);
+@@ -2790,7 +2793,7 @@ int drbd_adm_disconnect(struct sk_buff *skb, struct 
genl_info *info)
+       mutex_lock(&adm_ctx.resource->adm_mutex);
+       rv = conn_try_disconnect(connection, parms.force_disconnect);
+       if (rv < SS_SUCCESS)
+-              retcode = rv;  /* FIXME: Type mismatch. */
++              retcode = (enum drbd_ret_code)rv;
+       else
+               retcode = NO_ERROR;
+       mutex_unlock(&adm_ctx.resource->adm_mutex);
+diff --git a/drivers/mmc/host/rtsx_pci_sdmmc.c 
b/drivers/mmc/host/rtsx_pci_sdmmc.c
+index efd995e3cb0b9..2c56f094b4974 100644
+--- a/drivers/mmc/host/rtsx_pci_sdmmc.c
++++ b/drivers/mmc/host/rtsx_pci_sdmmc.c
+@@ -49,10 +49,7 @@ struct realtek_pci_sdmmc {
+       bool                    double_clk;
+       bool                    eject;
+       bool                    initial_mode;
+-      int                     power_state;
+-#define SDMMC_POWER_ON                1
+-#define SDMMC_POWER_OFF               0
+-
++      int                     prev_power_state;
+       int                     sg_count;
+       s32                     cookie;
+       int                     cookie_sg_count;
+@@ -914,14 +911,21 @@ static int sd_set_bus_width(struct realtek_pci_sdmmc 
*host,
+       return err;
+ }
+ 
+-static int sd_power_on(struct realtek_pci_sdmmc *host)
++static int sd_power_on(struct realtek_pci_sdmmc *host, unsigned char 
power_mode)
+ {
+       struct rtsx_pcr *pcr = host->pcr;
+       int err;
+ 
+-      if (host->power_state == SDMMC_POWER_ON)
++      if (host->prev_power_state == MMC_POWER_ON)
+               return 0;
+ 
++      if (host->prev_power_state == MMC_POWER_UP) {
++              rtsx_pci_write_register(pcr, SD_BUS_STAT, SD_CLK_TOGGLE_EN, 0);
++              goto finish;
++      }
++
++      msleep(100);
++
+       rtsx_pci_init_cmd(pcr);
+       rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_SELECT, 0x07, SD_MOD_SEL);
+       rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_SHARE_MODE,
+@@ -940,11 +944,17 @@ static int sd_power_on(struct realtek_pci_sdmmc *host)
+       if (err < 0)
+               return err;
+ 
++      mdelay(1);
++
+       err = rtsx_pci_write_register(pcr, CARD_OE, SD_OUTPUT_EN, SD_OUTPUT_EN);
+       if (err < 0)
+               return err;
+ 
+-      host->power_state = SDMMC_POWER_ON;
++      /* send at least 74 clocks */
++      rtsx_pci_write_register(pcr, SD_BUS_STAT, SD_CLK_TOGGLE_EN, 
SD_CLK_TOGGLE_EN);
++
++finish:
++      host->prev_power_state = power_mode;
+       return 0;
+ }
+ 
+@@ -953,7 +963,7 @@ static int sd_power_off(struct realtek_pci_sdmmc *host)
+       struct rtsx_pcr *pcr = host->pcr;
+       int err;
+ 
+-      host->power_state = SDMMC_POWER_OFF;
++      host->prev_power_state = MMC_POWER_OFF;
+ 
+       rtsx_pci_init_cmd(pcr);
+ 
+@@ -979,7 +989,7 @@ static int sd_set_power_mode(struct realtek_pci_sdmmc 
*host,
+       if (power_mode == MMC_POWER_OFF)
+               err = sd_power_off(host);
+       else
+-              err = sd_power_on(host);
++              err = sd_power_on(host, power_mode);
+ 
+       return err;
+ }
+@@ -1417,7 +1427,7 @@ static int rtsx_pci_sdmmc_drv_probe(struct 
platform_device *pdev)
+       host->mmc = mmc;
+       host->pdev = pdev;
+       host->cookie = -1;
+-      host->power_state = SDMMC_POWER_OFF;
++      host->prev_power_state = MMC_POWER_OFF;
+       INIT_WORK(&host->work, sd_request);
+       platform_set_drvdata(pdev, host);
+       pcr->slots[RTSX_SD_CARD].p_dev = pdev;
+diff --git a/drivers/net/can/grcan.c b/drivers/net/can/grcan.c
+index a2dbd7ae9db24..c6a176d8681c0 100644
+--- a/drivers/net/can/grcan.c
++++ b/drivers/net/can/grcan.c
+@@ -245,7 +245,7 @@ struct grcan_device_config {
+               .rxsize         = GRCAN_DEFAULT_BUFFER_SIZE,    \
+               }
+ 
+-#define GRCAN_TXBUG_SAFE_GRLIB_VERSION        0x4100
++#define GRCAN_TXBUG_SAFE_GRLIB_VERSION        4100
+ #define GRLIB_VERSION_MASK            0xffff
+ 
+ /* GRCAN private data structure */
+@@ -1141,7 +1141,7 @@ static int grcan_close(struct net_device *dev)
+       return 0;
+ }
+ 
+-static int grcan_transmit_catch_up(struct net_device *dev, int budget)
++static void grcan_transmit_catch_up(struct net_device *dev)
+ {
+       struct grcan_priv *priv = netdev_priv(dev);
+       unsigned long flags;
+@@ -1149,7 +1149,7 @@ static int grcan_transmit_catch_up(struct net_device 
*dev, int budget)
+ 
+       spin_lock_irqsave(&priv->lock, flags);
+ 
+-      work_done = catch_up_echo_skb(dev, budget, true);
++      work_done = catch_up_echo_skb(dev, -1, true);
+       if (work_done) {
+               if (!priv->resetting && !priv->closing &&
+                   !(priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY))
+@@ -1163,8 +1163,6 @@ static int grcan_transmit_catch_up(struct net_device 
*dev, int budget)
+       }
+ 
+       spin_unlock_irqrestore(&priv->lock, flags);
+-
+-      return work_done;
+ }
+ 
+ static int grcan_receive(struct net_device *dev, int budget)
+@@ -1246,19 +1244,13 @@ static int grcan_poll(struct napi_struct *napi, int 
budget)
+       struct net_device *dev = priv->dev;
+       struct grcan_registers __iomem *regs = priv->regs;
+       unsigned long flags;
+-      int tx_work_done, rx_work_done;
+-      int rx_budget = budget / 2;
+-      int tx_budget = budget - rx_budget;
++      int work_done;
+ 
+-      /* Half of the budget for receiveing messages */
+-      rx_work_done = grcan_receive(dev, rx_budget);
++      work_done = grcan_receive(dev, budget);
+ 
+-      /* Half of the budget for transmitting messages as that can trigger echo
+-       * frames being received
+-       */
+-      tx_work_done = grcan_transmit_catch_up(dev, tx_budget);
++      grcan_transmit_catch_up(dev);
+ 
+-      if (rx_work_done < rx_budget && tx_work_done < tx_budget) {
++      if (work_done < budget) {
+               napi_complete(napi);
+ 
+               /* Guarantee no interference with a running reset that otherwise
+@@ -1275,7 +1267,7 @@ static int grcan_poll(struct napi_struct *napi, int 
budget)
+               spin_unlock_irqrestore(&priv->lock, flags);
+       }
+ 
+-      return rx_work_done + tx_work_done;
++      return work_done;
+ }
+ 
+ /* Work tx bug by waiting while for the risky situation to clear. If that 
fails,
+@@ -1665,6 +1657,7 @@ exit_free_candev:
+ static int grcan_probe(struct platform_device *ofdev)
+ {
+       struct device_node *np = ofdev->dev.of_node;
++      struct device_node *sysid_parent;
+       struct resource *res;
+       u32 sysid, ambafreq;
+       int irq, err;
+@@ -1674,10 +1667,15 @@ static int grcan_probe(struct platform_device *ofdev)
+       /* Compare GRLIB version number with the first that does not
+        * have the tx bug (see start_xmit)
+        */
+-      err = of_property_read_u32(np, "systemid", &sysid);
+-      if (!err && ((sysid & GRLIB_VERSION_MASK)
+-                   >= GRCAN_TXBUG_SAFE_GRLIB_VERSION))
+-              txbug = false;
++      sysid_parent = of_find_node_by_path("/ambapp0");
++      if (sysid_parent) {
++              of_node_get(sysid_parent);
++              err = of_property_read_u32(sysid_parent, "systemid", &sysid);
++              if (!err && ((sysid & GRLIB_VERSION_MASK) >=
++                           GRCAN_TXBUG_SAFE_GRLIB_VERSION))
++                      txbug = false;
++              of_node_put(sysid_parent);
++      }
+ 
+       err = of_property_read_u32(np, "freq", &ambafreq);
+       if (err) {
+diff --git a/include/net/bluetooth/hci_core.h 
b/include/net/bluetooth/hci_core.h
+index 819796fb9d46f..0f231e96ae25f 100644
+--- a/include/net/bluetooth/hci_core.h
++++ b/include/net/bluetooth/hci_core.h
+@@ -32,6 +32,9 @@
+ /* HCI priority */
+ #define HCI_PRIO_MAX  7
+ 
++/* HCI maximum id value */
++#define HCI_MAX_ID 10000
++
+ /* HCI Core structures */
+ struct inquiry_data {
+       bdaddr_t        bdaddr;
+diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c
+index af817e5060fbf..bb6cb42656b16 100644
+--- a/mm/userfaultfd.c
++++ b/mm/userfaultfd.c
+@@ -50,6 +50,8 @@ static int mcopy_atomic_pte(struct mm_struct *dst_mm,
+                       /* don't free the page */
+                       goto out;
+               }
++
++              flush_dcache_page(page);
+       } else {
+               page = *pagep;
+               *pagep = NULL;
+@@ -267,6 +269,7 @@ retry:
+                               err = -EFAULT;
+                               goto out;
+                       }
++                      flush_dcache_page(page);
+                       goto retry;
+               } else
+                       BUG_ON(page);
+diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
+index 40e6e5feb1e06..6f99da11d2073 100644
+--- a/net/bluetooth/hci_core.c
++++ b/net/bluetooth/hci_core.c
+@@ -3064,10 +3064,10 @@ int hci_register_dev(struct hci_dev *hdev)
+        */
+       switch (hdev->dev_type) {
+       case HCI_PRIMARY:
+-              id = ida_simple_get(&hci_index_ida, 0, 0, GFP_KERNEL);
++              id = ida_simple_get(&hci_index_ida, 0, HCI_MAX_ID, GFP_KERNEL);
+               break;
+       case HCI_AMP:
+-              id = ida_simple_get(&hci_index_ida, 1, 0, GFP_KERNEL);
++              id = ida_simple_get(&hci_index_ida, 1, HCI_MAX_ID, GFP_KERNEL);
+               break;
+       default:
+               return -EINVAL;
+@@ -3076,7 +3076,7 @@ int hci_register_dev(struct hci_dev *hdev)
+       if (id < 0)
+               return id;
+ 
+-      sprintf(hdev->name, "hci%d", id);
++      snprintf(hdev->name, sizeof(hdev->name), "hci%d", id);
+       hdev->id = id;
+ 
+       BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);

Reply via email to