* https://bugzilla.kernel.org/show_bug.cgi?id=51381
         */
        { PCI_VENDOR_ID_ATI, 0x6840, 0x1043, 0x2122, RADEON_PX_QUIRK_DISABLE_PX },
-       /* macbook pro 8.2 */
-       { PCI_VENDOR_ID_ATI, 0x6741, PCI_VENDOR_ID_APPLE, 0x00e2, RADEON_PX_QUIRK_LONG_WAKEUP },
 +      /* Asus K53TK laptop with AMD A6-3420M APU and Radeon 7670m GPU
 +       * https://bugs.freedesktop.org/show_bug.cgi?id=101491
 +       */
 +      { PCI_VENDOR_ID_ATI, 0x6741, 0x1043, 0x2122, RADEON_PX_QUIRK_DISABLE_PX },
        { 0, 0, 0, 0, 0 },
  };
  
 
        }
  
        mwifiex_dbg(adapter, INFO,
-                   "%s: vendor=0x%4.04x device=0x%4.04x rev=%d %s\n",
-                   __func__, pdev->vendor, pdev->device,
-                   pdev->revision,
-                   prepare ? "Pre-FLR" : "Post-FLR");
- 
-       if (prepare) {
-               /* Kernel would be performing FLR after this notification.
-                * Cleanup all software without cleaning anything related to
-                * PCIe and HW.
-                */
-               mwifiex_shutdown_sw(adapter);
-               clear_bit(MWIFIEX_IFACE_WORK_DEVICE_DUMP, &card->work_flags);
-               clear_bit(MWIFIEX_IFACE_WORK_CARD_RESET, &card->work_flags);
-       } else {
-               /* Kernel stores and restores PCIe function context before and
-                * after performing FLR respectively. Reconfigure the software
-                * and firmware including firmware redownload
-                */
-               ret = mwifiex_reinit_sw(adapter);
-               if (ret) {
-                       dev_err(&pdev->dev, "reinit failed: %d\n", ret);
-                       return;
-               }
-       }
+                   "%s: vendor=0x%4.04x device=0x%4.04x rev=%d Pre-FLR\n",
+                   __func__, pdev->vendor, pdev->device, pdev->revision);
+ 
+       mwifiex_shutdown_sw(adapter);
 -      adapter->surprise_removed = true;
+       clear_bit(MWIFIEX_IFACE_WORK_DEVICE_DUMP, &card->work_flags);
+       clear_bit(MWIFIEX_IFACE_WORK_CARD_RESET, &card->work_flags);
        mwifiex_dbg(adapter, INFO, "%s, successful\n", __func__);
  }
  
- static const struct pci_error_handlers mwifiex_pcie_err_handler[] = {
-               { .reset_notify = mwifiex_pcie_reset_notify, },
+ /*
+  * Kernel stores and restores PCIe function context before and after performing
+  * FLR respectively. Reconfigure the software and firmware including firmware
+  * redownload.
+  */
+ static void mwifiex_pcie_reset_done(struct pci_dev *pdev)
+ {
+       struct pcie_service_card *card = pci_get_drvdata(pdev);
+       struct mwifiex_adapter *adapter = card->adapter;
+       int ret;
+ 
+       if (!adapter) {
+               dev_err(&pdev->dev, "%s: adapter structure is not valid\n",
+                       __func__);
+               return;
+       }
+ 
+       mwifiex_dbg(adapter, INFO,
+                   "%s: vendor=0x%4.04x device=0x%4.04x rev=%d Post-FLR\n",
+                   __func__, pdev->vendor, pdev->device, pdev->revision);
+ 
 -      adapter->surprise_removed = false;
+       ret = mwifiex_reinit_sw(adapter);
+       if (ret)
+               dev_err(&pdev->dev, "reinit failed: %d\n", ret);
+       else
+               mwifiex_dbg(adapter, INFO, "%s, successful\n", __func__);
+ }
+ 
+ static const struct pci_error_handlers mwifiex_pcie_err_handler = {
+       .reset_prepare          = mwifiex_pcie_reset_prepare,
+       .reset_done             = mwifiex_pcie_reset_done,
  };
  
  #ifdef CONFIG_PM_SLEEP
 
        return result;
  }
  
- static void nvme_reset_notify(struct pci_dev *pdev, bool prepare)
+ static void nvme_reset_prepare(struct pci_dev *pdev)
  {
 -      nvme_dev_disable(pci_get_drvdata(pdev), false);
 +      struct nvme_dev *dev = pci_get_drvdata(pdev);
++      nvme_dev_disable(dev, false);
+ }
  
-       if (prepare)
-               nvme_dev_disable(dev, false);
-       else
-               nvme_reset_ctrl(&dev->ctrl);
+ static void nvme_reset_done(struct pci_dev *pdev)
+ {
 -      nvme_reset(pci_get_drvdata(pdev));
++      struct nvme_dev *dev = pci_get_drvdata(pdev);
++      nvme_reset_ctrl(&dev->ctrl);
  }
  
  static void nvme_shutdown(struct pci_dev *pdev)
 
        int last_affv = affv + affd->pre_vectors;
        nodemask_t nodemsk = NODE_MASK_NONE;
        struct cpumask *masks;
 -      cpumask_var_t nmsk;
 +      cpumask_var_t nmsk, *node_to_present_cpumask;
  
+       /*
+        * If there aren't any vectors left after applying the pre/post
+        * vectors don't bother with assigning affinity.
+        */
+       if (!affv)
+               return NULL;
+ 
        if (!zalloc_cpumask_var(&nmsk, GFP_KERNEL))
                return NULL;
  
  {
        int resv = affd->pre_vectors + affd->post_vectors;
        int vecs = maxvec - resv;
 -      int cpus;
 +      int ret;
  
 -      /* Stabilize the cpumasks */
+       if (resv > minvec)
+               return 0;
+ 
        get_online_cpus();
 -      cpus = cpumask_weight(cpu_online_mask);
 +      ret = min_t(int, cpumask_weight(cpu_present_mask), vecs) + resv;
        put_online_cpus();
 -
 -      return min(cpus, vecs) + resv;
 +      return ret;
  }