From ee497f3115d318013b6cd46f7b0e74acb1b44fd4 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 8 Nov 2021 07:36:10 -0600 Subject: kernel-5.14.17-1 * Mon Nov 08 2021 Justin M. Forbes [5.14.17-1] - btrfs: fix memory ordering between normal and ordered work functions (Nikolay Borisov) - Turn on COMMON_CLK_AXG_AUDIO for Fedora rhbz 2020481 (Justin M. Forbes) Resolves: rhbz# Signed-off-by: Justin M. Forbes --- patch-5.14-redhat.patch | 140 ++++++++++++------------------------------------ 1 file changed, 34 insertions(+), 106 deletions(-) (limited to 'patch-5.14-redhat.patch') diff --git a/patch-5.14-redhat.patch b/patch-5.14-redhat.patch index e2d266b75..e7e1bce96 100644 --- a/patch-5.14-redhat.patch +++ b/patch-5.14-redhat.patch @@ -23,9 +23,8 @@ drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c | 4 + drivers/net/wireguard/main.c | 6 + drivers/pci/quirks.c | 24 + - drivers/usb/core/hcd.c | 29 +- drivers/usb/core/hub.c | 7 + - drivers/usb/host/xhci.c | 1 - + fs/btrfs/async-thread.c | 14 + fs/xfs/xfs_super.c | 8 - include/linux/efi.h | 22 +- include/linux/lsm_hook_defs.h | 2 + @@ -33,7 +32,6 @@ include/linux/random.h | 7 + include/linux/rmi.h | 1 + include/linux/security.h | 5 + - include/linux/usb/hcd.h | 2 - init/Kconfig | 2 +- kernel/module_signing.c | 9 +- mm/cma.c | 10 + @@ -55,7 +53,7 @@ tools/testing/selftests/bpf/progs/linked_maps2.c | 76 --- tools/testing/selftests/bpf/progs/linked_vars1.c | 54 -- tools/testing/selftests/bpf/progs/linked_vars2.c | 55 --- - 57 files changed, 677 insertions(+), 1520 deletions(-) + 55 files changed, 685 insertions(+), 1494 deletions(-) diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 110b305af27f..488feec76f0a 100644 @@ -1333,76 +1331,6 @@ index 8c3c1ef92171..18431236ab9f 100644 /* * Intersil/Techwell TW686[4589]-based video capture cards have an empty (zero) * class code. Fix it. -diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c -index 99ff2d23be05..0f8b7c93310e 100644 ---- a/drivers/usb/core/hcd.c -+++ b/drivers/usb/core/hcd.c -@@ -2775,7 +2775,6 @@ int usb_add_hcd(struct usb_hcd *hcd, - { - int retval; - struct usb_device *rhdev; -- struct usb_hcd *shared_hcd; - - if (!hcd->skip_phy_initialization && usb_hcd_is_primary_hcd(hcd)) { - hcd->phy_roothub = usb_phy_roothub_alloc(hcd->self.sysdev); -@@ -2936,26 +2935,13 @@ int usb_add_hcd(struct usb_hcd *hcd, - goto err_hcd_driver_start; - } - -- /* starting here, usbcore will pay attention to the shared HCD roothub */ -- shared_hcd = hcd->shared_hcd; -- if (!usb_hcd_is_primary_hcd(hcd) && shared_hcd && HCD_DEFER_RH_REGISTER(shared_hcd)) { -- retval = register_root_hub(shared_hcd); -- if (retval != 0) -- goto err_register_root_hub; -- -- if (shared_hcd->uses_new_polling && HCD_POLL_RH(shared_hcd)) -- usb_hcd_poll_rh_status(shared_hcd); -- } -- - /* starting here, usbcore will pay attention to this root hub */ -- if (!HCD_DEFER_RH_REGISTER(hcd)) { -- retval = register_root_hub(hcd); -- if (retval != 0) -- goto err_register_root_hub; -+ retval = register_root_hub(hcd); -+ if (retval != 0) -+ goto err_register_root_hub; - -- if (hcd->uses_new_polling && HCD_POLL_RH(hcd)) -- usb_hcd_poll_rh_status(hcd); -- } -+ if (hcd->uses_new_polling && HCD_POLL_RH(hcd)) -+ usb_hcd_poll_rh_status(hcd); - - return retval; - -@@ -2999,7 +2985,6 @@ EXPORT_SYMBOL_GPL(usb_add_hcd); - void usb_remove_hcd(struct usb_hcd *hcd) - { - struct usb_device *rhdev = hcd->self.root_hub; -- bool rh_registered; - - dev_info(hcd->self.controller, "remove, state %x\n", hcd->state); - -@@ -3010,7 +2995,6 @@ void usb_remove_hcd(struct usb_hcd *hcd) - - dev_dbg(hcd->self.controller, "roothub graceful disconnect\n"); - spin_lock_irq (&hcd_root_hub_lock); -- rh_registered = hcd->rh_registered; - hcd->rh_registered = 0; - spin_unlock_irq (&hcd_root_hub_lock); - -@@ -3020,8 +3004,7 @@ void usb_remove_hcd(struct usb_hcd *hcd) - cancel_work_sync(&hcd->died_work); - - mutex_lock(&usb_bus_idr_lock); -- if (rh_registered) -- usb_disconnect(&rhdev); /* Sets rhdev to NULL */ -+ usb_disconnect(&rhdev); /* Sets rhdev to NULL */ - mutex_unlock(&usb_bus_idr_lock); - - /* diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 86658a81d284..5647f4756e97 100644 --- a/drivers/usb/core/hub.c @@ -1421,18 +1349,38 @@ index 86658a81d284..5647f4756e97 100644 /* Lock the device, then check to see if we were * disconnected while waiting for the lock to succeed. */ usb_lock_device(hdev); -diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c -index cb730683f898..4e32b96ccc88 100644 ---- a/drivers/usb/host/xhci.c -+++ b/drivers/usb/host/xhci.c -@@ -692,7 +692,6 @@ int xhci_run(struct usb_hcd *hcd) - if (ret) - xhci_free_command(xhci, command); - } -- set_bit(HCD_FLAG_DEFER_RH_REGISTER, &hcd->flags); - xhci_dbg_trace(xhci, trace_xhci_dbg_init, - "Finished xhci_run for USB2 roothub"); - +diff --git a/fs/btrfs/async-thread.c b/fs/btrfs/async-thread.c +index 309516e6a968..d39af03b456c 100644 +--- a/fs/btrfs/async-thread.c ++++ b/fs/btrfs/async-thread.c +@@ -234,6 +234,13 @@ static void run_ordered_work(struct __btrfs_workqueue *wq, + ordered_list); + if (!test_bit(WORK_DONE_BIT, &work->flags)) + break; ++ /* ++ * Orders all subsequent loads after reading WORK_DONE_BIT, ++ * paired with the smp_mb__before_atomic in btrfs_work_helper ++ * this guarantees that the ordered function will see all ++ * updates from ordinary work function. ++ */ ++ smp_rmb(); + + /* + * we are going to call the ordered done function, but +@@ -317,6 +324,13 @@ static void btrfs_work_helper(struct work_struct *normal_work) + thresh_exec_hook(wq); + work->func(work); + if (need_order) { ++ /* ++ * Ensures all memory accesses done in the work function are ++ * ordered before setting the WORK_DONE_BIT.Ensuring the thread ++ * which is going to executed the ordered work sees them. ++ * Pairs with the smp_rmb in run_ordered_work. ++ */ ++ smp_mb__before_atomic(); + set_bit(WORK_DONE_BIT, &work->flags); + run_ordered_work(wq, work); + } else { diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 2c9e26a44546..f96324912d6a 100644 --- a/fs/xfs/xfs_super.c @@ -1617,26 +1565,6 @@ index 5b7288521300..f966f591c91e 100644 #endif /* CONFIG_SECURITY */ #if defined(CONFIG_SECURITY) && defined(CONFIG_WATCH_QUEUE) -diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h -index 2c1fc9212cf2..548a028f2dab 100644 ---- a/include/linux/usb/hcd.h -+++ b/include/linux/usb/hcd.h -@@ -124,7 +124,6 @@ struct usb_hcd { - #define HCD_FLAG_RH_RUNNING 5 /* root hub is running? */ - #define HCD_FLAG_DEAD 6 /* controller has died? */ - #define HCD_FLAG_INTF_AUTHORIZED 7 /* authorize interfaces? */ --#define HCD_FLAG_DEFER_RH_REGISTER 8 /* Defer roothub registration */ - - /* The flags can be tested using these macros; they are likely to - * be slightly faster than test_bit(). -@@ -135,7 +134,6 @@ struct usb_hcd { - #define HCD_WAKEUP_PENDING(hcd) ((hcd)->flags & (1U << HCD_FLAG_WAKEUP_PENDING)) - #define HCD_RH_RUNNING(hcd) ((hcd)->flags & (1U << HCD_FLAG_RH_RUNNING)) - #define HCD_DEAD(hcd) ((hcd)->flags & (1U << HCD_FLAG_DEAD)) --#define HCD_DEFER_RH_REGISTER(hcd) ((hcd)->flags & (1U << HCD_FLAG_DEFER_RH_REGISTER)) - - /* - * Specifies if interfaces are authorized by default diff --git a/init/Kconfig b/init/Kconfig index 55f9f7738ebb..564553afb251 100644 --- a/init/Kconfig -- cgit