summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlice Ferrazzi <alicef@gentoo.org>2021-03-25 17:57:38 +0900
committerAlice Ferrazzi <alicef@gentoo.org>2021-03-25 17:58:00 +0900
commitcc0e5ae3b0469c91a02eb4e50582aff4a7554e5b (patch)
treefe5ea41a22ee95b9206619d5ce10f5138c60e31d
parentUpdates for CPU Optimization patch for 5.10.X gcc v9.1 and v10 (diff)
downloadlinux-patches-cc0e5ae3b0469c91a02eb4e50582aff4a7554e5b.tar.gz
linux-patches-cc0e5ae3b0469c91a02eb4e50582aff4a7554e5b.tar.bz2
linux-patches-cc0e5ae3b0469c91a02eb4e50582aff4a7554e5b.zip
Linux patch 5.10.265.10-29
Signed-off-by: Alice Ferrazzi <alicef@gentoo.org>
-rw-r--r--0000_README4
-rw-r--r--1025_linux-5.10.26.patch12913
2 files changed, 12917 insertions, 0 deletions
diff --git a/0000_README b/0000_README
index 918ab777..da6b8c20 100644
--- a/0000_README
+++ b/0000_README
@@ -143,6 +143,10 @@ Patch: 1024_linux-5.10.25.patch
From: http://www.kernel.org
Desc: Linux 5.10.25
+Patch: 1025_linux-5.10.26.patch
+From: http://www.kernel.org
+Desc: Linux 5.10.26
+
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/1025_linux-5.10.26.patch b/1025_linux-5.10.26.patch
new file mode 100644
index 00000000..b5ea9064
--- /dev/null
+++ b/1025_linux-5.10.26.patch
@@ -0,0 +1,12913 @@
+diff --git a/Documentation/scsi/libsas.rst b/Documentation/scsi/libsas.rst
+index f9b77c7879dbb..ea63ab3a92160 100644
+--- a/Documentation/scsi/libsas.rst
++++ b/Documentation/scsi/libsas.rst
+@@ -189,12 +189,10 @@ num_phys
+ The event interface::
+
+ /* LLDD calls these to notify the class of an event. */
+- void (*notify_port_event)(struct sas_phy *, enum port_event);
+- void (*notify_phy_event)(struct sas_phy *, enum phy_event);
+-
+-When sas_register_ha() returns, those are set and can be
+-called by the LLDD to notify the SAS layer of such events
+-the SAS layer.
++ void sas_notify_port_event(struct sas_phy *, enum port_event);
++ void sas_notify_phy_event(struct sas_phy *, enum phy_event);
++ void sas_notify_port_event_gfp(struct sas_phy *, enum port_event, gfp_t);
++ void sas_notify_phy_event_gfp(struct sas_phy *, enum phy_event, gfp_t);
+
+ The port notification::
+
+diff --git a/MAINTAINERS b/MAINTAINERS
+index 281de213ef478..24cdfcf334ea1 100644
+--- a/MAINTAINERS
++++ b/MAINTAINERS
+@@ -1155,7 +1155,7 @@ M: Joel Fernandes <joel@joelfernandes.org>
+ M: Christian Brauner <christian@brauner.io>
+ M: Hridya Valsaraju <hridya@google.com>
+ M: Suren Baghdasaryan <surenb@google.com>
+-L: devel@driverdev.osuosl.org
++L: linux-kernel@vger.kernel.org
+ S: Supported
+ T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
+ F: drivers/android/
+@@ -8001,7 +8001,6 @@ F: drivers/crypto/hisilicon/sec2/sec_main.c
+
+ HISILICON STAGING DRIVERS FOR HIKEY 960/970
+ M: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
+-L: devel@driverdev.osuosl.org
+ S: Maintained
+ F: drivers/staging/hikey9xx/
+
+@@ -16665,7 +16664,7 @@ F: drivers/staging/vt665?/
+
+ STAGING SUBSYSTEM
+ M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+-L: devel@driverdev.osuosl.org
++L: linux-staging@lists.linux.dev
+ S: Supported
+ T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
+ F: drivers/staging/
+@@ -18705,7 +18704,7 @@ VME SUBSYSTEM
+ M: Martyn Welch <martyn@welchs.me.uk>
+ M: Manohar Vanga <manohar.vanga@gmail.com>
+ M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+-L: devel@driverdev.osuosl.org
++L: linux-kernel@vger.kernel.org
+ S: Maintained
+ T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
+ F: Documentation/driver-api/vme.rst
+diff --git a/Makefile b/Makefile
+index 6858425cbe6c1..d4b87e604762a 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0
+ VERSION = 5
+ PATCHLEVEL = 10
+-SUBLEVEL = 25
++SUBLEVEL = 26
+ EXTRAVERSION =
+ NAME = Dare mighty things
+
+@@ -1249,15 +1249,17 @@ endef
+ define filechk_version.h
+ if [ $(SUBLEVEL) -gt 255 ]; then \
+ echo \#define LINUX_VERSION_CODE $(shell \
+- expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 255); \
++ expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + 255); \
+ else \
+ echo \#define LINUX_VERSION_CODE $(shell \
+- expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \
++ expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \
+ fi; \
+ echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + \
+ ((c) > 255 ? 255 : (c)))'
+ endef
+
++$(version_h): PATCHLEVEL := $(if $(PATCHLEVEL), $(PATCHLEVEL), 0)
++$(version_h): SUBLEVEL := $(if $(SUBLEVEL), $(SUBLEVEL), 0)
+ $(version_h): FORCE
+ $(call filechk,version.h)
+ $(Q)rm -f $(old_version_h)
+diff --git a/arch/mips/boot/compressed/Makefile b/arch/mips/boot/compressed/Makefile
+index d66511825fe1e..337ab1d18cc1f 100644
+--- a/arch/mips/boot/compressed/Makefile
++++ b/arch/mips/boot/compressed/Makefile
+@@ -36,6 +36,7 @@ KBUILD_AFLAGS := $(KBUILD_AFLAGS) -D__ASSEMBLY__ \
+
+ # Prevents link failures: __sanitizer_cov_trace_pc() is not linked in.
+ KCOV_INSTRUMENT := n
++UBSAN_SANITIZE := n
+
+ # decompressor objects (linked with vmlinuz)
+ vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/string.o
+diff --git a/arch/powerpc/include/asm/cpu_has_feature.h b/arch/powerpc/include/asm/cpu_has_feature.h
+index 7897d16e09904..727d4b3219379 100644
+--- a/arch/powerpc/include/asm/cpu_has_feature.h
++++ b/arch/powerpc/include/asm/cpu_has_feature.h
+@@ -7,7 +7,7 @@
+ #include <linux/bug.h>
+ #include <asm/cputable.h>
+
+-static inline bool early_cpu_has_feature(unsigned long feature)
++static __always_inline bool early_cpu_has_feature(unsigned long feature)
+ {
+ return !!((CPU_FTRS_ALWAYS & feature) ||
+ (CPU_FTRS_POSSIBLE & cur_cpu_spec->cpu_features & feature));
+@@ -46,7 +46,7 @@ static __always_inline bool cpu_has_feature(unsigned long feature)
+ return static_branch_likely(&cpu_feature_keys[i]);
+ }
+ #else
+-static inline bool cpu_has_feature(unsigned long feature)
++static __always_inline bool cpu_has_feature(unsigned long feature)
+ {
+ return early_cpu_has_feature(feature);
+ }
+diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c
+index 242bdd8281e0f..a2e067f68dee8 100644
+--- a/arch/powerpc/lib/sstep.c
++++ b/arch/powerpc/lib/sstep.c
+@@ -1853,7 +1853,7 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs,
+ goto compute_done;
+ }
+
+- return -1;
++ goto unknown_opcode;
+ #ifdef __powerpc64__
+ case 777: /* modsd */
+ if (!cpu_has_feature(CPU_FTR_ARCH_300))
+@@ -2909,6 +2909,20 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs,
+
+ }
+
++ if (OP_IS_LOAD_STORE(op->type) && (op->type & UPDATE)) {
++ switch (GETTYPE(op->type)) {
++ case LOAD:
++ if (ra == rd)
++ goto unknown_opcode;
++ fallthrough;
++ case STORE:
++ case LOAD_FP:
++ case STORE_FP:
++ if (ra == 0)
++ goto unknown_opcode;
++ }
++ }
++
+ #ifdef CONFIG_VSX
+ if ((GETTYPE(op->type) == LOAD_VSX ||
+ GETTYPE(op->type) == STORE_VSX) &&
+diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
+index 3474286e59db7..df7fccf76df69 100644
+--- a/arch/riscv/Kconfig
++++ b/arch/riscv/Kconfig
+@@ -84,7 +84,6 @@ config RISCV
+ select PCI_MSI if PCI
+ select RISCV_INTC
+ select RISCV_TIMER if RISCV_SBI
+- select SPARSEMEM_STATIC if 32BIT
+ select SPARSE_IRQ
+ select SYSCTL_EXCEPTION_TRACE
+ select THREAD_INFO_IN_TASK
+@@ -145,7 +144,8 @@ config ARCH_FLATMEM_ENABLE
+ config ARCH_SPARSEMEM_ENABLE
+ def_bool y
+ depends on MMU
+- select SPARSEMEM_VMEMMAP_ENABLE
++ select SPARSEMEM_STATIC if 32BIT && SPARSMEM
++ select SPARSEMEM_VMEMMAP_ENABLE if 64BIT
+
+ config ARCH_SELECT_MEMORY_MODEL
+ def_bool ARCH_SPARSEMEM_ENABLE
+diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h
+index 653edb25d4957..c0fdb05ffa0b2 100644
+--- a/arch/riscv/include/asm/sbi.h
++++ b/arch/riscv/include/asm/sbi.h
+@@ -51,10 +51,10 @@ enum sbi_ext_rfence_fid {
+ SBI_EXT_RFENCE_REMOTE_FENCE_I = 0,
+ SBI_EXT_RFENCE_REMOTE_SFENCE_VMA,
+ SBI_EXT_RFENCE_REMOTE_SFENCE_VMA_ASID,
+- SBI_EXT_RFENCE_REMOTE_HFENCE_GVMA,
+ SBI_EXT_RFENCE_REMOTE_HFENCE_GVMA_VMID,
+- SBI_EXT_RFENCE_REMOTE_HFENCE_VVMA,
++ SBI_EXT_RFENCE_REMOTE_HFENCE_GVMA,
+ SBI_EXT_RFENCE_REMOTE_HFENCE_VVMA_ASID,
++ SBI_EXT_RFENCE_REMOTE_HFENCE_VVMA,
+ };
+
+ enum sbi_ext_hsm_fid {
+diff --git a/arch/s390/include/asm/pci.h b/arch/s390/include/asm/pci.h
+index 212628932ddc1..a75d94a9bcb2f 100644
+--- a/arch/s390/include/asm/pci.h
++++ b/arch/s390/include/asm/pci.h
+@@ -201,8 +201,8 @@ extern unsigned int s390_pci_no_rid;
+ Prototypes
+ ----------------------------------------------------------------------------- */
+ /* Base stuff */
+-int zpci_create_device(struct zpci_dev *);
+-void zpci_remove_device(struct zpci_dev *zdev);
++int zpci_create_device(u32 fid, u32 fh, enum zpci_state state);
++void zpci_remove_device(struct zpci_dev *zdev, bool set_error);
+ int zpci_enable_device(struct zpci_dev *);
+ int zpci_disable_device(struct zpci_dev *);
+ int zpci_register_ioat(struct zpci_dev *, u8, u64, u64, u64);
+@@ -212,7 +212,7 @@ void zpci_remove_reserved_devices(void);
+ /* CLP */
+ int clp_setup_writeback_mio(void);
+ int clp_scan_pci_devices(void);
+-int clp_add_pci_device(u32, u32, int);
++int clp_query_pci_fn(struct zpci_dev *zdev);
+ int clp_enable_fh(struct zpci_dev *, u8);
+ int clp_disable_fh(struct zpci_dev *);
+ int clp_get_state(u32 fid, enum zpci_state *state);
+diff --git a/arch/s390/kernel/vtime.c b/arch/s390/kernel/vtime.c
+index 7b3af2d6b9baa..579ec3a8c816f 100644
+--- a/arch/s390/kernel/vtime.c
++++ b/arch/s390/kernel/vtime.c
+@@ -217,7 +217,7 @@ void vtime_flush(struct task_struct *tsk)
+ avg_steal = S390_lowcore.avg_steal_timer / 2;
+ if ((s64) steal > 0) {
+ S390_lowcore.steal_timer = 0;
+- account_steal_time(steal);
++ account_steal_time(cputime_to_nsecs(steal));
+ avg_steal += steal;
+ }
+ S390_lowcore.avg_steal_timer = avg_steal;
+diff --git a/arch/s390/pci/pci.c b/arch/s390/pci/pci.c
+index 570016ae8bcd1..1ae7a76ae97b7 100644
+--- a/arch/s390/pci/pci.c
++++ b/arch/s390/pci/pci.c
+@@ -682,56 +682,101 @@ int zpci_disable_device(struct zpci_dev *zdev)
+ }
+ EXPORT_SYMBOL_GPL(zpci_disable_device);
+
+-void zpci_remove_device(struct zpci_dev *zdev)
++/* zpci_remove_device - Removes the given zdev from the PCI core
++ * @zdev: the zdev to be removed from the PCI core
++ * @set_error: if true the device's error state is set to permanent failure
++ *
++ * Sets a zPCI device to a configured but offline state; the zPCI
++ * device is still accessible through its hotplug slot and the zPCI
++ * API but is removed from the common code PCI bus, making it
++ * no longer available to drivers.
++ */
++void zpci_remove_device(struct zpci_dev *zdev, bool set_error)
+ {
+ struct zpci_bus *zbus = zdev->zbus;
+ struct pci_dev *pdev;
+
++ if (!zdev->zbus->bus)
++ return;
++
+ pdev = pci_get_slot(zbus->bus, zdev->devfn);
+ if (pdev) {
+- if (pdev->is_virtfn)
+- return zpci_iov_remove_virtfn(pdev, zdev->vfn);
++ if (set_error)
++ pdev->error_state = pci_channel_io_perm_failure;
++ if (pdev->is_virtfn) {
++ zpci_iov_remove_virtfn(pdev, zdev->vfn);
++ /* balance pci_get_slot */
++ pci_dev_put(pdev);
++ return;
++ }
+ pci_stop_and_remove_bus_device_locked(pdev);
++ /* balance pci_get_slot */
++ pci_dev_put(pdev);
+ }
+ }
+
+-int zpci_create_device(struct zpci_dev *zdev)
++/**
++ * zpci_create_device() - Create a new zpci_dev and add it to the zbus
++ * @fid: Function ID of the device to be created
++ * @fh: Current Function Handle of the device to be created
++ * @state: Initial state after creation either Standby or Configured
++ *
++ * Creates a new zpci device and adds it to its, possibly newly created, zbus
++ * as well as zpci_list.
++ *
++ * Returns: 0 on success, an error value otherwise
++ */
++int zpci_create_device(u32 fid, u32 fh, enum zpci_state state)
+ {
++ struct zpci_dev *zdev;
+ int rc;
+
+- kref_init(&zdev->kref);
++ zpci_dbg(3, "add fid:%x, fh:%x, c:%d\n", fid, fh, state);
++ zdev = kzalloc(sizeof(*zdev), GFP_KERNEL);
++ if (!zdev)
++ return -ENOMEM;
+
+- spin_lock(&zpci_list_lock);
+- list_add_tail(&zdev->entry, &zpci_list);
+- spin_unlock(&zpci_list_lock);
++ /* FID and Function Handle are the static/dynamic identifiers */
++ zdev->fid = fid;
++ zdev->fh = fh;
+
+- rc = zpci_init_iommu(zdev);
++ /* Query function properties and update zdev */
++ rc = clp_query_pci_fn(zdev);
+ if (rc)
+- goto out;
++ goto error;
++ zdev->state = state;
+
++ kref_init(&zdev->kref);
+ mutex_init(&zdev->lock);
++
++ rc = zpci_init_iommu(zdev);
++ if (rc)
++ goto error;
++
+ if (zdev->state == ZPCI_FN_STATE_CONFIGURED) {
+ rc = zpci_enable_device(zdev);
+ if (rc)
+- goto out_destroy_iommu;
++ goto error_destroy_iommu;
+ }
+
+ rc = zpci_bus_device_register(zdev, &pci_root_ops);
+ if (rc)
+- goto out_disable;
++ goto error_disable;
++
++ spin_lock(&zpci_list_lock);
++ list_add_tail(&zdev->entry, &zpci_list);
++ spin_unlock(&zpci_list_lock);
+
+ return 0;
+
+-out_disable:
++error_disable:
+ if (zdev->state == ZPCI_FN_STATE_ONLINE)
+ zpci_disable_device(zdev);
+-
+-out_destroy_iommu:
++error_destroy_iommu:
+ zpci_destroy_iommu(zdev);
+-out:
+- spin_lock(&zpci_list_lock);
+- list_del(&zdev->entry);
+- spin_unlock(&zpci_list_lock);
++error:
++ zpci_dbg(0, "add fid:%x, rc:%d\n", fid, rc);
++ kfree(zdev);
+ return rc;
+ }
+
+@@ -740,7 +785,7 @@ void zpci_release_device(struct kref *kref)
+ struct zpci_dev *zdev = container_of(kref, struct zpci_dev, kref);
+
+ if (zdev->zbus->bus)
+- zpci_remove_device(zdev);
++ zpci_remove_device(zdev, false);
+
+ switch (zdev->state) {
+ case ZPCI_FN_STATE_ONLINE:
+diff --git a/arch/s390/pci/pci_clp.c b/arch/s390/pci/pci_clp.c
+index 153720d21ae7f..d3331596ddbe1 100644
+--- a/arch/s390/pci/pci_clp.c
++++ b/arch/s390/pci/pci_clp.c
+@@ -181,7 +181,7 @@ static int clp_store_query_pci_fn(struct zpci_dev *zdev,
+ return 0;
+ }
+
+-static int clp_query_pci_fn(struct zpci_dev *zdev, u32 fh)
++int clp_query_pci_fn(struct zpci_dev *zdev)
+ {
+ struct clp_req_rsp_query_pci *rrb;
+ int rc;
+@@ -194,7 +194,7 @@ static int clp_query_pci_fn(struct zpci_dev *zdev, u32 fh)
+ rrb->request.hdr.len = sizeof(rrb->request);
+ rrb->request.hdr.cmd = CLP_QUERY_PCI_FN;
+ rrb->response.hdr.len = sizeof(rrb->response);
+- rrb->request.fh = fh;
++ rrb->request.fh = zdev->fh;
+
+ rc = clp_req(rrb, CLP_LPS_PCI);
+ if (!rc && rrb->response.hdr.rsp == CLP_RC_OK) {
+@@ -212,40 +212,6 @@ out:
+ return rc;
+ }
+
+-int clp_add_pci_device(u32 fid, u32 fh, int configured)
+-{
+- struct zpci_dev *zdev;
+- int rc = -ENOMEM;
+-
+- zpci_dbg(3, "add fid:%x, fh:%x, c:%d\n", fid, fh, configured);
+- zdev = kzalloc(sizeof(*zdev), GFP_KERNEL);
+- if (!zdev)
+- goto error;
+-
+- zdev->fh = fh;
+- zdev->fid = fid;
+-
+- /* Query function properties and update zdev */
+- rc = clp_query_pci_fn(zdev, fh);
+- if (rc)
+- goto error;
+-
+- if (configured)
+- zdev->state = ZPCI_FN_STATE_CONFIGURED;
+- else
+- zdev->state = ZPCI_FN_STATE_STANDBY;
+-
+- rc = zpci_create_device(zdev);
+- if (rc)
+- goto error;
+- return 0;
+-
+-error:
+- zpci_dbg(0, "add fid:%x, rc:%d\n", fid, rc);
+- kfree(zdev);
+- return rc;
+-}
+-
+ static int clp_refresh_fh(u32 fid);
+ /*
+ * Enable/Disable a given PCI function and update its function handle if
+@@ -408,7 +374,7 @@ static void __clp_add(struct clp_fh_list_entry *entry, void *data)
+
+ zdev = get_zdev_by_fid(entry->fid);
+ if (!zdev)
+- clp_add_pci_device(entry->fid, entry->fh, entry->config_state);
++ zpci_create_device(entry->fid, entry->fh, entry->config_state);
+ }
+
+ int clp_scan_pci_devices(void)
+diff --git a/arch/s390/pci/pci_event.c b/arch/s390/pci/pci_event.c
+index 9a6bae503fe61..ac0c65cdd69d9 100644
+--- a/arch/s390/pci/pci_event.c
++++ b/arch/s390/pci/pci_event.c
+@@ -76,20 +76,17 @@ void zpci_event_error(void *data)
+ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf)
+ {
+ struct zpci_dev *zdev = get_zdev_by_fid(ccdf->fid);
+- struct pci_dev *pdev = NULL;
+ enum zpci_state state;
++ struct pci_dev *pdev;
+ int ret;
+
+- if (zdev && zdev->zbus && zdev->zbus->bus)
+- pdev = pci_get_slot(zdev->zbus->bus, zdev->devfn);
+-
+ zpci_err("avail CCDF:\n");
+ zpci_err_hex(ccdf, sizeof(*ccdf));
+
+ switch (ccdf->pec) {
+ case 0x0301: /* Reserved|Standby -> Configured */
+ if (!zdev) {
+- ret = clp_add_pci_device(ccdf->fid, ccdf->fh, 1);
++ zpci_create_device(ccdf->fid, ccdf->fh, ZPCI_FN_STATE_CONFIGURED);
+ break;
+ }
+ /* the configuration request may be stale */
+@@ -116,7 +113,7 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf)
+ break;
+ case 0x0302: /* Reserved -> Standby */
+ if (!zdev) {
+- clp_add_pci_device(ccdf->fid, ccdf->fh, 0);
++ zpci_create_device(ccdf->fid, ccdf->fh, ZPCI_FN_STATE_STANDBY);
+ break;
+ }
+ zdev->fh = ccdf->fh;
+@@ -124,8 +121,7 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf)
+ case 0x0303: /* Deconfiguration requested */
+ if (!zdev)
+ break;
+- if (pdev)
+- zpci_remove_device(zdev);
++ zpci_remove_device(zdev, false);
+
+ ret = zpci_disable_device(zdev);
+ if (ret)
+@@ -140,12 +136,10 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf)
+ case 0x0304: /* Configured -> Standby|Reserved */
+ if (!zdev)
+ break;
+- if (pdev) {
+- /* Give the driver a hint that the function is
+- * already unusable. */
+- pdev->error_state = pci_channel_io_perm_failure;
+- zpci_remove_device(zdev);
+- }
++ /* Give the driver a hint that the function is
++ * already unusable.
++ */
++ zpci_remove_device(zdev, true);
+
+ zdev->fh = ccdf->fh;
+ zpci_disable_device(zdev);
+diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
+index 4b05c876f9f69..e7dc13fe5e29f 100644
+--- a/arch/x86/events/intel/core.c
++++ b/arch/x86/events/intel/core.c
+@@ -3562,6 +3562,9 @@ static int intel_pmu_hw_config(struct perf_event *event)
+ return ret;
+
+ if (event->attr.precise_ip) {
++ if ((event->attr.config & INTEL_ARCH_EVENT_MASK) == INTEL_FIXED_VLBR_EVENT)
++ return -EINVAL;
++
+ if (!(event->attr.freq || (event->attr.wakeup_events && !event->attr.watermark))) {
+ event->hw.flags |= PERF_X86_EVENT_AUTO_RELOAD;
+ if (!(event->attr.sample_type &
+diff --git a/arch/x86/events/intel/ds.c b/arch/x86/events/intel/ds.c
+index 485c5066f8b8c..31a7a6566d077 100644
+--- a/arch/x86/events/intel/ds.c
++++ b/arch/x86/events/intel/ds.c
+@@ -1894,7 +1894,7 @@ static void intel_pmu_drain_pebs_nhm(struct pt_regs *iregs, struct perf_sample_d
+ */
+ if (!pebs_status && cpuc->pebs_enabled &&
+ !(cpuc->pebs_enabled & (cpuc->pebs_enabled-1)))
+- pebs_status = cpuc->pebs_enabled;
++ pebs_status = p->status = cpuc->pebs_enabled;
+
+ bit = find_first_bit((unsigned long *)&pebs_status,
+ x86_pmu.max_pebs_events);
+diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
+index 82a08b5858182..50d02db723177 100644
+--- a/arch/x86/include/asm/processor.h
++++ b/arch/x86/include/asm/processor.h
+@@ -552,15 +552,6 @@ static inline void arch_thread_struct_whitelist(unsigned long *offset,
+ *size = fpu_kernel_xstate_size;
+ }
+
+-/*
+- * Thread-synchronous status.
+- *
+- * This is different from the flags in that nobody else
+- * ever touches our thread-synchronous status, so we don't
+- * have to worry about atomic accesses.
+- */
+-#define TS_COMPAT 0x0002 /* 32bit syscall active (64BIT)*/
+-
+ static inline void
+ native_load_sp0(unsigned long sp0)
+ {
+diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h
+index 44733a4bfc429..e701f29b48817 100644
+--- a/arch/x86/include/asm/thread_info.h
++++ b/arch/x86/include/asm/thread_info.h
+@@ -216,10 +216,31 @@ static inline int arch_within_stack_frames(const void * const stack,
+
+ #endif
+
++/*
++ * Thread-synchronous status.
++ *
++ * This is different from the flags in that nobody else
++ * ever touches our thread-synchronous status, so we don't
++ * have to worry about atomic accesses.
++ */
++#define TS_COMPAT 0x0002 /* 32bit syscall active (64BIT)*/
++
++#ifndef __ASSEMBLY__
+ #ifdef CONFIG_COMPAT
+ #define TS_I386_REGS_POKED 0x0004 /* regs poked by 32-bit ptracer */
++#define TS_COMPAT_RESTART 0x0008
++
++#define arch_set_restart_data arch_set_restart_data
++
++static inline void arch_set_restart_data(struct restart_block *restart)
++{
++ struct thread_info *ti = current_thread_info();
++ if (ti->status & TS_COMPAT)
++ ti->status |= TS_COMPAT_RESTART;
++ else
++ ti->status &= ~TS_COMPAT_RESTART;
++}
+ #endif
+-#ifndef __ASSEMBLY__
+
+ #ifdef CONFIG_X86_32
+ #define in_ia32_syscall() true
+diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
+index f4c0514fc5108..539f3e88ca7cd 100644
+--- a/arch/x86/kernel/apic/apic.c
++++ b/arch/x86/kernel/apic/apic.c
+@@ -2317,6 +2317,11 @@ static int cpuid_to_apicid[] = {
+ [0 ... NR_CPUS - 1] = -1,
+ };
+
++bool arch_match_cpu_phys_id(int cpu, u64 phys_id)
++{
++ return phys_id == cpuid_to_apicid[cpu];
++}
++
+ #ifdef CONFIG_SMP
+ /**
+ * apic_id_is_primary_thread - Check whether APIC ID belongs to a primary thread
+diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
+index 7b3c7e0d4a094..0d4818eab0da8 100644
+--- a/arch/x86/kernel/apic/io_apic.c
++++ b/arch/x86/kernel/apic/io_apic.c
+@@ -1033,6 +1033,16 @@ static int mp_map_pin_to_irq(u32 gsi, int idx, int ioapic, int pin,
+ if (idx >= 0 && test_bit(mp_irqs[idx].srcbus, mp_bus_not_pci)) {
+ irq = mp_irqs[idx].srcbusirq;
+ legacy = mp_is_legacy_irq(irq);
++ /*
++ * IRQ2 is unusable for historical reasons on systems which
++ * have a legacy PIC. See the comment vs. IRQ2 further down.
++ *
++ * If this gets removed at some point then the related code
++ * in lapic_assign_system_vectors() needs to be adjusted as
++ * well.
++ */
++ if (legacy && irq == PIC_CASCADE_IR)
++ return -EINVAL;
+ }
+
+ mutex_lock(&ioapic_mutex);
+diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
+index be0d7d4152eca..f51cab3e983d8 100644
+--- a/arch/x86/kernel/signal.c
++++ b/arch/x86/kernel/signal.c
+@@ -766,30 +766,8 @@ handle_signal(struct ksignal *ksig, struct pt_regs *regs)
+
+ static inline unsigned long get_nr_restart_syscall(const struct pt_regs *regs)
+ {
+- /*
+- * This function is fundamentally broken as currently
+- * implemented.
+- *
+- * The idea is that we want to trigger a call to the
+- * restart_block() syscall and that we want in_ia32_syscall(),
+- * in_x32_syscall(), etc. to match whatever they were in the
+- * syscall being restarted. We assume that the syscall
+- * instruction at (regs->ip - 2) matches whatever syscall
+- * instruction we used to enter in the first place.
+- *
+- * The problem is that we can get here when ptrace pokes
+- * syscall-like values into regs even if we're not in a syscall
+- * at all.
+- *
+- * For now, we maintain historical behavior and guess based on
+- * stored state. We could do better by saving the actual
+- * syscall arch in restart_block or (with caveats on x32) by
+- * checking if regs->ip points to 'int $0x80'. The current
+- * behavior is incorrect if a tracer has a different bitness
+- * than the tracee.
+- */
+ #ifdef CONFIG_IA32_EMULATION
+- if (current_thread_info()->status & (TS_COMPAT|TS_I386_REGS_POKED))
++ if (current_thread_info()->status & TS_COMPAT_RESTART)
+ return __NR_ia32_restart_syscall;
+ #endif
+ #ifdef CONFIG_X86_X32_ABI
+diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c
+index 87682dcb64ec3..bfda153b1a41d 100644
+--- a/drivers/base/power/runtime.c
++++ b/drivers/base/power/runtime.c
+@@ -325,22 +325,22 @@ static void rpm_put_suppliers(struct device *dev)
+ static int __rpm_callback(int (*cb)(struct device *), struct device *dev)
+ __releases(&dev->power.lock) __acquires(&dev->power.lock)
+ {
+- bool use_links = dev->power.links_count > 0;
+- bool get = false;
+ int retval, idx;
+- bool put;
++ bool use_links = dev->power.links_count > 0;
+
+ if (dev->power.irq_safe) {
+ spin_unlock(&dev->power.lock);
+- } else if (!use_links) {
+- spin_unlock_irq(&dev->power.lock);
+ } else {
+- get = dev->power.runtime_status == RPM_RESUMING;
+-
+ spin_unlock_irq(&dev->power.lock);
+
+- /* Resume suppliers if necessary. */
+- if (get) {
++ /*
++ * Resume suppliers if necessary.
++ *
++ * The device's runtime PM status cannot change until this
++ * routine returns, so it is safe to read the status outside of
++ * the lock.
++ */
++ if (use_links && dev->power.runtime_status == RPM_RESUMING) {
+ idx = device_links_read_lock();
+
+ retval = rpm_get_suppliers(dev);
+@@ -355,36 +355,24 @@ static int __rpm_callback(int (*cb)(struct device *), struct device *dev)
+
+ if (dev->power.irq_safe) {
+ spin_lock(&dev->power.lock);
+- return retval;
+- }
+-
+- spin_lock_irq(&dev->power.lock);
+-
+- if (!use_links)
+- return retval;
+-
+- /*
+- * If the device is suspending and the callback has returned success,
+- * drop the usage counters of the suppliers that have been reference
+- * counted on its resume.
+- *
+- * Do that if the resume fails too.
+- */
+- put = dev->power.runtime_status == RPM_SUSPENDING && !retval;
+- if (put)
+- __update_runtime_status(dev, RPM_SUSPENDED);
+- else
+- put = get && retval;
+-
+- if (put) {
+- spin_unlock_irq(&dev->power.lock);
+-
+- idx = device_links_read_lock();
++ } else {
++ /*
++ * If the device is suspending and the callback has returned
++ * success, drop the usage counters of the suppliers that have
++ * been reference counted on its resume.
++ *
++ * Do that if resume fails too.
++ */
++ if (use_links
++ && ((dev->power.runtime_status == RPM_SUSPENDING && !retval)
++ || (dev->power.runtime_status == RPM_RESUMING && retval))) {
++ idx = device_links_read_lock();
+
+-fail:
+- rpm_put_suppliers(dev);
++ fail:
++ rpm_put_suppliers(dev);
+
+- device_links_read_unlock(idx);
++ device_links_read_unlock(idx);
++ }
+
+ spin_lock_irq(&dev->power.lock);
+ }
+diff --git a/drivers/counter/stm32-timer-cnt.c b/drivers/counter/stm32-timer-cnt.c
+index ef2a974a2f105..75bc401fdd189 100644
+--- a/drivers/counter/stm32-timer-cnt.c
++++ b/drivers/counter/stm32-timer-cnt.c
+@@ -31,7 +31,7 @@ struct stm32_timer_cnt {
+ struct counter_device counter;
+ struct regmap *regmap;
+ struct clk *clk;
+- u32 ceiling;
++ u32 max_arr;
+ bool enabled;
+ struct stm32_timer_regs bak;
+ };
+@@ -44,13 +44,14 @@ struct stm32_timer_cnt {
+ * @STM32_COUNT_ENCODER_MODE_3: counts on both TI1FP1 and TI2FP2 edges
+ */
+ enum stm32_count_function {
+- STM32_COUNT_SLAVE_MODE_DISABLED = -1,
++ STM32_COUNT_SLAVE_MODE_DISABLED,
+ STM32_COUNT_ENCODER_MODE_1,
+ STM32_COUNT_ENCODER_MODE_2,
+ STM32_COUNT_ENCODER_MODE_3,
+ };
+
+ static enum counter_count_function stm32_count_functions[] = {
++ [STM32_COUNT_SLAVE_MODE_DISABLED] = COUNTER_COUNT_FUNCTION_INCREASE,
+ [STM32_COUNT_ENCODER_MODE_1] = COUNTER_COUNT_FUNCTION_QUADRATURE_X2_A,
+ [STM32_COUNT_ENCODER_MODE_2] = COUNTER_COUNT_FUNCTION_QUADRATURE_X2_B,
+ [STM32_COUNT_ENCODER_MODE_3] = COUNTER_COUNT_FUNCTION_QUADRATURE_X4,
+@@ -73,8 +74,10 @@ static int stm32_count_write(struct counter_device *counter,
+ const unsigned long val)
+ {
+ struct stm32_timer_cnt *const priv = counter->priv;
++ u32 ceiling;
+
+- if (val > priv->ceiling)
++ regmap_read(priv->regmap, TIM_ARR, &ceiling);
++ if (val > ceiling)
+ return -EINVAL;
+
+ return regmap_write(priv->regmap, TIM_CNT, val);
+@@ -90,6 +93,9 @@ static int stm32_count_function_get(struct counter_device *counter,
+ regmap_read(priv->regmap, TIM_SMCR, &smcr);
+
+ switch (smcr & TIM_SMCR_SMS) {
++ case 0:
++ *function = STM32_COUNT_SLAVE_MODE_DISABLED;
++ return 0;
+ case 1:
+ *function = STM32_COUNT_ENCODER_MODE_1;
+ return 0;
+@@ -99,9 +105,9 @@ static int stm32_count_function_get(struct counter_device *counter,
+ case 3:
+ *function = STM32_COUNT_ENCODER_MODE_3;
+ return 0;
++ default:
++ return -EINVAL;
+ }
+-
+- return -EINVAL;
+ }
+
+ static int stm32_count_function_set(struct counter_device *counter,
+@@ -112,6 +118,9 @@ static int stm32_count_function_set(struct counter_device *counter,
+ u32 cr1, sms;
+
+ switch (function) {
++ case STM32_COUNT_SLAVE_MODE_DISABLED:
++ sms = 0;
++ break;
+ case STM32_COUNT_ENCODER_MODE_1:
+ sms = 1;
+ break;
+@@ -122,8 +131,7 @@ static int stm32_count_function_set(struct counter_device *counter,
+ sms = 3;
+ break;
+ default:
+- sms = 0;
+- break;
++ return -EINVAL;
+ }
+
+ /* Store enable status */
+@@ -131,10 +139,6 @@ static int stm32_count_function_set(struct counter_device *counter,
+
+ regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN, 0);
+
+- /* TIMx_ARR register shouldn't be buffered (ARPE=0) */
+- regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE, 0);
+- regmap_write(priv->regmap, TIM_ARR, priv->ceiling);
+-
+ regmap_update_bits(priv->regmap, TIM_SMCR, TIM_SMCR_SMS, sms);
+
+ /* Make sure that registers are updated */
+@@ -185,11 +189,13 @@ static ssize_t stm32_count_ceiling_write(struct counter_device *counter,
+ if (ret)
+ return ret;
+
++ if (ceiling > priv->max_arr)
++ return -ERANGE;
++
+ /* TIMx_ARR register shouldn't be buffered (ARPE=0) */
+ regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE, 0);
+ regmap_write(priv->regmap, TIM_ARR, ceiling);
+
+- priv->ceiling = ceiling;
+ return len;
+ }
+
+@@ -274,31 +280,36 @@ static int stm32_action_get(struct counter_device *counter,
+ size_t function;
+ int err;
+
+- /* Default action mode (e.g. STM32_COUNT_SLAVE_MODE_DISABLED) */
+- *action = STM32_SYNAPSE_ACTION_NONE;
+-
+ err = stm32_count_function_get(counter, count, &function);
+ if (err)
+- return 0;
++ return err;
+
+ switch (function) {
++ case STM32_COUNT_SLAVE_MODE_DISABLED:
++ /* counts on internal clock when CEN=1 */
++ *action = STM32_SYNAPSE_ACTION_NONE;
++ return 0;
+ case STM32_COUNT_ENCODER_MODE_1:
+ /* counts up/down on TI1FP1 edge depending on TI2FP2 level */
+ if (synapse->signal->id == count->synapses[0].signal->id)
+ *action = STM32_SYNAPSE_ACTION_BOTH_EDGES;
+- break;
++ else
++ *action = STM32_SYNAPSE_ACTION_NONE;
++ return 0;
+ case STM32_COUNT_ENCODER_MODE_2:
+ /* counts up/down on TI2FP2 edge depending on TI1FP1 level */
+ if (synapse->signal->id == count->synapses[1].signal->id)
+ *action = STM32_SYNAPSE_ACTION_BOTH_EDGES;
+- break;
++ else
++ *action = STM32_SYNAPSE_ACTION_NONE;
++ return 0;
+ case STM32_COUNT_ENCODER_MODE_3:
+ /* counts up/down on both TI1FP1 and TI2FP2 edges */
+ *action = STM32_SYNAPSE_ACTION_BOTH_EDGES;
+- break;
++ return 0;
++ default:
++ return -EINVAL;
+ }
+-
+- return 0;
+ }
+
+ static const struct counter_ops stm32_timer_cnt_ops = {
+@@ -359,7 +370,7 @@ static int stm32_timer_cnt_probe(struct platform_device *pdev)
+
+ priv->regmap = ddata->regmap;
+ priv->clk = ddata->clk;
+- priv->ceiling = ddata->max_arr;
++ priv->max_arr = ddata->max_arr;
+
+ priv->counter.name = dev_name(dev);
+ priv->counter.parent = dev;
+diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
+index df3f9bcab581c..4b7ee3fa9224f 100644
+--- a/drivers/firmware/efi/efi.c
++++ b/drivers/firmware/efi/efi.c
+@@ -927,7 +927,7 @@ int __ref efi_mem_reserve_persistent(phys_addr_t addr, u64 size)
+ }
+
+ /* first try to find a slot in an existing linked list entry */
+- for (prsv = efi_memreserve_root->next; prsv; prsv = rsv->next) {
++ for (prsv = efi_memreserve_root->next; prsv; ) {
+ rsv = memremap(prsv, sizeof(*rsv), MEMREMAP_WB);
+ index = atomic_fetch_add_unless(&rsv->count, 1, rsv->size);
+ if (index < rsv->size) {
+@@ -937,6 +937,7 @@ int __ref efi_mem_reserve_persistent(phys_addr_t addr, u64 size)
+ memunmap(rsv);
+ return efi_mem_reserve_iomem(addr, size);
+ }
++ prsv = rsv->next;
+ memunmap(rsv);
+ }
+
+diff --git a/drivers/firmware/efi/vars.c b/drivers/firmware/efi/vars.c
+index 41c1d00bf933c..abdc8a6a39631 100644
+--- a/drivers/firmware/efi/vars.c
++++ b/drivers/firmware/efi/vars.c
+@@ -484,6 +484,10 @@ int efivar_init(int (*func)(efi_char16_t *, efi_guid_t, unsigned long, void *),
+ }
+ }
+
++ break;
++ case EFI_UNSUPPORTED:
++ err = -EOPNOTSUPP;
++ status = EFI_NOT_FOUND;
+ break;
+ case EFI_NOT_FOUND:
+ break;
+diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
+index 7f557ea905424..0a2c4adcd833c 100644
+--- a/drivers/gpio/gpiolib.c
++++ b/drivers/gpio/gpiolib.c
+@@ -572,6 +572,7 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data,
+ struct lock_class_key *lock_key,
+ struct lock_class_key *request_key)
+ {
++ struct fwnode_handle *fwnode = gc->parent ? dev_fwnode(gc->parent) : NULL;
+ unsigned long flags;
+ int ret = 0;
+ unsigned i;
+@@ -601,6 +602,12 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data,
+ gc->of_node = gdev->dev.of_node;
+ #endif
+
++ /*
++ * Assign fwnode depending on the result of the previous calls,
++ * if none of them succeed, assign it to the parent's one.
++ */
++ gdev->dev.fwnode = dev_fwnode(&gdev->dev) ?: fwnode;
++
+ gdev->id = ida_alloc(&gpio_ida, GFP_KERNEL);
+ if (gdev->id < 0) {
+ ret = gdev->id;
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+index ea1ea147f6073..c07737c456776 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -1902,6 +1902,33 @@ cleanup:
+ return;
+ }
+
++static void dm_set_dpms_off(struct dc_link *link)
++{
++ struct dc_stream_state *stream_state;
++ struct amdgpu_dm_connector *aconnector = link->priv;
++ struct amdgpu_device *adev = drm_to_adev(aconnector->base.dev);
++ struct dc_stream_update stream_update;
++ bool dpms_off = true;
++
++ memset(&stream_update, 0, sizeof(stream_update));
++ stream_update.dpms_off = &dpms_off;
++
++ mutex_lock(&adev->dm.dc_lock);
++ stream_state = dc_stream_find_from_link(link);
++
++ if (stream_state == NULL) {
++ DRM_DEBUG_DRIVER("Error finding stream state associated with link!\n");
++ mutex_unlock(&adev->dm.dc_lock);
++ return;
++ }
++
++ stream_update.stream = stream_state;
++ dc_commit_updates_for_stream(stream_state->ctx->dc, NULL, 0,
++ stream_state, &stream_update,
++ stream_state->ctx->dc->current_state);
++ mutex_unlock(&adev->dm.dc_lock);
++}
++
+ static int dm_resume(void *handle)
+ {
+ struct amdgpu_device *adev = handle;
+@@ -2353,8 +2380,11 @@ static void handle_hpd_irq(void *param)
+ drm_kms_helper_hotplug_event(dev);
+
+ } else if (dc_link_detect(aconnector->dc_link, DETECT_REASON_HPD)) {
+- amdgpu_dm_update_connector_after_detect(aconnector);
++ if (new_connection_type == dc_connection_none &&
++ aconnector->dc_link->type == dc_connection_none)
++ dm_set_dpms_off(aconnector->dc_link);
+
++ amdgpu_dm_update_connector_after_detect(aconnector);
+
+ drm_modeset_lock_all(dev);
+ dm_restore_drm_connector_state(dev, connector);
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
+index 45ad05f6e03b9..ffb21196bf599 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
+@@ -2767,6 +2767,19 @@ struct dc_stream_state *dc_get_stream_at_index(struct dc *dc, uint8_t i)
+ return NULL;
+ }
+
++struct dc_stream_state *dc_stream_find_from_link(const struct dc_link *link)
++{
++ uint8_t i;
++ struct dc_context *ctx = link->ctx;
++
++ for (i = 0; i < ctx->dc->current_state->stream_count; i++) {
++ if (ctx->dc->current_state->streams[i]->link == link)
++ return ctx->dc->current_state->streams[i];
++ }
++
++ return NULL;
++}
++
+ enum dc_irq_source dc_interrupt_to_irq_source(
+ struct dc *dc,
+ uint32_t src_id,
+diff --git a/drivers/gpu/drm/amd/display/dc/dc_stream.h b/drivers/gpu/drm/amd/display/dc/dc_stream.h
+index c246af7c584b0..205bedd1b1966 100644
+--- a/drivers/gpu/drm/amd/display/dc/dc_stream.h
++++ b/drivers/gpu/drm/amd/display/dc/dc_stream.h
+@@ -297,6 +297,7 @@ void dc_stream_log(const struct dc *dc, const struct dc_stream_state *stream);
+
+ uint8_t dc_get_current_stream_count(struct dc *dc);
+ struct dc_stream_state *dc_get_stream_at_index(struct dc *dc, uint8_t i);
++struct dc_stream_state *dc_stream_find_from_link(const struct dc_link *link);
+
+ /*
+ * Return the current frame counter.
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c
+index 41a1d0e9b7e20..e0df9b0065f9c 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c
+@@ -113,6 +113,7 @@ bool cm3_helper_translate_curve_to_hw_format(
+ struct pwl_result_data *rgb_resulted;
+ struct pwl_result_data *rgb;
+ struct pwl_result_data *rgb_plus_1;
++ struct pwl_result_data *rgb_minus_1;
+ struct fixed31_32 end_value;
+
+ int32_t region_start, region_end;
+@@ -140,7 +141,7 @@ bool cm3_helper_translate_curve_to_hw_format(
+ region_start = -MAX_LOW_POINT;
+ region_end = NUMBER_REGIONS - MAX_LOW_POINT;
+ } else {
+- /* 10 segments
++ /* 11 segments
+ * segment is from 2^-10 to 2^0
+ * There are less than 256 points, for optimization
+ */
+@@ -154,9 +155,10 @@ bool cm3_helper_translate_curve_to_hw_format(
+ seg_distr[7] = 4;
+ seg_distr[8] = 4;
+ seg_distr[9] = 4;
++ seg_distr[10] = 1;
+
+ region_start = -10;
+- region_end = 0;
++ region_end = 1;
+ }
+
+ for (i = region_end - region_start; i < MAX_REGIONS_NUMBER ; i++)
+@@ -189,6 +191,10 @@ bool cm3_helper_translate_curve_to_hw_format(
+ rgb_resulted[hw_points - 1].green = output_tf->tf_pts.green[start_index];
+ rgb_resulted[hw_points - 1].blue = output_tf->tf_pts.blue[start_index];
+
++ rgb_resulted[hw_points].red = rgb_resulted[hw_points - 1].red;
++ rgb_resulted[hw_points].green = rgb_resulted[hw_points - 1].green;
++ rgb_resulted[hw_points].blue = rgb_resulted[hw_points - 1].blue;
++
+ // All 3 color channels have same x
+ corner_points[0].red.x = dc_fixpt_pow(dc_fixpt_from_int(2),
+ dc_fixpt_from_int(region_start));
+@@ -259,15 +265,18 @@ bool cm3_helper_translate_curve_to_hw_format(
+
+ rgb = rgb_resulted;
+ rgb_plus_1 = rgb_resulted + 1;
++ rgb_minus_1 = rgb;
+
+ i = 1;
+ while (i != hw_points + 1) {
+- if (dc_fixpt_lt(rgb_plus_1->red, rgb->red))
+- rgb_plus_1->red = rgb->red;
+- if (dc_fixpt_lt(rgb_plus_1->green, rgb->green))
+- rgb_plus_1->green = rgb->green;
+- if (dc_fixpt_lt(rgb_plus_1->blue, rgb->blue))
+- rgb_plus_1->blue = rgb->blue;
++ if (i >= hw_points - 1) {
++ if (dc_fixpt_lt(rgb_plus_1->red, rgb->red))
++ rgb_plus_1->red = dc_fixpt_add(rgb->red, rgb_minus_1->delta_red);
++ if (dc_fixpt_lt(rgb_plus_1->green, rgb->green))
++ rgb_plus_1->green = dc_fixpt_add(rgb->green, rgb_minus_1->delta_green);
++ if (dc_fixpt_lt(rgb_plus_1->blue, rgb->blue))
++ rgb_plus_1->blue = dc_fixpt_add(rgb->blue, rgb_minus_1->delta_blue);
++ }
+
+ rgb->delta_red = dc_fixpt_sub(rgb_plus_1->red, rgb->red);
+ rgb->delta_green = dc_fixpt_sub(rgb_plus_1->green, rgb->green);
+@@ -283,6 +292,7 @@ bool cm3_helper_translate_curve_to_hw_format(
+ }
+
+ ++rgb_plus_1;
++ rgb_minus_1 = rgb;
+ ++rgb;
+ ++i;
+ }
+diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c
+index 35629140fc7aa..c5223a9e0d891 100644
+--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c
++++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c
+@@ -4771,6 +4771,72 @@ static int smu7_get_clock_by_type(struct pp_hwmgr *hwmgr, enum amd_pp_clock_type
+ return 0;
+ }
+
++static int smu7_get_sclks_with_latency(struct pp_hwmgr *hwmgr,
++ struct pp_clock_levels_with_latency *clocks)
++{
++ struct phm_ppt_v1_information *table_info =
++ (struct phm_ppt_v1_information *)hwmgr->pptable;
++ struct phm_ppt_v1_clock_voltage_dependency_table *dep_sclk_table =
++ table_info->vdd_dep_on_sclk;
++ int i;
++
++ clocks->num_levels = 0;
++ for (i = 0; i < dep_sclk_table->count; i++) {
++ if (dep_sclk_table->entries[i].clk) {
++ clocks->data[clocks->num_levels].clocks_in_khz =
++ dep_sclk_table->entries[i].clk * 10;
++ clocks->num_levels++;
++ }
++ }
++
++ return 0;
++}
++
++static int smu7_get_mclks_with_latency(struct pp_hwmgr *hwmgr,
++ struct pp_clock_levels_with_latency *clocks)
++{
++ struct phm_ppt_v1_information *table_info =
++ (struct phm_ppt_v1_information *)hwmgr->pptable;
++ struct phm_ppt_v1_clock_voltage_dependency_table *dep_mclk_table =
++ table_info->vdd_dep_on_mclk;
++ int i;
++
++ clocks->num_levels = 0;
++ for (i = 0; i < dep_mclk_table->count; i++) {
++ if (dep_mclk_table->entries[i].clk) {
++ clocks->data[clocks->num_levels].clocks_in_khz =
++ dep_mclk_table->entries[i].clk * 10;
++ clocks->data[clocks->num_levels].latency_in_us =
++ smu7_get_mem_latency(hwmgr, dep_mclk_table->entries[i].clk);
++ clocks->num_levels++;
++ }
++ }
++
++ return 0;
++}
++
++static int smu7_get_clock_by_type_with_latency(struct pp_hwmgr *hwmgr,
++ enum amd_pp_clock_type type,
++ struct pp_clock_levels_with_latency *clocks)
++{
++ if (!(hwmgr->chip_id >= CHIP_POLARIS10 &&
++ hwmgr->chip_id <= CHIP_VEGAM))
++ return -EINVAL;
++
++ switch (type) {
++ case amd_pp_sys_clock:
++ smu7_get_sclks_with_latency(hwmgr, clocks);
++ break;
++ case amd_pp_mem_clock:
++ smu7_get_mclks_with_latency(hwmgr, clocks);
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
+ static int smu7_notify_cac_buffer_info(struct pp_hwmgr *hwmgr,
+ uint32_t virtual_addr_low,
+ uint32_t virtual_addr_hi,
+@@ -5188,6 +5254,7 @@ static const struct pp_hwmgr_func smu7_hwmgr_funcs = {
+ .get_mclk_od = smu7_get_mclk_od,
+ .set_mclk_od = smu7_set_mclk_od,
+ .get_clock_by_type = smu7_get_clock_by_type,
++ .get_clock_by_type_with_latency = smu7_get_clock_by_type_with_latency,
+ .read_sensor = smu7_read_sensor,
+ .dynamic_state_management_disable = smu7_disable_dpm_tasks,
+ .avfs_control = smu7_avfs_control,
+diff --git a/drivers/gpu/drm/i915/i915_perf.c b/drivers/gpu/drm/i915/i915_perf.c
+index 3640d0e229d22..74e66dea57086 100644
+--- a/drivers/gpu/drm/i915/i915_perf.c
++++ b/drivers/gpu/drm/i915/i915_perf.c
+@@ -600,7 +600,6 @@ static int append_oa_sample(struct i915_perf_stream *stream,
+ {
+ int report_size = stream->oa_buffer.format_size;
+ struct drm_i915_perf_record_header header;
+- u32 sample_flags = stream->sample_flags;
+
+ header.type = DRM_I915_PERF_RECORD_SAMPLE;
+ header.pad = 0;
+@@ -614,10 +613,8 @@ static int append_oa_sample(struct i915_perf_stream *stream,
+ return -EFAULT;
+ buf += sizeof(header);
+
+- if (sample_flags & SAMPLE_OA_REPORT) {
+- if (copy_to_user(buf, report, report_size))
+- return -EFAULT;
+- }
++ if (copy_to_user(buf, report, report_size))
++ return -EFAULT;
+
+ (*offset) += header.size;
+
+@@ -2676,7 +2673,7 @@ static void i915_oa_stream_enable(struct i915_perf_stream *stream)
+
+ stream->perf->ops.oa_enable(stream);
+
+- if (stream->periodic)
++ if (stream->sample_flags & SAMPLE_OA_REPORT)
+ hrtimer_start(&stream->poll_check_timer,
+ ns_to_ktime(stream->poll_oa_period),
+ HRTIMER_MODE_REL_PINNED);
+@@ -2739,7 +2736,7 @@ static void i915_oa_stream_disable(struct i915_perf_stream *stream)
+ {
+ stream->perf->ops.oa_disable(stream);
+
+- if (stream->periodic)
++ if (stream->sample_flags & SAMPLE_OA_REPORT)
+ hrtimer_cancel(&stream->poll_check_timer);
+ }
+
+@@ -3022,7 +3019,7 @@ static ssize_t i915_perf_read(struct file *file,
+ * disabled stream as an error. In particular it might otherwise lead
+ * to a deadlock for blocking file descriptors...
+ */
+- if (!stream->enabled)
++ if (!stream->enabled || !(stream->sample_flags & SAMPLE_OA_REPORT))
+ return -EIO;
+
+ if (!(file->f_flags & O_NONBLOCK)) {
+diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig
+index 17e9ceb9c6c48..86fda6182543b 100644
+--- a/drivers/iio/adc/Kconfig
++++ b/drivers/iio/adc/Kconfig
+@@ -266,6 +266,8 @@ config ADI_AXI_ADC
+ select IIO_BUFFER
+ select IIO_BUFFER_HW_CONSUMER
+ select IIO_BUFFER_DMAENGINE
++ depends on HAS_IOMEM
++ depends on OF
+ help
+ Say yes here to build support for Analog Devices Generic
+ AXI ADC IP core. The IP core is used for interfacing with
+@@ -912,6 +914,7 @@ config STM32_ADC_CORE
+ depends on ARCH_STM32 || COMPILE_TEST
+ depends on OF
+ depends on REGULATOR
++ depends on HAS_IOMEM
+ select IIO_BUFFER
+ select MFD_STM32_TIMERS
+ select IIO_STM32_TIMER_TRIGGER
+diff --git a/drivers/iio/adc/ab8500-gpadc.c b/drivers/iio/adc/ab8500-gpadc.c
+index 1bb987a4acbab..8d81505282dd3 100644
+--- a/drivers/iio/adc/ab8500-gpadc.c
++++ b/drivers/iio/adc/ab8500-gpadc.c
+@@ -918,7 +918,7 @@ static int ab8500_gpadc_read_raw(struct iio_dev *indio_dev,
+ return processed;
+
+ /* Return millivolt or milliamps or millicentigrades */
+- *val = processed * 1000;
++ *val = processed;
+ return IIO_VAL_INT;
+ }
+
+diff --git a/drivers/iio/adc/ad7949.c b/drivers/iio/adc/ad7949.c
+index 5d597e5050f68..1b4b3203e4285 100644
+--- a/drivers/iio/adc/ad7949.c
++++ b/drivers/iio/adc/ad7949.c
+@@ -91,7 +91,7 @@ static int ad7949_spi_read_channel(struct ad7949_adc_chip *ad7949_adc, int *val,
+ int ret;
+ int i;
+ int bits_per_word = ad7949_adc->resolution;
+- int mask = GENMASK(ad7949_adc->resolution, 0);
++ int mask = GENMASK(ad7949_adc->resolution - 1, 0);
+ struct spi_message msg;
+ struct spi_transfer tx[] = {
+ {
+diff --git a/drivers/iio/adc/qcom-spmi-vadc.c b/drivers/iio/adc/qcom-spmi-vadc.c
+index b0388f8a69f42..7e7d408452eca 100644
+--- a/drivers/iio/adc/qcom-spmi-vadc.c
++++ b/drivers/iio/adc/qcom-spmi-vadc.c
+@@ -598,7 +598,7 @@ static const struct vadc_channels vadc_chans[] = {
+ VADC_CHAN_NO_SCALE(P_MUX16_1_3, 1)
+
+ VADC_CHAN_NO_SCALE(LR_MUX1_BAT_THERM, 0)
+- VADC_CHAN_NO_SCALE(LR_MUX2_BAT_ID, 0)
++ VADC_CHAN_VOLT(LR_MUX2_BAT_ID, 0, SCALE_DEFAULT)
+ VADC_CHAN_NO_SCALE(LR_MUX3_XO_THERM, 0)
+ VADC_CHAN_NO_SCALE(LR_MUX4_AMUX_THM1, 0)
+ VADC_CHAN_NO_SCALE(LR_MUX5_AMUX_THM2, 0)
+diff --git a/drivers/iio/gyro/mpu3050-core.c b/drivers/iio/gyro/mpu3050-core.c
+index 00e58060968c9..8ea6c2aa6263d 100644
+--- a/drivers/iio/gyro/mpu3050-core.c
++++ b/drivers/iio/gyro/mpu3050-core.c
+@@ -550,6 +550,8 @@ static irqreturn_t mpu3050_trigger_handler(int irq, void *p)
+ MPU3050_FIFO_R,
+ &fifo_values[offset],
+ toread);
++ if (ret)
++ goto out_trigger_unlock;
+
+ dev_dbg(mpu3050->dev,
+ "%04x %04x %04x %04x %04x\n",
+diff --git a/drivers/iio/humidity/hid-sensor-humidity.c b/drivers/iio/humidity/hid-sensor-humidity.c
+index 52f605114ef77..d62705448ae25 100644
+--- a/drivers/iio/humidity/hid-sensor-humidity.c
++++ b/drivers/iio/humidity/hid-sensor-humidity.c
+@@ -15,7 +15,10 @@
+ struct hid_humidity_state {
+ struct hid_sensor_common common_attributes;
+ struct hid_sensor_hub_attribute_info humidity_attr;
+- s32 humidity_data;
++ struct {
++ s32 humidity_data;
++ u64 timestamp __aligned(8);
++ } scan;
+ int scale_pre_decml;
+ int scale_post_decml;
+ int scale_precision;
+@@ -125,9 +128,8 @@ static int humidity_proc_event(struct hid_sensor_hub_device *hsdev,
+ struct hid_humidity_state *humid_st = iio_priv(indio_dev);
+
+ if (atomic_read(&humid_st->common_attributes.data_ready))
+- iio_push_to_buffers_with_timestamp(indio_dev,
+- &humid_st->humidity_data,
+- iio_get_time_ns(indio_dev));
++ iio_push_to_buffers_with_timestamp(indio_dev, &humid_st->scan,
++ iio_get_time_ns(indio_dev));
+
+ return 0;
+ }
+@@ -142,7 +144,7 @@ static int humidity_capture_sample(struct hid_sensor_hub_device *hsdev,
+
+ switch (usage_id) {
+ case HID_USAGE_SENSOR_ATMOSPHERIC_HUMIDITY:
+- humid_st->humidity_data = *(s32 *)raw_data;
++ humid_st->scan.humidity_data = *(s32 *)raw_data;
+
+ return 0;
+ default:
+diff --git a/drivers/iio/imu/adis16400.c b/drivers/iio/imu/adis16400.c
+index 54af2ed664f6f..785a4ce606d89 100644
+--- a/drivers/iio/imu/adis16400.c
++++ b/drivers/iio/imu/adis16400.c
+@@ -462,8 +462,7 @@ static int adis16400_initial_setup(struct iio_dev *indio_dev)
+ if (ret)
+ goto err_ret;
+
+- ret = sscanf(indio_dev->name, "adis%u\n", &device_id);
+- if (ret != 1) {
++ if (sscanf(indio_dev->name, "adis%u\n", &device_id) != 1) {
+ ret = -EINVAL;
+ goto err_ret;
+ }
+diff --git a/drivers/iio/light/hid-sensor-prox.c b/drivers/iio/light/hid-sensor-prox.c
+index 330cf359e0b81..e9e00ce0c6d4d 100644
+--- a/drivers/iio/light/hid-sensor-prox.c
++++ b/drivers/iio/light/hid-sensor-prox.c
+@@ -23,6 +23,9 @@ struct prox_state {
+ struct hid_sensor_common common_attributes;
+ struct hid_sensor_hub_attribute_info prox_attr;
+ u32 human_presence;
++ int scale_pre_decml;
++ int scale_post_decml;
++ int scale_precision;
+ };
+
+ /* Channel definitions */
+@@ -93,8 +96,9 @@ static int prox_read_raw(struct iio_dev *indio_dev,
+ ret_type = IIO_VAL_INT;
+ break;
+ case IIO_CHAN_INFO_SCALE:
+- *val = prox_state->prox_attr.units;
+- ret_type = IIO_VAL_INT;
++ *val = prox_state->scale_pre_decml;
++ *val2 = prox_state->scale_post_decml;
++ ret_type = prox_state->scale_precision;
+ break;
+ case IIO_CHAN_INFO_OFFSET:
+ *val = hid_sensor_convert_exponent(
+@@ -234,6 +238,11 @@ static int prox_parse_report(struct platform_device *pdev,
+ HID_USAGE_SENSOR_HUMAN_PRESENCE,
+ &st->common_attributes.sensitivity);
+
++ st->scale_precision = hid_sensor_format_scale(
++ hsdev->usage,
++ &st->prox_attr,
++ &st->scale_pre_decml, &st->scale_post_decml);
++
+ return ret;
+ }
+
+diff --git a/drivers/iio/temperature/hid-sensor-temperature.c b/drivers/iio/temperature/hid-sensor-temperature.c
+index 81688f1b932f1..da9a247097fa2 100644
+--- a/drivers/iio/temperature/hid-sensor-temperature.c
++++ b/drivers/iio/temperature/hid-sensor-temperature.c
+@@ -15,7 +15,10 @@
+ struct temperature_state {
+ struct hid_sensor_common common_attributes;
+ struct hid_sensor_hub_attribute_info temperature_attr;
+- s32 temperature_data;
++ struct {
++ s32 temperature_data;
++ u64 timestamp __aligned(8);
++ } scan;
+ int scale_pre_decml;
+ int scale_post_decml;
+ int scale_precision;
+@@ -32,7 +35,7 @@ static const struct iio_chan_spec temperature_channels[] = {
+ BIT(IIO_CHAN_INFO_SAMP_FREQ) |
+ BIT(IIO_CHAN_INFO_HYSTERESIS),
+ },
+- IIO_CHAN_SOFT_TIMESTAMP(3),
++ IIO_CHAN_SOFT_TIMESTAMP(1),
+ };
+
+ /* Adjust channel real bits based on report descriptor */
+@@ -123,9 +126,8 @@ static int temperature_proc_event(struct hid_sensor_hub_device *hsdev,
+ struct temperature_state *temp_st = iio_priv(indio_dev);
+
+ if (atomic_read(&temp_st->common_attributes.data_ready))
+- iio_push_to_buffers_with_timestamp(indio_dev,
+- &temp_st->temperature_data,
+- iio_get_time_ns(indio_dev));
++ iio_push_to_buffers_with_timestamp(indio_dev, &temp_st->scan,
++ iio_get_time_ns(indio_dev));
+
+ return 0;
+ }
+@@ -140,7 +142,7 @@ static int temperature_capture_sample(struct hid_sensor_hub_device *hsdev,
+
+ switch (usage_id) {
+ case HID_USAGE_SENSOR_DATA_ENVIRONMENTAL_TEMPERATURE:
+- temp_st->temperature_data = *(s32 *)raw_data;
++ temp_st->scan.temperature_data = *(s32 *)raw_data;
+ return 0;
+ default:
+ return -EINVAL;
+diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c
+index 600e056798c0a..75caeec378bda 100644
+--- a/drivers/infiniband/hw/mlx5/qp.c
++++ b/drivers/infiniband/hw/mlx5/qp.c
+@@ -2458,8 +2458,6 @@ static int check_qp_type(struct mlx5_ib_dev *dev, struct ib_qp_init_attr *attr,
+ case MLX5_IB_QPT_HW_GSI:
+ case IB_QPT_DRIVER:
+ case IB_QPT_GSI:
+- if (dev->profile == &raw_eth_profile)
+- goto out;
+ case IB_QPT_RAW_PACKET:
+ case IB_QPT_UD:
+ case MLX5_IB_QPT_REG_UMR:
+@@ -2654,10 +2652,6 @@ static int process_create_flags(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,
+ int create_flags = attr->create_flags;
+ bool cond;
+
+- if (qp->type == IB_QPT_UD && dev->profile == &raw_eth_profile)
+- if (create_flags & ~MLX5_IB_QP_CREATE_WC_TEST)
+- return -EINVAL;
+-
+ if (qp_type == MLX5_IB_QPT_DCT)
+ return (create_flags) ? -EINVAL : 0;
+
+@@ -4235,6 +4229,23 @@ static int mlx5_ib_modify_dct(struct ib_qp *ibqp, struct ib_qp_attr *attr,
+ return 0;
+ }
+
++static bool mlx5_ib_modify_qp_allowed(struct mlx5_ib_dev *dev,
++ struct mlx5_ib_qp *qp,
++ enum ib_qp_type qp_type)
++{
++ if (dev->profile != &raw_eth_profile)
++ return true;
++
++ if (qp_type == IB_QPT_RAW_PACKET || qp_type == MLX5_IB_QPT_REG_UMR)
++ return true;
++
++ /* Internal QP used for wc testing, with NOPs in wq */
++ if (qp->flags & MLX5_IB_QP_CREATE_WC_TEST)
++ return true;
++
++ return false;
++}
++
+ int mlx5_ib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
+ int attr_mask, struct ib_udata *udata)
+ {
+@@ -4247,6 +4258,9 @@ int mlx5_ib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
+ int err = -EINVAL;
+ int port;
+
++ if (!mlx5_ib_modify_qp_allowed(dev, qp, ibqp->qp_type))
++ return -EOPNOTSUPP;
++
+ if (ibqp->rwq_ind_tbl)
+ return -ENOSYS;
+
+diff --git a/drivers/infiniband/ulp/rtrs/rtrs-clt.c b/drivers/infiniband/ulp/rtrs/rtrs-clt.c
+index 5c2107ce7f6e1..6eb95e3c4c8a4 100644
+--- a/drivers/infiniband/ulp/rtrs/rtrs-clt.c
++++ b/drivers/infiniband/ulp/rtrs/rtrs-clt.c
+@@ -1237,8 +1237,7 @@ static void free_sess_reqs(struct rtrs_clt_sess *sess)
+ if (req->mr)
+ ib_dereg_mr(req->mr);
+ kfree(req->sge);
+- rtrs_iu_free(req->iu, DMA_TO_DEVICE,
+- sess->s.dev->ib_dev, 1);
++ rtrs_iu_free(req->iu, sess->s.dev->ib_dev, 1);
+ }
+ kfree(sess->reqs);
+ sess->reqs = NULL;
+@@ -1611,8 +1610,7 @@ static void destroy_con_cq_qp(struct rtrs_clt_con *con)
+
+ rtrs_cq_qp_destroy(&con->c);
+ if (con->rsp_ius) {
+- rtrs_iu_free(con->rsp_ius, DMA_FROM_DEVICE,
+- sess->s.dev->ib_dev, con->queue_size);
++ rtrs_iu_free(con->rsp_ius, sess->s.dev->ib_dev, con->queue_size);
+ con->rsp_ius = NULL;
+ con->queue_size = 0;
+ }
+@@ -2252,7 +2250,7 @@ static void rtrs_clt_info_req_done(struct ib_cq *cq, struct ib_wc *wc)
+ struct rtrs_iu *iu;
+
+ iu = container_of(wc->wr_cqe, struct rtrs_iu, cqe);
+- rtrs_iu_free(iu, DMA_TO_DEVICE, sess->s.dev->ib_dev, 1);
++ rtrs_iu_free(iu, sess->s.dev->ib_dev, 1);
+
+ if (unlikely(wc->status != IB_WC_SUCCESS)) {
+ rtrs_err(sess->clt, "Sess info request send failed: %s\n",
+@@ -2381,7 +2379,7 @@ static void rtrs_clt_info_rsp_done(struct ib_cq *cq, struct ib_wc *wc)
+
+ out:
+ rtrs_clt_update_wc_stats(con);
+- rtrs_iu_free(iu, DMA_FROM_DEVICE, sess->s.dev->ib_dev, 1);
++ rtrs_iu_free(iu, sess->s.dev->ib_dev, 1);
+ rtrs_clt_change_state(sess, state);
+ }
+
+@@ -2443,9 +2441,9 @@ static int rtrs_send_sess_info(struct rtrs_clt_sess *sess)
+
+ out:
+ if (tx_iu)
+- rtrs_iu_free(tx_iu, DMA_TO_DEVICE, sess->s.dev->ib_dev, 1);
++ rtrs_iu_free(tx_iu, sess->s.dev->ib_dev, 1);
+ if (rx_iu)
+- rtrs_iu_free(rx_iu, DMA_FROM_DEVICE, sess->s.dev->ib_dev, 1);
++ rtrs_iu_free(rx_iu, sess->s.dev->ib_dev, 1);
+ if (unlikely(err))
+ /* If we've never taken async path because of malloc problems */
+ rtrs_clt_change_state(sess, RTRS_CLT_CONNECTING_ERR);
+diff --git a/drivers/infiniband/ulp/rtrs/rtrs-pri.h b/drivers/infiniband/ulp/rtrs/rtrs-pri.h
+index 2e1d2f7e372ac..8caad0a2322bf 100644
+--- a/drivers/infiniband/ulp/rtrs/rtrs-pri.h
++++ b/drivers/infiniband/ulp/rtrs/rtrs-pri.h
+@@ -289,8 +289,7 @@ struct rtrs_msg_rdma_hdr {
+ struct rtrs_iu *rtrs_iu_alloc(u32 queue_size, size_t size, gfp_t t,
+ struct ib_device *dev, enum dma_data_direction,
+ void (*done)(struct ib_cq *cq, struct ib_wc *wc));
+-void rtrs_iu_free(struct rtrs_iu *iu, enum dma_data_direction dir,
+- struct ib_device *dev, u32 queue_size);
++void rtrs_iu_free(struct rtrs_iu *iu, struct ib_device *dev, u32 queue_size);
+ int rtrs_iu_post_recv(struct rtrs_con *con, struct rtrs_iu *iu);
+ int rtrs_iu_post_send(struct rtrs_con *con, struct rtrs_iu *iu, size_t size,
+ struct ib_send_wr *head);
+diff --git a/drivers/infiniband/ulp/rtrs/rtrs-srv.c b/drivers/infiniband/ulp/rtrs/rtrs-srv.c
+index b690a3b8f94d9..43806180f85ec 100644
+--- a/drivers/infiniband/ulp/rtrs/rtrs-srv.c
++++ b/drivers/infiniband/ulp/rtrs/rtrs-srv.c
+@@ -584,8 +584,7 @@ static void unmap_cont_bufs(struct rtrs_srv_sess *sess)
+ struct rtrs_srv_mr *srv_mr;
+
+ srv_mr = &sess->mrs[i];
+- rtrs_iu_free(srv_mr->iu, DMA_TO_DEVICE,
+- sess->s.dev->ib_dev, 1);
++ rtrs_iu_free(srv_mr->iu, sess->s.dev->ib_dev, 1);
+ ib_dereg_mr(srv_mr->mr);
+ ib_dma_unmap_sg(sess->s.dev->ib_dev, srv_mr->sgt.sgl,
+ srv_mr->sgt.nents, DMA_BIDIRECTIONAL);
+@@ -672,7 +671,7 @@ static int map_cont_bufs(struct rtrs_srv_sess *sess)
+ if (!srv_mr->iu) {
+ err = -ENOMEM;
+ rtrs_err(ss, "rtrs_iu_alloc(), err: %d\n", err);
+- goto free_iu;
++ goto dereg_mr;
+ }
+ }
+ /* Eventually dma addr for each chunk can be cached */
+@@ -688,9 +687,7 @@ err:
+ srv_mr = &sess->mrs[mri];
+ sgt = &srv_mr->sgt;
+ mr = srv_mr->mr;
+-free_iu:
+- rtrs_iu_free(srv_mr->iu, DMA_TO_DEVICE,
+- sess->s.dev->ib_dev, 1);
++ rtrs_iu_free(srv_mr->iu, sess->s.dev->ib_dev, 1);
+ dereg_mr:
+ ib_dereg_mr(mr);
+ unmap_sg:
+@@ -742,7 +739,7 @@ static void rtrs_srv_info_rsp_done(struct ib_cq *cq, struct ib_wc *wc)
+ struct rtrs_iu *iu;
+
+ iu = container_of(wc->wr_cqe, struct rtrs_iu, cqe);
+- rtrs_iu_free(iu, DMA_TO_DEVICE, sess->s.dev->ib_dev, 1);
++ rtrs_iu_free(iu, sess->s.dev->ib_dev, 1);
+
+ if (unlikely(wc->status != IB_WC_SUCCESS)) {
+ rtrs_err(s, "Sess info response send failed: %s\n",
+@@ -868,7 +865,7 @@ static int process_info_req(struct rtrs_srv_con *con,
+ if (unlikely(err)) {
+ rtrs_err(s, "rtrs_iu_post_send(), err: %d\n", err);
+ iu_free:
+- rtrs_iu_free(tx_iu, DMA_TO_DEVICE, sess->s.dev->ib_dev, 1);
++ rtrs_iu_free(tx_iu, sess->s.dev->ib_dev, 1);
+ }
+ rwr_free:
+ kfree(rwr);
+@@ -913,7 +910,7 @@ static void rtrs_srv_info_req_done(struct ib_cq *cq, struct ib_wc *wc)
+ goto close;
+
+ out:
+- rtrs_iu_free(iu, DMA_FROM_DEVICE, sess->s.dev->ib_dev, 1);
++ rtrs_iu_free(iu, sess->s.dev->ib_dev, 1);
+ return;
+ close:
+ close_sess(sess);
+@@ -936,7 +933,7 @@ static int post_recv_info_req(struct rtrs_srv_con *con)
+ err = rtrs_iu_post_recv(&con->c, rx_iu);
+ if (unlikely(err)) {
+ rtrs_err(s, "rtrs_iu_post_recv(), err: %d\n", err);
+- rtrs_iu_free(rx_iu, DMA_FROM_DEVICE, sess->s.dev->ib_dev, 1);
++ rtrs_iu_free(rx_iu, sess->s.dev->ib_dev, 1);
+ return err;
+ }
+
+diff --git a/drivers/infiniband/ulp/rtrs/rtrs.c b/drivers/infiniband/ulp/rtrs/rtrs.c
+index a3e1a027f8081..d13aff0aa8165 100644
+--- a/drivers/infiniband/ulp/rtrs/rtrs.c
++++ b/drivers/infiniband/ulp/rtrs/rtrs.c
+@@ -31,6 +31,7 @@ struct rtrs_iu *rtrs_iu_alloc(u32 queue_size, size_t size, gfp_t gfp_mask,
+ return NULL;
+ for (i = 0; i < queue_size; i++) {
+ iu = &ius[i];
++ iu->direction = dir;
+ iu->buf = kzalloc(size, gfp_mask);
+ if (!iu->buf)
+ goto err;
+@@ -41,17 +42,15 @@ struct rtrs_iu *rtrs_iu_alloc(u32 queue_size, size_t size, gfp_t gfp_mask,
+
+ iu->cqe.done = done;
+ iu->size = size;
+- iu->direction = dir;
+ }
+ return ius;
+ err:
+- rtrs_iu_free(ius, dir, dma_dev, i);
++ rtrs_iu_free(ius, dma_dev, i);
+ return NULL;
+ }
+ EXPORT_SYMBOL_GPL(rtrs_iu_alloc);
+
+-void rtrs_iu_free(struct rtrs_iu *ius, enum dma_data_direction dir,
+- struct ib_device *ibdev, u32 queue_size)
++void rtrs_iu_free(struct rtrs_iu *ius, struct ib_device *ibdev, u32 queue_size)
+ {
+ struct rtrs_iu *iu;
+ int i;
+@@ -61,7 +60,7 @@ void rtrs_iu_free(struct rtrs_iu *ius, enum dma_data_direction dir,
+
+ for (i = 0; i < queue_size; i++) {
+ iu = &ius[i];
+- ib_dma_unmap_single(ibdev, iu->dma_addr, iu->size, dir);
++ ib_dma_unmap_single(ibdev, iu->dma_addr, iu->size, iu->direction);
+ kfree(iu->buf);
+ }
+ kfree(ius);
+@@ -105,6 +104,22 @@ int rtrs_post_recv_empty(struct rtrs_con *con, struct ib_cqe *cqe)
+ }
+ EXPORT_SYMBOL_GPL(rtrs_post_recv_empty);
+
++static int rtrs_post_send(struct ib_qp *qp, struct ib_send_wr *head,
++ struct ib_send_wr *wr)
++{
++ if (head) {
++ struct ib_send_wr *tail = head;
++
++ while (tail->next)
++ tail = tail->next;
++ tail->next = wr;
++ } else {
++ head = wr;
++ }
++
++ return ib_post_send(qp, head, NULL);
++}
++
+ int rtrs_iu_post_send(struct rtrs_con *con, struct rtrs_iu *iu, size_t size,
+ struct ib_send_wr *head)
+ {
+@@ -127,17 +142,7 @@ int rtrs_iu_post_send(struct rtrs_con *con, struct rtrs_iu *iu, size_t size,
+ .send_flags = IB_SEND_SIGNALED,
+ };
+
+- if (head) {
+- struct ib_send_wr *tail = head;
+-
+- while (tail->next)
+- tail = tail->next;
+- tail->next = &wr;
+- } else {
+- head = &wr;
+- }
+-
+- return ib_post_send(con->qp, head, NULL);
++ return rtrs_post_send(con->qp, head, &wr);
+ }
+ EXPORT_SYMBOL_GPL(rtrs_iu_post_send);
+
+@@ -169,17 +174,7 @@ int rtrs_iu_post_rdma_write_imm(struct rtrs_con *con, struct rtrs_iu *iu,
+ if (WARN_ON(sge[i].length == 0))
+ return -EINVAL;
+
+- if (head) {
+- struct ib_send_wr *tail = head;
+-
+- while (tail->next)
+- tail = tail->next;
+- tail->next = &wr.wr;
+- } else {
+- head = &wr.wr;
+- }
+-
+- return ib_post_send(con->qp, head, NULL);
++ return rtrs_post_send(con->qp, head, &wr.wr);
+ }
+ EXPORT_SYMBOL_GPL(rtrs_iu_post_rdma_write_imm);
+
+@@ -187,26 +182,16 @@ int rtrs_post_rdma_write_imm_empty(struct rtrs_con *con, struct ib_cqe *cqe,
+ u32 imm_data, enum ib_send_flags flags,
+ struct ib_send_wr *head)
+ {
+- struct ib_send_wr wr;
++ struct ib_rdma_wr wr;
+
+- wr = (struct ib_send_wr) {
+- .wr_cqe = cqe,
+- .send_flags = flags,
+- .opcode = IB_WR_RDMA_WRITE_WITH_IMM,
+- .ex.imm_data = cpu_to_be32(imm_data),
++ wr = (struct ib_rdma_wr) {
++ .wr.wr_cqe = cqe,
++ .wr.send_flags = flags,
++ .wr.opcode = IB_WR_RDMA_WRITE_WITH_IMM,
++ .wr.ex.imm_data = cpu_to_be32(imm_data),
+ };
+
+- if (head) {
+- struct ib_send_wr *tail = head;
+-
+- while (tail->next)
+- tail = tail->next;
+- tail->next = &wr;
+- } else {
+- head = &wr;
+- }
+-
+- return ib_post_send(con->qp, head, NULL);
++ return rtrs_post_send(con->qp, head, &wr.wr);
+ }
+ EXPORT_SYMBOL_GPL(rtrs_post_rdma_write_imm_empty);
+
+diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
+index 47afc5938c26b..6d5a39af10978 100644
+--- a/drivers/net/bonding/bond_main.c
++++ b/drivers/net/bonding/bond_main.c
+@@ -3918,11 +3918,15 @@ static int bond_neigh_init(struct neighbour *n)
+
+ rcu_read_lock();
+ slave = bond_first_slave_rcu(bond);
+- if (!slave)
++ if (!slave) {
++ ret = -EINVAL;
+ goto out;
++ }
+ slave_ops = slave->dev->netdev_ops;
+- if (!slave_ops->ndo_neigh_setup)
++ if (!slave_ops->ndo_neigh_setup) {
++ ret = -EINVAL;
+ goto out;
++ }
+
+ /* TODO: find another way [1] to implement this.
+ * Passing a zeroed structure is fragile,
+diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
+index f184f4a79cc39..4a4cb62b73320 100644
+--- a/drivers/net/ethernet/ibm/ibmvnic.c
++++ b/drivers/net/ethernet/ibm/ibmvnic.c
+@@ -409,6 +409,8 @@ static void replenish_pools(struct ibmvnic_adapter *adapter)
+ if (adapter->rx_pool[i].active)
+ replenish_rx_pool(adapter, &adapter->rx_pool[i]);
+ }
++
++ netdev_dbg(adapter->netdev, "Replenished %d pools\n", i);
+ }
+
+ static void release_stats_buffers(struct ibmvnic_adapter *adapter)
+@@ -914,6 +916,7 @@ static int ibmvnic_login(struct net_device *netdev)
+
+ __ibmvnic_set_mac(netdev, adapter->mac_addr);
+
++ netdev_dbg(netdev, "[S:%d] Login succeeded\n", adapter->state);
+ return 0;
+ }
+
+@@ -1343,6 +1346,10 @@ static int ibmvnic_close(struct net_device *netdev)
+ struct ibmvnic_adapter *adapter = netdev_priv(netdev);
+ int rc;
+
++ netdev_dbg(netdev, "[S:%d FOP:%d FRR:%d] Closing\n",
++ adapter->state, adapter->failover_pending,
++ adapter->force_reset_recovery);
++
+ /* If device failover is pending, just set device state and return.
+ * Device operation will be handled by reset routine.
+ */
+@@ -1937,8 +1944,10 @@ static int do_reset(struct ibmvnic_adapter *adapter,
+ struct net_device *netdev = adapter->netdev;
+ int i, rc;
+
+- netdev_dbg(adapter->netdev, "Re-setting driver (%d)\n",
+- rwi->reset_reason);
++ netdev_dbg(adapter->netdev,
++ "[S:%d FOP:%d] Reset reason %d, reset_state %d\n",
++ adapter->state, adapter->failover_pending,
++ rwi->reset_reason, reset_state);
+
+ rtnl_lock();
+ /*
+@@ -2097,6 +2106,8 @@ out:
+ adapter->state = reset_state;
+ rtnl_unlock();
+
++ netdev_dbg(adapter->netdev, "[S:%d FOP:%d] Reset done, rc %d\n",
++ adapter->state, adapter->failover_pending, rc);
+ return rc;
+ }
+
+@@ -2166,6 +2177,8 @@ out:
+ /* restore adapter state if reset failed */
+ if (rc)
+ adapter->state = reset_state;
++ netdev_dbg(adapter->netdev, "[S:%d FOP:%d] Hard reset done, rc %d\n",
++ adapter->state, adapter->failover_pending, rc);
+ return rc;
+ }
+
+@@ -2275,6 +2288,11 @@ static void __ibmvnic_reset(struct work_struct *work)
+ }
+
+ clear_bit_unlock(0, &adapter->resetting);
++
++ netdev_dbg(adapter->netdev,
++ "[S:%d FRR:%d WFR:%d] Done processing resets\n",
++ adapter->state, adapter->force_reset_recovery,
++ adapter->wait_for_reset);
+ }
+
+ static void __ibmvnic_delayed_reset(struct work_struct *work)
+@@ -2295,6 +2313,8 @@ static int ibmvnic_reset(struct ibmvnic_adapter *adapter,
+ unsigned long flags;
+ int ret;
+
++ spin_lock_irqsave(&adapter->rwi_lock, flags);
++
+ /*
+ * If failover is pending don't schedule any other reset.
+ * Instead let the failover complete. If there is already a
+@@ -2315,13 +2335,11 @@ static int ibmvnic_reset(struct ibmvnic_adapter *adapter,
+ goto err;
+ }
+
+- spin_lock_irqsave(&adapter->rwi_lock, flags);
+-
+ list_for_each(entry, &adapter->rwi_list) {
+ tmp = list_entry(entry, struct ibmvnic_rwi, list);
+ if (tmp->reset_reason == reason) {
+- netdev_dbg(netdev, "Skipping matching reset\n");
+- spin_unlock_irqrestore(&adapter->rwi_lock, flags);
++ netdev_dbg(netdev, "Skipping matching reset, reason=%d\n",
++ reason);
+ ret = EBUSY;
+ goto err;
+ }
+@@ -2329,8 +2347,6 @@ static int ibmvnic_reset(struct ibmvnic_adapter *adapter,
+
+ rwi = kzalloc(sizeof(*rwi), GFP_ATOMIC);
+ if (!rwi) {
+- spin_unlock_irqrestore(&adapter->rwi_lock, flags);
+- ibmvnic_close(netdev);
+ ret = ENOMEM;
+ goto err;
+ }
+@@ -2343,12 +2359,17 @@ static int ibmvnic_reset(struct ibmvnic_adapter *adapter,
+ }
+ rwi->reset_reason = reason;
+ list_add_tail(&rwi->list, &adapter->rwi_list);
+- spin_unlock_irqrestore(&adapter->rwi_lock, flags);
+ netdev_dbg(adapter->netdev, "Scheduling reset (reason %d)\n", reason);
+ schedule_work(&adapter->ibmvnic_reset);
+
+- return 0;
++ ret = 0;
+ err:
++ /* ibmvnic_close() below can block, so drop the lock first */
++ spin_unlock_irqrestore(&adapter->rwi_lock, flags);
++
++ if (ret == ENOMEM)
++ ibmvnic_close(netdev);
++
+ return -ret;
+ }
+
+@@ -5359,7 +5380,18 @@ static int ibmvnic_remove(struct vio_dev *dev)
+ unsigned long flags;
+
+ spin_lock_irqsave(&adapter->state_lock, flags);
++
++ /* If ibmvnic_reset() is scheduling a reset, wait for it to
++ * finish. Then, set the state to REMOVING to prevent it from
++ * scheduling any more work and to have reset functions ignore
++ * any resets that have already been scheduled. Drop the lock
++ * after setting state, so __ibmvnic_reset() which is called
++ * from the flush_work() below, can make progress.
++ */
++ spin_lock(&adapter->rwi_lock);
+ adapter->state = VNIC_REMOVING;
++ spin_unlock(&adapter->rwi_lock);
++
+ spin_unlock_irqrestore(&adapter->state_lock, flags);
+
+ flush_work(&adapter->ibmvnic_reset);
+diff --git a/drivers/net/ethernet/ibm/ibmvnic.h b/drivers/net/ethernet/ibm/ibmvnic.h
+index 21e7ea858cda3..b27211063c643 100644
+--- a/drivers/net/ethernet/ibm/ibmvnic.h
++++ b/drivers/net/ethernet/ibm/ibmvnic.h
+@@ -1080,6 +1080,7 @@ struct ibmvnic_adapter {
+ struct tasklet_struct tasklet;
+ enum vnic_state state;
+ enum ibmvnic_reset_reason reset_reason;
++ /* when taking both state and rwi locks, take state lock first */
+ spinlock_t rwi_lock;
+ struct list_head rwi_list;
+ struct work_struct ibmvnic_reset;
+@@ -1096,6 +1097,8 @@ struct ibmvnic_adapter {
+ struct ibmvnic_tunables desired;
+ struct ibmvnic_tunables fallback;
+
+- /* Used for serializatin of state field */
++ /* Used for serialization of state field. When taking both state
++ * and rwi locks, take state lock first.
++ */
+ spinlock_t state_lock;
+ };
+diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
+index 3e4a4d6f0419c..4a2d03cada01e 100644
+--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
++++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
+@@ -5920,7 +5920,7 @@ static int i40e_add_channel(struct i40e_pf *pf, u16 uplink_seid,
+ ch->enabled_tc = !i40e_is_channel_macvlan(ch) && enabled_tc;
+ ch->seid = ctxt.seid;
+ ch->vsi_number = ctxt.vsi_number;
+- ch->stat_counter_idx = cpu_to_le16(ctxt.info.stat_counter_idx);
++ ch->stat_counter_idx = le16_to_cpu(ctxt.info.stat_counter_idx);
+
+ /* copy just the sections touched not the entire info
+ * since not all sections are valid as returned by
+@@ -7599,8 +7599,8 @@ static inline void
+ i40e_set_cld_element(struct i40e_cloud_filter *filter,
+ struct i40e_aqc_cloud_filters_element_data *cld)
+ {
+- int i, j;
+ u32 ipa;
++ int i;
+
+ memset(cld, 0, sizeof(*cld));
+ ether_addr_copy(cld->outer_mac, filter->dst_mac);
+@@ -7611,14 +7611,14 @@ i40e_set_cld_element(struct i40e_cloud_filter *filter,
+
+ if (filter->n_proto == ETH_P_IPV6) {
+ #define IPV6_MAX_INDEX (ARRAY_SIZE(filter->dst_ipv6) - 1)
+- for (i = 0, j = 0; i < ARRAY_SIZE(filter->dst_ipv6);
+- i++, j += 2) {
++ for (i = 0; i < ARRAY_SIZE(filter->dst_ipv6); i++) {
+ ipa = be32_to_cpu(filter->dst_ipv6[IPV6_MAX_INDEX - i]);
+- ipa = cpu_to_le32(ipa);
+- memcpy(&cld->ipaddr.raw_v6.data[j], &ipa, sizeof(ipa));
++
++ *(__le32 *)&cld->ipaddr.raw_v6.data[i * 2] = cpu_to_le32(ipa);
+ }
+ } else {
+ ipa = be32_to_cpu(filter->dst_ipv4);
++
+ memcpy(&cld->ipaddr.v4.data, &ipa, sizeof(ipa));
+ }
+
+diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
+index 38dec49ac64d2..899714243af7a 100644
+--- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c
++++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
+@@ -1782,7 +1782,7 @@ void i40e_process_skb_fields(struct i40e_ring *rx_ring,
+ skb_record_rx_queue(skb, rx_ring->queue_index);
+
+ if (qword & BIT(I40E_RX_DESC_STATUS_L2TAG1P_SHIFT)) {
+- u16 vlan_tag = rx_desc->wb.qword0.lo_dword.l2tag1;
++ __le16 vlan_tag = rx_desc->wb.qword0.lo_dword.l2tag1;
+
+ __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
+ le16_to_cpu(vlan_tag));
+diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
+index a7f74b3b97af5..47ae1d1723c54 100644
+--- a/drivers/net/phy/micrel.c
++++ b/drivers/net/phy/micrel.c
+@@ -1263,6 +1263,7 @@ static struct phy_driver ksphy_driver[] = {
+ .probe = kszphy_probe,
+ .config_init = ksz8081_config_init,
+ .ack_interrupt = kszphy_ack_interrupt,
++ .soft_reset = genphy_soft_reset,
+ .config_intr = kszphy_config_intr,
+ .get_sset_count = kszphy_get_sset_count,
+ .get_strings = kszphy_get_strings,
+diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/22000.c b/drivers/net/wireless/intel/iwlwifi/cfg/22000.c
+index 92c50efd48fc3..39842bdef4b46 100644
+--- a/drivers/net/wireless/intel/iwlwifi/cfg/22000.c
++++ b/drivers/net/wireless/intel/iwlwifi/cfg/22000.c
+@@ -92,6 +92,7 @@
+ #define IWL_SNJ_A_HR_B_FW_PRE "iwlwifi-SoSnj-a0-hr-b0-"
+ #define IWL_MA_A_GF_A_FW_PRE "iwlwifi-ma-a0-gf-a0-"
+ #define IWL_MA_A_MR_A_FW_PRE "iwlwifi-ma-a0-mr-a0-"
++#define IWL_SNJ_A_MR_A_FW_PRE "iwlwifi-SoSnj-a0-mr-a0-"
+
+ #define IWL_QU_B_HR_B_MODULE_FIRMWARE(api) \
+ IWL_QU_B_HR_B_FW_PRE __stringify(api) ".ucode"
+@@ -127,6 +128,8 @@
+ IWL_MA_A_GF_A_FW_PRE __stringify(api) ".ucode"
+ #define IWL_MA_A_MR_A_FW_MODULE_FIRMWARE(api) \
+ IWL_MA_A_MR_A_FW_PRE __stringify(api) ".ucode"
++#define IWL_SNJ_A_MR_A_MODULE_FIRMWARE(api) \
++ IWL_SNJ_A_MR_A_FW_PRE __stringify(api) ".ucode"
+
+ static const struct iwl_base_params iwl_22000_base_params = {
+ .eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
+@@ -672,6 +675,13 @@ const struct iwl_cfg iwl_cfg_ma_a0_mr_a0 = {
+ .num_rbds = IWL_NUM_RBDS_AX210_HE,
+ };
+
++const struct iwl_cfg iwl_cfg_snj_a0_mr_a0 = {
++ .fw_name_pre = IWL_SNJ_A_MR_A_FW_PRE,
++ .uhb_supported = true,
++ IWL_DEVICE_AX210,
++ .num_rbds = IWL_NUM_RBDS_AX210_HE,
++};
++
+ MODULE_FIRMWARE(IWL_QU_B_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
+ MODULE_FIRMWARE(IWL_QNJ_B_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
+ MODULE_FIRMWARE(IWL_QU_C_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
+@@ -689,3 +699,4 @@ MODULE_FIRMWARE(IWL_SNJ_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
+ MODULE_FIRMWARE(IWL_SNJ_A_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
+ MODULE_FIRMWARE(IWL_MA_A_GF_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
+ MODULE_FIRMWARE(IWL_MA_A_MR_A_FW_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
++MODULE_FIRMWARE(IWL_SNJ_A_MR_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
+diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-config.h b/drivers/net/wireless/intel/iwlwifi/iwl-config.h
+index 9b91aa9b2e7f1..bd04e4fbbb8ab 100644
+--- a/drivers/net/wireless/intel/iwlwifi/iwl-config.h
++++ b/drivers/net/wireless/intel/iwlwifi/iwl-config.h
+@@ -472,6 +472,7 @@ struct iwl_cfg {
+ #define IWL_CFG_MAC_TYPE_QU 0x33
+ #define IWL_CFG_MAC_TYPE_QUZ 0x35
+ #define IWL_CFG_MAC_TYPE_QNJ 0x36
++#define IWL_CFG_MAC_TYPE_SNJ 0x42
+ #define IWL_CFG_MAC_TYPE_MA 0x44
+
+ #define IWL_CFG_RF_TYPE_TH 0x105
+@@ -656,6 +657,7 @@ extern const struct iwl_cfg iwlax211_cfg_snj_gf_a0;
+ extern const struct iwl_cfg iwlax201_cfg_snj_hr_b0;
+ extern const struct iwl_cfg iwl_cfg_ma_a0_gf_a0;
+ extern const struct iwl_cfg iwl_cfg_ma_a0_mr_a0;
++extern const struct iwl_cfg iwl_cfg_snj_a0_mr_a0;
+ #endif /* CONFIG_IWLMVM */
+
+ #endif /* __IWL_CONFIG_H__ */
+diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
+index 2823a1e81656d..fa32f9045c0cb 100644
+--- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
++++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
+@@ -1002,6 +1002,12 @@ static const struct iwl_dev_info iwl_dev_info_table[] = {
+ IWL_CFG_RF_TYPE_MR, IWL_CFG_ANY,
+ IWL_CFG_ANY, IWL_CFG_ANY,
+ iwl_cfg_ma_a0_mr_a0, iwl_ma_name),
++ _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
++ IWL_CFG_MAC_TYPE_SNJ, IWL_CFG_ANY,
++ IWL_CFG_RF_TYPE_MR, IWL_CFG_ANY,
++ IWL_CFG_ANY, IWL_CFG_ANY,
++ iwl_cfg_snj_a0_mr_a0, iwl_ma_name),
++
+
+ #endif /* CONFIG_IWLMVM */
+ };
+diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
+index e1e574ecf031b..de846aaa8728b 100644
+--- a/drivers/nvme/host/core.c
++++ b/drivers/nvme/host/core.c
+@@ -1894,30 +1894,18 @@ static void nvme_config_discard(struct gendisk *disk, struct nvme_ns *ns)
+ blk_queue_max_write_zeroes_sectors(queue, UINT_MAX);
+ }
+
+-static void nvme_config_write_zeroes(struct gendisk *disk, struct nvme_ns *ns)
++/*
++ * Even though NVMe spec explicitly states that MDTS is not applicable to the
++ * write-zeroes, we are cautious and limit the size to the controllers
++ * max_hw_sectors value, which is based on the MDTS field and possibly other
++ * limiting factors.
++ */
++static void nvme_config_write_zeroes(struct request_queue *q,
++ struct nvme_ctrl *ctrl)
+ {
+- u64 max_blocks;
+-
+- if (!(ns->ctrl->oncs & NVME_CTRL_ONCS_WRITE_ZEROES) ||
+- (ns->ctrl->quirks & NVME_QUIRK_DISABLE_WRITE_ZEROES))
+- return;
+- /*
+- * Even though NVMe spec explicitly states that MDTS is not
+- * applicable to the write-zeroes:- "The restriction does not apply to
+- * commands that do not transfer data between the host and the
+- * controller (e.g., Write Uncorrectable ro Write Zeroes command).".
+- * In order to be more cautious use controller's max_hw_sectors value
+- * to configure the maximum sectors for the write-zeroes which is
+- * configured based on the controller's MDTS field in the
+- * nvme_init_identify() if available.
+- */
+- if (ns->ctrl->max_hw_sectors == UINT_MAX)
+- max_blocks = (u64)USHRT_MAX + 1;
+- else
+- max_blocks = ns->ctrl->max_hw_sectors + 1;
+-
+- blk_queue_max_write_zeroes_sectors(disk->queue,
+- nvme_lba_to_sect(ns, max_blocks));
++ if ((ctrl->oncs & NVME_CTRL_ONCS_WRITE_ZEROES) &&
++ !(ctrl->quirks & NVME_QUIRK_DISABLE_WRITE_ZEROES))
++ blk_queue_max_write_zeroes_sectors(q, ctrl->max_hw_sectors);
+ }
+
+ static bool nvme_ns_ids_valid(struct nvme_ns_ids *ids)
+@@ -2089,7 +2077,7 @@ static void nvme_update_disk_info(struct gendisk *disk,
+ set_capacity_revalidate_and_notify(disk, capacity, false);
+
+ nvme_config_discard(disk, ns);
+- nvme_config_write_zeroes(disk, ns);
++ nvme_config_write_zeroes(disk->queue, ns->ctrl);
+
+ if (id->nsattr & NVME_NS_ATTR_RO)
+ set_disk_ro(disk, true);
+diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
+index 1957030132722..8b326508a480e 100644
+--- a/drivers/nvme/host/rdma.c
++++ b/drivers/nvme/host/rdma.c
+@@ -736,8 +736,11 @@ static int nvme_rdma_alloc_io_queues(struct nvme_rdma_ctrl *ctrl)
+ return ret;
+
+ ctrl->ctrl.queue_count = nr_io_queues + 1;
+- if (ctrl->ctrl.queue_count < 2)
+- return 0;
++ if (ctrl->ctrl.queue_count < 2) {
++ dev_err(ctrl->ctrl.device,
++ "unable to set any I/O queues\n");
++ return -ENOMEM;
++ }
+
+ dev_info(ctrl->ctrl.device,
+ "creating %d I/O queues.\n", nr_io_queues);
+diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c
+index 739ac7deccd96..9444e5e2a95ba 100644
+--- a/drivers/nvme/host/tcp.c
++++ b/drivers/nvme/host/tcp.c
+@@ -287,7 +287,7 @@ static inline void nvme_tcp_queue_request(struct nvme_tcp_request *req,
+ * directly, otherwise queue io_work. Also, only do that if we
+ * are on the same cpu, so we don't introduce contention.
+ */
+- if (queue->io_cpu == __smp_processor_id() &&
++ if (queue->io_cpu == raw_smp_processor_id() &&
+ sync && empty && mutex_trylock(&queue->send_mutex)) {
+ queue->more_requests = !last;
+ nvme_tcp_send_all(queue);
+@@ -568,6 +568,13 @@ static int nvme_tcp_setup_h2c_data_pdu(struct nvme_tcp_request *req,
+ req->pdu_len = le32_to_cpu(pdu->r2t_length);
+ req->pdu_sent = 0;
+
++ if (unlikely(!req->pdu_len)) {
++ dev_err(queue->ctrl->ctrl.device,
++ "req %d r2t len is %u, probably a bug...\n",
++ rq->tag, req->pdu_len);
++ return -EPROTO;
++ }
++
+ if (unlikely(req->data_sent + req->pdu_len > req->data_len)) {
+ dev_err(queue->ctrl->ctrl.device,
+ "req %d r2t len %u exceeded data len %u (%zu sent)\n",
+@@ -1748,8 +1755,11 @@ static int nvme_tcp_alloc_io_queues(struct nvme_ctrl *ctrl)
+ return ret;
+
+ ctrl->queue_count = nr_io_queues + 1;
+- if (ctrl->queue_count < 2)
+- return 0;
++ if (ctrl->queue_count < 2) {
++ dev_err(ctrl->device,
++ "unable to set any I/O queues\n");
++ return -ENOMEM;
++ }
+
+ dev_info(ctrl->device,
+ "creating %d I/O queues.\n", nr_io_queues);
+diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c
+index 957b39a82431b..1e79d33c1df7e 100644
+--- a/drivers/nvme/target/core.c
++++ b/drivers/nvme/target/core.c
+@@ -1109,9 +1109,20 @@ static void nvmet_start_ctrl(struct nvmet_ctrl *ctrl)
+ {
+ lockdep_assert_held(&ctrl->lock);
+
+- if (nvmet_cc_iosqes(ctrl->cc) != NVME_NVM_IOSQES ||
+- nvmet_cc_iocqes(ctrl->cc) != NVME_NVM_IOCQES ||
+- nvmet_cc_mps(ctrl->cc) != 0 ||
++ /*
++ * Only I/O controllers should verify iosqes,iocqes.
++ * Strictly speaking, the spec says a discovery controller
++ * should verify iosqes,iocqes are zeroed, however that
++ * would break backwards compatibility, so don't enforce it.
++ */
++ if (ctrl->subsys->type != NVME_NQN_DISC &&
++ (nvmet_cc_iosqes(ctrl->cc) != NVME_NVM_IOSQES ||
++ nvmet_cc_iocqes(ctrl->cc) != NVME_NVM_IOCQES)) {
++ ctrl->csts = NVME_CSTS_CFS;
++ return;
++ }
++
++ if (nvmet_cc_mps(ctrl->cc) != 0 ||
+ nvmet_cc_ams(ctrl->cc) != 0 ||
+ nvmet_cc_css(ctrl->cc) != 0) {
+ ctrl->csts = NVME_CSTS_CFS;
+diff --git a/drivers/pci/hotplug/rpadlpar_sysfs.c b/drivers/pci/hotplug/rpadlpar_sysfs.c
+index cdbfa5df3a51f..dbfa0b55d31a5 100644
+--- a/drivers/pci/hotplug/rpadlpar_sysfs.c
++++ b/drivers/pci/hotplug/rpadlpar_sysfs.c
+@@ -34,12 +34,11 @@ static ssize_t add_slot_store(struct kobject *kobj, struct kobj_attribute *attr,
+ if (nbytes >= MAX_DRC_NAME_LEN)
+ return 0;
+
+- memcpy(drc_name, buf, nbytes);
++ strscpy(drc_name, buf, nbytes + 1);
+
+ end = strchr(drc_name, '\n');
+- if (!end)
+- end = &drc_name[nbytes];
+- *end = '\0';
++ if (end)
++ *end = '\0';
+
+ rc = dlpar_add_slot(drc_name);
+ if (rc)
+@@ -65,12 +64,11 @@ static ssize_t remove_slot_store(struct kobject *kobj,
+ if (nbytes >= MAX_DRC_NAME_LEN)
+ return 0;
+
+- memcpy(drc_name, buf, nbytes);
++ strscpy(drc_name, buf, nbytes + 1);
+
+ end = strchr(drc_name, '\n');
+- if (!end)
+- end = &drc_name[nbytes];
+- *end = '\0';
++ if (end)
++ *end = '\0';
+
+ rc = dlpar_remove_slot(drc_name);
+ if (rc)
+diff --git a/drivers/pci/hotplug/s390_pci_hpc.c b/drivers/pci/hotplug/s390_pci_hpc.c
+index c9e790c74051f..a047c421debe2 100644
+--- a/drivers/pci/hotplug/s390_pci_hpc.c
++++ b/drivers/pci/hotplug/s390_pci_hpc.c
+@@ -93,8 +93,9 @@ static int disable_slot(struct hotplug_slot *hotplug_slot)
+ pci_dev_put(pdev);
+ return -EBUSY;
+ }
++ pci_dev_put(pdev);
+
+- zpci_remove_device(zdev);
++ zpci_remove_device(zdev, false);
+
+ rc = zpci_disable_device(zdev);
+ if (rc)
+diff --git a/drivers/regulator/pca9450-regulator.c b/drivers/regulator/pca9450-regulator.c
+index cb29421d745aa..d38109cc3a011 100644
+--- a/drivers/regulator/pca9450-regulator.c
++++ b/drivers/regulator/pca9450-regulator.c
+@@ -5,6 +5,7 @@
+ */
+
+ #include <linux/err.h>
++#include <linux/gpio/consumer.h>
+ #include <linux/i2c.h>
+ #include <linux/interrupt.h>
+ #include <linux/kernel.h>
+@@ -32,6 +33,7 @@ struct pca9450_regulator_desc {
+ struct pca9450 {
+ struct device *dev;
+ struct regmap *regmap;
++ struct gpio_desc *sd_vsel_gpio;
+ enum pca9450_chip_type type;
+ unsigned int rcnt;
+ int irq;
+@@ -795,6 +797,34 @@ static int pca9450_i2c_probe(struct i2c_client *i2c,
+ return ret;
+ }
+
++ /* Clear PRESET_EN bit in BUCK123_DVS to use DVS registers */
++ ret = regmap_clear_bits(pca9450->regmap, PCA9450_REG_BUCK123_DVS,
++ BUCK123_PRESET_EN);
++ if (ret) {
++ dev_err(&i2c->dev, "Failed to clear PRESET_EN bit: %d\n", ret);
++ return ret;
++ }
++
++ /* Set reset behavior on assertion of WDOG_B signal */
++ ret = regmap_update_bits(pca9450->regmap, PCA9450_REG_RESET_CTRL,
++ WDOG_B_CFG_MASK, WDOG_B_CFG_COLD_LDO12);
++ if (ret) {
++ dev_err(&i2c->dev, "Failed to set WDOG_B reset behavior\n");
++ return ret;
++ }
++
++ /*
++ * The driver uses the LDO5CTRL_H register to control the LDO5 regulator.
++ * This is only valid if the SD_VSEL input of the PMIC is high. Let's
++ * check if the pin is available as GPIO and set it to high.
++ */
++ pca9450->sd_vsel_gpio = gpiod_get_optional(pca9450->dev, "sd-vsel", GPIOD_OUT_HIGH);
++
++ if (IS_ERR(pca9450->sd_vsel_gpio)) {
++ dev_err(&i2c->dev, "Failed to get SD_VSEL GPIO\n");
++ return ret;
++ }
++
+ dev_info(&i2c->dev, "%s probed.\n",
+ type == PCA9450_TYPE_PCA9450A ? "pca9450a" : "pca9450bc");
+
+diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
+index 03f96177e58ee..4d51c4ace8ea3 100644
+--- a/drivers/s390/net/qeth_core_main.c
++++ b/drivers/s390/net/qeth_core_main.c
+@@ -470,6 +470,7 @@ static void qeth_qdio_handle_aob(struct qeth_card *card,
+ struct qaob *aob;
+ struct qeth_qdio_out_buffer *buffer;
+ enum iucv_tx_notify notification;
++ struct qeth_qdio_out_q *queue;
+ unsigned int i;
+
+ aob = (struct qaob *) phys_to_virt(phys_aob_addr);
+@@ -511,7 +512,9 @@ static void qeth_qdio_handle_aob(struct qeth_card *card,
+ kmem_cache_free(qeth_core_header_cache, data);
+ }
+
++ queue = buffer->q;
+ atomic_set(&buffer->state, QETH_QDIO_BUF_EMPTY);
++ napi_schedule(&queue->napi);
+ break;
+ default:
+ WARN_ON_ONCE(1);
+@@ -7013,9 +7016,7 @@ int qeth_open(struct net_device *dev)
+ card->data.state = CH_STATE_UP;
+ netif_tx_start_all_queues(dev);
+
+- napi_enable(&card->napi);
+ local_bh_disable();
+- napi_schedule(&card->napi);
+ if (IS_IQD(card)) {
+ struct qeth_qdio_out_q *queue;
+ unsigned int i;
+@@ -7027,8 +7028,12 @@ int qeth_open(struct net_device *dev)
+ napi_schedule(&queue->napi);
+ }
+ }
++
++ napi_enable(&card->napi);
++ napi_schedule(&card->napi);
+ /* kick-start the NAPI softirq: */
+ local_bh_enable();
++
+ return 0;
+ }
+ EXPORT_SYMBOL_GPL(qeth_open);
+@@ -7038,6 +7043,11 @@ int qeth_stop(struct net_device *dev)
+ struct qeth_card *card = dev->ml_priv;
+
+ QETH_CARD_TEXT(card, 4, "qethstop");
++
++ napi_disable(&card->napi);
++ cancel_delayed_work_sync(&card->buffer_reclaim_work);
++ qdio_stop_irq(CARD_DDEV(card));
++
+ if (IS_IQD(card)) {
+ struct qeth_qdio_out_q *queue;
+ unsigned int i;
+@@ -7058,10 +7068,6 @@ int qeth_stop(struct net_device *dev)
+ netif_tx_disable(dev);
+ }
+
+- napi_disable(&card->napi);
+- cancel_delayed_work_sync(&card->buffer_reclaim_work);
+- qdio_stop_irq(CARD_DDEV(card));
+-
+ return 0;
+ }
+ EXPORT_SYMBOL_GPL(qeth_stop);
+diff --git a/drivers/scsi/aic94xx/aic94xx_scb.c b/drivers/scsi/aic94xx/aic94xx_scb.c
+index e2d880a5f3915..7b0566f6a97f2 100644
+--- a/drivers/scsi/aic94xx/aic94xx_scb.c
++++ b/drivers/scsi/aic94xx/aic94xx_scb.c
+@@ -68,7 +68,6 @@ static void asd_phy_event_tasklet(struct asd_ascb *ascb,
+ struct done_list_struct *dl)
+ {
+ struct asd_ha_struct *asd_ha = ascb->ha;
+- struct sas_ha_struct *sas_ha = &asd_ha->sas_ha;
+ int phy_id = dl->status_block[0] & DL_PHY_MASK;
+ struct asd_phy *phy = &asd_ha->phys[phy_id];
+
+@@ -81,7 +80,7 @@ static void asd_phy_event_tasklet(struct asd_ascb *ascb,
+ ASD_DPRINTK("phy%d: device unplugged\n", phy_id);
+ asd_turn_led(asd_ha, phy_id, 0);
+ sas_phy_disconnected(&phy->sas_phy);
+- sas_ha->notify_phy_event(&phy->sas_phy, PHYE_LOSS_OF_SIGNAL);
++ sas_notify_phy_event(&phy->sas_phy, PHYE_LOSS_OF_SIGNAL);
+ break;
+ case CURRENT_OOB_DONE:
+ /* hot plugged device */
+@@ -89,12 +88,12 @@ static void asd_phy_event_tasklet(struct asd_ascb *ascb,
+ get_lrate_mode(phy, oob_mode);
+ ASD_DPRINTK("phy%d device plugged: lrate:0x%x, proto:0x%x\n",
+ phy_id, phy->sas_phy.linkrate, phy->sas_phy.iproto);
+- sas_ha->notify_phy_event(&phy->sas_phy, PHYE_OOB_DONE);
++ sas_notify_phy_event(&phy->sas_phy, PHYE_OOB_DONE);
+ break;
+ case CURRENT_SPINUP_HOLD:
+ /* hot plug SATA, no COMWAKE sent */
+ asd_turn_led(asd_ha, phy_id, 1);
+- sas_ha->notify_phy_event(&phy->sas_phy, PHYE_SPINUP_HOLD);
++ sas_notify_phy_event(&phy->sas_phy, PHYE_SPINUP_HOLD);
+ break;
+ case CURRENT_GTO_TIMEOUT:
+ case CURRENT_OOB_ERROR:
+@@ -102,7 +101,7 @@ static void asd_phy_event_tasklet(struct asd_ascb *ascb,
+ dl->status_block[1]);
+ asd_turn_led(asd_ha, phy_id, 0);
+ sas_phy_disconnected(&phy->sas_phy);
+- sas_ha->notify_phy_event(&phy->sas_phy, PHYE_OOB_ERROR);
++ sas_notify_phy_event(&phy->sas_phy, PHYE_OOB_ERROR);
+ break;
+ }
+ }
+@@ -222,7 +221,6 @@ static void asd_bytes_dmaed_tasklet(struct asd_ascb *ascb,
+ int edb_el = edb_id + ascb->edb_index;
+ struct asd_dma_tok *edb = ascb->ha->seq.edb_arr[edb_el];
+ struct asd_phy *phy = &ascb->ha->phys[phy_id];
+- struct sas_ha_struct *sas_ha = phy->sas_phy.ha;
+ u16 size = ((dl->status_block[3] & 7) << 8) | dl->status_block[2];
+
+ size = min(size, (u16) sizeof(phy->frame_rcvd));
+@@ -234,7 +232,7 @@ static void asd_bytes_dmaed_tasklet(struct asd_ascb *ascb,
+ spin_unlock_irqrestore(&phy->sas_phy.frame_rcvd_lock, flags);
+ asd_dump_frame_rcvd(phy, dl);
+ asd_form_port(ascb->ha, phy);
+- sas_ha->notify_port_event(&phy->sas_phy, PORTE_BYTES_DMAED);
++ sas_notify_port_event(&phy->sas_phy, PORTE_BYTES_DMAED);
+ }
+
+ static void asd_link_reset_err_tasklet(struct asd_ascb *ascb,
+@@ -270,7 +268,7 @@ static void asd_link_reset_err_tasklet(struct asd_ascb *ascb,
+ asd_turn_led(asd_ha, phy_id, 0);
+ sas_phy_disconnected(sas_phy);
+ asd_deform_port(asd_ha, phy);
+- sas_ha->notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
++ sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
+
+ if (retries_left == 0) {
+ int num = 1;
+@@ -315,7 +313,7 @@ static void asd_primitive_rcvd_tasklet(struct asd_ascb *ascb,
+ spin_lock_irqsave(&sas_phy->sas_prim_lock, flags);
+ sas_phy->sas_prim = ffs(cont);
+ spin_unlock_irqrestore(&sas_phy->sas_prim_lock, flags);
+- sas_ha->notify_port_event(sas_phy,PORTE_BROADCAST_RCVD);
++ sas_notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
+ break;
+
+ case LmUNKNOWNP:
+@@ -336,7 +334,7 @@ static void asd_primitive_rcvd_tasklet(struct asd_ascb *ascb,
+ /* The sequencer disables all phys on that port.
+ * We have to re-enable the phys ourselves. */
+ asd_deform_port(asd_ha, phy);
+- sas_ha->notify_port_event(sas_phy, PORTE_HARD_RESET);
++ sas_notify_port_event(sas_phy, PORTE_HARD_RESET);
+ break;
+
+ default:
+@@ -567,7 +565,7 @@ static void escb_tasklet_complete(struct asd_ascb *ascb,
+ /* the device is gone */
+ sas_phy_disconnected(sas_phy);
+ asd_deform_port(asd_ha, phy);
+- sas_ha->notify_port_event(sas_phy, PORTE_TIMER_EVENT);
++ sas_notify_port_event(sas_phy, PORTE_TIMER_EVENT);
+ break;
+ default:
+ ASD_DPRINTK("%s: phy%d: unknown event:0x%x\n", __func__,
+diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/hisi_sas_main.c
+index 274ccf18ce2db..1feca45384c7a 100644
+--- a/drivers/scsi/hisi_sas/hisi_sas_main.c
++++ b/drivers/scsi/hisi_sas/hisi_sas_main.c
+@@ -622,7 +622,6 @@ static void hisi_sas_bytes_dmaed(struct hisi_hba *hisi_hba, int phy_no)
+ {
+ struct hisi_sas_phy *phy = &hisi_hba->phy[phy_no];
+ struct asd_sas_phy *sas_phy = &phy->sas_phy;
+- struct sas_ha_struct *sas_ha;
+
+ if (!phy->phy_attached)
+ return;
+@@ -633,8 +632,7 @@ static void hisi_sas_bytes_dmaed(struct hisi_hba *hisi_hba, int phy_no)
+ return;
+ }
+
+- sas_ha = &hisi_hba->sha;
+- sas_ha->notify_phy_event(sas_phy, PHYE_OOB_DONE);
++ sas_notify_phy_event(sas_phy, PHYE_OOB_DONE);
+
+ if (sas_phy->phy) {
+ struct sas_phy *sphy = sas_phy->phy;
+@@ -662,7 +660,7 @@ static void hisi_sas_bytes_dmaed(struct hisi_hba *hisi_hba, int phy_no)
+ }
+
+ sas_phy->frame_rcvd_size = phy->frame_rcvd_size;
+- sas_ha->notify_port_event(sas_phy, PORTE_BYTES_DMAED);
++ sas_notify_port_event(sas_phy, PORTE_BYTES_DMAED);
+ }
+
+ static struct hisi_sas_device *hisi_sas_alloc_dev(struct domain_device *device)
+@@ -1417,7 +1415,6 @@ static void hisi_sas_refresh_port_id(struct hisi_hba *hisi_hba)
+
+ static void hisi_sas_rescan_topology(struct hisi_hba *hisi_hba, u32 state)
+ {
+- struct sas_ha_struct *sas_ha = &hisi_hba->sha;
+ struct asd_sas_port *_sas_port = NULL;
+ int phy_no;
+
+@@ -1438,7 +1435,7 @@ static void hisi_sas_rescan_topology(struct hisi_hba *hisi_hba, u32 state)
+ _sas_port = sas_port;
+
+ if (dev_is_expander(dev->dev_type))
+- sas_ha->notify_port_event(sas_phy,
++ sas_notify_port_event(sas_phy,
+ PORTE_BROADCAST_RCVD);
+ }
+ } else {
+@@ -2200,7 +2197,6 @@ void hisi_sas_phy_down(struct hisi_hba *hisi_hba, int phy_no, int rdy)
+ {
+ struct hisi_sas_phy *phy = &hisi_hba->phy[phy_no];
+ struct asd_sas_phy *sas_phy = &phy->sas_phy;
+- struct sas_ha_struct *sas_ha = &hisi_hba->sha;
+ struct device *dev = hisi_hba->dev;
+
+ if (rdy) {
+@@ -2216,7 +2212,7 @@ void hisi_sas_phy_down(struct hisi_hba *hisi_hba, int phy_no, int rdy)
+ return;
+ }
+ /* Phy down and not ready */
+- sas_ha->notify_phy_event(sas_phy, PHYE_LOSS_OF_SIGNAL);
++ sas_notify_phy_event(sas_phy, PHYE_LOSS_OF_SIGNAL);
+ sas_phy_disconnected(sas_phy);
+
+ if (port) {
+diff --git a/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c
+index 45e866cb9164d..22eecc89d41bd 100644
+--- a/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c
++++ b/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c
+@@ -1408,7 +1408,6 @@ static irqreturn_t int_bcast_v1_hw(int irq, void *p)
+ struct hisi_sas_phy *phy = p;
+ struct hisi_hba *hisi_hba = phy->hisi_hba;
+ struct asd_sas_phy *sas_phy = &phy->sas_phy;
+- struct sas_ha_struct *sha = &hisi_hba->sha;
+ struct device *dev = hisi_hba->dev;
+ int phy_no = sas_phy->id;
+ u32 irq_value;
+@@ -1424,7 +1423,7 @@ static irqreturn_t int_bcast_v1_hw(int irq, void *p)
+ }
+
+ if (!test_bit(HISI_SAS_RESET_BIT, &hisi_hba->flags))
+- sha->notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
++ sas_notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
+
+ end:
+ hisi_sas_phy_write32(hisi_hba, phy_no, CHL_INT2,
+diff --git a/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c
+index b57177b52facc..6ef8730c61a6e 100644
+--- a/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c
++++ b/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c
+@@ -2818,14 +2818,13 @@ static void phy_bcast_v2_hw(int phy_no, struct hisi_hba *hisi_hba)
+ {
+ struct hisi_sas_phy *phy = &hisi_hba->phy[phy_no];
+ struct asd_sas_phy *sas_phy = &phy->sas_phy;
+- struct sas_ha_struct *sas_ha = &hisi_hba->sha;
+ u32 bcast_status;
+
+ hisi_sas_phy_write32(hisi_hba, phy_no, SL_RX_BCAST_CHK_MSK, 1);
+ bcast_status = hisi_sas_phy_read32(hisi_hba, phy_no, RX_PRIMS_STATUS);
+ if ((bcast_status & RX_BCAST_CHG_MSK) &&
+ !test_bit(HISI_SAS_RESET_BIT, &hisi_hba->flags))
+- sas_ha->notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
++ sas_notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
+ hisi_sas_phy_write32(hisi_hba, phy_no, CHL_INT0,
+ CHL_INT0_SL_RX_BCST_ACK_MSK);
+ hisi_sas_phy_write32(hisi_hba, phy_no, SL_RX_BCAST_CHK_MSK, 0);
+diff --git a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
+index 2cbd8a524edab..19170c7ac336f 100644
+--- a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
++++ b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
+@@ -1598,14 +1598,13 @@ static irqreturn_t phy_bcast_v3_hw(int phy_no, struct hisi_hba *hisi_hba)
+ {
+ struct hisi_sas_phy *phy = &hisi_hba->phy[phy_no];
+ struct asd_sas_phy *sas_phy = &phy->sas_phy;
+- struct sas_ha_struct *sas_ha = &hisi_hba->sha;
+ u32 bcast_status;
+
+ hisi_sas_phy_write32(hisi_hba, phy_no, SL_RX_BCAST_CHK_MSK, 1);
+ bcast_status = hisi_sas_phy_read32(hisi_hba, phy_no, RX_PRIMS_STATUS);
+ if ((bcast_status & RX_BCAST_CHG_MSK) &&
+ !test_bit(HISI_SAS_RESET_BIT, &hisi_hba->flags))
+- sas_ha->notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
++ sas_notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
+ hisi_sas_phy_write32(hisi_hba, phy_no, CHL_INT0,
+ CHL_INT0_SL_RX_BCST_ACK_MSK);
+ hisi_sas_phy_write32(hisi_hba, phy_no, SL_RX_BCAST_CHK_MSK, 0);
+diff --git a/drivers/scsi/isci/port.c b/drivers/scsi/isci/port.c
+index 1df45f028ea75..e50c3b0deeb30 100644
+--- a/drivers/scsi/isci/port.c
++++ b/drivers/scsi/isci/port.c
+@@ -164,7 +164,8 @@ static void isci_port_bc_change_received(struct isci_host *ihost,
+ "%s: isci_phy = %p, sas_phy = %p\n",
+ __func__, iphy, &iphy->sas_phy);
+
+- ihost->sas_ha.notify_port_event(&iphy->sas_phy, PORTE_BROADCAST_RCVD);
++ sas_notify_port_event_gfp(&iphy->sas_phy,
++ PORTE_BROADCAST_RCVD, GFP_ATOMIC);
+ sci_port_bcn_enable(iport);
+ }
+
+@@ -223,8 +224,8 @@ static void isci_port_link_up(struct isci_host *isci_host,
+ /* Notify libsas that we have an address frame, if indeed
+ * we've found an SSP, SMP, or STP target */
+ if (success)
+- isci_host->sas_ha.notify_port_event(&iphy->sas_phy,
+- PORTE_BYTES_DMAED);
++ sas_notify_port_event_gfp(&iphy->sas_phy,
++ PORTE_BYTES_DMAED, GFP_ATOMIC);
+ }
+
+
+@@ -270,8 +271,8 @@ static void isci_port_link_down(struct isci_host *isci_host,
+ * isci_port_deformed and isci_dev_gone functions.
+ */
+ sas_phy_disconnected(&isci_phy->sas_phy);
+- isci_host->sas_ha.notify_phy_event(&isci_phy->sas_phy,
+- PHYE_LOSS_OF_SIGNAL);
++ sas_notify_phy_event_gfp(&isci_phy->sas_phy,
++ PHYE_LOSS_OF_SIGNAL, GFP_ATOMIC);
+
+ dev_dbg(&isci_host->pdev->dev,
+ "%s: isci_port = %p - Done\n", __func__, isci_port);
+diff --git a/drivers/scsi/libsas/sas_event.c b/drivers/scsi/libsas/sas_event.c
+index a1852f6c042b9..ba266a17250ae 100644
+--- a/drivers/scsi/libsas/sas_event.c
++++ b/drivers/scsi/libsas/sas_event.c
+@@ -109,7 +109,7 @@ void sas_enable_revalidation(struct sas_ha_struct *ha)
+
+ sas_phy = container_of(port->phy_list.next, struct asd_sas_phy,
+ port_phy_el);
+- ha->notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
++ sas_notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
+ }
+ mutex_unlock(&ha->disco_mutex);
+ }
+@@ -131,18 +131,15 @@ static void sas_phy_event_worker(struct work_struct *work)
+ sas_free_event(ev);
+ }
+
+-static int sas_notify_port_event(struct asd_sas_phy *phy, enum port_event event)
++static int __sas_notify_port_event(struct asd_sas_phy *phy,
++ enum port_event event,
++ struct asd_sas_event *ev)
+ {
+- struct asd_sas_event *ev;
+ struct sas_ha_struct *ha = phy->ha;
+ int ret;
+
+ BUG_ON(event >= PORT_NUM_EVENTS);
+
+- ev = sas_alloc_event(phy);
+- if (!ev)
+- return -ENOMEM;
+-
+ INIT_SAS_EVENT(ev, sas_port_event_worker, phy, event);
+
+ ret = sas_queue_event(event, &ev->work, ha);
+@@ -152,18 +149,40 @@ static int sas_notify_port_event(struct asd_sas_phy *phy, enum port_event event)
+ return ret;
+ }
+
+-int sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event)
++int sas_notify_port_event_gfp(struct asd_sas_phy *phy, enum port_event event,
++ gfp_t gfp_flags)
+ {
+ struct asd_sas_event *ev;
+- struct sas_ha_struct *ha = phy->ha;
+- int ret;
+
+- BUG_ON(event >= PHY_NUM_EVENTS);
++ ev = sas_alloc_event_gfp(phy, gfp_flags);
++ if (!ev)
++ return -ENOMEM;
++
++ return __sas_notify_port_event(phy, event, ev);
++}
++EXPORT_SYMBOL_GPL(sas_notify_port_event_gfp);
++
++int sas_notify_port_event(struct asd_sas_phy *phy, enum port_event event)
++{
++ struct asd_sas_event *ev;
+
+ ev = sas_alloc_event(phy);
+ if (!ev)
+ return -ENOMEM;
+
++ return __sas_notify_port_event(phy, event, ev);
++}
++EXPORT_SYMBOL_GPL(sas_notify_port_event);
++
++static inline int __sas_notify_phy_event(struct asd_sas_phy *phy,
++ enum phy_event event,
++ struct asd_sas_event *ev)
++{
++ struct sas_ha_struct *ha = phy->ha;
++ int ret;
++
++ BUG_ON(event >= PHY_NUM_EVENTS);
++
+ INIT_SAS_EVENT(ev, sas_phy_event_worker, phy, event);
+
+ ret = sas_queue_event(event, &ev->work, ha);
+@@ -173,10 +192,27 @@ int sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event)
+ return ret;
+ }
+
+-int sas_init_events(struct sas_ha_struct *sas_ha)
++int sas_notify_phy_event_gfp(struct asd_sas_phy *phy, enum phy_event event,
++ gfp_t gfp_flags)
+ {
+- sas_ha->notify_port_event = sas_notify_port_event;
+- sas_ha->notify_phy_event = sas_notify_phy_event;
++ struct asd_sas_event *ev;
+
+- return 0;
++ ev = sas_alloc_event_gfp(phy, gfp_flags);
++ if (!ev)
++ return -ENOMEM;
++
++ return __sas_notify_phy_event(phy, event, ev);
++}
++EXPORT_SYMBOL_GPL(sas_notify_phy_event_gfp);
++
++int sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event)
++{
++ struct asd_sas_event *ev;
++
++ ev = sas_alloc_event(phy);
++ if (!ev)
++ return -ENOMEM;
++
++ return __sas_notify_phy_event(phy, event, ev);
+ }
++EXPORT_SYMBOL_GPL(sas_notify_phy_event);
+diff --git a/drivers/scsi/libsas/sas_init.c b/drivers/scsi/libsas/sas_init.c
+index 21c43b18d5d5b..f8ae1f0f17d36 100644
+--- a/drivers/scsi/libsas/sas_init.c
++++ b/drivers/scsi/libsas/sas_init.c
+@@ -123,12 +123,6 @@ int sas_register_ha(struct sas_ha_struct *sas_ha)
+ goto Undo_phys;
+ }
+
+- error = sas_init_events(sas_ha);
+- if (error) {
+- pr_notice("couldn't start event thread:%d\n", error);
+- goto Undo_ports;
+- }
+-
+ error = -ENOMEM;
+ snprintf(name, sizeof(name), "%s_event_q", dev_name(sas_ha->dev));
+ sas_ha->event_q = create_singlethread_workqueue(name);
+@@ -590,16 +584,15 @@ sas_domain_attach_transport(struct sas_domain_function_template *dft)
+ }
+ EXPORT_SYMBOL_GPL(sas_domain_attach_transport);
+
+-
+-struct asd_sas_event *sas_alloc_event(struct asd_sas_phy *phy)
++static struct asd_sas_event *__sas_alloc_event(struct asd_sas_phy *phy,
++ gfp_t gfp_flags)
+ {
+ struct asd_sas_event *event;
+- gfp_t flags = in_interrupt() ? GFP_ATOMIC : GFP_KERNEL;
+ struct sas_ha_struct *sas_ha = phy->ha;
+ struct sas_internal *i =
+ to_sas_internal(sas_ha->core.shost->transportt);
+
+- event = kmem_cache_zalloc(sas_event_cache, flags);
++ event = kmem_cache_zalloc(sas_event_cache, gfp_flags);
+ if (!event)
+ return NULL;
+
+@@ -610,7 +603,8 @@ struct asd_sas_event *sas_alloc_event(struct asd_sas_phy *phy)
+ if (cmpxchg(&phy->in_shutdown, 0, 1) == 0) {
+ pr_notice("The phy%d bursting events, shut it down.\n",
+ phy->id);
+- sas_notify_phy_event(phy, PHYE_SHUTDOWN);
++ sas_notify_phy_event_gfp(phy, PHYE_SHUTDOWN,
++ gfp_flags);
+ }
+ } else {
+ /* Do not support PHY control, stop allocating events */
+@@ -624,6 +618,17 @@ struct asd_sas_event *sas_alloc_event(struct asd_sas_phy *phy)
+ return event;
+ }
+
++struct asd_sas_event *sas_alloc_event(struct asd_sas_phy *phy)
++{
++ return __sas_alloc_event(phy, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
++}
++
++struct asd_sas_event *sas_alloc_event_gfp(struct asd_sas_phy *phy,
++ gfp_t gfp_flags)
++{
++ return __sas_alloc_event(phy, gfp_flags);
++}
++
+ void sas_free_event(struct asd_sas_event *event)
+ {
+ struct asd_sas_phy *phy = event->phy;
+diff --git a/drivers/scsi/libsas/sas_internal.h b/drivers/scsi/libsas/sas_internal.h
+index 1f1d01901978c..52e09c3e2b50d 100644
+--- a/drivers/scsi/libsas/sas_internal.h
++++ b/drivers/scsi/libsas/sas_internal.h
+@@ -49,12 +49,13 @@ int sas_register_phys(struct sas_ha_struct *sas_ha);
+ void sas_unregister_phys(struct sas_ha_struct *sas_ha);
+
+ struct asd_sas_event *sas_alloc_event(struct asd_sas_phy *phy);
++struct asd_sas_event *sas_alloc_event_gfp(struct asd_sas_phy *phy,
++ gfp_t gfp_flags);
+ void sas_free_event(struct asd_sas_event *event);
+
+ int sas_register_ports(struct sas_ha_struct *sas_ha);
+ void sas_unregister_ports(struct sas_ha_struct *sas_ha);
+
+-int sas_init_events(struct sas_ha_struct *sas_ha);
+ void sas_disable_revalidation(struct sas_ha_struct *ha);
+ void sas_enable_revalidation(struct sas_ha_struct *ha);
+ void __sas_drain_work(struct sas_ha_struct *ha);
+@@ -78,6 +79,8 @@ int sas_smp_phy_control(struct domain_device *dev, int phy_id,
+ int sas_smp_get_phy_events(struct sas_phy *phy);
+
+ int sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event);
++int sas_notify_phy_event_gfp(struct asd_sas_phy *phy, enum phy_event event,
++ gfp_t flags);
+ void sas_device_set_phy(struct domain_device *dev, struct sas_port *port);
+ struct domain_device *sas_find_dev_by_rphy(struct sas_rphy *rphy);
+ struct domain_device *sas_ex_to_ata(struct domain_device *ex_dev, int phy_id);
+diff --git a/drivers/scsi/lpfc/lpfc_debugfs.c b/drivers/scsi/lpfc/lpfc_debugfs.c
+index c9a327b13e5cf..b89c5513243e8 100644
+--- a/drivers/scsi/lpfc/lpfc_debugfs.c
++++ b/drivers/scsi/lpfc/lpfc_debugfs.c
+@@ -2423,7 +2423,7 @@ lpfc_debugfs_dif_err_write(struct file *file, const char __user *buf,
+ memset(dstbuf, 0, 33);
+ size = (nbytes < 32) ? nbytes : 32;
+ if (copy_from_user(dstbuf, buf, size))
+- return 0;
++ return -EFAULT;
+
+ if (dent == phba->debug_InjErrLBA) {
+ if ((dstbuf[0] == 'o') && (dstbuf[1] == 'f') &&
+@@ -2432,7 +2432,7 @@ lpfc_debugfs_dif_err_write(struct file *file, const char __user *buf,
+ }
+
+ if ((tmp == 0) && (kstrtoull(dstbuf, 0, &tmp)))
+- return 0;
++ return -EINVAL;
+
+ if (dent == phba->debug_writeGuard)
+ phba->lpfc_injerr_wgrd_cnt = (uint32_t)tmp;
+diff --git a/drivers/scsi/mvsas/mv_sas.c b/drivers/scsi/mvsas/mv_sas.c
+index a920eced92ecc..484e01428da28 100644
+--- a/drivers/scsi/mvsas/mv_sas.c
++++ b/drivers/scsi/mvsas/mv_sas.c
+@@ -216,11 +216,11 @@ void mvs_set_sas_addr(struct mvs_info *mvi, int port_id, u32 off_lo,
+ MVS_CHIP_DISP->write_port_cfg_data(mvi, port_id, hi);
+ }
+
+-static void mvs_bytes_dmaed(struct mvs_info *mvi, int i)
++static void mvs_bytes_dmaed(struct mvs_info *mvi, int i, gfp_t gfp_flags)
+ {
+ struct mvs_phy *phy = &mvi->phy[i];
+ struct asd_sas_phy *sas_phy = &phy->sas_phy;
+- struct sas_ha_struct *sas_ha;
++
+ if (!phy->phy_attached)
+ return;
+
+@@ -229,8 +229,7 @@ static void mvs_bytes_dmaed(struct mvs_info *mvi, int i)
+ return;
+ }
+
+- sas_ha = mvi->sas;
+- sas_ha->notify_phy_event(sas_phy, PHYE_OOB_DONE);
++ sas_notify_phy_event_gfp(sas_phy, PHYE_OOB_DONE, gfp_flags);
+
+ if (sas_phy->phy) {
+ struct sas_phy *sphy = sas_phy->phy;
+@@ -262,8 +261,7 @@ static void mvs_bytes_dmaed(struct mvs_info *mvi, int i)
+
+ sas_phy->frame_rcvd_size = phy->frame_rcvd_size;
+
+- mvi->sas->notify_port_event(sas_phy,
+- PORTE_BYTES_DMAED);
++ sas_notify_port_event_gfp(sas_phy, PORTE_BYTES_DMAED, gfp_flags);
+ }
+
+ void mvs_scan_start(struct Scsi_Host *shost)
+@@ -279,7 +277,7 @@ void mvs_scan_start(struct Scsi_Host *shost)
+ for (j = 0; j < core_nr; j++) {
+ mvi = ((struct mvs_prv_info *)sha->lldd_ha)->mvi[j];
+ for (i = 0; i < mvi->chip->n_phy; ++i)
+- mvs_bytes_dmaed(mvi, i);
++ mvs_bytes_dmaed(mvi, i, GFP_KERNEL);
+ }
+ mvs_prv->scan_finished = 1;
+ }
+@@ -1880,7 +1878,6 @@ static void mvs_work_queue(struct work_struct *work)
+ struct mvs_info *mvi = mwq->mvi;
+ unsigned long flags;
+ u32 phy_no = (unsigned long) mwq->data;
+- struct sas_ha_struct *sas_ha = mvi->sas;
+ struct mvs_phy *phy = &mvi->phy[phy_no];
+ struct asd_sas_phy *sas_phy = &phy->sas_phy;
+
+@@ -1895,21 +1892,21 @@ static void mvs_work_queue(struct work_struct *work)
+ if (!(tmp & PHY_READY_MASK)) {
+ sas_phy_disconnected(sas_phy);
+ mvs_phy_disconnected(phy);
+- sas_ha->notify_phy_event(sas_phy,
+- PHYE_LOSS_OF_SIGNAL);
++ sas_notify_phy_event_gfp(sas_phy,
++ PHYE_LOSS_OF_SIGNAL, GFP_ATOMIC);
+ mv_dprintk("phy%d Removed Device\n", phy_no);
+ } else {
+ MVS_CHIP_DISP->detect_porttype(mvi, phy_no);
+ mvs_update_phyinfo(mvi, phy_no, 1);
+- mvs_bytes_dmaed(mvi, phy_no);
++ mvs_bytes_dmaed(mvi, phy_no, GFP_ATOMIC);
+ mvs_port_notify_formed(sas_phy, 0);
+ mv_dprintk("phy%d Attached Device\n", phy_no);
+ }
+ }
+ } else if (mwq->handler & EXP_BRCT_CHG) {
+ phy->phy_event &= ~EXP_BRCT_CHG;
+- sas_ha->notify_port_event(sas_phy,
+- PORTE_BROADCAST_RCVD);
++ sas_notify_port_event_gfp(sas_phy,
++ PORTE_BROADCAST_RCVD, GFP_ATOMIC);
+ mv_dprintk("phy%d Got Broadcast Change\n", phy_no);
+ }
+ list_del(&mwq->entry);
+@@ -2026,7 +2023,7 @@ void mvs_int_port(struct mvs_info *mvi, int phy_no, u32 events)
+ mdelay(10);
+ }
+
+- mvs_bytes_dmaed(mvi, phy_no);
++ mvs_bytes_dmaed(mvi, phy_no, GFP_ATOMIC);
+ /* whether driver is going to handle hot plug */
+ if (phy->phy_event & PHY_PLUG_OUT) {
+ mvs_port_notify_formed(&phy->sas_phy, 0);
+diff --git a/drivers/scsi/myrs.c b/drivers/scsi/myrs.c
+index 7a3ade765ce3b..78c41bbf67562 100644
+--- a/drivers/scsi/myrs.c
++++ b/drivers/scsi/myrs.c
+@@ -2274,12 +2274,12 @@ static void myrs_cleanup(struct myrs_hba *cs)
+ if (cs->mmio_base) {
+ cs->disable_intr(cs);
+ iounmap(cs->mmio_base);
++ cs->mmio_base = NULL;
+ }
+ if (cs->irq)
+ free_irq(cs->irq, cs);
+ if (cs->io_addr)
+ release_region(cs->io_addr, 0x80);
+- iounmap(cs->mmio_base);
+ pci_set_drvdata(pdev, NULL);
+ pci_disable_device(pdev);
+ scsi_host_put(cs->host);
+diff --git a/drivers/scsi/pm8001/pm8001_ctl.c b/drivers/scsi/pm8001/pm8001_ctl.c
+index 3587f7c8a4289..12035baf0997b 100644
+--- a/drivers/scsi/pm8001/pm8001_ctl.c
++++ b/drivers/scsi/pm8001/pm8001_ctl.c
+@@ -841,10 +841,9 @@ static ssize_t pm8001_store_update_fw(struct device *cdev,
+ pm8001_ha->dev);
+
+ if (ret) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk(
+- "Failed to load firmware image file %s, error %d\n",
+- filename_ptr, ret));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "Failed to load firmware image file %s, error %d\n",
++ filename_ptr, ret);
+ pm8001_ha->fw_status = FAIL_OPEN_BIOS_FILE;
+ goto out;
+ }
+diff --git a/drivers/scsi/pm8001/pm8001_hwi.c b/drivers/scsi/pm8001/pm8001_hwi.c
+index 2b7b2954ec31a..95ba1bd16db93 100644
+--- a/drivers/scsi/pm8001/pm8001_hwi.c
++++ b/drivers/scsi/pm8001/pm8001_hwi.c
+@@ -400,9 +400,9 @@ int pm8001_bar4_shift(struct pm8001_hba_info *pm8001_ha, u32 shiftValue)
+ } while ((regVal != shiftValue) && time_before(jiffies, start));
+
+ if (regVal != shiftValue) {
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("TIMEOUT:SPC_IBW_AXI_TRANSLATION_LOW"
+- " = 0x%x\n", regVal));
++ pm8001_dbg(pm8001_ha, INIT,
++ "TIMEOUT:SPC_IBW_AXI_TRANSLATION_LOW = 0x%x\n",
++ regVal);
+ return -1;
+ }
+ return 0;
+@@ -623,12 +623,10 @@ static void init_pci_device_addresses(struct pm8001_hba_info *pm8001_ha)
+
+ value = pm8001_cr32(pm8001_ha, 0, 0x44);
+ offset = value & 0x03FFFFFF;
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("Scratchpad 0 Offset: %x\n", offset));
++ pm8001_dbg(pm8001_ha, INIT, "Scratchpad 0 Offset: %x\n", offset);
+ pcilogic = (value & 0xFC000000) >> 26;
+ pcibar = get_pci_bar_index(pcilogic);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("Scratchpad 0 PCI BAR: %d\n", pcibar));
++ pm8001_dbg(pm8001_ha, INIT, "Scratchpad 0 PCI BAR: %d\n", pcibar);
+ pm8001_ha->main_cfg_tbl_addr = base_addr =
+ pm8001_ha->io_mem[pcibar].memvirtaddr + offset;
+ pm8001_ha->general_stat_tbl_addr =
+@@ -652,16 +650,15 @@ static int pm8001_chip_init(struct pm8001_hba_info *pm8001_ha)
+ * as this is shared with BIOS data */
+ if (deviceid == 0x8081 || deviceid == 0x0042) {
+ if (-1 == pm8001_bar4_shift(pm8001_ha, GSM_SM_BASE)) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("Shift Bar4 to 0x%x failed\n",
+- GSM_SM_BASE));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "Shift Bar4 to 0x%x failed\n",
++ GSM_SM_BASE);
+ return -1;
+ }
+ }
+ /* check the firmware status */
+ if (-1 == check_fw_ready(pm8001_ha)) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("Firmware is not ready!\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "Firmware is not ready!\n");
+ return -EBUSY;
+ }
+
+@@ -686,8 +683,7 @@ static int pm8001_chip_init(struct pm8001_hba_info *pm8001_ha)
+ }
+ /* notify firmware update finished and check initialization status */
+ if (0 == mpi_init_check(pm8001_ha)) {
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("MPI initialize successful!\n"));
++ pm8001_dbg(pm8001_ha, INIT, "MPI initialize successful!\n");
+ } else
+ return -EBUSY;
+ /*This register is a 16-bit timer with a resolution of 1us. This is the
+@@ -709,9 +705,9 @@ static int mpi_uninit_check(struct pm8001_hba_info *pm8001_ha)
+ pci_read_config_word(pm8001_ha->pdev, PCI_DEVICE_ID, &deviceid);
+ if (deviceid == 0x8081 || deviceid == 0x0042) {
+ if (-1 == pm8001_bar4_shift(pm8001_ha, GSM_SM_BASE)) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("Shift Bar4 to 0x%x failed\n",
+- GSM_SM_BASE));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "Shift Bar4 to 0x%x failed\n",
++ GSM_SM_BASE);
+ return -1;
+ }
+ }
+@@ -729,8 +725,8 @@ static int mpi_uninit_check(struct pm8001_hba_info *pm8001_ha)
+ } while ((value != 0) && (--max_wait_count));
+
+ if (!max_wait_count) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("TIMEOUT:IBDB value/=0x%x\n", value));
++ pm8001_dbg(pm8001_ha, FAIL, "TIMEOUT:IBDB value/=0x%x\n",
++ value);
+ return -1;
+ }
+
+@@ -747,9 +743,8 @@ static int mpi_uninit_check(struct pm8001_hba_info *pm8001_ha)
+ break;
+ } while (--max_wait_count);
+ if (!max_wait_count) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk(" TIME OUT MPI State = 0x%x\n",
+- gst_len_mpistate & GST_MPI_STATE_MASK));
++ pm8001_dbg(pm8001_ha, FAIL, " TIME OUT MPI State = 0x%x\n",
++ gst_len_mpistate & GST_MPI_STATE_MASK);
+ return -1;
+ }
+ return 0;
+@@ -763,25 +758,23 @@ static u32 soft_reset_ready_check(struct pm8001_hba_info *pm8001_ha)
+ {
+ u32 regVal, regVal1, regVal2;
+ if (mpi_uninit_check(pm8001_ha) != 0) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("MPI state is not ready\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "MPI state is not ready\n");
+ return -1;
+ }
+ /* read the scratch pad 2 register bit 2 */
+ regVal = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_2)
+ & SCRATCH_PAD2_FWRDY_RST;
+ if (regVal == SCRATCH_PAD2_FWRDY_RST) {
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("Firmware is ready for reset .\n"));
++ pm8001_dbg(pm8001_ha, INIT, "Firmware is ready for reset.\n");
+ } else {
+ unsigned long flags;
+ /* Trigger NMI twice via RB6 */
+ spin_lock_irqsave(&pm8001_ha->lock, flags);
+ if (-1 == pm8001_bar4_shift(pm8001_ha, RB6_ACCESS_REG)) {
+ spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("Shift Bar4 to 0x%x failed\n",
+- RB6_ACCESS_REG));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "Shift Bar4 to 0x%x failed\n",
++ RB6_ACCESS_REG);
+ return -1;
+ }
+ pm8001_cw32(pm8001_ha, 2, SPC_RB6_OFFSET,
+@@ -794,16 +787,14 @@ static u32 soft_reset_ready_check(struct pm8001_hba_info *pm8001_ha)
+ if (regVal != SCRATCH_PAD2_FWRDY_RST) {
+ regVal1 = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1);
+ regVal2 = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_2);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("TIMEOUT:MSGU_SCRATCH_PAD1"
+- "=0x%x, MSGU_SCRATCH_PAD2=0x%x\n",
+- regVal1, regVal2));
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("SCRATCH_PAD0 value = 0x%x\n",
+- pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_0)));
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("SCRATCH_PAD3 value = 0x%x\n",
+- pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_3)));
++ pm8001_dbg(pm8001_ha, FAIL, "TIMEOUT:MSGU_SCRATCH_PAD1=0x%x, MSGU_SCRATCH_PAD2=0x%x\n",
++ regVal1, regVal2);
++ pm8001_dbg(pm8001_ha, FAIL,
++ "SCRATCH_PAD0 value = 0x%x\n",
++ pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_0));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "SCRATCH_PAD3 value = 0x%x\n",
++ pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_3));
+ spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+ return -1;
+ }
+@@ -828,7 +819,7 @@ pm8001_chip_soft_rst(struct pm8001_hba_info *pm8001_ha)
+
+ /* step1: Check FW is ready for soft reset */
+ if (soft_reset_ready_check(pm8001_ha) != 0) {
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("FW is not ready\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "FW is not ready\n");
+ return -1;
+ }
+
+@@ -838,46 +829,43 @@ pm8001_chip_soft_rst(struct pm8001_hba_info *pm8001_ha)
+ spin_lock_irqsave(&pm8001_ha->lock, flags);
+ if (-1 == pm8001_bar4_shift(pm8001_ha, MBIC_AAP1_ADDR_BASE)) {
+ spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("Shift Bar4 to 0x%x failed\n",
+- MBIC_AAP1_ADDR_BASE));
++ pm8001_dbg(pm8001_ha, FAIL, "Shift Bar4 to 0x%x failed\n",
++ MBIC_AAP1_ADDR_BASE);
+ return -1;
+ }
+ regVal = pm8001_cr32(pm8001_ha, 2, MBIC_NMI_ENABLE_VPE0_IOP);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("MBIC - NMI Enable VPE0 (IOP)= 0x%x\n", regVal));
++ pm8001_dbg(pm8001_ha, INIT, "MBIC - NMI Enable VPE0 (IOP)= 0x%x\n",
++ regVal);
+ pm8001_cw32(pm8001_ha, 2, MBIC_NMI_ENABLE_VPE0_IOP, 0x0);
+ /* map 0x70000 to BAR4(0x20), BAR2(win) */
+ if (-1 == pm8001_bar4_shift(pm8001_ha, MBIC_IOP_ADDR_BASE)) {
+ spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("Shift Bar4 to 0x%x failed\n",
+- MBIC_IOP_ADDR_BASE));
++ pm8001_dbg(pm8001_ha, FAIL, "Shift Bar4 to 0x%x failed\n",
++ MBIC_IOP_ADDR_BASE);
+ return -1;
+ }
+ regVal = pm8001_cr32(pm8001_ha, 2, MBIC_NMI_ENABLE_VPE0_AAP1);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("MBIC - NMI Enable VPE0 (AAP1)= 0x%x\n", regVal));
++ pm8001_dbg(pm8001_ha, INIT, "MBIC - NMI Enable VPE0 (AAP1)= 0x%x\n",
++ regVal);
+ pm8001_cw32(pm8001_ha, 2, MBIC_NMI_ENABLE_VPE0_AAP1, 0x0);
+
+ regVal = pm8001_cr32(pm8001_ha, 1, PCIE_EVENT_INTERRUPT_ENABLE);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("PCIE -Event Interrupt Enable = 0x%x\n", regVal));
++ pm8001_dbg(pm8001_ha, INIT, "PCIE -Event Interrupt Enable = 0x%x\n",
++ regVal);
+ pm8001_cw32(pm8001_ha, 1, PCIE_EVENT_INTERRUPT_ENABLE, 0x0);
+
+ regVal = pm8001_cr32(pm8001_ha, 1, PCIE_EVENT_INTERRUPT);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("PCIE - Event Interrupt = 0x%x\n", regVal));
++ pm8001_dbg(pm8001_ha, INIT, "PCIE - Event Interrupt = 0x%x\n",
++ regVal);
+ pm8001_cw32(pm8001_ha, 1, PCIE_EVENT_INTERRUPT, regVal);
+
+ regVal = pm8001_cr32(pm8001_ha, 1, PCIE_ERROR_INTERRUPT_ENABLE);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("PCIE -Error Interrupt Enable = 0x%x\n", regVal));
++ pm8001_dbg(pm8001_ha, INIT, "PCIE -Error Interrupt Enable = 0x%x\n",
++ regVal);
+ pm8001_cw32(pm8001_ha, 1, PCIE_ERROR_INTERRUPT_ENABLE, 0x0);
+
+ regVal = pm8001_cr32(pm8001_ha, 1, PCIE_ERROR_INTERRUPT);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("PCIE - Error Interrupt = 0x%x\n", regVal));
++ pm8001_dbg(pm8001_ha, INIT, "PCIE - Error Interrupt = 0x%x\n", regVal);
+ pm8001_cw32(pm8001_ha, 1, PCIE_ERROR_INTERRUPT, regVal);
+
+ /* read the scratch pad 1 register bit 2 */
+@@ -893,15 +881,13 @@ pm8001_chip_soft_rst(struct pm8001_hba_info *pm8001_ha)
+ /* map 0x0700000 to BAR4(0x20), BAR2(win) */
+ if (-1 == pm8001_bar4_shift(pm8001_ha, GSM_ADDR_BASE)) {
+ spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("Shift Bar4 to 0x%x failed\n",
+- GSM_ADDR_BASE));
++ pm8001_dbg(pm8001_ha, FAIL, "Shift Bar4 to 0x%x failed\n",
++ GSM_ADDR_BASE);
+ return -1;
+ }
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("GSM 0x0(0x00007b88)-GSM Configuration and"
+- " Reset = 0x%x\n",
+- pm8001_cr32(pm8001_ha, 2, GSM_CONFIG_RESET)));
++ pm8001_dbg(pm8001_ha, INIT,
++ "GSM 0x0(0x00007b88)-GSM Configuration and Reset = 0x%x\n",
++ pm8001_cr32(pm8001_ha, 2, GSM_CONFIG_RESET));
+
+ /* step 3: host read GSM Configuration and Reset register */
+ regVal = pm8001_cr32(pm8001_ha, 2, GSM_CONFIG_RESET);
+@@ -916,59 +902,52 @@ pm8001_chip_soft_rst(struct pm8001_hba_info *pm8001_ha)
+ regVal &= ~(0x00003b00);
+ /* host write GSM Configuration and Reset register */
+ pm8001_cw32(pm8001_ha, 2, GSM_CONFIG_RESET, regVal);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("GSM 0x0 (0x00007b88 ==> 0x00004088) - GSM "
+- "Configuration and Reset is set to = 0x%x\n",
+- pm8001_cr32(pm8001_ha, 2, GSM_CONFIG_RESET)));
++ pm8001_dbg(pm8001_ha, INIT,
++ "GSM 0x0 (0x00007b88 ==> 0x00004088) - GSM Configuration and Reset is set to = 0x%x\n",
++ pm8001_cr32(pm8001_ha, 2, GSM_CONFIG_RESET));
+
+ /* step 4: */
+ /* disable GSM - Read Address Parity Check */
+ regVal1 = pm8001_cr32(pm8001_ha, 2, GSM_READ_ADDR_PARITY_CHECK);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("GSM 0x700038 - Read Address Parity Check "
+- "Enable = 0x%x\n", regVal1));
++ pm8001_dbg(pm8001_ha, INIT,
++ "GSM 0x700038 - Read Address Parity Check Enable = 0x%x\n",
++ regVal1);
+ pm8001_cw32(pm8001_ha, 2, GSM_READ_ADDR_PARITY_CHECK, 0x0);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("GSM 0x700038 - Read Address Parity Check Enable"
+- "is set to = 0x%x\n",
+- pm8001_cr32(pm8001_ha, 2, GSM_READ_ADDR_PARITY_CHECK)));
++ pm8001_dbg(pm8001_ha, INIT,
++ "GSM 0x700038 - Read Address Parity Check Enable is set to = 0x%x\n",
++ pm8001_cr32(pm8001_ha, 2, GSM_READ_ADDR_PARITY_CHECK));
+
+ /* disable GSM - Write Address Parity Check */
+ regVal2 = pm8001_cr32(pm8001_ha, 2, GSM_WRITE_ADDR_PARITY_CHECK);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("GSM 0x700040 - Write Address Parity Check"
+- " Enable = 0x%x\n", regVal2));
++ pm8001_dbg(pm8001_ha, INIT,
++ "GSM 0x700040 - Write Address Parity Check Enable = 0x%x\n",
++ regVal2);
+ pm8001_cw32(pm8001_ha, 2, GSM_WRITE_ADDR_PARITY_CHECK, 0x0);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("GSM 0x700040 - Write Address Parity Check "
+- "Enable is set to = 0x%x\n",
+- pm8001_cr32(pm8001_ha, 2, GSM_WRITE_ADDR_PARITY_CHECK)));
++ pm8001_dbg(pm8001_ha, INIT,
++ "GSM 0x700040 - Write Address Parity Check Enable is set to = 0x%x\n",
++ pm8001_cr32(pm8001_ha, 2, GSM_WRITE_ADDR_PARITY_CHECK));
+
+ /* disable GSM - Write Data Parity Check */
+ regVal3 = pm8001_cr32(pm8001_ha, 2, GSM_WRITE_DATA_PARITY_CHECK);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("GSM 0x300048 - Write Data Parity Check"
+- " Enable = 0x%x\n", regVal3));
++ pm8001_dbg(pm8001_ha, INIT, "GSM 0x300048 - Write Data Parity Check Enable = 0x%x\n",
++ regVal3);
+ pm8001_cw32(pm8001_ha, 2, GSM_WRITE_DATA_PARITY_CHECK, 0x0);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("GSM 0x300048 - Write Data Parity Check Enable"
+- "is set to = 0x%x\n",
+- pm8001_cr32(pm8001_ha, 2, GSM_WRITE_DATA_PARITY_CHECK)));
++ pm8001_dbg(pm8001_ha, INIT,
++ "GSM 0x300048 - Write Data Parity Check Enable is set to = 0x%x\n",
++ pm8001_cr32(pm8001_ha, 2, GSM_WRITE_DATA_PARITY_CHECK));
+
+ /* step 5: delay 10 usec */
+ udelay(10);
+ /* step 5-b: set GPIO-0 output control to tristate anyway */
+ if (-1 == pm8001_bar4_shift(pm8001_ha, GPIO_ADDR_BASE)) {
+ spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("Shift Bar4 to 0x%x failed\n",
+- GPIO_ADDR_BASE));
++ pm8001_dbg(pm8001_ha, INIT, "Shift Bar4 to 0x%x failed\n",
++ GPIO_ADDR_BASE);
+ return -1;
+ }
+ regVal = pm8001_cr32(pm8001_ha, 2, GPIO_GPIO_0_0UTPUT_CTL_OFFSET);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("GPIO Output Control Register:"
+- " = 0x%x\n", regVal));
++ pm8001_dbg(pm8001_ha, INIT, "GPIO Output Control Register: = 0x%x\n",
++ regVal);
+ /* set GPIO-0 output control to tri-state */
+ regVal &= 0xFFFFFFFC;
+ pm8001_cw32(pm8001_ha, 2, GPIO_GPIO_0_0UTPUT_CTL_OFFSET, regVal);
+@@ -977,23 +956,20 @@ pm8001_chip_soft_rst(struct pm8001_hba_info *pm8001_ha)
+ /* map 0x00000 to BAR4(0x20), BAR2(win) */
+ if (-1 == pm8001_bar4_shift(pm8001_ha, SPC_TOP_LEVEL_ADDR_BASE)) {
+ spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("SPC Shift Bar4 to 0x%x failed\n",
+- SPC_TOP_LEVEL_ADDR_BASE));
++ pm8001_dbg(pm8001_ha, FAIL, "SPC Shift Bar4 to 0x%x failed\n",
++ SPC_TOP_LEVEL_ADDR_BASE);
+ return -1;
+ }
+ regVal = pm8001_cr32(pm8001_ha, 2, SPC_REG_RESET);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("Top Register before resetting IOP/AAP1"
+- ":= 0x%x\n", regVal));
++ pm8001_dbg(pm8001_ha, INIT, "Top Register before resetting IOP/AAP1:= 0x%x\n",
++ regVal);
+ regVal &= ~(SPC_REG_RESET_PCS_IOP_SS | SPC_REG_RESET_PCS_AAP1_SS);
+ pm8001_cw32(pm8001_ha, 2, SPC_REG_RESET, regVal);
+
+ /* step 7: Reset the BDMA/OSSP */
+ regVal = pm8001_cr32(pm8001_ha, 2, SPC_REG_RESET);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("Top Register before resetting BDMA/OSSP"
+- ": = 0x%x\n", regVal));
++ pm8001_dbg(pm8001_ha, INIT, "Top Register before resetting BDMA/OSSP: = 0x%x\n",
++ regVal);
+ regVal &= ~(SPC_REG_RESET_BDMA_CORE | SPC_REG_RESET_OSSP);
+ pm8001_cw32(pm8001_ha, 2, SPC_REG_RESET, regVal);
+
+@@ -1002,9 +978,9 @@ pm8001_chip_soft_rst(struct pm8001_hba_info *pm8001_ha)
+
+ /* step 9: bring the BDMA and OSSP out of reset */
+ regVal = pm8001_cr32(pm8001_ha, 2, SPC_REG_RESET);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("Top Register before bringing up BDMA/OSSP"
+- ":= 0x%x\n", regVal));
++ pm8001_dbg(pm8001_ha, INIT,
++ "Top Register before bringing up BDMA/OSSP:= 0x%x\n",
++ regVal);
+ regVal |= (SPC_REG_RESET_BDMA_CORE | SPC_REG_RESET_OSSP);
+ pm8001_cw32(pm8001_ha, 2, SPC_REG_RESET, regVal);
+
+@@ -1015,14 +991,13 @@ pm8001_chip_soft_rst(struct pm8001_hba_info *pm8001_ha)
+ /* map 0x0700000 to BAR4(0x20), BAR2(win) */
+ if (-1 == pm8001_bar4_shift(pm8001_ha, GSM_ADDR_BASE)) {
+ spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("SPC Shift Bar4 to 0x%x failed\n",
+- GSM_ADDR_BASE));
++ pm8001_dbg(pm8001_ha, FAIL, "SPC Shift Bar4 to 0x%x failed\n",
++ GSM_ADDR_BASE);
+ return -1;
+ }
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("GSM 0x0 (0x00007b88)-GSM Configuration and "
+- "Reset = 0x%x\n", pm8001_cr32(pm8001_ha, 2, GSM_CONFIG_RESET)));
++ pm8001_dbg(pm8001_ha, INIT,
++ "GSM 0x0 (0x00007b88)-GSM Configuration and Reset = 0x%x\n",
++ pm8001_cr32(pm8001_ha, 2, GSM_CONFIG_RESET));
+ regVal = pm8001_cr32(pm8001_ha, 2, GSM_CONFIG_RESET);
+ /* Put those bits to high */
+ /* GSM XCBI offset = 0x70 0000
+@@ -1034,44 +1009,37 @@ pm8001_chip_soft_rst(struct pm8001_hba_info *pm8001_ha)
+ */
+ regVal |= (GSM_CONFIG_RESET_VALUE);
+ pm8001_cw32(pm8001_ha, 2, GSM_CONFIG_RESET, regVal);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("GSM (0x00004088 ==> 0x00007b88) - GSM"
+- " Configuration and Reset is set to = 0x%x\n",
+- pm8001_cr32(pm8001_ha, 2, GSM_CONFIG_RESET)));
++ pm8001_dbg(pm8001_ha, INIT, "GSM (0x00004088 ==> 0x00007b88) - GSM Configuration and Reset is set to = 0x%x\n",
++ pm8001_cr32(pm8001_ha, 2, GSM_CONFIG_RESET));
+
+ /* step 12: Restore GSM - Read Address Parity Check */
+ regVal = pm8001_cr32(pm8001_ha, 2, GSM_READ_ADDR_PARITY_CHECK);
+ /* just for debugging */
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("GSM 0x700038 - Read Address Parity Check Enable"
+- " = 0x%x\n", regVal));
++ pm8001_dbg(pm8001_ha, INIT,
++ "GSM 0x700038 - Read Address Parity Check Enable = 0x%x\n",
++ regVal);
+ pm8001_cw32(pm8001_ha, 2, GSM_READ_ADDR_PARITY_CHECK, regVal1);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("GSM 0x700038 - Read Address Parity"
+- " Check Enable is set to = 0x%x\n",
+- pm8001_cr32(pm8001_ha, 2, GSM_READ_ADDR_PARITY_CHECK)));
++ pm8001_dbg(pm8001_ha, INIT, "GSM 0x700038 - Read Address Parity Check Enable is set to = 0x%x\n",
++ pm8001_cr32(pm8001_ha, 2, GSM_READ_ADDR_PARITY_CHECK));
+ /* Restore GSM - Write Address Parity Check */
+ regVal = pm8001_cr32(pm8001_ha, 2, GSM_WRITE_ADDR_PARITY_CHECK);
+ pm8001_cw32(pm8001_ha, 2, GSM_WRITE_ADDR_PARITY_CHECK, regVal2);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("GSM 0x700040 - Write Address Parity Check"
+- " Enable is set to = 0x%x\n",
+- pm8001_cr32(pm8001_ha, 2, GSM_WRITE_ADDR_PARITY_CHECK)));
++ pm8001_dbg(pm8001_ha, INIT,
++ "GSM 0x700040 - Write Address Parity Check Enable is set to = 0x%x\n",
++ pm8001_cr32(pm8001_ha, 2, GSM_WRITE_ADDR_PARITY_CHECK));
+ /* Restore GSM - Write Data Parity Check */
+ regVal = pm8001_cr32(pm8001_ha, 2, GSM_WRITE_DATA_PARITY_CHECK);
+ pm8001_cw32(pm8001_ha, 2, GSM_WRITE_DATA_PARITY_CHECK, regVal3);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("GSM 0x700048 - Write Data Parity Check Enable"
+- "is set to = 0x%x\n",
+- pm8001_cr32(pm8001_ha, 2, GSM_WRITE_DATA_PARITY_CHECK)));
++ pm8001_dbg(pm8001_ha, INIT,
++ "GSM 0x700048 - Write Data Parity Check Enableis set to = 0x%x\n",
++ pm8001_cr32(pm8001_ha, 2, GSM_WRITE_DATA_PARITY_CHECK));
+
+ /* step 13: bring the IOP and AAP1 out of reset */
+ /* map 0x00000 to BAR4(0x20), BAR2(win) */
+ if (-1 == pm8001_bar4_shift(pm8001_ha, SPC_TOP_LEVEL_ADDR_BASE)) {
+ spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("Shift Bar4 to 0x%x failed\n",
+- SPC_TOP_LEVEL_ADDR_BASE));
++ pm8001_dbg(pm8001_ha, FAIL, "Shift Bar4 to 0x%x failed\n",
++ SPC_TOP_LEVEL_ADDR_BASE);
+ return -1;
+ }
+ regVal = pm8001_cr32(pm8001_ha, 2, SPC_REG_RESET);
+@@ -1094,22 +1062,20 @@ pm8001_chip_soft_rst(struct pm8001_hba_info *pm8001_ha)
+ if (!max_wait_count) {
+ regVal = pm8001_cr32(pm8001_ha, 0,
+ MSGU_SCRATCH_PAD_1);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("TIMEOUT : ToggleVal 0x%x,"
+- "MSGU_SCRATCH_PAD1 = 0x%x\n",
+- toggleVal, regVal));
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("SCRATCH_PAD0 value = 0x%x\n",
+- pm8001_cr32(pm8001_ha, 0,
+- MSGU_SCRATCH_PAD_0)));
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("SCRATCH_PAD2 value = 0x%x\n",
+- pm8001_cr32(pm8001_ha, 0,
+- MSGU_SCRATCH_PAD_2)));
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("SCRATCH_PAD3 value = 0x%x\n",
+- pm8001_cr32(pm8001_ha, 0,
+- MSGU_SCRATCH_PAD_3)));
++ pm8001_dbg(pm8001_ha, FAIL, "TIMEOUT : ToggleVal 0x%x,MSGU_SCRATCH_PAD1 = 0x%x\n",
++ toggleVal, regVal);
++ pm8001_dbg(pm8001_ha, FAIL,
++ "SCRATCH_PAD0 value = 0x%x\n",
++ pm8001_cr32(pm8001_ha, 0,
++ MSGU_SCRATCH_PAD_0));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "SCRATCH_PAD2 value = 0x%x\n",
++ pm8001_cr32(pm8001_ha, 0,
++ MSGU_SCRATCH_PAD_2));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "SCRATCH_PAD3 value = 0x%x\n",
++ pm8001_cr32(pm8001_ha, 0,
++ MSGU_SCRATCH_PAD_3));
+ spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+ return -1;
+ }
+@@ -1124,22 +1090,22 @@ pm8001_chip_soft_rst(struct pm8001_hba_info *pm8001_ha)
+ if (check_fw_ready(pm8001_ha) == -1) {
+ regVal = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1);
+ /* return error if MPI Configuration Table not ready */
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("FW not ready SCRATCH_PAD1"
+- " = 0x%x\n", regVal));
++ pm8001_dbg(pm8001_ha, INIT,
++ "FW not ready SCRATCH_PAD1 = 0x%x\n",
++ regVal);
+ regVal = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_2);
+ /* return error if MPI Configuration Table not ready */
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("FW not ready SCRATCH_PAD2"
+- " = 0x%x\n", regVal));
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("SCRATCH_PAD0 value = 0x%x\n",
+- pm8001_cr32(pm8001_ha, 0,
+- MSGU_SCRATCH_PAD_0)));
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("SCRATCH_PAD3 value = 0x%x\n",
+- pm8001_cr32(pm8001_ha, 0,
+- MSGU_SCRATCH_PAD_3)));
++ pm8001_dbg(pm8001_ha, INIT,
++ "FW not ready SCRATCH_PAD2 = 0x%x\n",
++ regVal);
++ pm8001_dbg(pm8001_ha, INIT,
++ "SCRATCH_PAD0 value = 0x%x\n",
++ pm8001_cr32(pm8001_ha, 0,
++ MSGU_SCRATCH_PAD_0));
++ pm8001_dbg(pm8001_ha, INIT,
++ "SCRATCH_PAD3 value = 0x%x\n",
++ pm8001_cr32(pm8001_ha, 0,
++ MSGU_SCRATCH_PAD_3));
+ spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+ return -1;
+ }
+@@ -1147,8 +1113,7 @@ pm8001_chip_soft_rst(struct pm8001_hba_info *pm8001_ha)
+ pm8001_bar4_shift(pm8001_ha, 0);
+ spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("SPC soft reset Complete\n"));
++ pm8001_dbg(pm8001_ha, INIT, "SPC soft reset Complete\n");
+ return 0;
+ }
+
+@@ -1156,8 +1121,7 @@ static void pm8001_hw_chip_rst(struct pm8001_hba_info *pm8001_ha)
+ {
+ u32 i;
+ u32 regVal;
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("chip reset start\n"));
++ pm8001_dbg(pm8001_ha, INIT, "chip reset start\n");
+
+ /* do SPC chip reset. */
+ regVal = pm8001_cr32(pm8001_ha, 1, SPC_REG_RESET);
+@@ -1181,8 +1145,7 @@ static void pm8001_hw_chip_rst(struct pm8001_hba_info *pm8001_ha)
+ mdelay(1);
+ } while ((--i) != 0);
+
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("chip reset finished\n"));
++ pm8001_dbg(pm8001_ha, INIT, "chip reset finished\n");
+ }
+
+ /**
+@@ -1356,12 +1319,18 @@ int pm8001_mpi_build_cmd(struct pm8001_hba_info *pm8001_ha,
+ {
+ u32 Header = 0, hpriority = 0, bc = 1, category = 0x02;
+ void *pMessage;
+-
+- if (pm8001_mpi_msg_free_get(circularQ, pm8001_ha->iomb_size,
+- &pMessage) < 0) {
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("No free mpi buffer\n"));
+- return -ENOMEM;
++ unsigned long flags;
++ int q_index = circularQ - pm8001_ha->inbnd_q_tbl;
++ int rv = -1;
++
++ WARN_ON(q_index >= PM8001_MAX_INB_NUM);
++ spin_lock_irqsave(&circularQ->iq_lock, flags);
++ rv = pm8001_mpi_msg_free_get(circularQ, pm8001_ha->iomb_size,
++ &pMessage);
++ if (rv < 0) {
++ pm8001_dbg(pm8001_ha, IO, "No free mpi buffer\n");
++ rv = -ENOMEM;
++ goto done;
+ }
+
+ if (nb > (pm8001_ha->iomb_size - sizeof(struct mpi_msg_hdr)))
+@@ -1380,11 +1349,13 @@ int pm8001_mpi_build_cmd(struct pm8001_hba_info *pm8001_ha,
+ /*Update the PI to the firmware*/
+ pm8001_cw32(pm8001_ha, circularQ->pi_pci_bar,
+ circularQ->pi_offset, circularQ->producer_idx);
+- PM8001_DEVIO_DBG(pm8001_ha,
+- pm8001_printk("INB Q %x OPCODE:%x , UPDATED PI=%d CI=%d\n",
+- responseQueue, opCode, circularQ->producer_idx,
+- circularQ->consumer_index));
+- return 0;
++ pm8001_dbg(pm8001_ha, DEVIO,
++ "INB Q %x OPCODE:%x , UPDATED PI=%d CI=%d\n",
++ responseQueue, opCode, circularQ->producer_idx,
++ circularQ->consumer_index);
++done:
++ spin_unlock_irqrestore(&circularQ->iq_lock, flags);
++ return rv;
+ }
+
+ u32 pm8001_mpi_msg_free_set(struct pm8001_hba_info *pm8001_ha, void *pMsg,
+@@ -1398,17 +1369,17 @@ u32 pm8001_mpi_msg_free_set(struct pm8001_hba_info *pm8001_ha, void *pMsg,
+ pOutBoundMsgHeader = (struct mpi_msg_hdr *)(circularQ->base_virt +
+ circularQ->consumer_idx * pm8001_ha->iomb_size);
+ if (pOutBoundMsgHeader != msgHeader) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("consumer_idx = %d msgHeader = %p\n",
+- circularQ->consumer_idx, msgHeader));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "consumer_idx = %d msgHeader = %p\n",
++ circularQ->consumer_idx, msgHeader);
+
+ /* Update the producer index from SPC */
+ producer_index = pm8001_read_32(circularQ->pi_virt);
+ circularQ->producer_index = cpu_to_le32(producer_index);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("consumer_idx = %d producer_index = %d"
+- "msgHeader = %p\n", circularQ->consumer_idx,
+- circularQ->producer_index, msgHeader));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "consumer_idx = %d producer_index = %dmsgHeader = %p\n",
++ circularQ->consumer_idx,
++ circularQ->producer_index, msgHeader);
+ return 0;
+ }
+ /* free the circular queue buffer elements associated with the message*/
+@@ -1420,9 +1391,8 @@ u32 pm8001_mpi_msg_free_set(struct pm8001_hba_info *pm8001_ha, void *pMsg,
+ /* Update the producer index from SPC*/
+ producer_index = pm8001_read_32(circularQ->pi_virt);
+ circularQ->producer_index = cpu_to_le32(producer_index);
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk(" CI=%d PI=%d\n", circularQ->consumer_idx,
+- circularQ->producer_index));
++ pm8001_dbg(pm8001_ha, IO, " CI=%d PI=%d\n",
++ circularQ->consumer_idx, circularQ->producer_index);
+ return 0;
+ }
+
+@@ -1452,10 +1422,10 @@ u32 pm8001_mpi_msg_consume(struct pm8001_hba_info *pm8001_ha,
+ /* read header */
+ header_tmp = pm8001_read_32(msgHeader);
+ msgHeader_tmp = cpu_to_le32(header_tmp);
+- PM8001_DEVIO_DBG(pm8001_ha, pm8001_printk(
+- "outbound opcode msgheader:%x ci=%d pi=%d\n",
+- msgHeader_tmp, circularQ->consumer_idx,
+- circularQ->producer_index));
++ pm8001_dbg(pm8001_ha, DEVIO,
++ "outbound opcode msgheader:%x ci=%d pi=%d\n",
++ msgHeader_tmp, circularQ->consumer_idx,
++ circularQ->producer_index);
+ if (0 != (le32_to_cpu(msgHeader_tmp) & 0x80000000)) {
+ if (OPC_OUB_SKIP_ENTRY !=
+ (le32_to_cpu(msgHeader_tmp) & 0xfff)) {
+@@ -1464,12 +1434,11 @@ u32 pm8001_mpi_msg_consume(struct pm8001_hba_info *pm8001_ha,
+ sizeof(struct mpi_msg_hdr);
+ *pBC = (u8)((le32_to_cpu(msgHeader_tmp)
+ >> 24) & 0x1f);
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk(": CI=%d PI=%d "
+- "msgHeader=%x\n",
+- circularQ->consumer_idx,
+- circularQ->producer_index,
+- msgHeader_tmp));
++ pm8001_dbg(pm8001_ha, IO,
++ ": CI=%d PI=%d msgHeader=%x\n",
++ circularQ->consumer_idx,
++ circularQ->producer_index,
++ msgHeader_tmp);
+ return MPI_IO_STATUS_SUCCESS;
+ } else {
+ circularQ->consumer_idx =
+@@ -1578,17 +1547,15 @@ void pm8001_work_fn(struct work_struct *work)
+ ts->stat = SAS_QUEUE_FULL;
+ pm8001_dev = ccb->device;
+ if (pm8001_dev)
+- pm8001_dev->running_req--;
++ atomic_dec(&pm8001_dev->running_req);
+ spin_lock_irqsave(&t->task_state_lock, flags1);
+ t->task_state_flags &= ~SAS_TASK_STATE_PENDING;
+ t->task_state_flags &= ~SAS_TASK_AT_INITIATOR;
+ t->task_state_flags |= SAS_TASK_STATE_DONE;
+ if (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) {
+ spin_unlock_irqrestore(&t->task_state_lock, flags1);
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("task 0x%p"
+- " done with event 0x%x resp 0x%x stat 0x%x but"
+- " aborted by upper layer!\n",
+- t, pw->handler, ts->resp, ts->stat));
++ pm8001_dbg(pm8001_ha, FAIL, "task 0x%p done with event 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n",
++ t, pw->handler, ts->resp, ts->stat);
+ pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
+ spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+ } else {
+@@ -1608,26 +1575,16 @@ void pm8001_work_fn(struct work_struct *work)
+ unsigned long flags, flags1;
+ int i, ret = 0;
+
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_OPEN_RETRY_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_OPEN_RETRY_TIMEOUT\n");
+
+ ret = pm8001_query_task(t);
+
+- PM8001_IO_DBG(pm8001_ha,
+- switch (ret) {
+- case TMF_RESP_FUNC_SUCC:
+- pm8001_printk("...Task on lu\n");
+- break;
+-
+- case TMF_RESP_FUNC_COMPLETE:
+- pm8001_printk("...Task NOT on lu\n");
+- break;
+-
+- default:
+- PM8001_DEVIO_DBG(pm8001_ha, pm8001_printk(
+- "...query task failed!!!\n"));
+- break;
+- });
++ if (ret == TMF_RESP_FUNC_SUCC)
++ pm8001_dbg(pm8001_ha, IO, "...Task on lu\n");
++ else if (ret == TMF_RESP_FUNC_COMPLETE)
++ pm8001_dbg(pm8001_ha, IO, "...Task NOT on lu\n");
++ else
++ pm8001_dbg(pm8001_ha, DEVIO, "...query task failed!!!\n");
+
+ spin_lock_irqsave(&pm8001_ha->lock, flags);
+
+@@ -1672,8 +1629,7 @@ void pm8001_work_fn(struct work_struct *work)
+ break;
+ default: /* device misbehavior */
+ ret = TMF_RESP_FUNC_FAILED;
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("...Reset phy\n"));
++ pm8001_dbg(pm8001_ha, IO, "...Reset phy\n");
+ pm8001_I_T_nexus_reset(dev);
+ break;
+ }
+@@ -1687,15 +1643,14 @@ void pm8001_work_fn(struct work_struct *work)
+ default: /* device misbehavior */
+ spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+ ret = TMF_RESP_FUNC_FAILED;
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("...Reset phy\n"));
++ pm8001_dbg(pm8001_ha, IO, "...Reset phy\n");
+ pm8001_I_T_nexus_reset(dev);
+ }
+
+ if (ret == TMF_RESP_FUNC_FAILED)
+ t = NULL;
+ pm8001_open_reject_retry(pm8001_ha, t, pm8001_dev);
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("...Complete\n"));
++ pm8001_dbg(pm8001_ha, IO, "...Complete\n");
+ } break;
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS:
+ dev = pm8001_dev->sas_device;
+@@ -1749,15 +1704,14 @@ static void pm8001_send_abort_all(struct pm8001_hba_info *pm8001_ha,
+ int ret;
+
+ if (!pm8001_ha_dev) {
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("dev is null\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "dev is null\n");
+ return;
+ }
+
+ task = sas_alloc_slow_task(GFP_ATOMIC);
+
+ if (!task) {
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("cannot "
+- "allocate task\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "cannot allocate task\n");
+ return;
+ }
+
+@@ -1802,8 +1756,7 @@ static void pm8001_send_read_log(struct pm8001_hba_info *pm8001_ha,
+ task = sas_alloc_slow_task(GFP_ATOMIC);
+
+ if (!task) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("cannot allocate task !!!\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "cannot allocate task !!!\n");
+ return;
+ }
+ task->task_done = pm8001_task_done;
+@@ -1811,8 +1764,7 @@ static void pm8001_send_read_log(struct pm8001_hba_info *pm8001_ha,
+ res = pm8001_tag_alloc(pm8001_ha, &ccb_tag);
+ if (res) {
+ sas_free_task(task);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("cannot allocate tag !!!\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "cannot allocate tag !!!\n");
+ return;
+ }
+
+@@ -1823,8 +1775,8 @@ static void pm8001_send_read_log(struct pm8001_hba_info *pm8001_ha,
+ if (!dev) {
+ sas_free_task(task);
+ pm8001_tag_free(pm8001_ha, ccb_tag);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("Domain device cannot be allocated\n"));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "Domain device cannot be allocated\n");
+ return;
+ }
+ task->dev = dev;
+@@ -1901,27 +1853,25 @@ mpi_ssp_completion(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ t = ccb->task;
+
+ if (status && status != IO_UNDERFLOW)
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("sas IO status 0x%x\n", status));
++ pm8001_dbg(pm8001_ha, FAIL, "sas IO status 0x%x\n", status);
+ if (unlikely(!t || !t->lldd_task || !t->dev))
+ return;
+ ts = &t->task_status;
+ /* Print sas address of IO failed device */
+ if ((status != IO_SUCCESS) && (status != IO_OVERFLOW) &&
+ (status != IO_UNDERFLOW))
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("SAS Address of IO Failure Drive:"
+- "%016llx", SAS_ADDR(t->dev->sas_addr)));
++ pm8001_dbg(pm8001_ha, FAIL, "SAS Address of IO Failure Drive:%016llx\n",
++ SAS_ADDR(t->dev->sas_addr));
+
+ if (status)
+- PM8001_IOERR_DBG(pm8001_ha, pm8001_printk(
+- "status:0x%x, tag:0x%x, task:0x%p\n",
+- status, tag, t));
++ pm8001_dbg(pm8001_ha, IOERR,
++ "status:0x%x, tag:0x%x, task:0x%p\n",
++ status, tag, t);
+
+ switch (status) {
+ case IO_SUCCESS:
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_SUCCESS"
+- ",param = %d\n", param));
++ pm8001_dbg(pm8001_ha, IO, "IO_SUCCESS,param = %d\n",
++ param);
+ if (param == 0) {
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAM_STAT_GOOD;
+@@ -1933,69 +1883,63 @@ mpi_ssp_completion(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ sas_ssp_task_response(pm8001_ha->dev, t, iu);
+ }
+ if (pm8001_dev)
+- pm8001_dev->running_req--;
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_ABORTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_ABORTED IOMB Tag\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_ABORTED IOMB Tag\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_ABORTED_TASK;
+ break;
+ case IO_UNDERFLOW:
+ /* SSP Completion with error */
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_UNDERFLOW"
+- ",param = %d\n", param));
++ pm8001_dbg(pm8001_ha, IO, "IO_UNDERFLOW,param = %d\n",
++ param);
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_UNDERRUN;
+ ts->residual = param;
+ if (pm8001_dev)
+- pm8001_dev->running_req--;
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_NO_DEVICE:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_NO_DEVICE\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_NO_DEVICE\n");
+ ts->resp = SAS_TASK_UNDELIVERED;
+ ts->stat = SAS_PHY_DOWN;
+ break;
+ case IO_XFER_ERROR_BREAK:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_BREAK\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_BREAK\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ /* Force the midlayer to retry */
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+ break;
+ case IO_XFER_ERROR_PHY_NOT_READY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_PHY_NOT_READY\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_PHY_NOT_READY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+ break;
+ case IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_EPROTO;
+ break;
+ case IO_OPEN_CNX_ERROR_ZONE_VIOLATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_ZONE_VIOLATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_ZONE_VIOLATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_UNKNOWN;
+ break;
+ case IO_OPEN_CNX_ERROR_BREAK:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_BREAK\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_BREAK\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+ break;
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_UNKNOWN;
+@@ -2005,68 +1949,59 @@ mpi_ssp_completion(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS);
+ break;
+ case IO_OPEN_CNX_ERROR_BAD_DESTINATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_BAD_DESTINATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_BAD_DESTINATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_BAD_DEST;
+ break;
+ case IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_CONNECTION_RATE_"
+- "NOT_SUPPORTED\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_CONN_RATE;
+ break;
+ case IO_OPEN_CNX_ERROR_WRONG_DESTINATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_WRONG_DESTINATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_WRONG_DESTINATION\n");
+ ts->resp = SAS_TASK_UNDELIVERED;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_WRONG_DEST;
+ break;
+ case IO_XFER_ERROR_NAK_RECEIVED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_NAK_RECEIVED\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_NAK_RECEIVED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+ break;
+ case IO_XFER_ERROR_ACK_NAK_TIMEOUT:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_ACK_NAK_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_ACK_NAK_TIMEOUT\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_NAK_R_ERR;
+ break;
+ case IO_XFER_ERROR_DMA:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_DMA\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_DMA\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ break;
+ case IO_XFER_OPEN_RETRY_TIMEOUT:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_OPEN_RETRY_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_OPEN_RETRY_TIMEOUT\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+ break;
+ case IO_XFER_ERROR_OFFSET_MISMATCH:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_OFFSET_MISMATCH\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_OFFSET_MISMATCH\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ break;
+ case IO_PORT_IN_RESET:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_PORT_IN_RESET\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_PORT_IN_RESET\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ break;
+ case IO_DS_NON_OPERATIONAL:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_DS_NON_OPERATIONAL\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_DS_NON_OPERATIONAL\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ if (!t->uldd_task)
+@@ -2075,51 +2010,44 @@ mpi_ssp_completion(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ IO_DS_NON_OPERATIONAL);
+ break;
+ case IO_DS_IN_RECOVERY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_DS_IN_RECOVERY\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_DS_IN_RECOVERY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ break;
+ case IO_TM_TAG_NOT_FOUND:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_TM_TAG_NOT_FOUND\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_TM_TAG_NOT_FOUND\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ break;
+ case IO_SSP_EXT_IU_ZERO_LEN_ERROR:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_SSP_EXT_IU_ZERO_LEN_ERROR\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_SSP_EXT_IU_ZERO_LEN_ERROR\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ break;
+ case IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+ break;
+ default:
+- PM8001_DEVIO_DBG(pm8001_ha,
+- pm8001_printk("Unknown status 0x%x\n", status));
++ pm8001_dbg(pm8001_ha, DEVIO, "Unknown status 0x%x\n", status);
+ /* not allowed case. Therefore, return failed status */
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ break;
+ }
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("scsi_status = %x\n ",
+- psspPayload->ssp_resp_iu.status));
++ pm8001_dbg(pm8001_ha, IO, "scsi_status = %x\n",
++ psspPayload->ssp_resp_iu.status);
+ spin_lock_irqsave(&t->task_state_lock, flags);
+ t->task_state_flags &= ~SAS_TASK_STATE_PENDING;
+ t->task_state_flags &= ~SAS_TASK_AT_INITIATOR;
+ t->task_state_flags |= SAS_TASK_STATE_DONE;
+ if (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) {
+ spin_unlock_irqrestore(&t->task_state_lock, flags);
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("task 0x%p done with"
+- " io_status 0x%x resp 0x%x "
+- "stat 0x%x but aborted by upper layer!\n",
+- t, status, ts->resp, ts->stat));
++ pm8001_dbg(pm8001_ha, FAIL, "task 0x%p done with io_status 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n",
++ t, status, ts->resp, ts->stat);
+ pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
+ } else {
+ spin_unlock_irqrestore(&t->task_state_lock, flags);
+@@ -2148,60 +2076,52 @@ static void mpi_ssp_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ t = ccb->task;
+ pm8001_dev = ccb->device;
+ if (event)
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("sas IO status 0x%x\n", event));
++ pm8001_dbg(pm8001_ha, FAIL, "sas IO status 0x%x\n", event);
+ if (unlikely(!t || !t->lldd_task || !t->dev))
+ return;
+ ts = &t->task_status;
+- PM8001_DEVIO_DBG(pm8001_ha,
+- pm8001_printk("port_id = %x,device_id = %x\n",
+- port_id, dev_id));
++ pm8001_dbg(pm8001_ha, DEVIO, "port_id = %x,device_id = %x\n",
++ port_id, dev_id);
+ switch (event) {
+ case IO_OVERFLOW:
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_UNDERFLOW\n");)
++ pm8001_dbg(pm8001_ha, IO, "IO_UNDERFLOW\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_OVERRUN;
+ ts->residual = 0;
+ if (pm8001_dev)
+- pm8001_dev->running_req--;
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_BREAK:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_BREAK\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_BREAK\n");
+ pm8001_handle_event(pm8001_ha, t, IO_XFER_ERROR_BREAK);
+ return;
+ case IO_XFER_ERROR_PHY_NOT_READY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_PHY_NOT_READY\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_PHY_NOT_READY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+ break;
+ case IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_PROTOCOL_NOT"
+- "_SUPPORTED\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_EPROTO;
+ break;
+ case IO_OPEN_CNX_ERROR_ZONE_VIOLATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_ZONE_VIOLATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_ZONE_VIOLATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_UNKNOWN;
+ break;
+ case IO_OPEN_CNX_ERROR_BREAK:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_BREAK\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_BREAK\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+ break;
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_UNKNOWN;
+@@ -2211,88 +2131,78 @@ static void mpi_ssp_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS);
+ break;
+ case IO_OPEN_CNX_ERROR_BAD_DESTINATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_BAD_DESTINATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_BAD_DESTINATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_BAD_DEST;
+ break;
+ case IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_CONNECTION_RATE_"
+- "NOT_SUPPORTED\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_CONN_RATE;
+ break;
+ case IO_OPEN_CNX_ERROR_WRONG_DESTINATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_WRONG_DESTINATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_WRONG_DESTINATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_WRONG_DEST;
+ break;
+ case IO_XFER_ERROR_NAK_RECEIVED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_NAK_RECEIVED\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_NAK_RECEIVED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+ break;
+ case IO_XFER_ERROR_ACK_NAK_TIMEOUT:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_ACK_NAK_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_ACK_NAK_TIMEOUT\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_NAK_R_ERR;
+ break;
+ case IO_XFER_OPEN_RETRY_TIMEOUT:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_OPEN_RETRY_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_OPEN_RETRY_TIMEOUT\n");
+ pm8001_handle_event(pm8001_ha, t, IO_XFER_OPEN_RETRY_TIMEOUT);
+ return;
+ case IO_XFER_ERROR_UNEXPECTED_PHASE:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_UNEXPECTED_PHASE\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_UNEXPECTED_PHASE\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_OVERRUN;
+ break;
+ case IO_XFER_ERROR_XFER_RDY_OVERRUN:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_XFER_RDY_OVERRUN\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_XFER_RDY_OVERRUN\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_OVERRUN;
+ break;
+ case IO_XFER_ERROR_XFER_RDY_NOT_EXPECTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_XFER_RDY_NOT_EXPECTED\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_XFER_ERROR_XFER_RDY_NOT_EXPECTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_OVERRUN;
+ break;
+ case IO_XFER_ERROR_CMD_ISSUE_ACK_NAK_TIMEOUT:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_CMD_ISSUE_ACK_NAK_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_XFER_ERROR_CMD_ISSUE_ACK_NAK_TIMEOUT\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_OVERRUN;
+ break;
+ case IO_XFER_ERROR_OFFSET_MISMATCH:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_OFFSET_MISMATCH\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_OFFSET_MISMATCH\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_OVERRUN;
+ break;
+ case IO_XFER_ERROR_XFER_ZERO_DATA_LEN:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_XFER_ZERO_DATA_LEN\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_XFER_ERROR_XFER_ZERO_DATA_LEN\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_OVERRUN;
+ break;
+ case IO_XFER_CMD_FRAME_ISSUED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk(" IO_XFER_CMD_FRAME_ISSUED\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_CMD_FRAME_ISSUED\n");
+ return;
+ default:
+- PM8001_DEVIO_DBG(pm8001_ha,
+- pm8001_printk("Unknown status 0x%x\n", event));
++ pm8001_dbg(pm8001_ha, DEVIO, "Unknown status 0x%x\n", event);
+ /* not allowed case. Therefore, return failed status */
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_OVERRUN;
+@@ -2304,10 +2214,8 @@ static void mpi_ssp_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ t->task_state_flags |= SAS_TASK_STATE_DONE;
+ if (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) {
+ spin_unlock_irqrestore(&t->task_state_lock, flags);
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("task 0x%p done with"
+- " event 0x%x resp 0x%x "
+- "stat 0x%x but aborted by upper layer!\n",
+- t, event, ts->resp, ts->stat));
++ pm8001_dbg(pm8001_ha, FAIL, "task 0x%p done with event 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n",
++ t, event, ts->resp, ts->stat);
+ pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
+ } else {
+ spin_unlock_irqrestore(&t->task_state_lock, flags);
+@@ -2343,8 +2251,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ tag = le32_to_cpu(psataPayload->tag);
+
+ if (!tag) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("tag null\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "tag null\n");
+ return;
+ }
+ ccb = &pm8001_ha->ccb_info[tag];
+@@ -2353,8 +2260,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ t = ccb->task;
+ pm8001_dev = ccb->device;
+ } else {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("ccb null\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "ccb null\n");
+ return;
+ }
+
+@@ -2362,29 +2268,26 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ if (t->dev && (t->dev->lldd_dev))
+ pm8001_dev = t->dev->lldd_dev;
+ } else {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("task null\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "task null\n");
+ return;
+ }
+
+ if ((pm8001_dev && !(pm8001_dev->id & NCQ_READ_LOG_FLAG))
+ && unlikely(!t || !t->lldd_task || !t->dev)) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("task or dev null\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "task or dev null\n");
+ return;
+ }
+
+ ts = &t->task_status;
+ if (!ts) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("ts null\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "ts null\n");
+ return;
+ }
+
+ if (status)
+- PM8001_IOERR_DBG(pm8001_ha, pm8001_printk(
+- "status:0x%x, tag:0x%x, task::0x%p\n",
+- status, tag, t));
++ pm8001_dbg(pm8001_ha, IOERR,
++ "status:0x%x, tag:0x%x, task::0x%p\n",
++ status, tag, t);
+
+ /* Print sas address of IO failed device */
+ if ((status != IO_SUCCESS) && (status != IO_OVERFLOW) &&
+@@ -2416,19 +2319,19 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ & 0xff000000)) +
+ pm8001_dev->attached_phy +
+ 0x10);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("SAS Address of IO Failure Drive:"
+- "%08x%08x", temp_sata_addr_hi,
+- temp_sata_addr_low));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "SAS Address of IO Failure Drive:%08x%08x\n",
++ temp_sata_addr_hi,
++ temp_sata_addr_low);
+ } else {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("SAS Address of IO Failure Drive:"
+- "%016llx", SAS_ADDR(t->dev->sas_addr)));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "SAS Address of IO Failure Drive:%016llx\n",
++ SAS_ADDR(t->dev->sas_addr));
+ }
+ }
+ switch (status) {
+ case IO_SUCCESS:
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_SUCCESS\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_SUCCESS\n");
+ if (param == 0) {
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAM_STAT_GOOD;
+@@ -2450,99 +2353,102 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_PROTO_RESPONSE;
+ ts->residual = param;
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("SAS_PROTO_RESPONSE len = %d\n",
+- param));
++ pm8001_dbg(pm8001_ha, IO,
++ "SAS_PROTO_RESPONSE len = %d\n",
++ param);
+ sata_resp = &psataPayload->sata_resp[0];
+ resp = (struct ata_task_resp *)ts->buf;
+ if (t->ata_task.dma_xfer == 0 &&
+ t->data_dir == DMA_FROM_DEVICE) {
+ len = sizeof(struct pio_setup_fis);
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("PIO read len = %d\n", len));
++ pm8001_dbg(pm8001_ha, IO,
++ "PIO read len = %d\n", len);
+ } else if (t->ata_task.use_ncq) {
+ len = sizeof(struct set_dev_bits_fis);
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("FPDMA len = %d\n", len));
++ pm8001_dbg(pm8001_ha, IO, "FPDMA len = %d\n",
++ len);
+ } else {
+ len = sizeof(struct dev_to_host_fis);
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("other len = %d\n", len));
++ pm8001_dbg(pm8001_ha, IO, "other len = %d\n",
++ len);
+ }
+ if (SAS_STATUS_BUF_SIZE >= sizeof(*resp)) {
+ resp->frame_len = len;
+ memcpy(&resp->ending_fis[0], sata_resp, len);
+ ts->buf_valid_size = sizeof(*resp);
+ } else
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("response to large\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "response too large\n");
+ }
+ if (pm8001_dev)
+- pm8001_dev->running_req--;
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_ABORTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_ABORTED IOMB Tag\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_ABORTED IOMB Tag\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_ABORTED_TASK;
+ if (pm8001_dev)
+- pm8001_dev->running_req--;
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ /* following cases are to do cases */
+ case IO_UNDERFLOW:
+ /* SATA Completion with error */
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_UNDERFLOW param = %d\n", param));
++ pm8001_dbg(pm8001_ha, IO, "IO_UNDERFLOW param = %d\n", param);
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_UNDERRUN;
+ ts->residual = param;
+ if (pm8001_dev)
+- pm8001_dev->running_req--;
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_NO_DEVICE:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_NO_DEVICE\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_NO_DEVICE\n");
+ ts->resp = SAS_TASK_UNDELIVERED;
+ ts->stat = SAS_PHY_DOWN;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_BREAK:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_BREAK\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_BREAK\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_INTERRUPTED;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_PHY_NOT_READY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_PHY_NOT_READY\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_PHY_NOT_READY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_PROTOCOL_NOT"
+- "_SUPPORTED\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_EPROTO;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_OPEN_CNX_ERROR_ZONE_VIOLATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_ZONE_VIOLATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_ZONE_VIOLATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_UNKNOWN;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_OPEN_CNX_ERROR_BREAK:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_BREAK\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_BREAK\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_CONT0;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DEV_NO_RESPONSE;
+ if (!t->uldd_task) {
+@@ -2556,8 +2462,8 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ }
+ break;
+ case IO_OPEN_CNX_ERROR_BAD_DESTINATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_BAD_DESTINATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_BAD_DESTINATION\n");
+ ts->resp = SAS_TASK_UNDELIVERED;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_BAD_DEST;
+@@ -2572,17 +2478,15 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ }
+ break;
+ case IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_CONNECTION_RATE_"
+- "NOT_SUPPORTED\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_CONN_RATE;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_OPEN_CNX_ERROR_STP_RESOURCES_BUSY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_STP_RESOURCES"
+- "_BUSY\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_STP_RESOURCES_BUSY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DEV_NO_RESPONSE;
+ if (!t->uldd_task) {
+@@ -2596,57 +2500,65 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ }
+ break;
+ case IO_OPEN_CNX_ERROR_WRONG_DESTINATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_WRONG_DESTINATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_WRONG_DESTINATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_WRONG_DEST;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_NAK_RECEIVED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_NAK_RECEIVED\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_NAK_RECEIVED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_NAK_R_ERR;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_ACK_NAK_TIMEOUT:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_ACK_NAK_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_ACK_NAK_TIMEOUT\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_NAK_R_ERR;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_DMA:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_DMA\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_DMA\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_ABORTED_TASK;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_SATA_LINK_TIMEOUT:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_SATA_LINK_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_SATA_LINK_TIMEOUT\n");
+ ts->resp = SAS_TASK_UNDELIVERED;
+ ts->stat = SAS_DEV_NO_RESPONSE;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_REJECTED_NCQ_MODE:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_REJECTED_NCQ_MODE\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_REJECTED_NCQ_MODE\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_UNDERRUN;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_OPEN_RETRY_TIMEOUT:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_OPEN_RETRY_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_OPEN_RETRY_TIMEOUT\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_TO;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_PORT_IN_RESET:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_PORT_IN_RESET\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_PORT_IN_RESET\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DEV_NO_RESPONSE;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_DS_NON_OPERATIONAL:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_DS_NON_OPERATIONAL\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_DS_NON_OPERATIONAL\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DEV_NO_RESPONSE;
+ if (!t->uldd_task) {
+@@ -2659,14 +2571,14 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ }
+ break;
+ case IO_DS_IN_RECOVERY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk(" IO_DS_IN_RECOVERY\n"));
++ pm8001_dbg(pm8001_ha, IO, " IO_DS_IN_RECOVERY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DEV_NO_RESPONSE;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_DS_IN_ERROR:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_DS_IN_ERROR\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_DS_IN_ERROR\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DEV_NO_RESPONSE;
+ if (!t->uldd_task) {
+@@ -2679,18 +2591,21 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ }
+ break;
+ case IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ default:
+- PM8001_DEVIO_DBG(pm8001_ha,
+- pm8001_printk("Unknown status 0x%x\n", status));
++ pm8001_dbg(pm8001_ha, DEVIO, "Unknown status 0x%x\n", status);
+ /* not allowed case. Therefore, return failed status */
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DEV_NO_RESPONSE;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ }
+ spin_lock_irqsave(&t->task_state_lock, flags);
+@@ -2699,10 +2614,9 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ t->task_state_flags |= SAS_TASK_STATE_DONE;
+ if (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) {
+ spin_unlock_irqrestore(&t->task_state_lock, flags);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("task 0x%p done with io_status 0x%x"
+- " resp 0x%x stat 0x%x but aborted by upper layer!\n",
+- t, status, ts->resp, ts->stat));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "task 0x%p done with io_status 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n",
++ t, status, ts->resp, ts->stat);
+ pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
+ } else {
+ spin_unlock_irqrestore(&t->task_state_lock, flags);
+@@ -2731,12 +2645,10 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ t = ccb->task;
+ pm8001_dev = ccb->device;
+ } else {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("No CCB !!!. returning\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "No CCB !!!. returning\n");
+ }
+ if (event)
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("SATA EVENT 0x%x\n", event));
++ pm8001_dbg(pm8001_ha, FAIL, "SATA EVENT 0x%x\n", event);
+
+ /* Check if this is NCQ error */
+ if (event == IO_XFER_ERROR_ABORTED_NCQ_MODE) {
+@@ -2752,61 +2664,54 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ t = ccb->task;
+ pm8001_dev = ccb->device;
+ if (event)
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("sata IO status 0x%x\n", event));
++ pm8001_dbg(pm8001_ha, FAIL, "sata IO status 0x%x\n", event);
+ if (unlikely(!t || !t->lldd_task || !t->dev))
+ return;
+ ts = &t->task_status;
+- PM8001_DEVIO_DBG(pm8001_ha, pm8001_printk(
+- "port_id:0x%x, device_id:0x%x, tag:0x%x, event:0x%x\n",
+- port_id, dev_id, tag, event));
++ pm8001_dbg(pm8001_ha, DEVIO,
++ "port_id:0x%x, device_id:0x%x, tag:0x%x, event:0x%x\n",
++ port_id, dev_id, tag, event);
+ switch (event) {
+ case IO_OVERFLOW:
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_UNDERFLOW\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_UNDERFLOW\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_OVERRUN;
+ ts->residual = 0;
+ if (pm8001_dev)
+- pm8001_dev->running_req--;
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_BREAK:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_BREAK\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_BREAK\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_INTERRUPTED;
+ break;
+ case IO_XFER_ERROR_PHY_NOT_READY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_PHY_NOT_READY\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_PHY_NOT_READY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+ break;
+ case IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_PROTOCOL_NOT"
+- "_SUPPORTED\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_EPROTO;
+ break;
+ case IO_OPEN_CNX_ERROR_ZONE_VIOLATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_ZONE_VIOLATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_ZONE_VIOLATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_UNKNOWN;
+ break;
+ case IO_OPEN_CNX_ERROR_BREAK:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_BREAK\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_BREAK\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_CONT0;
+ break;
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS\n");
+ ts->resp = SAS_TASK_UNDELIVERED;
+ ts->stat = SAS_DEV_NO_RESPONSE;
+ if (!t->uldd_task) {
+@@ -2820,94 +2725,82 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ }
+ break;
+ case IO_OPEN_CNX_ERROR_BAD_DESTINATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_BAD_DESTINATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_BAD_DESTINATION\n");
+ ts->resp = SAS_TASK_UNDELIVERED;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_BAD_DEST;
+ break;
+ case IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_CONNECTION_RATE_"
+- "NOT_SUPPORTED\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_CONN_RATE;
+ break;
+ case IO_OPEN_CNX_ERROR_WRONG_DESTINATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_WRONG_DESTINATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_WRONG_DESTINATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_WRONG_DEST;
+ break;
+ case IO_XFER_ERROR_NAK_RECEIVED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_NAK_RECEIVED\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_NAK_RECEIVED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_NAK_R_ERR;
+ break;
+ case IO_XFER_ERROR_PEER_ABORTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_PEER_ABORTED\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_PEER_ABORTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_NAK_R_ERR;
+ break;
+ case IO_XFER_ERROR_REJECTED_NCQ_MODE:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_REJECTED_NCQ_MODE\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_REJECTED_NCQ_MODE\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_UNDERRUN;
+ break;
+ case IO_XFER_OPEN_RETRY_TIMEOUT:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_OPEN_RETRY_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_OPEN_RETRY_TIMEOUT\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_TO;
+ break;
+ case IO_XFER_ERROR_UNEXPECTED_PHASE:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_UNEXPECTED_PHASE\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_UNEXPECTED_PHASE\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_TO;
+ break;
+ case IO_XFER_ERROR_XFER_RDY_OVERRUN:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_XFER_RDY_OVERRUN\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_XFER_RDY_OVERRUN\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_TO;
+ break;
+ case IO_XFER_ERROR_XFER_RDY_NOT_EXPECTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_XFER_RDY_NOT_EXPECTED\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_XFER_ERROR_XFER_RDY_NOT_EXPECTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_TO;
+ break;
+ case IO_XFER_ERROR_OFFSET_MISMATCH:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_OFFSET_MISMATCH\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_OFFSET_MISMATCH\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_TO;
+ break;
+ case IO_XFER_ERROR_XFER_ZERO_DATA_LEN:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_XFER_ZERO_DATA_LEN\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_XFER_ERROR_XFER_ZERO_DATA_LEN\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_TO;
+ break;
+ case IO_XFER_CMD_FRAME_ISSUED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_CMD_FRAME_ISSUED\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_CMD_FRAME_ISSUED\n");
+ break;
+ case IO_XFER_PIO_SETUP_ERROR:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_PIO_SETUP_ERROR\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_PIO_SETUP_ERROR\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_TO;
+ break;
+ default:
+- PM8001_DEVIO_DBG(pm8001_ha,
+- pm8001_printk("Unknown status 0x%x\n", event));
++ pm8001_dbg(pm8001_ha, DEVIO, "Unknown status 0x%x\n", event);
+ /* not allowed case. Therefore, return failed status */
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_TO;
+@@ -2919,10 +2812,9 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ t->task_state_flags |= SAS_TASK_STATE_DONE;
+ if (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) {
+ spin_unlock_irqrestore(&t->task_state_lock, flags);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("task 0x%p done with io_status 0x%x"
+- " resp 0x%x stat 0x%x but aborted by upper layer!\n",
+- t, event, ts->resp, ts->stat));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "task 0x%p done with io_status 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n",
++ t, event, ts->resp, ts->stat);
+ pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
+ } else {
+ spin_unlock_irqrestore(&t->task_state_lock, flags);
+@@ -2952,86 +2844,79 @@ mpi_smp_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ ts = &t->task_status;
+ pm8001_dev = ccb->device;
+ if (status) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("smp IO status 0x%x\n", status));
+- PM8001_IOERR_DBG(pm8001_ha,
+- pm8001_printk("status:0x%x, tag:0x%x, task:0x%p\n",
+- status, tag, t));
++ pm8001_dbg(pm8001_ha, FAIL, "smp IO status 0x%x\n", status);
++ pm8001_dbg(pm8001_ha, IOERR,
++ "status:0x%x, tag:0x%x, task:0x%p\n",
++ status, tag, t);
+ }
+ if (unlikely(!t || !t->lldd_task || !t->dev))
+ return;
+
+ switch (status) {
+ case IO_SUCCESS:
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_SUCCESS\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_SUCCESS\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAM_STAT_GOOD;
+ if (pm8001_dev)
+- pm8001_dev->running_req--;
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_ABORTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_ABORTED IOMB\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_ABORTED IOMB\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_ABORTED_TASK;
+ if (pm8001_dev)
+- pm8001_dev->running_req--;
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_OVERFLOW:
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_UNDERFLOW\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_UNDERFLOW\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_OVERRUN;
+ ts->residual = 0;
+ if (pm8001_dev)
+- pm8001_dev->running_req--;
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_NO_DEVICE:
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_NO_DEVICE\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_NO_DEVICE\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_PHY_DOWN;
+ break;
+ case IO_ERROR_HW_TIMEOUT:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_ERROR_HW_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_ERROR_HW_TIMEOUT\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAM_STAT_BUSY;
+ break;
+ case IO_XFER_ERROR_BREAK:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_BREAK\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_BREAK\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAM_STAT_BUSY;
+ break;
+ case IO_XFER_ERROR_PHY_NOT_READY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_PHY_NOT_READY\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_PHY_NOT_READY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAM_STAT_BUSY;
+ break;
+ case IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_UNKNOWN;
+ break;
+ case IO_OPEN_CNX_ERROR_ZONE_VIOLATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_ZONE_VIOLATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_ZONE_VIOLATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_UNKNOWN;
+ break;
+ case IO_OPEN_CNX_ERROR_BREAK:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_BREAK\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_BREAK\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_CONT0;
+ break;
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_UNKNOWN;
+@@ -3040,76 +2925,67 @@ mpi_smp_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS);
+ break;
+ case IO_OPEN_CNX_ERROR_BAD_DESTINATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_BAD_DESTINATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_BAD_DESTINATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_BAD_DEST;
+ break;
+ case IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_CONNECTION_RATE_"
+- "NOT_SUPPORTED\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_CONN_RATE;
+ break;
+ case IO_OPEN_CNX_ERROR_WRONG_DESTINATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_WRONG_DESTINATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_WRONG_DESTINATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_WRONG_DEST;
+ break;
+ case IO_XFER_ERROR_RX_FRAME:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_RX_FRAME\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_RX_FRAME\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DEV_NO_RESPONSE;
+ break;
+ case IO_XFER_OPEN_RETRY_TIMEOUT:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_OPEN_RETRY_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_OPEN_RETRY_TIMEOUT\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+ break;
+ case IO_ERROR_INTERNAL_SMP_RESOURCE:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_ERROR_INTERNAL_SMP_RESOURCE\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_ERROR_INTERNAL_SMP_RESOURCE\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_QUEUE_FULL;
+ break;
+ case IO_PORT_IN_RESET:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_PORT_IN_RESET\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_PORT_IN_RESET\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+ break;
+ case IO_DS_NON_OPERATIONAL:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_DS_NON_OPERATIONAL\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_DS_NON_OPERATIONAL\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DEV_NO_RESPONSE;
+ break;
+ case IO_DS_IN_RECOVERY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_DS_IN_RECOVERY\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_DS_IN_RECOVERY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+ break;
+ case IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+ break;
+ default:
+- PM8001_DEVIO_DBG(pm8001_ha,
+- pm8001_printk("Unknown status 0x%x\n", status));
++ pm8001_dbg(pm8001_ha, DEVIO, "Unknown status 0x%x\n", status);
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DEV_NO_RESPONSE;
+ /* not allowed case. Therefore, return failed status */
+@@ -3121,10 +2997,8 @@ mpi_smp_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ t->task_state_flags |= SAS_TASK_STATE_DONE;
+ if (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) {
+ spin_unlock_irqrestore(&t->task_state_lock, flags);
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("task 0x%p done with"
+- " io_status 0x%x resp 0x%x "
+- "stat 0x%x but aborted by upper layer!\n",
+- t, status, ts->resp, ts->stat));
++ pm8001_dbg(pm8001_ha, FAIL, "task 0x%p done with io_status 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n",
++ t, status, ts->resp, ts->stat);
+ pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
+ } else {
+ spin_unlock_irqrestore(&t->task_state_lock, flags);
+@@ -3146,9 +3020,8 @@ void pm8001_mpi_set_dev_state_resp(struct pm8001_hba_info *pm8001_ha,
+ u32 device_id = le32_to_cpu(pPayload->device_id);
+ u8 pds = le32_to_cpu(pPayload->pds_nds) & PDS_BITS;
+ u8 nds = le32_to_cpu(pPayload->pds_nds) & NDS_BITS;
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk("Set device id = 0x%x state "
+- "from 0x%x to 0x%x status = 0x%x!\n",
+- device_id, pds, nds, status));
++ pm8001_dbg(pm8001_ha, MSG, "Set device id = 0x%x state from 0x%x to 0x%x status = 0x%x!\n",
++ device_id, pds, nds, status);
+ complete(pm8001_dev->setds_completion);
+ ccb->task = NULL;
+ ccb->ccb_tag = 0xFFFFFFFF;
+@@ -3163,10 +3036,9 @@ void pm8001_mpi_set_nvmd_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ struct pm8001_ccb_info *ccb = &pm8001_ha->ccb_info[tag];
+ u32 dlen_status = le32_to_cpu(pPayload->dlen_status);
+ complete(pm8001_ha->nvmd_completion);
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk("Set nvm data complete!\n"));
++ pm8001_dbg(pm8001_ha, MSG, "Set nvm data complete!\n");
+ if ((dlen_status & NVMD_STAT) != 0) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("Set nvm data error!\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "Set nvm data error!\n");
+ return;
+ }
+ ccb->task = NULL;
+@@ -3188,26 +3060,22 @@ pm8001_mpi_get_nvmd_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ void *virt_addr = pm8001_ha->memoryMap.region[NVMD].virt_ptr;
+ fw_control_context = ccb->fw_control_context;
+
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk("Get nvm data complete!\n"));
++ pm8001_dbg(pm8001_ha, MSG, "Get nvm data complete!\n");
+ if ((dlen_status & NVMD_STAT) != 0) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("Get nvm data error!\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "Get nvm data error!\n");
+ complete(pm8001_ha->nvmd_completion);
+ return;
+ }
+
+ if (ir_tds_bn_dps_das_nvm & IPMode) {
+ /* indirect mode - IR bit set */
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("Get NVMD success, IR=1\n"));
++ pm8001_dbg(pm8001_ha, MSG, "Get NVMD success, IR=1\n");
+ if ((ir_tds_bn_dps_das_nvm & NVMD_TYPE) == TWI_DEVICE) {
+ if (ir_tds_bn_dps_das_nvm == 0x80a80200) {
+ memcpy(pm8001_ha->sas_addr,
+ ((u8 *)virt_addr + 4),
+ SAS_ADDR_SIZE);
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("Get SAS address"
+- " from VPD successfully!\n"));
++ pm8001_dbg(pm8001_ha, MSG, "Get SAS address from VPD successfully!\n");
+ }
+ } else if (((ir_tds_bn_dps_das_nvm & NVMD_TYPE) == C_SEEPROM)
+ || ((ir_tds_bn_dps_das_nvm & NVMD_TYPE) == VPD_FLASH) ||
+@@ -3218,14 +3086,14 @@ pm8001_mpi_get_nvmd_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ ;
+ } else {
+ /* Should not be happened*/
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("(IR=1)Wrong Device type 0x%x\n",
+- ir_tds_bn_dps_das_nvm));
++ pm8001_dbg(pm8001_ha, MSG,
++ "(IR=1)Wrong Device type 0x%x\n",
++ ir_tds_bn_dps_das_nvm);
+ }
+ } else /* direct mode */{
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("Get NVMD success, IR=0, dataLen=%d\n",
+- (dlen_status & NVMD_LEN) >> 24));
++ pm8001_dbg(pm8001_ha, MSG,
++ "Get NVMD success, IR=0, dataLen=%d\n",
++ (dlen_status & NVMD_LEN) >> 24);
+ }
+ /* Though fw_control_context is freed below, usrAddr still needs
+ * to be updated as this holds the response to the request function
+@@ -3234,10 +3102,15 @@ pm8001_mpi_get_nvmd_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ pm8001_ha->memoryMap.region[NVMD].virt_ptr,
+ fw_control_context->len);
+ kfree(ccb->fw_control_context);
++ /* To avoid race condition, complete should be
++ * called after the message is copied to
++ * fw_control_context->usrAddr
++ */
++ complete(pm8001_ha->nvmd_completion);
++ pm8001_dbg(pm8001_ha, MSG, "Set nvm data complete!\n");
+ ccb->task = NULL;
+ ccb->ccb_tag = 0xFFFFFFFF;
+ pm8001_tag_free(pm8001_ha, tag);
+- complete(pm8001_ha->nvmd_completion);
+ }
+
+ int pm8001_mpi_local_phy_ctl(struct pm8001_hba_info *pm8001_ha, void *piomb)
+@@ -3250,13 +3123,13 @@ int pm8001_mpi_local_phy_ctl(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ u32 phy_op = le32_to_cpu(pPayload->phyop_phyid) & OP_BITS;
+ tag = le32_to_cpu(pPayload->tag);
+ if (status != 0) {
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("%x phy execute %x phy op failed!\n",
+- phy_id, phy_op));
++ pm8001_dbg(pm8001_ha, MSG,
++ "%x phy execute %x phy op failed!\n",
++ phy_id, phy_op);
+ } else {
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("%x phy execute %x phy op success!\n",
+- phy_id, phy_op));
++ pm8001_dbg(pm8001_ha, MSG,
++ "%x phy execute %x phy op success!\n",
++ phy_id, phy_op);
+ pm8001_ha->phy[phy_id].reset_success = true;
+ }
+ if (pm8001_ha->phy[phy_id].enable_completion) {
+@@ -3303,10 +3176,10 @@ void pm8001_bytes_dmaed(struct pm8001_hba_info *pm8001_ha, int i)
+ } else if (phy->phy_type & PORT_TYPE_SATA) {
+ /*Nothing*/
+ }
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk("phy %d byte dmaded.\n", i));
++ pm8001_dbg(pm8001_ha, MSG, "phy %d byte dmaded.\n", i);
+
+ sas_phy->frame_rcvd_size = phy->frame_rcvd_size;
+- pm8001_ha->sas->notify_port_event(sas_phy, PORTE_BYTES_DMAED);
++ sas_notify_port_event(sas_phy, PORTE_BYTES_DMAED);
+ }
+
+ /* Get the link rate speed */
+@@ -3420,43 +3293,39 @@ hw_event_sas_phy_up(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ u32 npip_portstate = le32_to_cpu(pPayload->npip_portstate);
+ u8 portstate = (u8)(npip_portstate & 0x0000000F);
+ struct pm8001_port *port = &pm8001_ha->port[port_id];
+- struct sas_ha_struct *sas_ha = pm8001_ha->sas;
+ struct pm8001_phy *phy = &pm8001_ha->phy[phy_id];
+ unsigned long flags;
+ u8 deviceType = pPayload->sas_identify.dev_type;
+ port->port_state = portstate;
+ phy->phy_state = PHY_STATE_LINK_UP_SPC;
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_SAS_PHY_UP port id = %d, phy id = %d\n",
+- port_id, phy_id));
++ pm8001_dbg(pm8001_ha, MSG,
++ "HW_EVENT_SAS_PHY_UP port id = %d, phy id = %d\n",
++ port_id, phy_id);
+
+ switch (deviceType) {
+ case SAS_PHY_UNUSED:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("device type no device.\n"));
++ pm8001_dbg(pm8001_ha, MSG, "device type no device.\n");
+ break;
+ case SAS_END_DEVICE:
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk("end device.\n"));
++ pm8001_dbg(pm8001_ha, MSG, "end device.\n");
+ pm8001_chip_phy_ctl_req(pm8001_ha, phy_id,
+ PHY_NOTIFY_ENABLE_SPINUP);
+ port->port_attached = 1;
+ pm8001_get_lrate_mode(phy, link_rate);
+ break;
+ case SAS_EDGE_EXPANDER_DEVICE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("expander device.\n"));
++ pm8001_dbg(pm8001_ha, MSG, "expander device.\n");
+ port->port_attached = 1;
+ pm8001_get_lrate_mode(phy, link_rate);
+ break;
+ case SAS_FANOUT_EXPANDER_DEVICE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("fanout expander device.\n"));
++ pm8001_dbg(pm8001_ha, MSG, "fanout expander device.\n");
+ port->port_attached = 1;
+ pm8001_get_lrate_mode(phy, link_rate);
+ break;
+ default:
+- PM8001_DEVIO_DBG(pm8001_ha,
+- pm8001_printk("unknown device type(%x)\n", deviceType));
++ pm8001_dbg(pm8001_ha, DEVIO, "unknown device type(%x)\n",
++ deviceType);
+ break;
+ }
+ phy->phy_type |= PORT_TYPE_SAS;
+@@ -3467,7 +3336,7 @@ hw_event_sas_phy_up(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ else if (phy->identify.device_type != SAS_PHY_UNUSED)
+ phy->identify.target_port_protocols = SAS_PROTOCOL_SMP;
+ phy->sas_phy.oob_mode = SAS_OOB_MODE;
+- sas_ha->notify_phy_event(&phy->sas_phy, PHYE_OOB_DONE);
++ sas_notify_phy_event(&phy->sas_phy, PHYE_OOB_DONE);
+ spin_lock_irqsave(&phy->sas_phy.frame_rcvd_lock, flags);
+ memcpy(phy->frame_rcvd, &pPayload->sas_identify,
+ sizeof(struct sas_identify_frame)-4);
+@@ -3499,12 +3368,10 @@ hw_event_sata_phy_up(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ u32 npip_portstate = le32_to_cpu(pPayload->npip_portstate);
+ u8 portstate = (u8)(npip_portstate & 0x0000000F);
+ struct pm8001_port *port = &pm8001_ha->port[port_id];
+- struct sas_ha_struct *sas_ha = pm8001_ha->sas;
+ struct pm8001_phy *phy = &pm8001_ha->phy[phy_id];
+ unsigned long flags;
+- PM8001_DEVIO_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_SATA_PHY_UP port id = %d,"
+- " phy id = %d\n", port_id, phy_id));
++ pm8001_dbg(pm8001_ha, DEVIO, "HW_EVENT_SATA_PHY_UP port id = %d, phy id = %d\n",
++ port_id, phy_id);
+ port->port_state = portstate;
+ phy->phy_state = PHY_STATE_LINK_UP_SPC;
+ port->port_attached = 1;
+@@ -3512,7 +3379,7 @@ hw_event_sata_phy_up(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ phy->phy_type |= PORT_TYPE_SATA;
+ phy->phy_attached = 1;
+ phy->sas_phy.oob_mode = SATA_OOB_MODE;
+- sas_ha->notify_phy_event(&phy->sas_phy, PHYE_OOB_DONE);
++ sas_notify_phy_event(&phy->sas_phy, PHYE_OOB_DONE);
+ spin_lock_irqsave(&phy->sas_phy.frame_rcvd_lock, flags);
+ memcpy(phy->frame_rcvd, ((u8 *)&pPayload->sata_fis - 4),
+ sizeof(struct dev_to_host_fis));
+@@ -3552,37 +3419,35 @@ hw_event_phy_down(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ case PORT_VALID:
+ break;
+ case PORT_INVALID:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" PortInvalid portID %d\n", port_id));
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" Last phy Down and port invalid\n"));
++ pm8001_dbg(pm8001_ha, MSG, " PortInvalid portID %d\n",
++ port_id);
++ pm8001_dbg(pm8001_ha, MSG,
++ " Last phy Down and port invalid\n");
+ port->port_attached = 0;
+ pm8001_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_PHY_DOWN,
+ port_id, phy_id, 0, 0);
+ break;
+ case PORT_IN_RESET:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" Port In Reset portID %d\n", port_id));
++ pm8001_dbg(pm8001_ha, MSG, " Port In Reset portID %d\n",
++ port_id);
+ break;
+ case PORT_NOT_ESTABLISHED:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" phy Down and PORT_NOT_ESTABLISHED\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ " phy Down and PORT_NOT_ESTABLISHED\n");
+ port->port_attached = 0;
+ break;
+ case PORT_LOSTCOMM:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" phy Down and PORT_LOSTCOMM\n"));
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" Last phy Down and port invalid\n"));
++ pm8001_dbg(pm8001_ha, MSG, " phy Down and PORT_LOSTCOMM\n");
++ pm8001_dbg(pm8001_ha, MSG,
++ " Last phy Down and port invalid\n");
+ port->port_attached = 0;
+ pm8001_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_PHY_DOWN,
+ port_id, phy_id, 0, 0);
+ break;
+ default:
+ port->port_attached = 0;
+- PM8001_DEVIO_DBG(pm8001_ha,
+- pm8001_printk(" phy Down and(default) = %x\n",
+- portstate));
++ pm8001_dbg(pm8001_ha, DEVIO, " phy Down and(default) = %x\n",
++ portstate);
+ break;
+
+ }
+@@ -3613,44 +3478,42 @@ int pm8001_mpi_reg_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ pm8001_dev = ccb->device;
+ status = le32_to_cpu(registerRespPayload->status);
+ device_id = le32_to_cpu(registerRespPayload->device_id);
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" register device is status = %d\n", status));
++ pm8001_dbg(pm8001_ha, MSG, " register device is status = %d\n",
++ status);
+ switch (status) {
+ case DEVREG_SUCCESS:
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk("DEVREG_SUCCESS\n"));
++ pm8001_dbg(pm8001_ha, MSG, "DEVREG_SUCCESS\n");
+ pm8001_dev->device_id = device_id;
+ break;
+ case DEVREG_FAILURE_OUT_OF_RESOURCE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("DEVREG_FAILURE_OUT_OF_RESOURCE\n"));
++ pm8001_dbg(pm8001_ha, MSG, "DEVREG_FAILURE_OUT_OF_RESOURCE\n");
+ break;
+ case DEVREG_FAILURE_DEVICE_ALREADY_REGISTERED:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("DEVREG_FAILURE_DEVICE_ALREADY_REGISTERED\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "DEVREG_FAILURE_DEVICE_ALREADY_REGISTERED\n");
+ break;
+ case DEVREG_FAILURE_INVALID_PHY_ID:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("DEVREG_FAILURE_INVALID_PHY_ID\n"));
++ pm8001_dbg(pm8001_ha, MSG, "DEVREG_FAILURE_INVALID_PHY_ID\n");
+ break;
+ case DEVREG_FAILURE_PHY_ID_ALREADY_REGISTERED:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("DEVREG_FAILURE_PHY_ID_ALREADY_REGISTERED\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "DEVREG_FAILURE_PHY_ID_ALREADY_REGISTERED\n");
+ break;
+ case DEVREG_FAILURE_PORT_ID_OUT_OF_RANGE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("DEVREG_FAILURE_PORT_ID_OUT_OF_RANGE\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "DEVREG_FAILURE_PORT_ID_OUT_OF_RANGE\n");
+ break;
+ case DEVREG_FAILURE_PORT_NOT_VALID_STATE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("DEVREG_FAILURE_PORT_NOT_VALID_STATE\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "DEVREG_FAILURE_PORT_NOT_VALID_STATE\n");
+ break;
+ case DEVREG_FAILURE_DEVICE_TYPE_NOT_VALID:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("DEVREG_FAILURE_DEVICE_TYPE_NOT_VALID\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "DEVREG_FAILURE_DEVICE_TYPE_NOT_VALID\n");
+ break;
+ default:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("DEVREG_FAILURE_DEVICE_TYPE_NOT_SUPPORTED\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "DEVREG_FAILURE_DEVICE_TYPE_NOT_SUPPORTED\n");
+ break;
+ }
+ complete(pm8001_dev->dcompletion);
+@@ -3670,9 +3533,9 @@ int pm8001_mpi_dereg_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ status = le32_to_cpu(registerRespPayload->status);
+ device_id = le32_to_cpu(registerRespPayload->device_id);
+ if (status != 0)
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" deregister device failed ,status = %x"
+- ", device_id = %x\n", status, device_id));
++ pm8001_dbg(pm8001_ha, MSG,
++ " deregister device failed ,status = %x, device_id = %x\n",
++ status, device_id);
+ return 0;
+ }
+
+@@ -3692,44 +3555,37 @@ int pm8001_mpi_fw_flash_update_resp(struct pm8001_hba_info *pm8001_ha,
+ status = le32_to_cpu(ppayload->status);
+ switch (status) {
+ case FLASH_UPDATE_COMPLETE_PENDING_REBOOT:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(": FLASH_UPDATE_COMPLETE_PENDING_REBOOT\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ ": FLASH_UPDATE_COMPLETE_PENDING_REBOOT\n");
+ break;
+ case FLASH_UPDATE_IN_PROGRESS:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(": FLASH_UPDATE_IN_PROGRESS\n"));
++ pm8001_dbg(pm8001_ha, MSG, ": FLASH_UPDATE_IN_PROGRESS\n");
+ break;
+ case FLASH_UPDATE_HDR_ERR:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(": FLASH_UPDATE_HDR_ERR\n"));
++ pm8001_dbg(pm8001_ha, MSG, ": FLASH_UPDATE_HDR_ERR\n");
+ break;
+ case FLASH_UPDATE_OFFSET_ERR:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(": FLASH_UPDATE_OFFSET_ERR\n"));
++ pm8001_dbg(pm8001_ha, MSG, ": FLASH_UPDATE_OFFSET_ERR\n");
+ break;
+ case FLASH_UPDATE_CRC_ERR:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(": FLASH_UPDATE_CRC_ERR\n"));
++ pm8001_dbg(pm8001_ha, MSG, ": FLASH_UPDATE_CRC_ERR\n");
+ break;
+ case FLASH_UPDATE_LENGTH_ERR:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(": FLASH_UPDATE_LENGTH_ERR\n"));
++ pm8001_dbg(pm8001_ha, MSG, ": FLASH_UPDATE_LENGTH_ERR\n");
+ break;
+ case FLASH_UPDATE_HW_ERR:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(": FLASH_UPDATE_HW_ERR\n"));
++ pm8001_dbg(pm8001_ha, MSG, ": FLASH_UPDATE_HW_ERR\n");
+ break;
+ case FLASH_UPDATE_DNLD_NOT_SUPPORTED:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(": FLASH_UPDATE_DNLD_NOT_SUPPORTED\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ ": FLASH_UPDATE_DNLD_NOT_SUPPORTED\n");
+ break;
+ case FLASH_UPDATE_DISABLED:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(": FLASH_UPDATE_DISABLED\n"));
++ pm8001_dbg(pm8001_ha, MSG, ": FLASH_UPDATE_DISABLED\n");
+ break;
+ default:
+- PM8001_DEVIO_DBG(pm8001_ha,
+- pm8001_printk("No matched status = %d\n", status));
++ pm8001_dbg(pm8001_ha, DEVIO, "No matched status = %d\n",
++ status);
+ break;
+ }
+ kfree(ccb->fw_control_context);
+@@ -3747,12 +3603,11 @@ int pm8001_mpi_general_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ struct general_event_resp *pPayload =
+ (struct general_event_resp *)(piomb + 4);
+ status = le32_to_cpu(pPayload->status);
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" status = 0x%x\n", status));
++ pm8001_dbg(pm8001_ha, MSG, " status = 0x%x\n", status);
+ for (i = 0; i < GENERAL_EVENT_PAYLOAD; i++)
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("inb_IOMB_payload[0x%x] 0x%x,\n", i,
+- pPayload->inb_IOMB_payload[i]));
++ pm8001_dbg(pm8001_ha, MSG, "inb_IOMB_payload[0x%x] 0x%x,\n",
++ i,
++ pPayload->inb_IOMB_payload[i]);
+ return 0;
+ }
+
+@@ -3772,8 +3627,7 @@ int pm8001_mpi_task_abort_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ status = le32_to_cpu(pPayload->status);
+ tag = le32_to_cpu(pPayload->tag);
+ if (!tag) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk(" TAG NULL. RETURNING !!!"));
++ pm8001_dbg(pm8001_ha, FAIL, " TAG NULL. RETURNING !!!\n");
+ return -1;
+ }
+
+@@ -3783,23 +3637,21 @@ int pm8001_mpi_task_abort_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ pm8001_dev = ccb->device; /* retrieve device */
+
+ if (!t) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk(" TASK NULL. RETURNING !!!"));
++ pm8001_dbg(pm8001_ha, FAIL, " TASK NULL. RETURNING !!!\n");
+ return -1;
+ }
+ ts = &t->task_status;
+ if (status != 0)
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("task abort failed status 0x%x ,"
+- "tag = 0x%x, scp= 0x%x\n", status, tag, scp));
++ pm8001_dbg(pm8001_ha, FAIL, "task abort failed status 0x%x ,tag = 0x%x, scp= 0x%x\n",
++ status, tag, scp);
+ switch (status) {
+ case IO_SUCCESS:
+- PM8001_EH_DBG(pm8001_ha, pm8001_printk("IO_SUCCESS\n"));
++ pm8001_dbg(pm8001_ha, EH, "IO_SUCCESS\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAM_STAT_GOOD;
+ break;
+ case IO_NOT_VALID:
+- PM8001_EH_DBG(pm8001_ha, pm8001_printk("IO_NOT_VALID\n"));
++ pm8001_dbg(pm8001_ha, EH, "IO_NOT_VALID\n");
+ ts->resp = TMF_RESP_FUNC_FAILED;
+ break;
+ }
+@@ -3844,14 +3696,13 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void* piomb)
+ struct sas_ha_struct *sas_ha = pm8001_ha->sas;
+ struct pm8001_phy *phy = &pm8001_ha->phy[phy_id];
+ struct asd_sas_phy *sas_phy = sas_ha->sas_phy[phy_id];
+- PM8001_DEVIO_DBG(pm8001_ha, pm8001_printk(
+- "SPC HW event for portid:%d, phyid:%d, event:%x, status:%x\n",
+- port_id, phy_id, eventType, status));
++ pm8001_dbg(pm8001_ha, DEVIO,
++ "SPC HW event for portid:%d, phyid:%d, event:%x, status:%x\n",
++ port_id, phy_id, eventType, status);
+ switch (eventType) {
+ case HW_EVENT_PHY_START_STATUS:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_PHY_START_STATUS"
+- " status = %x\n", status));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PHY_START_STATUS status = %x\n",
++ status);
+ if (status == 0) {
+ phy->phy_state = 1;
+ if (pm8001_ha->flags == PM8001F_RUN_TIME &&
+@@ -3860,178 +3711,160 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void* piomb)
+ }
+ break;
+ case HW_EVENT_SAS_PHY_UP:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_PHY_START_STATUS\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PHY_START_STATUS\n");
+ hw_event_sas_phy_up(pm8001_ha, piomb);
+ break;
+ case HW_EVENT_SATA_PHY_UP:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_SATA_PHY_UP\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_SATA_PHY_UP\n");
+ hw_event_sata_phy_up(pm8001_ha, piomb);
+ break;
+ case HW_EVENT_PHY_STOP_STATUS:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_PHY_STOP_STATUS "
+- "status = %x\n", status));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PHY_STOP_STATUS status = %x\n",
++ status);
+ if (status == 0)
+ phy->phy_state = 0;
+ break;
+ case HW_EVENT_SATA_SPINUP_HOLD:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_SATA_SPINUP_HOLD\n"));
+- sas_ha->notify_phy_event(&phy->sas_phy, PHYE_SPINUP_HOLD);
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_SATA_SPINUP_HOLD\n");
++ sas_notify_phy_event(&phy->sas_phy, PHYE_SPINUP_HOLD);
+ break;
+ case HW_EVENT_PHY_DOWN:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_PHY_DOWN\n"));
+- sas_ha->notify_phy_event(&phy->sas_phy, PHYE_LOSS_OF_SIGNAL);
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PHY_DOWN\n");
++ sas_notify_phy_event(&phy->sas_phy, PHYE_LOSS_OF_SIGNAL);
+ phy->phy_attached = 0;
+ phy->phy_state = 0;
+ hw_event_phy_down(pm8001_ha, piomb);
+ break;
+ case HW_EVENT_PORT_INVALID:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_PORT_INVALID\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PORT_INVALID\n");
+ sas_phy_disconnected(sas_phy);
+ phy->phy_attached = 0;
+- sas_ha->notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
++ sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
+ break;
+ /* the broadcast change primitive received, tell the LIBSAS this event
+ to revalidate the sas domain*/
+ case HW_EVENT_BROADCAST_CHANGE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_BROADCAST_CHANGE\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_BROADCAST_CHANGE\n");
+ pm8001_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_BROADCAST_CHANGE,
+ port_id, phy_id, 1, 0);
+ spin_lock_irqsave(&sas_phy->sas_prim_lock, flags);
+ sas_phy->sas_prim = HW_EVENT_BROADCAST_CHANGE;
+ spin_unlock_irqrestore(&sas_phy->sas_prim_lock, flags);
+- sas_ha->notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
++ sas_notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
+ break;
+ case HW_EVENT_PHY_ERROR:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_PHY_ERROR\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PHY_ERROR\n");
+ sas_phy_disconnected(&phy->sas_phy);
+ phy->phy_attached = 0;
+- sas_ha->notify_phy_event(&phy->sas_phy, PHYE_OOB_ERROR);
++ sas_notify_phy_event(&phy->sas_phy, PHYE_OOB_ERROR);
+ break;
+ case HW_EVENT_BROADCAST_EXP:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_BROADCAST_EXP\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_BROADCAST_EXP\n");
+ spin_lock_irqsave(&sas_phy->sas_prim_lock, flags);
+ sas_phy->sas_prim = HW_EVENT_BROADCAST_EXP;
+ spin_unlock_irqrestore(&sas_phy->sas_prim_lock, flags);
+- sas_ha->notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
++ sas_notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
+ break;
+ case HW_EVENT_LINK_ERR_INVALID_DWORD:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_LINK_ERR_INVALID_DWORD\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "HW_EVENT_LINK_ERR_INVALID_DWORD\n");
+ pm8001_hw_event_ack_req(pm8001_ha, 0,
+ HW_EVENT_LINK_ERR_INVALID_DWORD, port_id, phy_id, 0, 0);
+ sas_phy_disconnected(sas_phy);
+ phy->phy_attached = 0;
+- sas_ha->notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
++ sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
+ break;
+ case HW_EVENT_LINK_ERR_DISPARITY_ERROR:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_LINK_ERR_DISPARITY_ERROR\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "HW_EVENT_LINK_ERR_DISPARITY_ERROR\n");
+ pm8001_hw_event_ack_req(pm8001_ha, 0,
+ HW_EVENT_LINK_ERR_DISPARITY_ERROR,
+ port_id, phy_id, 0, 0);
+ sas_phy_disconnected(sas_phy);
+ phy->phy_attached = 0;
+- sas_ha->notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
++ sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
+ break;
+ case HW_EVENT_LINK_ERR_CODE_VIOLATION:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_LINK_ERR_CODE_VIOLATION\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "HW_EVENT_LINK_ERR_CODE_VIOLATION\n");
+ pm8001_hw_event_ack_req(pm8001_ha, 0,
+ HW_EVENT_LINK_ERR_CODE_VIOLATION,
+ port_id, phy_id, 0, 0);
+ sas_phy_disconnected(sas_phy);
+ phy->phy_attached = 0;
+- sas_ha->notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
++ sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
+ break;
+ case HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH\n");
+ pm8001_hw_event_ack_req(pm8001_ha, 0,
+ HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH,
+ port_id, phy_id, 0, 0);
+ sas_phy_disconnected(sas_phy);
+ phy->phy_attached = 0;
+- sas_ha->notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
++ sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
+ break;
+ case HW_EVENT_MALFUNCTION:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_MALFUNCTION\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_MALFUNCTION\n");
+ break;
+ case HW_EVENT_BROADCAST_SES:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_BROADCAST_SES\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_BROADCAST_SES\n");
+ spin_lock_irqsave(&sas_phy->sas_prim_lock, flags);
+ sas_phy->sas_prim = HW_EVENT_BROADCAST_SES;
+ spin_unlock_irqrestore(&sas_phy->sas_prim_lock, flags);
+- sas_ha->notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
++ sas_notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
+ break;
+ case HW_EVENT_INBOUND_CRC_ERROR:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_INBOUND_CRC_ERROR\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_INBOUND_CRC_ERROR\n");
+ pm8001_hw_event_ack_req(pm8001_ha, 0,
+ HW_EVENT_INBOUND_CRC_ERROR,
+ port_id, phy_id, 0, 0);
+ break;
+ case HW_EVENT_HARD_RESET_RECEIVED:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_HARD_RESET_RECEIVED\n"));
+- sas_ha->notify_port_event(sas_phy, PORTE_HARD_RESET);
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_HARD_RESET_RECEIVED\n");
++ sas_notify_port_event(sas_phy, PORTE_HARD_RESET);
+ break;
+ case HW_EVENT_ID_FRAME_TIMEOUT:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_ID_FRAME_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_ID_FRAME_TIMEOUT\n");
+ sas_phy_disconnected(sas_phy);
+ phy->phy_attached = 0;
+- sas_ha->notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
++ sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
+ break;
+ case HW_EVENT_LINK_ERR_PHY_RESET_FAILED:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_LINK_ERR_PHY_RESET_FAILED\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "HW_EVENT_LINK_ERR_PHY_RESET_FAILED\n");
+ pm8001_hw_event_ack_req(pm8001_ha, 0,
+ HW_EVENT_LINK_ERR_PHY_RESET_FAILED,
+ port_id, phy_id, 0, 0);
+ sas_phy_disconnected(sas_phy);
+ phy->phy_attached = 0;
+- sas_ha->notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
++ sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
+ break;
+ case HW_EVENT_PORT_RESET_TIMER_TMO:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_PORT_RESET_TIMER_TMO\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PORT_RESET_TIMER_TMO\n");
+ sas_phy_disconnected(sas_phy);
+ phy->phy_attached = 0;
+- sas_ha->notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
++ sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
+ break;
+ case HW_EVENT_PORT_RECOVERY_TIMER_TMO:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_PORT_RECOVERY_TIMER_TMO\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "HW_EVENT_PORT_RECOVERY_TIMER_TMO\n");
+ sas_phy_disconnected(sas_phy);
+ phy->phy_attached = 0;
+- sas_ha->notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
++ sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
+ break;
+ case HW_EVENT_PORT_RECOVER:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_PORT_RECOVER\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PORT_RECOVER\n");
+ break;
+ case HW_EVENT_PORT_RESET_COMPLETE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_PORT_RESET_COMPLETE\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PORT_RESET_COMPLETE\n");
+ break;
+ case EVENT_BROADCAST_ASYNCH_EVENT:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("EVENT_BROADCAST_ASYNCH_EVENT\n"));
++ pm8001_dbg(pm8001_ha, MSG, "EVENT_BROADCAST_ASYNCH_EVENT\n");
+ break;
+ default:
+- PM8001_DEVIO_DBG(pm8001_ha,
+- pm8001_printk("Unknown event type = %x\n", eventType));
++ pm8001_dbg(pm8001_ha, DEVIO, "Unknown event type = %x\n",
++ eventType);
+ break;
+ }
+ return 0;
+@@ -4047,163 +3880,132 @@ static void process_one_iomb(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ __le32 pHeader = *(__le32 *)piomb;
+ u8 opc = (u8)((le32_to_cpu(pHeader)) & 0xFFF);
+
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk("process_one_iomb:"));
++ pm8001_dbg(pm8001_ha, MSG, "process_one_iomb:\n");
+
+ switch (opc) {
+ case OPC_OUB_ECHO:
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk("OPC_OUB_ECHO\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_ECHO\n");
+ break;
+ case OPC_OUB_HW_EVENT:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_HW_EVENT\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_HW_EVENT\n");
+ mpi_hw_event(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_SSP_COMP:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SSP_COMP\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SSP_COMP\n");
+ mpi_ssp_completion(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_SMP_COMP:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SMP_COMP\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SMP_COMP\n");
+ mpi_smp_completion(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_LOCAL_PHY_CNTRL:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_LOCAL_PHY_CNTRL\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_LOCAL_PHY_CNTRL\n");
+ pm8001_mpi_local_phy_ctl(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_DEV_REGIST:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_DEV_REGIST\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_DEV_REGIST\n");
+ pm8001_mpi_reg_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_DEREG_DEV:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("unregister the device\n"));
++ pm8001_dbg(pm8001_ha, MSG, "unregister the device\n");
+ pm8001_mpi_dereg_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_GET_DEV_HANDLE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_GET_DEV_HANDLE\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_GET_DEV_HANDLE\n");
+ break;
+ case OPC_OUB_SATA_COMP:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SATA_COMP\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SATA_COMP\n");
+ mpi_sata_completion(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_SATA_EVENT:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SATA_EVENT\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SATA_EVENT\n");
+ mpi_sata_event(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_SSP_EVENT:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SSP_EVENT\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SSP_EVENT\n");
+ mpi_ssp_event(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_DEV_HANDLE_ARRIV:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_DEV_HANDLE_ARRIV\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_DEV_HANDLE_ARRIV\n");
+ /*This is for target*/
+ break;
+ case OPC_OUB_SSP_RECV_EVENT:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SSP_RECV_EVENT\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SSP_RECV_EVENT\n");
+ /*This is for target*/
+ break;
+ case OPC_OUB_DEV_INFO:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_DEV_INFO\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_DEV_INFO\n");
+ break;
+ case OPC_OUB_FW_FLASH_UPDATE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_FW_FLASH_UPDATE\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_FW_FLASH_UPDATE\n");
+ pm8001_mpi_fw_flash_update_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_GPIO_RESPONSE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_GPIO_RESPONSE\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_GPIO_RESPONSE\n");
+ break;
+ case OPC_OUB_GPIO_EVENT:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_GPIO_EVENT\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_GPIO_EVENT\n");
+ break;
+ case OPC_OUB_GENERAL_EVENT:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_GENERAL_EVENT\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_GENERAL_EVENT\n");
+ pm8001_mpi_general_event(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_SSP_ABORT_RSP:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SSP_ABORT_RSP\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SSP_ABORT_RSP\n");
+ pm8001_mpi_task_abort_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_SATA_ABORT_RSP:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SATA_ABORT_RSP\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SATA_ABORT_RSP\n");
+ pm8001_mpi_task_abort_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_SAS_DIAG_MODE_START_END:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SAS_DIAG_MODE_START_END\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "OPC_OUB_SAS_DIAG_MODE_START_END\n");
+ break;
+ case OPC_OUB_SAS_DIAG_EXECUTE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SAS_DIAG_EXECUTE\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SAS_DIAG_EXECUTE\n");
+ break;
+ case OPC_OUB_GET_TIME_STAMP:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_GET_TIME_STAMP\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_GET_TIME_STAMP\n");
+ break;
+ case OPC_OUB_SAS_HW_EVENT_ACK:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SAS_HW_EVENT_ACK\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SAS_HW_EVENT_ACK\n");
+ break;
+ case OPC_OUB_PORT_CONTROL:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_PORT_CONTROL\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_PORT_CONTROL\n");
+ break;
+ case OPC_OUB_SMP_ABORT_RSP:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SMP_ABORT_RSP\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SMP_ABORT_RSP\n");
+ pm8001_mpi_task_abort_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_GET_NVMD_DATA:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_GET_NVMD_DATA\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_GET_NVMD_DATA\n");
+ pm8001_mpi_get_nvmd_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_SET_NVMD_DATA:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SET_NVMD_DATA\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SET_NVMD_DATA\n");
+ pm8001_mpi_set_nvmd_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_DEVICE_HANDLE_REMOVAL:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_DEVICE_HANDLE_REMOVAL\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_DEVICE_HANDLE_REMOVAL\n");
+ break;
+ case OPC_OUB_SET_DEVICE_STATE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SET_DEVICE_STATE\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SET_DEVICE_STATE\n");
+ pm8001_mpi_set_dev_state_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_GET_DEVICE_STATE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_GET_DEVICE_STATE\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_GET_DEVICE_STATE\n");
+ break;
+ case OPC_OUB_SET_DEV_INFO:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SET_DEV_INFO\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SET_DEV_INFO\n");
+ break;
+ case OPC_OUB_SAS_RE_INITIALIZE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SAS_RE_INITIALIZE\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SAS_RE_INITIALIZE\n");
+ break;
+ default:
+- PM8001_DEVIO_DBG(pm8001_ha,
+- pm8001_printk("Unknown outbound Queue IOMB OPC = %x\n",
+- opc));
++ pm8001_dbg(pm8001_ha, DEVIO,
++ "Unknown outbound Queue IOMB OPC = %x\n",
++ opc);
+ break;
+ }
+ }
+@@ -4416,19 +4218,19 @@ static int pm8001_chip_sata_req(struct pm8001_hba_info *pm8001_ha,
+ circularQ = &pm8001_ha->inbnd_q_tbl[0];
+ if (task->data_dir == DMA_NONE) {
+ ATAP = 0x04; /* no data*/
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("no data\n"));
++ pm8001_dbg(pm8001_ha, IO, "no data\n");
+ } else if (likely(!task->ata_task.device_control_reg_update)) {
+ if (task->ata_task.dma_xfer) {
+ ATAP = 0x06; /* DMA */
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("DMA\n"));
++ pm8001_dbg(pm8001_ha, IO, "DMA\n");
+ } else {
+ ATAP = 0x05; /* PIO*/
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("PIO\n"));
++ pm8001_dbg(pm8001_ha, IO, "PIO\n");
+ }
+ if (task->ata_task.use_ncq &&
+ dev->sata_dev.class != ATA_DEV_ATAPI) {
+ ATAP = 0x07; /* FPDMA */
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("FPDMA\n"));
++ pm8001_dbg(pm8001_ha, IO, "FPDMA\n");
+ }
+ }
+ if (task->ata_task.use_ncq && pm8001_get_ncq_tag(task, &hdr_tag)) {
+@@ -4485,10 +4287,10 @@ static int pm8001_chip_sata_req(struct pm8001_hba_info *pm8001_ha,
+ SAS_TASK_STATE_ABORTED))) {
+ spin_unlock_irqrestore(&task->task_state_lock,
+ flags);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("task 0x%p resp 0x%x "
+- " stat 0x%x but aborted by upper layer "
+- "\n", task, ts->resp, ts->stat));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "task 0x%p resp 0x%x stat 0x%x but aborted by upper layer\n",
++ task, ts->resp,
++ ts->stat);
+ pm8001_ccb_task_free(pm8001_ha, task, ccb, tag);
+ } else {
+ spin_unlock_irqrestore(&task->task_state_lock,
+@@ -4637,8 +4439,8 @@ int pm8001_chip_dereg_dev_req(struct pm8001_hba_info *pm8001_ha,
+ memset(&payload, 0, sizeof(payload));
+ payload.tag = cpu_to_le32(1);
+ payload.device_id = cpu_to_le32(device_id);
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("unregister device device_id = %d\n", device_id));
++ pm8001_dbg(pm8001_ha, MSG, "unregister device device_id = %d\n",
++ device_id);
+ ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload,
+ sizeof(payload), 0);
+ return ret;
+@@ -4690,9 +4492,9 @@ static irqreturn_t
+ pm8001_chip_isr(struct pm8001_hba_info *pm8001_ha, u8 vec)
+ {
+ pm8001_chip_interrupt_disable(pm8001_ha, vec);
+- PM8001_DEVIO_DBG(pm8001_ha, pm8001_printk(
+- "irq vec %d, ODMR:0x%x\n",
+- vec, pm8001_cr32(pm8001_ha, 0, 0x30)));
++ pm8001_dbg(pm8001_ha, DEVIO,
++ "irq vec %d, ODMR:0x%x\n",
++ vec, pm8001_cr32(pm8001_ha, 0, 0x30));
+ process_oq(pm8001_ha, vec);
+ pm8001_chip_interrupt_enable(pm8001_ha, vec);
+ return IRQ_HANDLED;
+@@ -4729,9 +4531,8 @@ int pm8001_chip_abort_task(struct pm8001_hba_info *pm8001_ha,
+ {
+ u32 opc, device_id;
+ int rc = TMF_RESP_FUNC_FAILED;
+- PM8001_EH_DBG(pm8001_ha,
+- pm8001_printk("cmd_tag = %x, abort task tag = 0x%x",
+- cmd_tag, task_tag));
++ pm8001_dbg(pm8001_ha, EH, "cmd_tag = %x, abort task tag = 0x%x\n",
++ cmd_tag, task_tag);
+ if (pm8001_dev->dev_type == SAS_END_DEVICE)
+ opc = OPC_INB_SSP_ABORT;
+ else if (pm8001_dev->dev_type == SAS_SATA_DEV)
+@@ -4742,7 +4543,7 @@ int pm8001_chip_abort_task(struct pm8001_hba_info *pm8001_ha,
+ rc = send_task_abort(pm8001_ha, opc, device_id, flag,
+ task_tag, cmd_tag);
+ if (rc != TMF_RESP_FUNC_COMPLETE)
+- PM8001_EH_DBG(pm8001_ha, pm8001_printk("rc= %d\n", rc));
++ pm8001_dbg(pm8001_ha, EH, "rc= %d\n", rc);
+ return rc;
+ }
+
+@@ -5008,8 +4809,9 @@ pm8001_chip_fw_flash_update_req(struct pm8001_hba_info *pm8001_ha,
+ if (!fw_control_context)
+ return -ENOMEM;
+ fw_control = (struct fw_control_info *)&ioctl_payload->func_specific;
+- PM8001_DEVIO_DBG(pm8001_ha, pm8001_printk(
+- "dma fw_control context input length :%x\n", fw_control->len));
++ pm8001_dbg(pm8001_ha, DEVIO,
++ "dma fw_control context input length :%x\n",
++ fw_control->len);
+ memcpy(buffer, fw_control->buffer, fw_control->len);
+ flash_update_info.sgl.addr = cpu_to_le64(phys_addr);
+ flash_update_info.sgl.im_len.len = cpu_to_le32(fw_control->len);
+diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c
+index 2025361b36e96..7657d68e12d5f 100644
+--- a/drivers/scsi/pm8001/pm8001_init.c
++++ b/drivers/scsi/pm8001/pm8001_init.c
+@@ -271,15 +271,14 @@ static int pm8001_alloc(struct pm8001_hba_info *pm8001_ha,
+
+ spin_lock_init(&pm8001_ha->lock);
+ spin_lock_init(&pm8001_ha->bitmap_lock);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("pm8001_alloc: PHY:%x\n",
+- pm8001_ha->chip->n_phy));
++ pm8001_dbg(pm8001_ha, INIT, "pm8001_alloc: PHY:%x\n",
++ pm8001_ha->chip->n_phy);
+
+ /* Setup Interrupt */
+ rc = pm8001_setup_irq(pm8001_ha);
+ if (rc) {
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk(
+- "pm8001_setup_irq failed [ret: %d]\n", rc));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "pm8001_setup_irq failed [ret: %d]\n", rc);
+ goto err_out_shost;
+ }
+ /* Request Interrupt */
+@@ -394,9 +393,9 @@ static int pm8001_alloc(struct pm8001_hba_info *pm8001_ha,
+ &pm8001_ha->memoryMap.region[i].phys_addr_lo,
+ pm8001_ha->memoryMap.region[i].total_len,
+ pm8001_ha->memoryMap.region[i].alignment) != 0) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("Mem%d alloc failed\n",
+- i));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "Mem%d alloc failed\n",
++ i);
+ goto err_out;
+ }
+ }
+@@ -412,7 +411,7 @@ static int pm8001_alloc(struct pm8001_hba_info *pm8001_ha,
+ pm8001_ha->devices[i].dev_type = SAS_PHY_UNUSED;
+ pm8001_ha->devices[i].id = i;
+ pm8001_ha->devices[i].device_id = PM8001_MAX_DEVICES;
+- pm8001_ha->devices[i].running_req = 0;
++ atomic_set(&pm8001_ha->devices[i].running_req, 0);
+ }
+ pm8001_ha->flags = PM8001F_INIT_TIME;
+ /* Initialize tags */
+@@ -467,15 +466,15 @@ static int pm8001_ioremap(struct pm8001_hba_info *pm8001_ha)
+ pm8001_ha->io_mem[logicalBar].memvirtaddr =
+ ioremap(pm8001_ha->io_mem[logicalBar].membase,
+ pm8001_ha->io_mem[logicalBar].memsize);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("PCI: bar %d, logicalBar %d ",
+- bar, logicalBar));
+- PM8001_INIT_DBG(pm8001_ha, pm8001_printk(
+- "base addr %llx virt_addr=%llx len=%d\n",
+- (u64)pm8001_ha->io_mem[logicalBar].membase,
+- (u64)(unsigned long)
+- pm8001_ha->io_mem[logicalBar].memvirtaddr,
+- pm8001_ha->io_mem[logicalBar].memsize));
++ pm8001_dbg(pm8001_ha, INIT,
++ "PCI: bar %d, logicalBar %d\n",
++ bar, logicalBar);
++ pm8001_dbg(pm8001_ha, INIT,
++ "base addr %llx virt_addr=%llx len=%d\n",
++ (u64)pm8001_ha->io_mem[logicalBar].membase,
++ (u64)(unsigned long)
++ pm8001_ha->io_mem[logicalBar].memvirtaddr,
++ pm8001_ha->io_mem[logicalBar].memsize);
+ } else {
+ pm8001_ha->io_mem[logicalBar].membase = 0;
+ pm8001_ha->io_mem[logicalBar].memsize = 0;
+@@ -520,8 +519,8 @@ static struct pm8001_hba_info *pm8001_pci_alloc(struct pci_dev *pdev,
+ else {
+ pm8001_ha->link_rate = LINKRATE_15 | LINKRATE_30 |
+ LINKRATE_60 | LINKRATE_120;
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk(
+- "Setting link rate to default value\n"));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "Setting link rate to default value\n");
+ }
+ sprintf(pm8001_ha->name, "%s%d", DRV_NAME, pm8001_ha->id);
+ /* IOMB size is 128 for 8088/89 controllers */
+@@ -684,13 +683,13 @@ static void pm8001_init_sas_add(struct pm8001_hba_info *pm8001_ha)
+ payload.offset = 0;
+ payload.func_specific = kzalloc(payload.rd_length, GFP_KERNEL);
+ if (!payload.func_specific) {
+- PM8001_INIT_DBG(pm8001_ha, pm8001_printk("mem alloc fail\n"));
++ pm8001_dbg(pm8001_ha, INIT, "mem alloc fail\n");
+ return;
+ }
+ rc = PM8001_CHIP_DISP->get_nvmd_req(pm8001_ha, &payload);
+ if (rc) {
+ kfree(payload.func_specific);
+- PM8001_INIT_DBG(pm8001_ha, pm8001_printk("nvmd failed\n"));
++ pm8001_dbg(pm8001_ha, INIT, "nvmd failed\n");
+ return;
+ }
+ wait_for_completion(&completion);
+@@ -718,9 +717,8 @@ static void pm8001_init_sas_add(struct pm8001_hba_info *pm8001_ha)
+ sas_add[7] = sas_add[7] + 4;
+ memcpy(&pm8001_ha->phy[i].dev_sas_addr,
+ sas_add, SAS_ADDR_SIZE);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("phy %d sas_addr = %016llx\n", i,
+- pm8001_ha->phy[i].dev_sas_addr));
++ pm8001_dbg(pm8001_ha, INIT, "phy %d sas_addr = %016llx\n", i,
++ pm8001_ha->phy[i].dev_sas_addr);
+ }
+ kfree(payload.func_specific);
+ #else
+@@ -760,7 +758,7 @@ static int pm8001_get_phy_settings_info(struct pm8001_hba_info *pm8001_ha)
+ rc = PM8001_CHIP_DISP->get_nvmd_req(pm8001_ha, &payload);
+ if (rc) {
+ kfree(payload.func_specific);
+- PM8001_INIT_DBG(pm8001_ha, pm8001_printk("nvmd failed\n"));
++ pm8001_dbg(pm8001_ha, INIT, "nvmd failed\n");
+ return -ENOMEM;
+ }
+ wait_for_completion(&completion);
+@@ -854,9 +852,9 @@ void pm8001_get_phy_mask(struct pm8001_hba_info *pm8001_ha, int *phymask)
+ break;
+
+ default:
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("Unknown subsystem device=0x%.04x",
+- pm8001_ha->pdev->subsystem_device));
++ pm8001_dbg(pm8001_ha, INIT,
++ "Unknown subsystem device=0x%.04x\n",
++ pm8001_ha->pdev->subsystem_device);
+ }
+ }
+
+@@ -950,9 +948,9 @@ static u32 pm8001_setup_msix(struct pm8001_hba_info *pm8001_ha)
+ /* Maximum queue number updating in HBA structure */
+ pm8001_ha->max_q_num = number_of_intr;
+
+- PM8001_INIT_DBG(pm8001_ha, pm8001_printk(
+- "pci_alloc_irq_vectors request ret:%d no of intr %d\n",
+- rc, pm8001_ha->number_of_intr));
++ pm8001_dbg(pm8001_ha, INIT,
++ "pci_alloc_irq_vectors request ret:%d no of intr %d\n",
++ rc, pm8001_ha->number_of_intr);
+ return 0;
+ }
+
+@@ -964,9 +962,9 @@ static u32 pm8001_request_msix(struct pm8001_hba_info *pm8001_ha)
+ if (pm8001_ha->chip_id != chip_8001)
+ flag &= ~IRQF_SHARED;
+
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("pci_enable_msix request number of intr %d\n",
+- pm8001_ha->number_of_intr));
++ pm8001_dbg(pm8001_ha, INIT,
++ "pci_enable_msix request number of intr %d\n",
++ pm8001_ha->number_of_intr);
+
+ for (i = 0; i < pm8001_ha->number_of_intr; i++) {
+ snprintf(pm8001_ha->intr_drvname[i],
+@@ -1002,8 +1000,7 @@ static u32 pm8001_setup_irq(struct pm8001_hba_info *pm8001_ha)
+ #ifdef PM8001_USE_MSIX
+ if (pci_find_capability(pdev, PCI_CAP_ID_MSIX))
+ return pm8001_setup_msix(pm8001_ha);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("MSIX not supported!!!\n"));
++ pm8001_dbg(pm8001_ha, INIT, "MSIX not supported!!!\n");
+ #endif
+ return 0;
+ }
+@@ -1023,8 +1020,7 @@ static u32 pm8001_request_irq(struct pm8001_hba_info *pm8001_ha)
+ if (pdev->msix_cap && pci_msi_enabled())
+ return pm8001_request_msix(pm8001_ha);
+ else {
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("MSIX not supported!!!\n"));
++ pm8001_dbg(pm8001_ha, INIT, "MSIX not supported!!!\n");
+ goto intx;
+ }
+ #endif
+@@ -1108,8 +1104,8 @@ static int pm8001_pci_probe(struct pci_dev *pdev,
+ PM8001_CHIP_DISP->chip_soft_rst(pm8001_ha);
+ rc = PM8001_CHIP_DISP->chip_init(pm8001_ha);
+ if (rc) {
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk(
+- "chip_init failed [ret: %d]\n", rc));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "chip_init failed [ret: %d]\n", rc);
+ goto err_out_ha_free;
+ }
+
+@@ -1138,8 +1134,8 @@ static int pm8001_pci_probe(struct pci_dev *pdev,
+ pm8001_post_sas_ha_init(shost, chip);
+ rc = sas_register_ha(SHOST_TO_SAS_HA(shost));
+ if (rc) {
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk(
+- "sas_register_ha failed [ret: %d]\n", rc));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "sas_register_ha failed [ret: %d]\n", rc);
+ goto err_out_shost;
+ }
+ list_add_tail(&pm8001_ha->list, &hba_list);
+@@ -1191,8 +1187,8 @@ pm8001_init_ccb_tag(struct pm8001_hba_info *pm8001_ha, struct Scsi_Host *shost,
+ pm8001_ha->ccb_info = (struct pm8001_ccb_info *)
+ kcalloc(ccb_count, sizeof(struct pm8001_ccb_info), GFP_KERNEL);
+ if (!pm8001_ha->ccb_info) {
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk
+- ("Unable to allocate memory for ccb\n"));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "Unable to allocate memory for ccb\n");
+ goto err_out_noccb;
+ }
+ for (i = 0; i < ccb_count; i++) {
+@@ -1200,8 +1196,8 @@ pm8001_init_ccb_tag(struct pm8001_hba_info *pm8001_ha, struct Scsi_Host *shost,
+ sizeof(struct pm8001_prd) * PM8001_MAX_DMA_SG,
+ &pm8001_ha->ccb_info[i].ccb_dma_handle);
+ if (!pm8001_ha->ccb_info[i].buf_prd) {
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk
+- ("pm80xx: ccb prd memory allocation error\n"));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "pm80xx: ccb prd memory allocation error\n");
+ goto err_out;
+ }
+ pm8001_ha->ccb_info[i].task = NULL;
+@@ -1345,8 +1341,7 @@ static int pm8001_pci_resume(struct pci_dev *pdev)
+ /* chip soft rst only for spc */
+ if (pm8001_ha->chip_id == chip_8001) {
+ PM8001_CHIP_DISP->chip_soft_rst(pm8001_ha);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("chip soft reset successful\n"));
++ pm8001_dbg(pm8001_ha, INIT, "chip soft reset successful\n");
+ }
+ rc = PM8001_CHIP_DISP->chip_init(pm8001_ha);
+ if (rc)
+diff --git a/drivers/scsi/pm8001/pm8001_sas.c b/drivers/scsi/pm8001/pm8001_sas.c
+index 9889bab7d31c1..474468df2a78d 100644
+--- a/drivers/scsi/pm8001/pm8001_sas.c
++++ b/drivers/scsi/pm8001/pm8001_sas.c
+@@ -158,7 +158,6 @@ int pm8001_phy_control(struct asd_sas_phy *sas_phy, enum phy_func func,
+ int rc = 0, phy_id = sas_phy->id;
+ struct pm8001_hba_info *pm8001_ha = NULL;
+ struct sas_phy_linkrates *rates;
+- struct sas_ha_struct *sas_ha;
+ struct pm8001_phy *phy;
+ DECLARE_COMPLETION_ONSTACK(completion);
+ unsigned long flags;
+@@ -207,18 +206,16 @@ int pm8001_phy_control(struct asd_sas_phy *sas_phy, enum phy_func func,
+ if (pm8001_ha->chip_id != chip_8001) {
+ if (pm8001_ha->phy[phy_id].phy_state ==
+ PHY_STATE_LINK_UP_SPCV) {
+- sas_ha = pm8001_ha->sas;
+ sas_phy_disconnected(&phy->sas_phy);
+- sas_ha->notify_phy_event(&phy->sas_phy,
++ sas_notify_phy_event(&phy->sas_phy,
+ PHYE_LOSS_OF_SIGNAL);
+ phy->phy_attached = 0;
+ }
+ } else {
+ if (pm8001_ha->phy[phy_id].phy_state ==
+ PHY_STATE_LINK_UP_SPC) {
+- sas_ha = pm8001_ha->sas;
+ sas_phy_disconnected(&phy->sas_phy);
+- sas_ha->notify_phy_event(&phy->sas_phy,
++ sas_notify_phy_event(&phy->sas_phy,
+ PHYE_LOSS_OF_SIGNAL);
+ phy->phy_attached = 0;
+ }
+@@ -250,8 +247,7 @@ int pm8001_phy_control(struct asd_sas_phy *sas_phy, enum phy_func func,
+ spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+ return 0;
+ default:
+- PM8001_DEVIO_DBG(pm8001_ha,
+- pm8001_printk("func 0x%x\n", func));
++ pm8001_dbg(pm8001_ha, DEVIO, "func 0x%x\n", func);
+ rc = -EOPNOTSUPP;
+ }
+ msleep(300);
+@@ -405,7 +401,7 @@ static int pm8001_task_exec(struct sas_task *task,
+ t->task_done(t);
+ return 0;
+ }
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("pm8001_task_exec device \n "));
++ pm8001_dbg(pm8001_ha, IO, "pm8001_task_exec device\n");
+ spin_lock_irqsave(&pm8001_ha->lock, flags);
+ do {
+ dev = t->dev;
+@@ -456,9 +452,11 @@ static int pm8001_task_exec(struct sas_task *task,
+ ccb->device = pm8001_dev;
+ switch (task_proto) {
+ case SAS_PROTOCOL_SMP:
++ atomic_inc(&pm8001_dev->running_req);
+ rc = pm8001_task_prep_smp(pm8001_ha, ccb);
+ break;
+ case SAS_PROTOCOL_SSP:
++ atomic_inc(&pm8001_dev->running_req);
+ if (is_tmf)
+ rc = pm8001_task_prep_ssp_tm(pm8001_ha,
+ ccb, tmf);
+@@ -467,6 +465,7 @@ static int pm8001_task_exec(struct sas_task *task,
+ break;
+ case SAS_PROTOCOL_SATA:
+ case SAS_PROTOCOL_STP:
++ atomic_inc(&pm8001_dev->running_req);
+ rc = pm8001_task_prep_ata(pm8001_ha, ccb);
+ break;
+ default:
+@@ -477,15 +476,14 @@ static int pm8001_task_exec(struct sas_task *task,
+ }
+
+ if (rc) {
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("rc is %x\n", rc));
++ pm8001_dbg(pm8001_ha, IO, "rc is %x\n", rc);
++ atomic_dec(&pm8001_dev->running_req);
+ goto err_out_tag;
+ }
+ /* TODO: select normal or high priority */
+ spin_lock(&t->task_state_lock);
+ t->task_state_flags |= SAS_TASK_AT_INITIATOR;
+ spin_unlock(&t->task_state_lock);
+- pm8001_dev->running_req++;
+ } while (0);
+ rc = 0;
+ goto out_done;
+@@ -567,9 +565,9 @@ static struct pm8001_device *pm8001_alloc_dev(struct pm8001_hba_info *pm8001_ha)
+ }
+ }
+ if (dev == PM8001_MAX_DEVICES) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("max support %d devices, ignore ..\n",
+- PM8001_MAX_DEVICES));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "max support %d devices, ignore ..\n",
++ PM8001_MAX_DEVICES);
+ }
+ return NULL;
+ }
+@@ -587,8 +585,7 @@ struct pm8001_device *pm8001_find_dev(struct pm8001_hba_info *pm8001_ha,
+ return &pm8001_ha->devices[dev];
+ }
+ if (dev == PM8001_MAX_DEVICES) {
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("NO MATCHING "
+- "DEVICE FOUND !!!\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "NO MATCHING DEVICE FOUND !!!\n");
+ }
+ return NULL;
+ }
+@@ -649,10 +646,10 @@ static int pm8001_dev_found_notify(struct domain_device *dev)
+ }
+ }
+ if (phy_id == parent_dev->ex_dev.num_phys) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("Error: no attached dev:%016llx"
+- " at ex:%016llx.\n", SAS_ADDR(dev->sas_addr),
+- SAS_ADDR(parent_dev->sas_addr)));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "Error: no attached dev:%016llx at ex:%016llx.\n",
++ SAS_ADDR(dev->sas_addr),
++ SAS_ADDR(parent_dev->sas_addr));
+ res = -1;
+ }
+ } else {
+@@ -662,7 +659,7 @@ static int pm8001_dev_found_notify(struct domain_device *dev)
+ flag = 1; /* directly sata */
+ }
+ } /*register this device to HBA*/
+- PM8001_DISC_DBG(pm8001_ha, pm8001_printk("Found device\n"));
++ pm8001_dbg(pm8001_ha, DISC, "Found device\n");
+ PM8001_CHIP_DISP->reg_dev_req(pm8001_ha, pm8001_device, flag);
+ spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+ wait_for_completion(&completion);
+@@ -734,9 +731,7 @@ static int pm8001_exec_internal_tmf_task(struct domain_device *dev,
+
+ if (res) {
+ del_timer(&task->slow_task->timer);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("Executing internal task "
+- "failed\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "Executing internal task failed\n");
+ goto ex_err;
+ }
+ wait_for_completion(&task->slow_task->completion);
+@@ -750,9 +745,9 @@ static int pm8001_exec_internal_tmf_task(struct domain_device *dev,
+ /* Even TMF timed out, return direct. */
+ if ((task->task_state_flags & SAS_TASK_STATE_ABORTED)) {
+ if (!(task->task_state_flags & SAS_TASK_STATE_DONE)) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("TMF task[%x]timeout.\n",
+- tmf->tmf));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "TMF task[%x]timeout.\n",
++ tmf->tmf);
+ goto ex_err;
+ }
+ }
+@@ -773,17 +768,15 @@ static int pm8001_exec_internal_tmf_task(struct domain_device *dev,
+
+ if (task->task_status.resp == SAS_TASK_COMPLETE &&
+ task->task_status.stat == SAS_DATA_OVERRUN) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("Blocked task error.\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "Blocked task error.\n");
+ res = -EMSGSIZE;
+ break;
+ } else {
+- PM8001_EH_DBG(pm8001_ha,
+- pm8001_printk(" Task to dev %016llx response:"
+- "0x%x status 0x%x\n",
+- SAS_ADDR(dev->sas_addr),
+- task->task_status.resp,
+- task->task_status.stat));
++ pm8001_dbg(pm8001_ha, EH,
++ " Task to dev %016llx response:0x%x status 0x%x\n",
++ SAS_ADDR(dev->sas_addr),
++ task->task_status.resp,
++ task->task_status.stat);
+ sas_free_task(task);
+ task = NULL;
+ }
+@@ -830,9 +823,7 @@ pm8001_exec_internal_task_abort(struct pm8001_hba_info *pm8001_ha,
+
+ if (res) {
+ del_timer(&task->slow_task->timer);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("Executing internal task "
+- "failed\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "Executing internal task failed\n");
+ goto ex_err;
+ }
+ wait_for_completion(&task->slow_task->completion);
+@@ -840,8 +831,8 @@ pm8001_exec_internal_task_abort(struct pm8001_hba_info *pm8001_ha,
+ /* Even TMF timed out, return direct. */
+ if ((task->task_state_flags & SAS_TASK_STATE_ABORTED)) {
+ if (!(task->task_state_flags & SAS_TASK_STATE_DONE)) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("TMF task timeout.\n"));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "TMF task timeout.\n");
+ goto ex_err;
+ }
+ }
+@@ -852,12 +843,11 @@ pm8001_exec_internal_task_abort(struct pm8001_hba_info *pm8001_ha,
+ break;
+
+ } else {
+- PM8001_EH_DBG(pm8001_ha,
+- pm8001_printk(" Task to dev %016llx response: "
+- "0x%x status 0x%x\n",
+- SAS_ADDR(dev->sas_addr),
+- task->task_status.resp,
+- task->task_status.stat));
++ pm8001_dbg(pm8001_ha, EH,
++ " Task to dev %016llx response: 0x%x status 0x%x\n",
++ SAS_ADDR(dev->sas_addr),
++ task->task_status.resp,
++ task->task_status.stat);
+ sas_free_task(task);
+ task = NULL;
+ }
+@@ -883,22 +873,20 @@ static void pm8001_dev_gone_notify(struct domain_device *dev)
+ if (pm8001_dev) {
+ u32 device_id = pm8001_dev->device_id;
+
+- PM8001_DISC_DBG(pm8001_ha,
+- pm8001_printk("found dev[%d:%x] is gone.\n",
+- pm8001_dev->device_id, pm8001_dev->dev_type));
+- if (pm8001_dev->running_req) {
++ pm8001_dbg(pm8001_ha, DISC, "found dev[%d:%x] is gone.\n",
++ pm8001_dev->device_id, pm8001_dev->dev_type);
++ if (atomic_read(&pm8001_dev->running_req)) {
+ spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+ pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev ,
+ dev, 1, 0);
+- while (pm8001_dev->running_req)
++ while (atomic_read(&pm8001_dev->running_req))
+ msleep(20);
+ spin_lock_irqsave(&pm8001_ha->lock, flags);
+ }
+ PM8001_CHIP_DISP->dereg_dev_req(pm8001_ha, device_id);
+ pm8001_free_dev(pm8001_dev);
+ } else {
+- PM8001_DISC_DBG(pm8001_ha,
+- pm8001_printk("Found dev has gone.\n"));
++ pm8001_dbg(pm8001_ha, DISC, "Found dev has gone.\n");
+ }
+ dev->lldd_dev = NULL;
+ spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+@@ -968,7 +956,7 @@ void pm8001_open_reject_retry(
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+ if (pm8001_dev)
+- pm8001_dev->running_req--;
++ atomic_dec(&pm8001_dev->running_req);
+ spin_lock_irqsave(&task->task_state_lock, flags1);
+ task->task_state_flags &= ~SAS_TASK_STATE_PENDING;
+ task->task_state_flags &= ~SAS_TASK_AT_INITIATOR;
+@@ -1018,9 +1006,9 @@ int pm8001_I_T_nexus_reset(struct domain_device *dev)
+ }
+ rc = sas_phy_reset(phy, 1);
+ if (rc) {
+- PM8001_EH_DBG(pm8001_ha,
+- pm8001_printk("phy reset failed for device %x\n"
+- "with rc %d\n", pm8001_dev->device_id, rc));
++ pm8001_dbg(pm8001_ha, EH,
++ "phy reset failed for device %x\n"
++ "with rc %d\n", pm8001_dev->device_id, rc);
+ rc = TMF_RESP_FUNC_FAILED;
+ goto out;
+ }
+@@ -1028,17 +1016,16 @@ int pm8001_I_T_nexus_reset(struct domain_device *dev)
+ rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev ,
+ dev, 1, 0);
+ if (rc) {
+- PM8001_EH_DBG(pm8001_ha,
+- pm8001_printk("task abort failed %x\n"
+- "with rc %d\n", pm8001_dev->device_id, rc));
++ pm8001_dbg(pm8001_ha, EH, "task abort failed %x\n"
++ "with rc %d\n", pm8001_dev->device_id, rc);
+ rc = TMF_RESP_FUNC_FAILED;
+ }
+ } else {
+ rc = sas_phy_reset(phy, 1);
+ msleep(2000);
+ }
+- PM8001_EH_DBG(pm8001_ha, pm8001_printk(" for device[%x]:rc=%d\n",
+- pm8001_dev->device_id, rc));
++ pm8001_dbg(pm8001_ha, EH, " for device[%x]:rc=%d\n",
++ pm8001_dev->device_id, rc);
+ out:
+ sas_put_local_phy(phy);
+ return rc;
+@@ -1061,8 +1048,7 @@ int pm8001_I_T_nexus_event_handler(struct domain_device *dev)
+ pm8001_dev = dev->lldd_dev;
+ pm8001_ha = pm8001_find_ha_by_dev(dev);
+
+- PM8001_EH_DBG(pm8001_ha,
+- pm8001_printk("I_T_Nexus handler invoked !!"));
++ pm8001_dbg(pm8001_ha, EH, "I_T_Nexus handler invoked !!\n");
+
+ phy = sas_get_local_phy(dev);
+
+@@ -1101,8 +1087,8 @@ int pm8001_I_T_nexus_event_handler(struct domain_device *dev)
+ rc = sas_phy_reset(phy, 1);
+ msleep(2000);
+ }
+- PM8001_EH_DBG(pm8001_ha, pm8001_printk(" for device[%x]:rc=%d\n",
+- pm8001_dev->device_id, rc));
++ pm8001_dbg(pm8001_ha, EH, " for device[%x]:rc=%d\n",
++ pm8001_dev->device_id, rc);
+ out:
+ sas_put_local_phy(phy);
+
+@@ -1131,8 +1117,8 @@ int pm8001_lu_reset(struct domain_device *dev, u8 *lun)
+ rc = pm8001_issue_ssp_tmf(dev, lun, &tmf_task);
+ }
+ /* If failed, fall-through I_T_Nexus reset */
+- PM8001_EH_DBG(pm8001_ha, pm8001_printk("for device[%x]:rc=%d\n",
+- pm8001_dev->device_id, rc));
++ pm8001_dbg(pm8001_ha, EH, "for device[%x]:rc=%d\n",
++ pm8001_dev->device_id, rc);
+ return rc;
+ }
+
+@@ -1140,7 +1126,6 @@ int pm8001_lu_reset(struct domain_device *dev, u8 *lun)
+ int pm8001_query_task(struct sas_task *task)
+ {
+ u32 tag = 0xdeadbeef;
+- int i = 0;
+ struct scsi_lun lun;
+ struct pm8001_tmf_task tmf_task;
+ int rc = TMF_RESP_FUNC_FAILED;
+@@ -1159,10 +1144,7 @@ int pm8001_query_task(struct sas_task *task)
+ rc = TMF_RESP_FUNC_FAILED;
+ return rc;
+ }
+- PM8001_EH_DBG(pm8001_ha, pm8001_printk("Query:["));
+- for (i = 0; i < 16; i++)
+- printk(KERN_INFO "%02x ", cmnd->cmnd[i]);
+- printk(KERN_INFO "]\n");
++ pm8001_dbg(pm8001_ha, EH, "Query:[%16ph]\n", cmnd->cmnd);
+ tmf_task.tmf = TMF_QUERY_TASK;
+ tmf_task.tag_of_task_to_be_managed = tag;
+
+@@ -1170,15 +1152,14 @@ int pm8001_query_task(struct sas_task *task)
+ switch (rc) {
+ /* The task is still in Lun, release it then */
+ case TMF_RESP_FUNC_SUCC:
+- PM8001_EH_DBG(pm8001_ha,
+- pm8001_printk("The task is still in Lun\n"));
++ pm8001_dbg(pm8001_ha, EH,
++ "The task is still in Lun\n");
+ break;
+ /* The task is not in Lun or failed, reset the phy */
+ case TMF_RESP_FUNC_FAILED:
+ case TMF_RESP_FUNC_COMPLETE:
+- PM8001_EH_DBG(pm8001_ha,
+- pm8001_printk("The task is not in Lun or failed,"
+- " reset the phy\n"));
++ pm8001_dbg(pm8001_ha, EH,
++ "The task is not in Lun or failed, reset the phy\n");
+ break;
+ }
+ }
+@@ -1264,8 +1245,8 @@ int pm8001_abort_task(struct sas_task *task)
+ * leaking the task in libsas or losing the race and
+ * getting a double free.
+ */
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("Waiting for local phy ctl\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "Waiting for local phy ctl\n");
+ ret = wait_for_completion_timeout(&completion,
+ PM8001_TASK_TIMEOUT * HZ);
+ if (!ret || !phy->reset_success) {
+@@ -1275,8 +1256,8 @@ int pm8001_abort_task(struct sas_task *task)
+ /* 3. Wait for Port Reset complete or
+ * Port reset TMO
+ */
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("Waiting for Port reset\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "Waiting for Port reset\n");
+ ret = wait_for_completion_timeout(
+ &completion_reset,
+ PM8001_TASK_TIMEOUT * HZ);
+@@ -1355,9 +1336,8 @@ int pm8001_clear_task_set(struct domain_device *dev, u8 *lun)
+ struct pm8001_device *pm8001_dev = dev->lldd_dev;
+ struct pm8001_hba_info *pm8001_ha = pm8001_find_ha_by_dev(dev);
+
+- PM8001_EH_DBG(pm8001_ha,
+- pm8001_printk("I_T_L_Q clear task set[%x]\n",
+- pm8001_dev->device_id));
++ pm8001_dbg(pm8001_ha, EH, "I_T_L_Q clear task set[%x]\n",
++ pm8001_dev->device_id);
+ tmf_task.tmf = TMF_CLEAR_TASK_SET;
+ return pm8001_issue_ssp_tmf(dev, lun, &tmf_task);
+ }
+diff --git a/drivers/scsi/pm8001/pm8001_sas.h b/drivers/scsi/pm8001/pm8001_sas.h
+index 95663e1380833..5cd6fe6a7d2d9 100644
+--- a/drivers/scsi/pm8001/pm8001_sas.h
++++ b/drivers/scsi/pm8001/pm8001_sas.h
+@@ -69,45 +69,16 @@
+ #define PM8001_DEV_LOGGING 0x80 /* development message logging */
+ #define PM8001_DEVIO_LOGGING 0x100 /* development io message logging */
+ #define PM8001_IOERR_LOGGING 0x200 /* development io err message logging */
+-#define pm8001_printk(format, arg...) pr_info("%s:: %s %d:" \
+- format, pm8001_ha->name, __func__, __LINE__, ## arg)
+-#define PM8001_CHECK_LOGGING(HBA, LEVEL, CMD) \
+-do { \
+- if (unlikely(HBA->logging_level & LEVEL)) \
+- do { \
+- CMD; \
+- } while (0); \
+-} while (0);
+
+-#define PM8001_EH_DBG(HBA, CMD) \
+- PM8001_CHECK_LOGGING(HBA, PM8001_EH_LOGGING, CMD)
++#define pm8001_printk(fmt, ...) \
++ pr_info("%s:: %s %d:" fmt, \
++ pm8001_ha->name, __func__, __LINE__, ##__VA_ARGS__)
+
+-#define PM8001_INIT_DBG(HBA, CMD) \
+- PM8001_CHECK_LOGGING(HBA, PM8001_INIT_LOGGING, CMD)
+-
+-#define PM8001_DISC_DBG(HBA, CMD) \
+- PM8001_CHECK_LOGGING(HBA, PM8001_DISC_LOGGING, CMD)
+-
+-#define PM8001_IO_DBG(HBA, CMD) \
+- PM8001_CHECK_LOGGING(HBA, PM8001_IO_LOGGING, CMD)
+-
+-#define PM8001_FAIL_DBG(HBA, CMD) \
+- PM8001_CHECK_LOGGING(HBA, PM8001_FAIL_LOGGING, CMD)
+-
+-#define PM8001_IOCTL_DBG(HBA, CMD) \
+- PM8001_CHECK_LOGGING(HBA, PM8001_IOCTL_LOGGING, CMD)
+-
+-#define PM8001_MSG_DBG(HBA, CMD) \
+- PM8001_CHECK_LOGGING(HBA, PM8001_MSG_LOGGING, CMD)
+-
+-#define PM8001_DEV_DBG(HBA, CMD) \
+- PM8001_CHECK_LOGGING(HBA, PM8001_DEV_LOGGING, CMD)
+-
+-#define PM8001_DEVIO_DBG(HBA, CMD) \
+- PM8001_CHECK_LOGGING(HBA, PM8001_DEVIO_LOGGING, CMD)
+-
+-#define PM8001_IOERR_DBG(HBA, CMD) \
+- PM8001_CHECK_LOGGING(HBA, PM8001_IOERR_LOGGING, CMD)
++#define pm8001_dbg(HBA, level, fmt, ...) \
++do { \
++ if (unlikely((HBA)->logging_level & PM8001_##level##_LOGGING)) \
++ pm8001_printk(fmt, ##__VA_ARGS__); \
++} while (0)
+
+ #define PM8001_USE_TASKLET
+ #define PM8001_USE_MSIX
+@@ -293,7 +264,7 @@ struct pm8001_device {
+ struct completion *dcompletion;
+ struct completion *setds_completion;
+ u32 device_id;
+- u32 running_req;
++ atomic_t running_req;
+ };
+
+ struct pm8001_prd_imt {
+diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
+index 155382ce84698..055f7649676ec 100644
+--- a/drivers/scsi/pm8001/pm80xx_hwi.c
++++ b/drivers/scsi/pm8001/pm80xx_hwi.c
+@@ -58,9 +58,8 @@ int pm80xx_bar4_shift(struct pm8001_hba_info *pm8001_ha, u32 shift_value)
+ reg_val = pm8001_cr32(pm8001_ha, 0, MEMBASE_II_SHIFT_REGISTER);
+ } while ((reg_val != shift_value) && time_before(jiffies, start));
+ if (reg_val != shift_value) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("TIMEOUT:MEMBASE_II_SHIFT_REGISTER"
+- " = 0x%x\n", reg_val));
++ pm8001_dbg(pm8001_ha, FAIL, "TIMEOUT:MEMBASE_II_SHIFT_REGISTER = 0x%x\n",
++ reg_val);
+ return -1;
+ }
+ return 0;
+@@ -109,8 +108,8 @@ ssize_t pm80xx_get_fatal_dump(struct device *cdev,
+ }
+ /* initialize variables for very first call from host application */
+ if (pm8001_ha->forensic_info.data_buf.direct_offset == 0) {
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("forensic_info TYPE_NON_FATAL..............\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "forensic_info TYPE_NON_FATAL..............\n");
+ direct_data = (u8 *)fatal_error_data;
+ pm8001_ha->forensic_info.data_type = TYPE_NON_FATAL;
+ pm8001_ha->forensic_info.data_buf.direct_len = SYSFS_OFFSET;
+@@ -123,17 +122,13 @@ ssize_t pm80xx_get_fatal_dump(struct device *cdev,
+ MPI_FATAL_EDUMP_TABLE_SIGNATURE, 0x1234abcd);
+
+ pm8001_ha->forensic_info.data_buf.direct_data = direct_data;
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("ossaHwCB: status1 %d\n", status));
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("ossaHwCB: read_len 0x%x\n",
+- pm8001_ha->forensic_info.data_buf.read_len));
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("ossaHwCB: direct_len 0x%x\n",
+- pm8001_ha->forensic_info.data_buf.direct_len));
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("ossaHwCB: direct_offset 0x%x\n",
+- pm8001_ha->forensic_info.data_buf.direct_offset));
++ pm8001_dbg(pm8001_ha, IO, "ossaHwCB: status1 %d\n", status);
++ pm8001_dbg(pm8001_ha, IO, "ossaHwCB: read_len 0x%x\n",
++ pm8001_ha->forensic_info.data_buf.read_len);
++ pm8001_dbg(pm8001_ha, IO, "ossaHwCB: direct_len 0x%x\n",
++ pm8001_ha->forensic_info.data_buf.direct_len);
++ pm8001_dbg(pm8001_ha, IO, "ossaHwCB: direct_offset 0x%x\n",
++ pm8001_ha->forensic_info.data_buf.direct_offset);
+ }
+ if (pm8001_ha->forensic_info.data_buf.direct_offset == 0) {
+ /* start to get data */
+@@ -153,29 +148,24 @@ ssize_t pm80xx_get_fatal_dump(struct device *cdev,
+ */
+ length_to_read =
+ accum_len - pm8001_ha->forensic_preserved_accumulated_transfer;
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("get_fatal_spcv: accum_len 0x%x\n", accum_len));
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("get_fatal_spcv: length_to_read 0x%x\n",
+- length_to_read));
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("get_fatal_spcv: last_offset 0x%x\n",
+- pm8001_ha->forensic_last_offset));
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("get_fatal_spcv: read_len 0x%x\n",
+- pm8001_ha->forensic_info.data_buf.read_len));
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("get_fatal_spcv:: direct_len 0x%x\n",
+- pm8001_ha->forensic_info.data_buf.direct_len));
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("get_fatal_spcv:: direct_offset 0x%x\n",
+- pm8001_ha->forensic_info.data_buf.direct_offset));
++ pm8001_dbg(pm8001_ha, IO, "get_fatal_spcv: accum_len 0x%x\n",
++ accum_len);
++ pm8001_dbg(pm8001_ha, IO, "get_fatal_spcv: length_to_read 0x%x\n",
++ length_to_read);
++ pm8001_dbg(pm8001_ha, IO, "get_fatal_spcv: last_offset 0x%x\n",
++ pm8001_ha->forensic_last_offset);
++ pm8001_dbg(pm8001_ha, IO, "get_fatal_spcv: read_len 0x%x\n",
++ pm8001_ha->forensic_info.data_buf.read_len);
++ pm8001_dbg(pm8001_ha, IO, "get_fatal_spcv:: direct_len 0x%x\n",
++ pm8001_ha->forensic_info.data_buf.direct_len);
++ pm8001_dbg(pm8001_ha, IO, "get_fatal_spcv:: direct_offset 0x%x\n",
++ pm8001_ha->forensic_info.data_buf.direct_offset);
+
+ /* If accumulated length failed to read correctly fail the attempt.*/
+ if (accum_len == 0xFFFFFFFF) {
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("Possible PCI issue 0x%x not expected\n",
+- accum_len));
++ pm8001_dbg(pm8001_ha, IO,
++ "Possible PCI issue 0x%x not expected\n",
++ accum_len);
+ return status;
+ }
+ /* If accumulated length is zero fail the attempt */
+@@ -239,8 +229,8 @@ moreData:
+ offset = (int)
+ ((char *)pm8001_ha->forensic_info.data_buf.direct_data
+ - (char *)buf);
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("get_fatal_spcv:return1 0x%x\n", offset));
++ pm8001_dbg(pm8001_ha, IO,
++ "get_fatal_spcv:return1 0x%x\n", offset);
+ return (char *)pm8001_ha->
+ forensic_info.data_buf.direct_data -
+ (char *)buf;
+@@ -262,8 +252,8 @@ moreData:
+ offset = (int)
+ ((char *)pm8001_ha->forensic_info.data_buf.direct_data
+ - (char *)buf);
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("get_fatal_spcv:return2 0x%x\n", offset));
++ pm8001_dbg(pm8001_ha, IO,
++ "get_fatal_spcv:return2 0x%x\n", offset);
+ return (char *)pm8001_ha->
+ forensic_info.data_buf.direct_data -
+ (char *)buf;
+@@ -289,8 +279,8 @@ moreData:
+ offset = (int)
+ ((char *)pm8001_ha->forensic_info.data_buf.direct_data
+ - (char *)buf);
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("get_fatal_spcv: return3 0x%x\n", offset));
++ pm8001_dbg(pm8001_ha, IO, "get_fatal_spcv: return3 0x%x\n",
++ offset);
+ return (char *)pm8001_ha->forensic_info.data_buf.direct_data -
+ (char *)buf;
+ }
+@@ -327,9 +317,9 @@ moreData:
+ } while ((reg_val) && time_before(jiffies, start));
+
+ if (reg_val != 0) {
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk(
+- "TIMEOUT:MPI_FATAL_EDUMP_TABLE_HDSHAKE 0x%x\n",
+- reg_val));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "TIMEOUT:MPI_FATAL_EDUMP_TABLE_HDSHAKE 0x%x\n",
++ reg_val);
+ /* Fail the dump if a timeout occurs */
+ pm8001_ha->forensic_info.data_buf.direct_data +=
+ sprintf(
+@@ -351,9 +341,9 @@ moreData:
+ time_before(jiffies, start));
+
+ if (reg_val < 2) {
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk(
+- "TIMEOUT:MPI_FATAL_EDUMP_TABLE_STATUS = 0x%x\n",
+- reg_val));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "TIMEOUT:MPI_FATAL_EDUMP_TABLE_STATUS = 0x%x\n",
++ reg_val);
+ /* Fail the dump if a timeout occurs */
+ pm8001_ha->forensic_info.data_buf.direct_data +=
+ sprintf(
+@@ -387,8 +377,7 @@ moreData:
+ }
+ offset = (int)((char *)pm8001_ha->forensic_info.data_buf.direct_data
+ - (char *)buf);
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("get_fatal_spcv: return4 0x%x\n", offset));
++ pm8001_dbg(pm8001_ha, IO, "get_fatal_spcv: return4 0x%x\n", offset);
+ return (char *)pm8001_ha->forensic_info.data_buf.direct_data -
+ (char *)buf;
+ }
+@@ -419,8 +408,7 @@ ssize_t pm80xx_get_non_fatal_dump(struct device *cdev,
+ PAGE_SIZE, "Not supported for SPC controller");
+ return 0;
+ }
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("forensic_info TYPE_NON_FATAL...\n"));
++ pm8001_dbg(pm8001_ha, IO, "forensic_info TYPE_NON_FATAL...\n");
+ /*
+ * Step 1: Write the host buffer parameters in the MPI Fatal and
+ * Non-Fatal Error Dump Capture Table.This is the buffer
+@@ -581,24 +569,24 @@ static void read_main_config_table(struct pm8001_hba_info *pm8001_ha)
+ pm8001_ha->main_cfg_tbl.pm80xx_tbl.inc_fw_version =
+ pm8001_mr32(address, MAIN_MPI_INACTIVE_FW_VERSION);
+
+- PM8001_DEV_DBG(pm8001_ha, pm8001_printk(
+- "Main cfg table: sign:%x interface rev:%x fw_rev:%x\n",
+- pm8001_ha->main_cfg_tbl.pm80xx_tbl.signature,
+- pm8001_ha->main_cfg_tbl.pm80xx_tbl.interface_rev,
+- pm8001_ha->main_cfg_tbl.pm80xx_tbl.firmware_rev));
+-
+- PM8001_DEV_DBG(pm8001_ha, pm8001_printk(
+- "table offset: gst:%x iq:%x oq:%x int vec:%x phy attr:%x\n",
+- pm8001_ha->main_cfg_tbl.pm80xx_tbl.gst_offset,
+- pm8001_ha->main_cfg_tbl.pm80xx_tbl.inbound_queue_offset,
+- pm8001_ha->main_cfg_tbl.pm80xx_tbl.outbound_queue_offset,
+- pm8001_ha->main_cfg_tbl.pm80xx_tbl.int_vec_table_offset,
+- pm8001_ha->main_cfg_tbl.pm80xx_tbl.phy_attr_table_offset));
+-
+- PM8001_DEV_DBG(pm8001_ha, pm8001_printk(
+- "Main cfg table; ila rev:%x Inactive fw rev:%x\n",
+- pm8001_ha->main_cfg_tbl.pm80xx_tbl.ila_version,
+- pm8001_ha->main_cfg_tbl.pm80xx_tbl.inc_fw_version));
++ pm8001_dbg(pm8001_ha, DEV,
++ "Main cfg table: sign:%x interface rev:%x fw_rev:%x\n",
++ pm8001_ha->main_cfg_tbl.pm80xx_tbl.signature,
++ pm8001_ha->main_cfg_tbl.pm80xx_tbl.interface_rev,
++ pm8001_ha->main_cfg_tbl.pm80xx_tbl.firmware_rev);
++
++ pm8001_dbg(pm8001_ha, DEV,
++ "table offset: gst:%x iq:%x oq:%x int vec:%x phy attr:%x\n",
++ pm8001_ha->main_cfg_tbl.pm80xx_tbl.gst_offset,
++ pm8001_ha->main_cfg_tbl.pm80xx_tbl.inbound_queue_offset,
++ pm8001_ha->main_cfg_tbl.pm80xx_tbl.outbound_queue_offset,
++ pm8001_ha->main_cfg_tbl.pm80xx_tbl.int_vec_table_offset,
++ pm8001_ha->main_cfg_tbl.pm80xx_tbl.phy_attr_table_offset);
++
++ pm8001_dbg(pm8001_ha, DEV,
++ "Main cfg table; ila rev:%x Inactive fw rev:%x\n",
++ pm8001_ha->main_cfg_tbl.pm80xx_tbl.ila_version,
++ pm8001_ha->main_cfg_tbl.pm80xx_tbl.inc_fw_version);
+ }
+
+ /**
+@@ -808,10 +796,10 @@ static void init_default_table_values(struct pm8001_hba_info *pm8001_ha)
+ pm8001_ha->inbnd_q_tbl[i].producer_idx = 0;
+ pm8001_ha->inbnd_q_tbl[i].consumer_index = 0;
+
+- PM8001_DEV_DBG(pm8001_ha, pm8001_printk(
+- "IQ %d pi_bar 0x%x pi_offset 0x%x\n", i,
+- pm8001_ha->inbnd_q_tbl[i].pi_pci_bar,
+- pm8001_ha->inbnd_q_tbl[i].pi_offset));
++ pm8001_dbg(pm8001_ha, DEV,
++ "IQ %d pi_bar 0x%x pi_offset 0x%x\n", i,
++ pm8001_ha->inbnd_q_tbl[i].pi_pci_bar,
++ pm8001_ha->inbnd_q_tbl[i].pi_offset);
+ }
+ for (i = 0; i < pm8001_ha->max_q_num; i++) {
+ pm8001_ha->outbnd_q_tbl[i].element_size_cnt =
+@@ -841,10 +829,10 @@ static void init_default_table_values(struct pm8001_hba_info *pm8001_ha)
+ pm8001_ha->outbnd_q_tbl[i].consumer_idx = 0;
+ pm8001_ha->outbnd_q_tbl[i].producer_index = 0;
+
+- PM8001_DEV_DBG(pm8001_ha, pm8001_printk(
+- "OQ %d ci_bar 0x%x ci_offset 0x%x\n", i,
+- pm8001_ha->outbnd_q_tbl[i].ci_pci_bar,
+- pm8001_ha->outbnd_q_tbl[i].ci_offset));
++ pm8001_dbg(pm8001_ha, DEV,
++ "OQ %d ci_bar 0x%x ci_offset 0x%x\n", i,
++ pm8001_ha->outbnd_q_tbl[i].ci_pci_bar,
++ pm8001_ha->outbnd_q_tbl[i].ci_offset);
+ }
+ }
+
+@@ -878,9 +866,9 @@ static void update_main_config_table(struct pm8001_hba_info *pm8001_ha)
+ ((pm8001_ha->max_q_num - 1) << 8);
+ pm8001_mw32(address, MAIN_FATAL_ERROR_INTERRUPT,
+ pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_interrupt);
+- PM8001_DEV_DBG(pm8001_ha, pm8001_printk(
+- "Updated Fatal error interrupt vector 0x%x\n",
+- pm8001_mr32(address, MAIN_FATAL_ERROR_INTERRUPT)));
++ pm8001_dbg(pm8001_ha, DEV,
++ "Updated Fatal error interrupt vector 0x%x\n",
++ pm8001_mr32(address, MAIN_FATAL_ERROR_INTERRUPT));
+
+ pm8001_mw32(address, MAIN_EVENT_CRC_CHECK,
+ pm8001_ha->main_cfg_tbl.pm80xx_tbl.crc_core_dump);
+@@ -891,9 +879,9 @@ static void update_main_config_table(struct pm8001_hba_info *pm8001_ha)
+ pm8001_ha->main_cfg_tbl.pm80xx_tbl.gpio_led_mapping |= 0x20000000;
+ pm8001_mw32(address, MAIN_GPIO_LED_FLAGS_OFFSET,
+ pm8001_ha->main_cfg_tbl.pm80xx_tbl.gpio_led_mapping);
+- PM8001_DEV_DBG(pm8001_ha, pm8001_printk(
+- "Programming DW 0x21 in main cfg table with 0x%x\n",
+- pm8001_mr32(address, MAIN_GPIO_LED_FLAGS_OFFSET)));
++ pm8001_dbg(pm8001_ha, DEV,
++ "Programming DW 0x21 in main cfg table with 0x%x\n",
++ pm8001_mr32(address, MAIN_GPIO_LED_FLAGS_OFFSET));
+
+ pm8001_mw32(address, MAIN_PORT_RECOVERY_TIMER,
+ pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer);
+@@ -934,20 +922,20 @@ static void update_inbnd_queue_table(struct pm8001_hba_info *pm8001_ha,
+ pm8001_mw32(address, offset + IB_CI_BASE_ADDR_LO_OFFSET,
+ pm8001_ha->inbnd_q_tbl[number].ci_lower_base_addr);
+
+- PM8001_DEV_DBG(pm8001_ha, pm8001_printk(
+- "IQ %d: Element pri size 0x%x\n",
+- number,
+- pm8001_ha->inbnd_q_tbl[number].element_pri_size_cnt));
++ pm8001_dbg(pm8001_ha, DEV,
++ "IQ %d: Element pri size 0x%x\n",
++ number,
++ pm8001_ha->inbnd_q_tbl[number].element_pri_size_cnt);
+
+- PM8001_DEV_DBG(pm8001_ha, pm8001_printk(
+- "IQ upr base addr 0x%x IQ lwr base addr 0x%x\n",
+- pm8001_ha->inbnd_q_tbl[number].upper_base_addr,
+- pm8001_ha->inbnd_q_tbl[number].lower_base_addr));
++ pm8001_dbg(pm8001_ha, DEV,
++ "IQ upr base addr 0x%x IQ lwr base addr 0x%x\n",
++ pm8001_ha->inbnd_q_tbl[number].upper_base_addr,
++ pm8001_ha->inbnd_q_tbl[number].lower_base_addr);
+
+- PM8001_DEV_DBG(pm8001_ha, pm8001_printk(
+- "CI upper base addr 0x%x CI lower base addr 0x%x\n",
+- pm8001_ha->inbnd_q_tbl[number].ci_upper_base_addr,
+- pm8001_ha->inbnd_q_tbl[number].ci_lower_base_addr));
++ pm8001_dbg(pm8001_ha, DEV,
++ "CI upper base addr 0x%x CI lower base addr 0x%x\n",
++ pm8001_ha->inbnd_q_tbl[number].ci_upper_base_addr,
++ pm8001_ha->inbnd_q_tbl[number].ci_lower_base_addr);
+ }
+
+ /**
+@@ -973,20 +961,20 @@ static void update_outbnd_queue_table(struct pm8001_hba_info *pm8001_ha,
+ pm8001_mw32(address, offset + OB_INTERRUPT_COALES_OFFSET,
+ pm8001_ha->outbnd_q_tbl[number].interrup_vec_cnt_delay);
+
+- PM8001_DEV_DBG(pm8001_ha, pm8001_printk(
+- "OQ %d: Element pri size 0x%x\n",
+- number,
+- pm8001_ha->outbnd_q_tbl[number].element_size_cnt));
++ pm8001_dbg(pm8001_ha, DEV,
++ "OQ %d: Element pri size 0x%x\n",
++ number,
++ pm8001_ha->outbnd_q_tbl[number].element_size_cnt);
+
+- PM8001_DEV_DBG(pm8001_ha, pm8001_printk(
+- "OQ upr base addr 0x%x OQ lwr base addr 0x%x\n",
+- pm8001_ha->outbnd_q_tbl[number].upper_base_addr,
+- pm8001_ha->outbnd_q_tbl[number].lower_base_addr));
++ pm8001_dbg(pm8001_ha, DEV,
++ "OQ upr base addr 0x%x OQ lwr base addr 0x%x\n",
++ pm8001_ha->outbnd_q_tbl[number].upper_base_addr,
++ pm8001_ha->outbnd_q_tbl[number].lower_base_addr);
+
+- PM8001_DEV_DBG(pm8001_ha, pm8001_printk(
+- "PI upper base addr 0x%x PI lower base addr 0x%x\n",
+- pm8001_ha->outbnd_q_tbl[number].pi_upper_base_addr,
+- pm8001_ha->outbnd_q_tbl[number].pi_lower_base_addr));
++ pm8001_dbg(pm8001_ha, DEV,
++ "PI upper base addr 0x%x PI lower base addr 0x%x\n",
++ pm8001_ha->outbnd_q_tbl[number].pi_upper_base_addr,
++ pm8001_ha->outbnd_q_tbl[number].pi_lower_base_addr);
+ }
+
+ /**
+@@ -1016,8 +1004,9 @@ static int mpi_init_check(struct pm8001_hba_info *pm8001_ha)
+
+ if (!max_wait_count) {
+ /* additional check */
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk(
+- "Inb doorbell clear not toggled[value:%x]\n", value));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "Inb doorbell clear not toggled[value:%x]\n",
++ value);
+ return -EBUSY;
+ }
+ /* check the MPI-State for initialization upto 100ms*/
+@@ -1068,9 +1057,9 @@ static int check_fw_ready(struct pm8001_hba_info *pm8001_ha)
+ if (!max_wait_count)
+ ret = -1;
+ else {
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" ila ready status in %d millisec\n",
+- (max_wait_time - max_wait_count)));
++ pm8001_dbg(pm8001_ha, MSG,
++ " ila ready status in %d millisec\n",
++ (max_wait_time - max_wait_count));
+ }
+
+ /* check RAAE status */
+@@ -1083,9 +1072,9 @@ static int check_fw_ready(struct pm8001_hba_info *pm8001_ha)
+ if (!max_wait_count)
+ ret = -1;
+ else {
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" raae ready status in %d millisec\n",
+- (max_wait_time - max_wait_count)));
++ pm8001_dbg(pm8001_ha, MSG,
++ " raae ready status in %d millisec\n",
++ (max_wait_time - max_wait_count));
+ }
+
+ /* check iop0 status */
+@@ -1098,9 +1087,9 @@ static int check_fw_ready(struct pm8001_hba_info *pm8001_ha)
+ if (!max_wait_count)
+ ret = -1;
+ else {
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" iop0 ready status in %d millisec\n",
+- (max_wait_time - max_wait_count)));
++ pm8001_dbg(pm8001_ha, MSG,
++ " iop0 ready status in %d millisec\n",
++ (max_wait_time - max_wait_count));
+ }
+
+ /* check iop1 status only for 16 port controllers */
+@@ -1116,9 +1105,9 @@ static int check_fw_ready(struct pm8001_hba_info *pm8001_ha)
+ if (!max_wait_count)
+ ret = -1;
+ else {
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk(
+- "iop1 ready status in %d millisec\n",
+- (max_wait_time - max_wait_count)));
++ pm8001_dbg(pm8001_ha, MSG,
++ "iop1 ready status in %d millisec\n",
++ (max_wait_time - max_wait_count));
+ }
+ }
+
+@@ -1136,13 +1125,11 @@ static void init_pci_device_addresses(struct pm8001_hba_info *pm8001_ha)
+ value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_0);
+ offset = value & 0x03FFFFFF; /* scratch pad 0 TBL address */
+
+- PM8001_DEV_DBG(pm8001_ha,
+- pm8001_printk("Scratchpad 0 Offset: 0x%x value 0x%x\n",
+- offset, value));
++ pm8001_dbg(pm8001_ha, DEV, "Scratchpad 0 Offset: 0x%x value 0x%x\n",
++ offset, value);
+ pcilogic = (value & 0xFC000000) >> 26;
+ pcibar = get_pci_bar_index(pcilogic);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("Scratchpad 0 PCI BAR: %d\n", pcibar));
++ pm8001_dbg(pm8001_ha, INIT, "Scratchpad 0 PCI BAR: %d\n", pcibar);
+ pm8001_ha->main_cfg_tbl_addr = base_addr =
+ pm8001_ha->io_mem[pcibar].memvirtaddr + offset;
+ pm8001_ha->general_stat_tbl_addr =
+@@ -1164,33 +1151,25 @@ static void init_pci_device_addresses(struct pm8001_hba_info *pm8001_ha)
+ base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0xA0) &
+ 0xFFFFFF);
+
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("GST OFFSET 0x%x\n",
+- pm8001_cr32(pm8001_ha, pcibar, offset + 0x18)));
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("INBND OFFSET 0x%x\n",
+- pm8001_cr32(pm8001_ha, pcibar, offset + 0x1C)));
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("OBND OFFSET 0x%x\n",
+- pm8001_cr32(pm8001_ha, pcibar, offset + 0x20)));
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("IVT OFFSET 0x%x\n",
+- pm8001_cr32(pm8001_ha, pcibar, offset + 0x8C)));
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("PSPA OFFSET 0x%x\n",
+- pm8001_cr32(pm8001_ha, pcibar, offset + 0x90)));
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("addr - main cfg %p general status %p\n",
+- pm8001_ha->main_cfg_tbl_addr,
+- pm8001_ha->general_stat_tbl_addr));
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("addr - inbnd %p obnd %p\n",
+- pm8001_ha->inbnd_q_tbl_addr,
+- pm8001_ha->outbnd_q_tbl_addr));
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("addr - pspa %p ivt %p\n",
+- pm8001_ha->pspa_q_tbl_addr,
+- pm8001_ha->ivt_tbl_addr));
++ pm8001_dbg(pm8001_ha, INIT, "GST OFFSET 0x%x\n",
++ pm8001_cr32(pm8001_ha, pcibar, offset + 0x18));
++ pm8001_dbg(pm8001_ha, INIT, "INBND OFFSET 0x%x\n",
++ pm8001_cr32(pm8001_ha, pcibar, offset + 0x1C));
++ pm8001_dbg(pm8001_ha, INIT, "OBND OFFSET 0x%x\n",
++ pm8001_cr32(pm8001_ha, pcibar, offset + 0x20));
++ pm8001_dbg(pm8001_ha, INIT, "IVT OFFSET 0x%x\n",
++ pm8001_cr32(pm8001_ha, pcibar, offset + 0x8C));
++ pm8001_dbg(pm8001_ha, INIT, "PSPA OFFSET 0x%x\n",
++ pm8001_cr32(pm8001_ha, pcibar, offset + 0x90));
++ pm8001_dbg(pm8001_ha, INIT, "addr - main cfg %p general status %p\n",
++ pm8001_ha->main_cfg_tbl_addr,
++ pm8001_ha->general_stat_tbl_addr);
++ pm8001_dbg(pm8001_ha, INIT, "addr - inbnd %p obnd %p\n",
++ pm8001_ha->inbnd_q_tbl_addr,
++ pm8001_ha->outbnd_q_tbl_addr);
++ pm8001_dbg(pm8001_ha, INIT, "addr - pspa %p ivt %p\n",
++ pm8001_ha->pspa_q_tbl_addr,
++ pm8001_ha->ivt_tbl_addr);
+ }
+
+ /**
+@@ -1224,9 +1203,9 @@ pm80xx_set_thermal_config(struct pm8001_hba_info *pm8001_ha)
+ (THERMAL_ENABLE << 8) | page_code;
+ payload.cfg_pg[1] = (LTEMPHIL << 24) | (RTEMPHIL << 8);
+
+- PM8001_DEV_DBG(pm8001_ha, pm8001_printk(
+- "Setting up thermal config. cfg_pg 0 0x%x cfg_pg 1 0x%x\n",
+- payload.cfg_pg[0], payload.cfg_pg[1]));
++ pm8001_dbg(pm8001_ha, DEV,
++ "Setting up thermal config. cfg_pg 0 0x%x cfg_pg 1 0x%x\n",
++ payload.cfg_pg[0], payload.cfg_pg[1]);
+
+ rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload,
+ sizeof(payload), 0);
+@@ -1281,32 +1260,24 @@ pm80xx_set_sas_protocol_timer_config(struct pm8001_hba_info *pm8001_ha)
+ | SAS_COPNRJT_RTRY_THR;
+ SASConfigPage.MAX_AIP = SAS_MAX_AIP;
+
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("SASConfigPage.pageCode "
+- "0x%08x\n", SASConfigPage.pageCode));
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("SASConfigPage.MST_MSI "
+- " 0x%08x\n", SASConfigPage.MST_MSI));
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("SASConfigPage.STP_SSP_MCT_TMO "
+- " 0x%08x\n", SASConfigPage.STP_SSP_MCT_TMO));
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("SASConfigPage.STP_FRM_TMO "
+- " 0x%08x\n", SASConfigPage.STP_FRM_TMO));
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("SASConfigPage.STP_IDLE_TMO "
+- " 0x%08x\n", SASConfigPage.STP_IDLE_TMO));
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("SASConfigPage.OPNRJT_RTRY_INTVL "
+- " 0x%08x\n", SASConfigPage.OPNRJT_RTRY_INTVL));
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("SASConfigPage.Data_Cmd_OPNRJT_RTRY_TMO "
+- " 0x%08x\n", SASConfigPage.Data_Cmd_OPNRJT_RTRY_TMO));
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("SASConfigPage.Data_Cmd_OPNRJT_RTRY_THR "
+- " 0x%08x\n", SASConfigPage.Data_Cmd_OPNRJT_RTRY_THR));
+- PM8001_INIT_DBG(pm8001_ha, pm8001_printk("SASConfigPage.MAX_AIP "
+- " 0x%08x\n", SASConfigPage.MAX_AIP));
++ pm8001_dbg(pm8001_ha, INIT, "SASConfigPage.pageCode 0x%08x\n",
++ SASConfigPage.pageCode);
++ pm8001_dbg(pm8001_ha, INIT, "SASConfigPage.MST_MSI 0x%08x\n",
++ SASConfigPage.MST_MSI);
++ pm8001_dbg(pm8001_ha, INIT, "SASConfigPage.STP_SSP_MCT_TMO 0x%08x\n",
++ SASConfigPage.STP_SSP_MCT_TMO);
++ pm8001_dbg(pm8001_ha, INIT, "SASConfigPage.STP_FRM_TMO 0x%08x\n",
++ SASConfigPage.STP_FRM_TMO);
++ pm8001_dbg(pm8001_ha, INIT, "SASConfigPage.STP_IDLE_TMO 0x%08x\n",
++ SASConfigPage.STP_IDLE_TMO);
++ pm8001_dbg(pm8001_ha, INIT, "SASConfigPage.OPNRJT_RTRY_INTVL 0x%08x\n",
++ SASConfigPage.OPNRJT_RTRY_INTVL);
++ pm8001_dbg(pm8001_ha, INIT, "SASConfigPage.Data_Cmd_OPNRJT_RTRY_TMO 0x%08x\n",
++ SASConfigPage.Data_Cmd_OPNRJT_RTRY_TMO);
++ pm8001_dbg(pm8001_ha, INIT, "SASConfigPage.Data_Cmd_OPNRJT_RTRY_THR 0x%08x\n",
++ SASConfigPage.Data_Cmd_OPNRJT_RTRY_THR);
++ pm8001_dbg(pm8001_ha, INIT, "SASConfigPage.MAX_AIP 0x%08x\n",
++ SASConfigPage.MAX_AIP);
+
+ memcpy(&payload.cfg_pg, &SASConfigPage,
+ sizeof(SASProtocolTimerConfig_t));
+@@ -1346,18 +1317,18 @@ pm80xx_get_encrypt_info(struct pm8001_hba_info *pm8001_ha)
+ SCRATCH_PAD3_SMB_ENABLED)
+ pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMB;
+ pm8001_ha->encrypt_info.status = 0;
+- PM8001_INIT_DBG(pm8001_ha, pm8001_printk(
+- "Encryption: SCRATCH_PAD3_ENC_READY 0x%08X."
+- "Cipher mode 0x%x Sec mode 0x%x status 0x%x\n",
+- scratch3_value, pm8001_ha->encrypt_info.cipher_mode,
+- pm8001_ha->encrypt_info.sec_mode,
+- pm8001_ha->encrypt_info.status));
++ pm8001_dbg(pm8001_ha, INIT,
++ "Encryption: SCRATCH_PAD3_ENC_READY 0x%08X.Cipher mode 0x%x Sec mode 0x%x status 0x%x\n",
++ scratch3_value,
++ pm8001_ha->encrypt_info.cipher_mode,
++ pm8001_ha->encrypt_info.sec_mode,
++ pm8001_ha->encrypt_info.status);
+ ret = 0;
+ } else if ((scratch3_value & SCRATCH_PAD3_ENC_READY) ==
+ SCRATCH_PAD3_ENC_DISABLED) {
+- PM8001_INIT_DBG(pm8001_ha, pm8001_printk(
+- "Encryption: SCRATCH_PAD3_ENC_DISABLED 0x%08X\n",
+- scratch3_value));
++ pm8001_dbg(pm8001_ha, INIT,
++ "Encryption: SCRATCH_PAD3_ENC_DISABLED 0x%08X\n",
++ scratch3_value);
+ pm8001_ha->encrypt_info.status = 0xFFFFFFFF;
+ pm8001_ha->encrypt_info.cipher_mode = 0;
+ pm8001_ha->encrypt_info.sec_mode = 0;
+@@ -1377,12 +1348,12 @@ pm80xx_get_encrypt_info(struct pm8001_hba_info *pm8001_ha)
+ if ((scratch3_value & SCRATCH_PAD3_SM_MASK) ==
+ SCRATCH_PAD3_SMB_ENABLED)
+ pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMB;
+- PM8001_INIT_DBG(pm8001_ha, pm8001_printk(
+- "Encryption: SCRATCH_PAD3_DIS_ERR 0x%08X."
+- "Cipher mode 0x%x sec mode 0x%x status 0x%x\n",
+- scratch3_value, pm8001_ha->encrypt_info.cipher_mode,
+- pm8001_ha->encrypt_info.sec_mode,
+- pm8001_ha->encrypt_info.status));
++ pm8001_dbg(pm8001_ha, INIT,
++ "Encryption: SCRATCH_PAD3_DIS_ERR 0x%08X.Cipher mode 0x%x sec mode 0x%x status 0x%x\n",
++ scratch3_value,
++ pm8001_ha->encrypt_info.cipher_mode,
++ pm8001_ha->encrypt_info.sec_mode,
++ pm8001_ha->encrypt_info.status);
+ } else if ((scratch3_value & SCRATCH_PAD3_ENC_MASK) ==
+ SCRATCH_PAD3_ENC_ENA_ERR) {
+
+@@ -1400,12 +1371,12 @@ pm80xx_get_encrypt_info(struct pm8001_hba_info *pm8001_ha)
+ SCRATCH_PAD3_SMB_ENABLED)
+ pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMB;
+
+- PM8001_INIT_DBG(pm8001_ha, pm8001_printk(
+- "Encryption: SCRATCH_PAD3_ENA_ERR 0x%08X."
+- "Cipher mode 0x%x sec mode 0x%x status 0x%x\n",
+- scratch3_value, pm8001_ha->encrypt_info.cipher_mode,
+- pm8001_ha->encrypt_info.sec_mode,
+- pm8001_ha->encrypt_info.status));
++ pm8001_dbg(pm8001_ha, INIT,
++ "Encryption: SCRATCH_PAD3_ENA_ERR 0x%08X.Cipher mode 0x%x sec mode 0x%x status 0x%x\n",
++ scratch3_value,
++ pm8001_ha->encrypt_info.cipher_mode,
++ pm8001_ha->encrypt_info.sec_mode,
++ pm8001_ha->encrypt_info.status);
+ }
+ return ret;
+ }
+@@ -1435,9 +1406,9 @@ static int pm80xx_encrypt_update(struct pm8001_hba_info *pm8001_ha)
+ payload.new_curidx_ksop = ((1 << 24) | (1 << 16) | (1 << 8) |
+ KEK_MGMT_SUBOP_KEYCARDUPDATE);
+
+- PM8001_DEV_DBG(pm8001_ha, pm8001_printk(
+- "Saving Encryption info to flash. payload 0x%x\n",
+- payload.new_curidx_ksop));
++ pm8001_dbg(pm8001_ha, DEV,
++ "Saving Encryption info to flash. payload 0x%x\n",
++ payload.new_curidx_ksop);
+
+ rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload,
+ sizeof(payload), 0);
+@@ -1458,8 +1429,7 @@ static int pm80xx_chip_init(struct pm8001_hba_info *pm8001_ha)
+
+ /* check the firmware status */
+ if (-1 == check_fw_ready(pm8001_ha)) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("Firmware is not ready!\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "Firmware is not ready!\n");
+ return -EBUSY;
+ }
+
+@@ -1483,8 +1453,7 @@ static int pm80xx_chip_init(struct pm8001_hba_info *pm8001_ha)
+ }
+ /* notify firmware update finished and check initialization status */
+ if (0 == mpi_init_check(pm8001_ha)) {
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("MPI initialize successful!\n"));
++ pm8001_dbg(pm8001_ha, INIT, "MPI initialize successful!\n");
+ } else
+ return -EBUSY;
+
+@@ -1493,16 +1462,13 @@ static int pm80xx_chip_init(struct pm8001_hba_info *pm8001_ha)
+
+ /* Check for encryption */
+ if (pm8001_ha->chip->encrypt) {
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("Checking for encryption\n"));
++ pm8001_dbg(pm8001_ha, INIT, "Checking for encryption\n");
+ ret = pm80xx_get_encrypt_info(pm8001_ha);
+ if (ret == -1) {
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("Encryption error !!\n"));
++ pm8001_dbg(pm8001_ha, INIT, "Encryption error !!\n");
+ if (pm8001_ha->encrypt_info.status == 0x81) {
+- PM8001_INIT_DBG(pm8001_ha, pm8001_printk(
+- "Encryption enabled with error."
+- "Saving encryption key to flash\n"));
++ pm8001_dbg(pm8001_ha, INIT,
++ "Encryption enabled with error.Saving encryption key to flash\n");
+ pm80xx_encrypt_update(pm8001_ha);
+ }
+ }
+@@ -1533,8 +1499,7 @@ static int mpi_uninit_check(struct pm8001_hba_info *pm8001_ha)
+ } while ((value != 0) && (--max_wait_count));
+
+ if (!max_wait_count) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("TIMEOUT:IBDB value/=%x\n", value));
++ pm8001_dbg(pm8001_ha, FAIL, "TIMEOUT:IBDB value/=%x\n", value);
+ return -1;
+ }
+
+@@ -1551,9 +1516,8 @@ static int mpi_uninit_check(struct pm8001_hba_info *pm8001_ha)
+ break;
+ } while (--max_wait_count);
+ if (!max_wait_count) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk(" TIME OUT MPI State = 0x%x\n",
+- gst_len_mpistate & GST_MPI_STATE_MASK));
++ pm8001_dbg(pm8001_ha, FAIL, " TIME OUT MPI State = 0x%x\n",
++ gst_len_mpistate & GST_MPI_STATE_MASK);
+ return -1;
+ }
+
+@@ -1581,9 +1545,9 @@ pm80xx_chip_soft_rst(struct pm8001_hba_info *pm8001_ha)
+ u32 r1 = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1);
+ u32 r2 = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_2);
+ u32 r3 = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_3);
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk(
+- "MPI state is not ready scratch: %x:%x:%x:%x\n",
+- r0, r1, r2, r3));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "MPI state is not ready scratch: %x:%x:%x:%x\n",
++ r0, r1, r2, r3);
+ /* if things aren't ready but the bootloader is ok then
+ * try the reset anyway.
+ */
+@@ -1593,25 +1557,25 @@ pm80xx_chip_soft_rst(struct pm8001_hba_info *pm8001_ha)
+ }
+ /* checked for reset register normal state; 0x0 */
+ regval = pm8001_cr32(pm8001_ha, 0, SPC_REG_SOFT_RESET);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("reset register before write : 0x%x\n", regval));
++ pm8001_dbg(pm8001_ha, INIT, "reset register before write : 0x%x\n",
++ regval);
+
+ pm8001_cw32(pm8001_ha, 0, SPC_REG_SOFT_RESET, SPCv_NORMAL_RESET_VALUE);
+ msleep(500);
+
+ regval = pm8001_cr32(pm8001_ha, 0, SPC_REG_SOFT_RESET);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("reset register after write 0x%x\n", regval));
++ pm8001_dbg(pm8001_ha, INIT, "reset register after write 0x%x\n",
++ regval);
+
+ if ((regval & SPCv_SOFT_RESET_READ_MASK) ==
+ SPCv_SOFT_RESET_NORMAL_RESET_OCCURED) {
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" soft reset successful [regval: 0x%x]\n",
+- regval));
++ pm8001_dbg(pm8001_ha, MSG,
++ " soft reset successful [regval: 0x%x]\n",
++ regval);
+ } else {
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" soft reset failed [regval: 0x%x]\n",
+- regval));
++ pm8001_dbg(pm8001_ha, MSG,
++ " soft reset failed [regval: 0x%x]\n",
++ regval);
+
+ /* check bootloader is successfully executed or in HDA mode */
+ bootloader_state =
+@@ -1619,28 +1583,27 @@ pm80xx_chip_soft_rst(struct pm8001_hba_info *pm8001_ha)
+ SCRATCH_PAD1_BOOTSTATE_MASK;
+
+ if (bootloader_state == SCRATCH_PAD1_BOOTSTATE_HDA_SEEPROM) {
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk(
+- "Bootloader state - HDA mode SEEPROM\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "Bootloader state - HDA mode SEEPROM\n");
+ } else if (bootloader_state ==
+ SCRATCH_PAD1_BOOTSTATE_HDA_BOOTSTRAP) {
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk(
+- "Bootloader state - HDA mode Bootstrap Pin\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "Bootloader state - HDA mode Bootstrap Pin\n");
+ } else if (bootloader_state ==
+ SCRATCH_PAD1_BOOTSTATE_HDA_SOFTRESET) {
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk(
+- "Bootloader state - HDA mode soft reset\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "Bootloader state - HDA mode soft reset\n");
+ } else if (bootloader_state ==
+ SCRATCH_PAD1_BOOTSTATE_CRIT_ERROR) {
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk(
+- "Bootloader state-HDA mode critical error\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "Bootloader state-HDA mode critical error\n");
+ }
+ return -EBUSY;
+ }
+
+ /* check the firmware status after reset */
+ if (-1 == check_fw_ready(pm8001_ha)) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("Firmware is not ready!\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "Firmware is not ready!\n");
+ /* check iButton feature support for motherboard controller */
+ if (pm8001_ha->pdev->subsystem_vendor !=
+ PCI_VENDOR_ID_ADAPTEC2 &&
+@@ -1652,21 +1615,18 @@ pm80xx_chip_soft_rst(struct pm8001_hba_info *pm8001_ha)
+ ibutton1 = pm8001_cr32(pm8001_ha, 0,
+ MSGU_HOST_SCRATCH_PAD_7);
+ if (!ibutton0 && !ibutton1) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("iButton Feature is"
+- " not Available!!!\n"));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "iButton Feature is not Available!!!\n");
+ return -EBUSY;
+ }
+ if (ibutton0 == 0xdeadbeef && ibutton1 == 0xdeadbeef) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("CRC Check for iButton"
+- " Feature Failed!!!\n"));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "CRC Check for iButton Feature Failed!!!\n");
+ return -EBUSY;
+ }
+ }
+ }
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("SPCv soft reset Complete\n"));
++ pm8001_dbg(pm8001_ha, INIT, "SPCv soft reset Complete\n");
+ return 0;
+ }
+
+@@ -1674,13 +1634,11 @@ static void pm80xx_hw_chip_rst(struct pm8001_hba_info *pm8001_ha)
+ {
+ u32 i;
+
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("chip reset start\n"));
++ pm8001_dbg(pm8001_ha, INIT, "chip reset start\n");
+
+ /* do SPCv chip reset. */
+ pm8001_cw32(pm8001_ha, 0, SPC_REG_SOFT_RESET, 0x11);
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("SPC soft reset Complete\n"));
++ pm8001_dbg(pm8001_ha, INIT, "SPC soft reset Complete\n");
+
+ /* Check this ..whether delay is required or no */
+ /* delay 10 usec */
+@@ -1692,8 +1650,7 @@ static void pm80xx_hw_chip_rst(struct pm8001_hba_info *pm8001_ha)
+ mdelay(1);
+ } while ((--i) != 0);
+
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("chip reset finished\n"));
++ pm8001_dbg(pm8001_ha, INIT, "chip reset finished\n");
+ }
+
+ /**
+@@ -1769,15 +1726,14 @@ static void pm80xx_send_abort_all(struct pm8001_hba_info *pm8001_ha,
+ int ret;
+
+ if (!pm8001_ha_dev) {
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("dev is null\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "dev is null\n");
+ return;
+ }
+
+ task = sas_alloc_slow_task(GFP_ATOMIC);
+
+ if (!task) {
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("cannot "
+- "allocate task\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "cannot allocate task\n");
+ return;
+ }
+
+@@ -1803,8 +1759,7 @@ static void pm80xx_send_abort_all(struct pm8001_hba_info *pm8001_ha,
+
+ ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &task_abort,
+ sizeof(task_abort), 0);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("Executing abort task end\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "Executing abort task end\n");
+ if (ret) {
+ sas_free_task(task);
+ pm8001_tag_free(pm8001_ha, ccb_tag);
+@@ -1827,8 +1782,7 @@ static void pm80xx_send_read_log(struct pm8001_hba_info *pm8001_ha,
+ task = sas_alloc_slow_task(GFP_ATOMIC);
+
+ if (!task) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("cannot allocate task !!!\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "cannot allocate task !!!\n");
+ return;
+ }
+ task->task_done = pm8001_task_done;
+@@ -1836,8 +1790,7 @@ static void pm80xx_send_read_log(struct pm8001_hba_info *pm8001_ha,
+ res = pm8001_tag_alloc(pm8001_ha, &ccb_tag);
+ if (res) {
+ sas_free_task(task);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("cannot allocate tag !!!\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "cannot allocate tag !!!\n");
+ return;
+ }
+
+@@ -1848,8 +1801,8 @@ static void pm80xx_send_read_log(struct pm8001_hba_info *pm8001_ha,
+ if (!dev) {
+ sas_free_task(task);
+ pm8001_tag_free(pm8001_ha, ccb_tag);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("Domain device cannot be allocated\n"));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "Domain device cannot be allocated\n");
+ return;
+ }
+
+@@ -1882,7 +1835,7 @@ static void pm80xx_send_read_log(struct pm8001_hba_info *pm8001_ha,
+
+ res = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &sata_cmd,
+ sizeof(sata_cmd), 0);
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("Executing read log end\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "Executing read log end\n");
+ if (res) {
+ sas_free_task(task);
+ pm8001_tag_free(pm8001_ha, ccb_tag);
+@@ -1928,27 +1881,24 @@ mpi_ssp_completion(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ t = ccb->task;
+
+ if (status && status != IO_UNDERFLOW)
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("sas IO status 0x%x\n", status));
++ pm8001_dbg(pm8001_ha, FAIL, "sas IO status 0x%x\n", status);
+ if (unlikely(!t || !t->lldd_task || !t->dev))
+ return;
+ ts = &t->task_status;
+
+- PM8001_DEV_DBG(pm8001_ha, pm8001_printk(
+- "tag::0x%x, status::0x%x task::0x%p\n", tag, status, t));
++ pm8001_dbg(pm8001_ha, DEV,
++ "tag::0x%x, status::0x%x task::0x%p\n", tag, status, t);
+
+ /* Print sas address of IO failed device */
+ if ((status != IO_SUCCESS) && (status != IO_OVERFLOW) &&
+ (status != IO_UNDERFLOW))
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("SAS Address of IO Failure Drive"
+- ":%016llx", SAS_ADDR(t->dev->sas_addr)));
++ pm8001_dbg(pm8001_ha, FAIL, "SAS Address of IO Failure Drive:%016llx\n",
++ SAS_ADDR(t->dev->sas_addr));
+
+ switch (status) {
+ case IO_SUCCESS:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_SUCCESS ,param = 0x%x\n",
+- param));
++ pm8001_dbg(pm8001_ha, IO, "IO_SUCCESS ,param = 0x%x\n",
++ param);
+ if (param == 0) {
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAM_STAT_GOOD;
+@@ -1960,73 +1910,83 @@ mpi_ssp_completion(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ sas_ssp_task_response(pm8001_ha->dev, t, iu);
+ }
+ if (pm8001_dev)
+- pm8001_dev->running_req--;
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_ABORTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_ABORTED IOMB Tag\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_ABORTED IOMB Tag\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_ABORTED_TASK;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_UNDERFLOW:
+ /* SSP Completion with error */
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_UNDERFLOW ,param = 0x%x\n",
+- param));
++ pm8001_dbg(pm8001_ha, IO, "IO_UNDERFLOW ,param = 0x%x\n",
++ param);
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_UNDERRUN;
+ ts->residual = param;
+ if (pm8001_dev)
+- pm8001_dev->running_req--;
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_NO_DEVICE:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_NO_DEVICE\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_NO_DEVICE\n");
+ ts->resp = SAS_TASK_UNDELIVERED;
+ ts->stat = SAS_PHY_DOWN;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_BREAK:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_BREAK\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_BREAK\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ /* Force the midlayer to retry */
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_PHY_NOT_READY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_PHY_NOT_READY\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_PHY_NOT_READY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_INVALID_SSP_RSP_FRAME:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_INVALID_SSP_RSP_FRAME\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_XFER_ERROR_INVALID_SSP_RSP_FRAME\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_EPROTO;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_OPEN_CNX_ERROR_ZONE_VIOLATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_ZONE_VIOLATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_ZONE_VIOLATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_UNKNOWN;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_OPEN_CNX_ERROR_BREAK:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_BREAK\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_BREAK\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS:
+ case IO_XFER_OPEN_RETRY_BACKOFF_THRESHOLD_REACHED:
+@@ -2034,8 +1994,7 @@ mpi_ssp_completion(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_NO_DEST:
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_COLLIDE:
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_PATHWAY_BLOCKED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_UNKNOWN;
+@@ -2045,67 +2004,78 @@ mpi_ssp_completion(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS);
+ break;
+ case IO_OPEN_CNX_ERROR_BAD_DESTINATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_BAD_DESTINATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_BAD_DESTINATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_BAD_DEST;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED:
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk(
+- "IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_CONN_RATE;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_OPEN_CNX_ERROR_WRONG_DESTINATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_WRONG_DESTINATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_WRONG_DESTINATION\n");
+ ts->resp = SAS_TASK_UNDELIVERED;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_WRONG_DEST;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_NAK_RECEIVED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_NAK_RECEIVED\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_NAK_RECEIVED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_ACK_NAK_TIMEOUT:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_ACK_NAK_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_ACK_NAK_TIMEOUT\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_NAK_R_ERR;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_DMA:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_DMA\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_DMA\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_OPEN_RETRY_TIMEOUT:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_OPEN_RETRY_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_OPEN_RETRY_TIMEOUT\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_OFFSET_MISMATCH:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_OFFSET_MISMATCH\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_OFFSET_MISMATCH\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_PORT_IN_RESET:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_PORT_IN_RESET\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_PORT_IN_RESET\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_DS_NON_OPERATIONAL:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_DS_NON_OPERATIONAL\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_DS_NON_OPERATIONAL\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ if (!t->uldd_task)
+@@ -2114,51 +2084,55 @@ mpi_ssp_completion(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ IO_DS_NON_OPERATIONAL);
+ break;
+ case IO_DS_IN_RECOVERY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_DS_IN_RECOVERY\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_DS_IN_RECOVERY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_TM_TAG_NOT_FOUND:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_TM_TAG_NOT_FOUND\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_TM_TAG_NOT_FOUND\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_SSP_EXT_IU_ZERO_LEN_ERROR:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_SSP_EXT_IU_ZERO_LEN_ERROR\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_SSP_EXT_IU_ZERO_LEN_ERROR\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ default:
+- PM8001_DEVIO_DBG(pm8001_ha,
+- pm8001_printk("Unknown status 0x%x\n", status));
++ pm8001_dbg(pm8001_ha, DEVIO, "Unknown status 0x%x\n", status);
+ /* not allowed case. Therefore, return failed status */
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ }
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("scsi_status = 0x%x\n ",
+- psspPayload->ssp_resp_iu.status));
++ pm8001_dbg(pm8001_ha, IO, "scsi_status = 0x%x\n ",
++ psspPayload->ssp_resp_iu.status);
+ spin_lock_irqsave(&t->task_state_lock, flags);
+ t->task_state_flags &= ~SAS_TASK_STATE_PENDING;
+ t->task_state_flags &= ~SAS_TASK_AT_INITIATOR;
+ t->task_state_flags |= SAS_TASK_STATE_DONE;
+ if (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) {
+ spin_unlock_irqrestore(&t->task_state_lock, flags);
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk(
+- "task 0x%p done with io_status 0x%x resp 0x%x "
+- "stat 0x%x but aborted by upper layer!\n",
+- t, status, ts->resp, ts->stat));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "task 0x%p done with io_status 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n",
++ t, status, ts->resp, ts->stat);
+ if (t->slow_task)
+ complete(&t->slow_task->completion);
+ pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
+@@ -2188,52 +2162,47 @@ static void mpi_ssp_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ t = ccb->task;
+ pm8001_dev = ccb->device;
+ if (event)
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("sas IO status 0x%x\n", event));
++ pm8001_dbg(pm8001_ha, FAIL, "sas IO status 0x%x\n", event);
+ if (unlikely(!t || !t->lldd_task || !t->dev))
+ return;
+ ts = &t->task_status;
+- PM8001_IOERR_DBG(pm8001_ha,
+- pm8001_printk("port_id:0x%x, tag:0x%x, event:0x%x\n",
+- port_id, tag, event));
++ pm8001_dbg(pm8001_ha, IOERR, "port_id:0x%x, tag:0x%x, event:0x%x\n",
++ port_id, tag, event);
+ switch (event) {
+ case IO_OVERFLOW:
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_UNDERFLOW\n");)
++ pm8001_dbg(pm8001_ha, IO, "IO_UNDERFLOW\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_OVERRUN;
+ ts->residual = 0;
+ if (pm8001_dev)
+- pm8001_dev->running_req--;
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_BREAK:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_BREAK\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_BREAK\n");
+ pm8001_handle_event(pm8001_ha, t, IO_XFER_ERROR_BREAK);
+ return;
+ case IO_XFER_ERROR_PHY_NOT_READY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_PHY_NOT_READY\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_PHY_NOT_READY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+ break;
+ case IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED:
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk(
+- "IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_EPROTO;
+ break;
+ case IO_OPEN_CNX_ERROR_ZONE_VIOLATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_ZONE_VIOLATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_ZONE_VIOLATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_UNKNOWN;
+ break;
+ case IO_OPEN_CNX_ERROR_BREAK:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_BREAK\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_BREAK\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+@@ -2244,8 +2213,7 @@ static void mpi_ssp_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_NO_DEST:
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_COLLIDE:
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_PATHWAY_BLOCKED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_UNKNOWN;
+@@ -2255,94 +2223,86 @@ static void mpi_ssp_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS);
+ break;
+ case IO_OPEN_CNX_ERROR_BAD_DESTINATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_BAD_DESTINATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_BAD_DESTINATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_BAD_DEST;
+ break;
+ case IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED:
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk(
+- "IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_CONN_RATE;
+ break;
+ case IO_OPEN_CNX_ERROR_WRONG_DESTINATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_WRONG_DESTINATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_WRONG_DESTINATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_WRONG_DEST;
+ break;
+ case IO_XFER_ERROR_NAK_RECEIVED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_NAK_RECEIVED\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_NAK_RECEIVED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+ break;
+ case IO_XFER_ERROR_ACK_NAK_TIMEOUT:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_ACK_NAK_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_ACK_NAK_TIMEOUT\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_NAK_R_ERR;
+ break;
+ case IO_XFER_OPEN_RETRY_TIMEOUT:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_OPEN_RETRY_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_OPEN_RETRY_TIMEOUT\n");
+ pm8001_handle_event(pm8001_ha, t, IO_XFER_OPEN_RETRY_TIMEOUT);
+ return;
+ case IO_XFER_ERROR_UNEXPECTED_PHASE:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_UNEXPECTED_PHASE\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_UNEXPECTED_PHASE\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_OVERRUN;
+ break;
+ case IO_XFER_ERROR_XFER_RDY_OVERRUN:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_XFER_RDY_OVERRUN\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_XFER_RDY_OVERRUN\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_OVERRUN;
+ break;
+ case IO_XFER_ERROR_XFER_RDY_NOT_EXPECTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_XFER_RDY_NOT_EXPECTED\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_XFER_ERROR_XFER_RDY_NOT_EXPECTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_OVERRUN;
+ break;
+ case IO_XFER_ERROR_CMD_ISSUE_ACK_NAK_TIMEOUT:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_CMD_ISSUE_ACK_NAK_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_XFER_ERROR_CMD_ISSUE_ACK_NAK_TIMEOUT\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_OVERRUN;
+ break;
+ case IO_XFER_ERROR_OFFSET_MISMATCH:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_OFFSET_MISMATCH\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_OFFSET_MISMATCH\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_OVERRUN;
+ break;
+ case IO_XFER_ERROR_XFER_ZERO_DATA_LEN:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_XFER_ZERO_DATA_LEN\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_XFER_ERROR_XFER_ZERO_DATA_LEN\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_OVERRUN;
+ break;
+ case IO_XFER_ERROR_INTERNAL_CRC_ERROR:
+- PM8001_IOERR_DBG(pm8001_ha,
+- pm8001_printk("IO_XFR_ERROR_INTERNAL_CRC_ERROR\n"));
++ pm8001_dbg(pm8001_ha, IOERR,
++ "IO_XFR_ERROR_INTERNAL_CRC_ERROR\n");
+ /* TBC: used default set values */
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_OVERRUN;
+ break;
+ case IO_XFER_CMD_FRAME_ISSUED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_CMD_FRAME_ISSUED\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_CMD_FRAME_ISSUED\n");
+ return;
+ default:
+- PM8001_DEVIO_DBG(pm8001_ha,
+- pm8001_printk("Unknown status 0x%x\n", event));
++ pm8001_dbg(pm8001_ha, DEVIO, "Unknown status 0x%x\n", event);
+ /* not allowed case. Therefore, return failed status */
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_OVERRUN;
+@@ -2354,10 +2314,9 @@ static void mpi_ssp_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ t->task_state_flags |= SAS_TASK_STATE_DONE;
+ if (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) {
+ spin_unlock_irqrestore(&t->task_state_lock, flags);
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk(
+- "task 0x%p done with event 0x%x resp 0x%x "
+- "stat 0x%x but aborted by upper layer!\n",
+- t, event, ts->resp, ts->stat));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "task 0x%p done with event 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n",
++ t, event, ts->resp, ts->stat);
+ pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
+ } else {
+ spin_unlock_irqrestore(&t->task_state_lock, flags);
+@@ -2392,8 +2351,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ tag = le32_to_cpu(psataPayload->tag);
+
+ if (!tag) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("tag null\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "tag null\n");
+ return;
+ }
+ ccb = &pm8001_ha->ccb_info[tag];
+@@ -2402,8 +2360,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ t = ccb->task;
+ pm8001_dev = ccb->device;
+ } else {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("ccb null\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "ccb null\n");
+ return;
+ }
+
+@@ -2411,29 +2368,26 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ if (t->dev && (t->dev->lldd_dev))
+ pm8001_dev = t->dev->lldd_dev;
+ } else {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("task null\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "task null\n");
+ return;
+ }
+
+ if ((pm8001_dev && !(pm8001_dev->id & NCQ_READ_LOG_FLAG))
+ && unlikely(!t || !t->lldd_task || !t->dev)) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("task or dev null\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "task or dev null\n");
+ return;
+ }
+
+ ts = &t->task_status;
+ if (!ts) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("ts null\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "ts null\n");
+ return;
+ }
+
+ if (unlikely(status))
+- PM8001_IOERR_DBG(pm8001_ha, pm8001_printk(
+- "status:0x%x, tag:0x%x, task::0x%p\n",
+- status, tag, t));
++ pm8001_dbg(pm8001_ha, IOERR,
++ "status:0x%x, tag:0x%x, task::0x%p\n",
++ status, tag, t);
+
+ /* Print sas address of IO failed device */
+ if ((status != IO_SUCCESS) && (status != IO_OVERFLOW) &&
+@@ -2465,20 +2419,20 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ & 0xff000000)) +
+ pm8001_dev->attached_phy +
+ 0x10);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("SAS Address of IO Failure Drive:"
+- "%08x%08x", temp_sata_addr_hi,
+- temp_sata_addr_low));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "SAS Address of IO Failure Drive:%08x%08x\n",
++ temp_sata_addr_hi,
++ temp_sata_addr_low);
+
+ } else {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("SAS Address of IO Failure Drive:"
+- "%016llx", SAS_ADDR(t->dev->sas_addr)));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "SAS Address of IO Failure Drive:%016llx\n",
++ SAS_ADDR(t->dev->sas_addr));
+ }
+ }
+ switch (status) {
+ case IO_SUCCESS:
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_SUCCESS\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_SUCCESS\n");
+ if (param == 0) {
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAM_STAT_GOOD;
+@@ -2500,94 +2454,100 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_PROTO_RESPONSE;
+ ts->residual = param;
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("SAS_PROTO_RESPONSE len = %d\n",
+- param));
++ pm8001_dbg(pm8001_ha, IO,
++ "SAS_PROTO_RESPONSE len = %d\n",
++ param);
+ sata_resp = &psataPayload->sata_resp[0];
+ resp = (struct ata_task_resp *)ts->buf;
+ if (t->ata_task.dma_xfer == 0 &&
+ t->data_dir == DMA_FROM_DEVICE) {
+ len = sizeof(struct pio_setup_fis);
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("PIO read len = %d\n", len));
++ pm8001_dbg(pm8001_ha, IO,
++ "PIO read len = %d\n", len);
+ } else if (t->ata_task.use_ncq) {
+ len = sizeof(struct set_dev_bits_fis);
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("FPDMA len = %d\n", len));
++ pm8001_dbg(pm8001_ha, IO, "FPDMA len = %d\n",
++ len);
+ } else {
+ len = sizeof(struct dev_to_host_fis);
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("other len = %d\n", len));
++ pm8001_dbg(pm8001_ha, IO, "other len = %d\n",
++ len);
+ }
+ if (SAS_STATUS_BUF_SIZE >= sizeof(*resp)) {
+ resp->frame_len = len;
+ memcpy(&resp->ending_fis[0], sata_resp, len);
+ ts->buf_valid_size = sizeof(*resp);
+ } else
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("response too large\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "response too large\n");
+ }
+ if (pm8001_dev)
+- pm8001_dev->running_req--;
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_ABORTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_ABORTED IOMB Tag\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_ABORTED IOMB Tag\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_ABORTED_TASK;
+ if (pm8001_dev)
+- pm8001_dev->running_req--;
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ /* following cases are to do cases */
+ case IO_UNDERFLOW:
+ /* SATA Completion with error */
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_UNDERFLOW param = %d\n", param));
++ pm8001_dbg(pm8001_ha, IO, "IO_UNDERFLOW param = %d\n", param);
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_UNDERRUN;
+ ts->residual = param;
+ if (pm8001_dev)
+- pm8001_dev->running_req--;
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_NO_DEVICE:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_NO_DEVICE\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_NO_DEVICE\n");
+ ts->resp = SAS_TASK_UNDELIVERED;
+ ts->stat = SAS_PHY_DOWN;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_BREAK:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_BREAK\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_BREAK\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_INTERRUPTED;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_PHY_NOT_READY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_PHY_NOT_READY\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_PHY_NOT_READY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED:
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk(
+- "IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_EPROTO;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_OPEN_CNX_ERROR_ZONE_VIOLATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_ZONE_VIOLATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_ZONE_VIOLATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_UNKNOWN;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_OPEN_CNX_ERROR_BREAK:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_BREAK\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_BREAK\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_CONT0;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS:
+ case IO_XFER_OPEN_RETRY_BACKOFF_THRESHOLD_REACHED:
+@@ -2595,8 +2555,7 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_NO_DEST:
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_COLLIDE:
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_PATHWAY_BLOCKED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DEV_NO_RESPONSE;
+ if (!t->uldd_task) {
+@@ -2610,8 +2569,8 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ }
+ break;
+ case IO_OPEN_CNX_ERROR_BAD_DESTINATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_BAD_DESTINATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_BAD_DESTINATION\n");
+ ts->resp = SAS_TASK_UNDELIVERED;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_BAD_DEST;
+@@ -2626,15 +2585,17 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ }
+ break;
+ case IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED:
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk(
+- "IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_CONN_RATE;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_OPEN_CNX_ERROR_STP_RESOURCES_BUSY:
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk(
+- "IO_OPEN_CNX_ERROR_STP_RESOURCES_BUSY\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_STP_RESOURCES_BUSY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DEV_NO_RESPONSE;
+ if (!t->uldd_task) {
+@@ -2648,57 +2609,65 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ }
+ break;
+ case IO_OPEN_CNX_ERROR_WRONG_DESTINATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_WRONG_DESTINATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_WRONG_DESTINATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_WRONG_DEST;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_NAK_RECEIVED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_NAK_RECEIVED\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_NAK_RECEIVED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_NAK_R_ERR;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_ACK_NAK_TIMEOUT:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_ACK_NAK_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_ACK_NAK_TIMEOUT\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_NAK_R_ERR;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_DMA:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_DMA\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_DMA\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_ABORTED_TASK;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_SATA_LINK_TIMEOUT:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_SATA_LINK_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_SATA_LINK_TIMEOUT\n");
+ ts->resp = SAS_TASK_UNDELIVERED;
+ ts->stat = SAS_DEV_NO_RESPONSE;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_REJECTED_NCQ_MODE:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_REJECTED_NCQ_MODE\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_REJECTED_NCQ_MODE\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_UNDERRUN;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_OPEN_RETRY_TIMEOUT:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_OPEN_RETRY_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_OPEN_RETRY_TIMEOUT\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_TO;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_PORT_IN_RESET:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_PORT_IN_RESET\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_PORT_IN_RESET\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DEV_NO_RESPONSE;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_DS_NON_OPERATIONAL:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_DS_NON_OPERATIONAL\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_DS_NON_OPERATIONAL\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DEV_NO_RESPONSE;
+ if (!t->uldd_task) {
+@@ -2711,14 +2680,14 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ }
+ break;
+ case IO_DS_IN_RECOVERY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_DS_IN_RECOVERY\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_DS_IN_RECOVERY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DEV_NO_RESPONSE;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_DS_IN_ERROR:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_DS_IN_ERROR\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_DS_IN_ERROR\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DEV_NO_RESPONSE;
+ if (!t->uldd_task) {
+@@ -2731,18 +2700,21 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ }
+ break;
+ case IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ default:
+- PM8001_DEVIO_DBG(pm8001_ha,
+- pm8001_printk("Unknown status 0x%x\n", status));
++ pm8001_dbg(pm8001_ha, DEVIO, "Unknown status 0x%x\n", status);
+ /* not allowed case. Therefore, return failed status */
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DEV_NO_RESPONSE;
++ if (pm8001_dev)
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ }
+ spin_lock_irqsave(&t->task_state_lock, flags);
+@@ -2751,10 +2723,9 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ t->task_state_flags |= SAS_TASK_STATE_DONE;
+ if (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) {
+ spin_unlock_irqrestore(&t->task_state_lock, flags);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("task 0x%p done with io_status 0x%x"
+- " resp 0x%x stat 0x%x but aborted by upper layer!\n",
+- t, status, ts->resp, ts->stat));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "task 0x%p done with io_status 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n",
++ t, status, ts->resp, ts->stat);
+ if (t->slow_task)
+ complete(&t->slow_task->completion);
+ pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
+@@ -2785,13 +2756,11 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ t = ccb->task;
+ pm8001_dev = ccb->device;
+ } else {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("No CCB !!!. returning\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "No CCB !!!. returning\n");
+ return;
+ }
+ if (event)
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("SATA EVENT 0x%x\n", event));
++ pm8001_dbg(pm8001_ha, FAIL, "SATA EVENT 0x%x\n", event);
+
+ /* Check if this is NCQ error */
+ if (event == IO_XFER_ERROR_ABORTED_NCQ_MODE) {
+@@ -2804,54 +2773,49 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ }
+
+ if (unlikely(!t || !t->lldd_task || !t->dev)) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("task or dev null\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "task or dev null\n");
+ return;
+ }
+
+ ts = &t->task_status;
+- PM8001_IOERR_DBG(pm8001_ha,
+- pm8001_printk("port_id:0x%x, tag:0x%x, event:0x%x\n",
+- port_id, tag, event));
++ pm8001_dbg(pm8001_ha, IOERR, "port_id:0x%x, tag:0x%x, event:0x%x\n",
++ port_id, tag, event);
+ switch (event) {
+ case IO_OVERFLOW:
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_UNDERFLOW\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_UNDERFLOW\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_OVERRUN;
+ ts->residual = 0;
+ if (pm8001_dev)
+- pm8001_dev->running_req--;
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_XFER_ERROR_BREAK:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_BREAK\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_BREAK\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_INTERRUPTED;
+ break;
+ case IO_XFER_ERROR_PHY_NOT_READY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_PHY_NOT_READY\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_PHY_NOT_READY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+ break;
+ case IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED:
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk(
+- "IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_EPROTO;
+ break;
+ case IO_OPEN_CNX_ERROR_ZONE_VIOLATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_ZONE_VIOLATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_ZONE_VIOLATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_UNKNOWN;
+ break;
+ case IO_OPEN_CNX_ERROR_BREAK:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_BREAK\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_BREAK\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_CONT0;
+@@ -2862,8 +2826,8 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_NO_DEST:
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_COLLIDE:
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_PATHWAY_BLOCKED:
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS\n"));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS\n");
+ ts->resp = SAS_TASK_UNDELIVERED;
+ ts->stat = SAS_DEV_NO_RESPONSE;
+ if (!t->uldd_task) {
+@@ -2877,107 +2841,96 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ }
+ break;
+ case IO_OPEN_CNX_ERROR_BAD_DESTINATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_BAD_DESTINATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_BAD_DESTINATION\n");
+ ts->resp = SAS_TASK_UNDELIVERED;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_BAD_DEST;
+ break;
+ case IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED:
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk(
+- "IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_CONN_RATE;
+ break;
+ case IO_OPEN_CNX_ERROR_WRONG_DESTINATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_WRONG_DESTINATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_WRONG_DESTINATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_WRONG_DEST;
+ break;
+ case IO_XFER_ERROR_NAK_RECEIVED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_NAK_RECEIVED\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_NAK_RECEIVED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_NAK_R_ERR;
+ break;
+ case IO_XFER_ERROR_PEER_ABORTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_PEER_ABORTED\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_PEER_ABORTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_NAK_R_ERR;
+ break;
+ case IO_XFER_ERROR_REJECTED_NCQ_MODE:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_REJECTED_NCQ_MODE\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_REJECTED_NCQ_MODE\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_UNDERRUN;
+ break;
+ case IO_XFER_OPEN_RETRY_TIMEOUT:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_OPEN_RETRY_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_OPEN_RETRY_TIMEOUT\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_TO;
+ break;
+ case IO_XFER_ERROR_UNEXPECTED_PHASE:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_UNEXPECTED_PHASE\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_UNEXPECTED_PHASE\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_TO;
+ break;
+ case IO_XFER_ERROR_XFER_RDY_OVERRUN:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_XFER_RDY_OVERRUN\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_XFER_RDY_OVERRUN\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_TO;
+ break;
+ case IO_XFER_ERROR_XFER_RDY_NOT_EXPECTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_XFER_RDY_NOT_EXPECTED\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_XFER_ERROR_XFER_RDY_NOT_EXPECTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_TO;
+ break;
+ case IO_XFER_ERROR_OFFSET_MISMATCH:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_OFFSET_MISMATCH\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_OFFSET_MISMATCH\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_TO;
+ break;
+ case IO_XFER_ERROR_XFER_ZERO_DATA_LEN:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_XFER_ZERO_DATA_LEN\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_XFER_ERROR_XFER_ZERO_DATA_LEN\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_TO;
+ break;
+ case IO_XFER_CMD_FRAME_ISSUED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_CMD_FRAME_ISSUED\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_CMD_FRAME_ISSUED\n");
+ break;
+ case IO_XFER_PIO_SETUP_ERROR:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_PIO_SETUP_ERROR\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_PIO_SETUP_ERROR\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_TO;
+ break;
+ case IO_XFER_ERROR_INTERNAL_CRC_ERROR:
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("IO_XFR_ERROR_INTERNAL_CRC_ERROR\n"));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "IO_XFR_ERROR_INTERNAL_CRC_ERROR\n");
+ /* TBC: used default set values */
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_TO;
+ break;
+ case IO_XFER_DMA_ACTIVATE_TIMEOUT:
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("IO_XFR_DMA_ACTIVATE_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "IO_XFR_DMA_ACTIVATE_TIMEOUT\n");
+ /* TBC: used default set values */
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_TO;
+ break;
+ default:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("Unknown status 0x%x\n", event));
++ pm8001_dbg(pm8001_ha, IO, "Unknown status 0x%x\n", event);
+ /* not allowed case. Therefore, return failed status */
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_TO;
+@@ -2989,10 +2942,9 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+ t->task_state_flags |= SAS_TASK_STATE_DONE;
+ if (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) {
+ spin_unlock_irqrestore(&t->task_state_lock, flags);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("task 0x%p done with io_status 0x%x"
+- " resp 0x%x stat 0x%x but aborted by upper layer!\n",
+- t, event, ts->resp, ts->stat));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "task 0x%p done with io_status 0x%x resp 0x%x stat 0x%x but aborted by upper layer!\n",
++ t, event, ts->resp, ts->stat);
+ pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
+ } else {
+ spin_unlock_irqrestore(&t->task_state_lock, flags);
+@@ -3025,94 +2977,87 @@ mpi_smp_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ ts = &t->task_status;
+ pm8001_dev = ccb->device;
+ if (status)
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("smp IO status 0x%x\n", status));
++ pm8001_dbg(pm8001_ha, FAIL, "smp IO status 0x%x\n", status);
+ if (unlikely(!t || !t->lldd_task || !t->dev))
+ return;
+
+- PM8001_DEV_DBG(pm8001_ha,
+- pm8001_printk("tag::0x%x status::0x%x\n", tag, status));
++ pm8001_dbg(pm8001_ha, DEV, "tag::0x%x status::0x%x\n", tag, status);
+
+ switch (status) {
+
+ case IO_SUCCESS:
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_SUCCESS\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_SUCCESS\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAM_STAT_GOOD;
+ if (pm8001_dev)
+- pm8001_dev->running_req--;
++ atomic_dec(&pm8001_dev->running_req);
+ if (pm8001_ha->smp_exp_mode == SMP_DIRECT) {
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("DIRECT RESPONSE Length:%d\n",
+- param));
++ pm8001_dbg(pm8001_ha, IO,
++ "DIRECT RESPONSE Length:%d\n",
++ param);
+ pdma_respaddr = (char *)(phys_to_virt(cpu_to_le64
+ ((u64)sg_dma_address
+ (&t->smp_task.smp_resp))));
+ for (i = 0; i < param; i++) {
+ *(pdma_respaddr+i) = psmpPayload->_r_a[i];
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk(
+- "SMP Byte%d DMA data 0x%x psmp 0x%x\n",
+- i, *(pdma_respaddr+i),
+- psmpPayload->_r_a[i]));
++ pm8001_dbg(pm8001_ha, IO,
++ "SMP Byte%d DMA data 0x%x psmp 0x%x\n",
++ i, *(pdma_respaddr + i),
++ psmpPayload->_r_a[i]);
+ }
+ }
+ break;
+ case IO_ABORTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_ABORTED IOMB\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_ABORTED IOMB\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_ABORTED_TASK;
+ if (pm8001_dev)
+- pm8001_dev->running_req--;
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_OVERFLOW:
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_UNDERFLOW\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_UNDERFLOW\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DATA_OVERRUN;
+ ts->residual = 0;
+ if (pm8001_dev)
+- pm8001_dev->running_req--;
++ atomic_dec(&pm8001_dev->running_req);
+ break;
+ case IO_NO_DEVICE:
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_NO_DEVICE\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_NO_DEVICE\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_PHY_DOWN;
+ break;
+ case IO_ERROR_HW_TIMEOUT:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_ERROR_HW_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_ERROR_HW_TIMEOUT\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAM_STAT_BUSY;
+ break;
+ case IO_XFER_ERROR_BREAK:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_BREAK\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_BREAK\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAM_STAT_BUSY;
+ break;
+ case IO_XFER_ERROR_PHY_NOT_READY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_PHY_NOT_READY\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_PHY_NOT_READY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAM_STAT_BUSY;
+ break;
+ case IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_UNKNOWN;
+ break;
+ case IO_OPEN_CNX_ERROR_ZONE_VIOLATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_ZONE_VIOLATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_ZONE_VIOLATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_UNKNOWN;
+ break;
+ case IO_OPEN_CNX_ERROR_BREAK:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_BREAK\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_BREAK\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_CONT0;
+@@ -3123,8 +3068,7 @@ mpi_smp_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_NO_DEST:
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_COLLIDE:
+ case IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_PATHWAY_BLOCKED:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_UNKNOWN;
+@@ -3133,75 +3077,68 @@ mpi_smp_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS);
+ break;
+ case IO_OPEN_CNX_ERROR_BAD_DESTINATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_BAD_DESTINATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_BAD_DESTINATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_BAD_DEST;
+ break;
+ case IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED:
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk(\
+- "IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_CONN_RATE;
+ break;
+ case IO_OPEN_CNX_ERROR_WRONG_DESTINATION:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_WRONG_DESTINATION\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_WRONG_DESTINATION\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_WRONG_DEST;
+ break;
+ case IO_XFER_ERROR_RX_FRAME:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_ERROR_RX_FRAME\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_ERROR_RX_FRAME\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DEV_NO_RESPONSE;
+ break;
+ case IO_XFER_OPEN_RETRY_TIMEOUT:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_XFER_OPEN_RETRY_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_XFER_OPEN_RETRY_TIMEOUT\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+ break;
+ case IO_ERROR_INTERNAL_SMP_RESOURCE:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_ERROR_INTERNAL_SMP_RESOURCE\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_ERROR_INTERNAL_SMP_RESOURCE\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_QUEUE_FULL;
+ break;
+ case IO_PORT_IN_RESET:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_PORT_IN_RESET\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_PORT_IN_RESET\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+ break;
+ case IO_DS_NON_OPERATIONAL:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_DS_NON_OPERATIONAL\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_DS_NON_OPERATIONAL\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DEV_NO_RESPONSE;
+ break;
+ case IO_DS_IN_RECOVERY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_DS_IN_RECOVERY\n"));
++ pm8001_dbg(pm8001_ha, IO, "IO_DS_IN_RECOVERY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+ break;
+ case IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY:
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY\n"));
++ pm8001_dbg(pm8001_ha, IO,
++ "IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY\n");
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_OPEN_REJECT;
+ ts->open_rej_reason = SAS_OREJ_RSVD_RETRY;
+ break;
+ default:
+- PM8001_DEVIO_DBG(pm8001_ha,
+- pm8001_printk("Unknown status 0x%x\n", status));
++ pm8001_dbg(pm8001_ha, DEVIO, "Unknown status 0x%x\n", status);
+ ts->resp = SAS_TASK_COMPLETE;
+ ts->stat = SAS_DEV_NO_RESPONSE;
+ /* not allowed case. Therefore, return failed status */
+@@ -3213,10 +3150,9 @@ mpi_smp_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ t->task_state_flags |= SAS_TASK_STATE_DONE;
+ if (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) {
+ spin_unlock_irqrestore(&t->task_state_lock, flags);
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk(
+- "task 0x%p done with io_status 0x%x resp 0x%x"
+- "stat 0x%x but aborted by upper layer!\n",
+- t, status, ts->resp, ts->stat));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "task 0x%p done with io_status 0x%x resp 0x%xstat 0x%x but aborted by upper layer!\n",
++ t, status, ts->resp, ts->stat);
+ pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
+ } else {
+ spin_unlock_irqrestore(&t->task_state_lock, flags);
+@@ -3306,45 +3242,40 @@ hw_event_sas_phy_up(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ u8 portstate = (u8)(phyid_npip_portstate & 0x0000000F);
+
+ struct pm8001_port *port = &pm8001_ha->port[port_id];
+- struct sas_ha_struct *sas_ha = pm8001_ha->sas;
+ struct pm8001_phy *phy = &pm8001_ha->phy[phy_id];
+ unsigned long flags;
+ u8 deviceType = pPayload->sas_identify.dev_type;
+ port->port_state = portstate;
+ port->wide_port_phymap |= (1U << phy_id);
+ phy->phy_state = PHY_STATE_LINK_UP_SPCV;
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk(
+- "portid:%d; phyid:%d; linkrate:%d; "
+- "portstate:%x; devicetype:%x\n",
+- port_id, phy_id, link_rate, portstate, deviceType));
++ pm8001_dbg(pm8001_ha, MSG,
++ "portid:%d; phyid:%d; linkrate:%d; portstate:%x; devicetype:%x\n",
++ port_id, phy_id, link_rate, portstate, deviceType);
+
+ switch (deviceType) {
+ case SAS_PHY_UNUSED:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("device type no device.\n"));
++ pm8001_dbg(pm8001_ha, MSG, "device type no device.\n");
+ break;
+ case SAS_END_DEVICE:
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk("end device.\n"));
++ pm8001_dbg(pm8001_ha, MSG, "end device.\n");
+ pm80xx_chip_phy_ctl_req(pm8001_ha, phy_id,
+ PHY_NOTIFY_ENABLE_SPINUP);
+ port->port_attached = 1;
+ pm8001_get_lrate_mode(phy, link_rate);
+ break;
+ case SAS_EDGE_EXPANDER_DEVICE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("expander device.\n"));
++ pm8001_dbg(pm8001_ha, MSG, "expander device.\n");
+ port->port_attached = 1;
+ pm8001_get_lrate_mode(phy, link_rate);
+ break;
+ case SAS_FANOUT_EXPANDER_DEVICE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("fanout expander device.\n"));
++ pm8001_dbg(pm8001_ha, MSG, "fanout expander device.\n");
+ port->port_attached = 1;
+ pm8001_get_lrate_mode(phy, link_rate);
+ break;
+ default:
+- PM8001_DEVIO_DBG(pm8001_ha,
+- pm8001_printk("unknown device type(%x)\n", deviceType));
++ pm8001_dbg(pm8001_ha, DEVIO, "unknown device type(%x)\n",
++ deviceType);
+ break;
+ }
+ phy->phy_type |= PORT_TYPE_SAS;
+@@ -3355,7 +3286,7 @@ hw_event_sas_phy_up(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ else if (phy->identify.device_type != SAS_PHY_UNUSED)
+ phy->identify.target_port_protocols = SAS_PROTOCOL_SMP;
+ phy->sas_phy.oob_mode = SAS_OOB_MODE;
+- sas_ha->notify_phy_event(&phy->sas_phy, PHYE_OOB_DONE);
++ sas_notify_phy_event(&phy->sas_phy, PHYE_OOB_DONE);
+ spin_lock_irqsave(&phy->sas_phy.frame_rcvd_lock, flags);
+ memcpy(phy->frame_rcvd, &pPayload->sas_identify,
+ sizeof(struct sas_identify_frame)-4);
+@@ -3389,12 +3320,11 @@ hw_event_sata_phy_up(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ u8 portstate = (u8)(phyid_npip_portstate & 0x0000000F);
+
+ struct pm8001_port *port = &pm8001_ha->port[port_id];
+- struct sas_ha_struct *sas_ha = pm8001_ha->sas;
+ struct pm8001_phy *phy = &pm8001_ha->phy[phy_id];
+ unsigned long flags;
+- PM8001_DEVIO_DBG(pm8001_ha, pm8001_printk(
+- "port id %d, phy id %d link_rate %d portstate 0x%x\n",
+- port_id, phy_id, link_rate, portstate));
++ pm8001_dbg(pm8001_ha, DEVIO,
++ "port id %d, phy id %d link_rate %d portstate 0x%x\n",
++ port_id, phy_id, link_rate, portstate);
+
+ port->port_state = portstate;
+ phy->phy_state = PHY_STATE_LINK_UP_SPCV;
+@@ -3403,7 +3333,7 @@ hw_event_sata_phy_up(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ phy->phy_type |= PORT_TYPE_SATA;
+ phy->phy_attached = 1;
+ phy->sas_phy.oob_mode = SATA_OOB_MODE;
+- sas_ha->notify_phy_event(&phy->sas_phy, PHYE_OOB_DONE);
++ sas_notify_phy_event(&phy->sas_phy, PHYE_OOB_DONE);
+ spin_lock_irqsave(&phy->sas_phy.frame_rcvd_lock, flags);
+ memcpy(phy->frame_rcvd, ((u8 *)&pPayload->sata_fis - 4),
+ sizeof(struct dev_to_host_fis));
+@@ -3444,10 +3374,10 @@ hw_event_phy_down(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ case PORT_VALID:
+ break;
+ case PORT_INVALID:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" PortInvalid portID %d\n", port_id));
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" Last phy Down and port invalid\n"));
++ pm8001_dbg(pm8001_ha, MSG, " PortInvalid portID %d\n",
++ port_id);
++ pm8001_dbg(pm8001_ha, MSG,
++ " Last phy Down and port invalid\n");
+ if (port_sata) {
+ phy->phy_type = 0;
+ port->port_attached = 0;
+@@ -3457,19 +3387,18 @@ hw_event_phy_down(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ sas_phy_disconnected(&phy->sas_phy);
+ break;
+ case PORT_IN_RESET:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" Port In Reset portID %d\n", port_id));
++ pm8001_dbg(pm8001_ha, MSG, " Port In Reset portID %d\n",
++ port_id);
+ break;
+ case PORT_NOT_ESTABLISHED:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" Phy Down and PORT_NOT_ESTABLISHED\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ " Phy Down and PORT_NOT_ESTABLISHED\n");
+ port->port_attached = 0;
+ break;
+ case PORT_LOSTCOMM:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" Phy Down and PORT_LOSTCOMM\n"));
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" Last phy Down and port invalid\n"));
++ pm8001_dbg(pm8001_ha, MSG, " Phy Down and PORT_LOSTCOMM\n");
++ pm8001_dbg(pm8001_ha, MSG,
++ " Last phy Down and port invalid\n");
+ if (port_sata) {
+ port->port_attached = 0;
+ phy->phy_type = 0;
+@@ -3480,17 +3409,14 @@ hw_event_phy_down(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ break;
+ default:
+ port->port_attached = 0;
+- PM8001_DEVIO_DBG(pm8001_ha,
+- pm8001_printk(" Phy Down and(default) = 0x%x\n",
+- portstate));
++ pm8001_dbg(pm8001_ha, DEVIO,
++ " Phy Down and(default) = 0x%x\n",
++ portstate);
+ break;
+
+ }
+- if (port_sata && (portstate != PORT_IN_RESET)) {
+- struct sas_ha_struct *sas_ha = pm8001_ha->sas;
+-
+- sas_ha->notify_phy_event(&phy->sas_phy, PHYE_LOSS_OF_SIGNAL);
+- }
++ if (port_sata && (portstate != PORT_IN_RESET))
++ sas_notify_phy_event(&phy->sas_phy, PHYE_LOSS_OF_SIGNAL);
+ }
+
+ static int mpi_phy_start_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
+@@ -3503,9 +3429,9 @@ static int mpi_phy_start_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ le32_to_cpu(pPayload->phyid);
+ struct pm8001_phy *phy = &pm8001_ha->phy[phy_id];
+
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("phy start resp status:0x%x, phyid:0x%x\n",
+- status, phy_id));
++ pm8001_dbg(pm8001_ha, INIT,
++ "phy start resp status:0x%x, phyid:0x%x\n",
++ status, phy_id);
+ if (status == 0) {
+ phy->phy_state = PHY_LINK_DOWN;
+ if (pm8001_ha->flags == PM8001F_RUN_TIME &&
+@@ -3532,18 +3458,18 @@ static int mpi_thermal_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ u32 rht_lht = le32_to_cpu(pPayload->rht_lht);
+
+ if (thermal_event & 0x40) {
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk(
+- "Thermal Event: Local high temperature violated!\n"));
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk(
+- "Thermal Event: Measured local high temperature %d\n",
+- ((rht_lht & 0xFF00) >> 8)));
++ pm8001_dbg(pm8001_ha, IO,
++ "Thermal Event: Local high temperature violated!\n");
++ pm8001_dbg(pm8001_ha, IO,
++ "Thermal Event: Measured local high temperature %d\n",
++ ((rht_lht & 0xFF00) >> 8));
+ }
+ if (thermal_event & 0x10) {
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk(
+- "Thermal Event: Remote high temperature violated!\n"));
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk(
+- "Thermal Event: Measured remote high temperature %d\n",
+- ((rht_lht & 0xFF000000) >> 24)));
++ pm8001_dbg(pm8001_ha, IO,
++ "Thermal Event: Remote high temperature violated!\n");
++ pm8001_dbg(pm8001_ha, IO,
++ "Thermal Event: Measured remote high temperature %d\n",
++ ((rht_lht & 0xFF000000) >> 24));
+ }
+ return 0;
+ }
+@@ -3572,149 +3498,134 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ struct pm8001_phy *phy = &pm8001_ha->phy[phy_id];
+ struct pm8001_port *port = &pm8001_ha->port[port_id];
+ struct asd_sas_phy *sas_phy = sas_ha->sas_phy[phy_id];
+- PM8001_DEV_DBG(pm8001_ha,
+- pm8001_printk("portid:%d phyid:%d event:0x%x status:0x%x\n",
+- port_id, phy_id, eventType, status));
++ pm8001_dbg(pm8001_ha, DEV,
++ "portid:%d phyid:%d event:0x%x status:0x%x\n",
++ port_id, phy_id, eventType, status);
+
+ switch (eventType) {
+
+ case HW_EVENT_SAS_PHY_UP:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_PHY_START_STATUS\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PHY_START_STATUS\n");
+ hw_event_sas_phy_up(pm8001_ha, piomb);
+ break;
+ case HW_EVENT_SATA_PHY_UP:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_SATA_PHY_UP\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_SATA_PHY_UP\n");
+ hw_event_sata_phy_up(pm8001_ha, piomb);
+ break;
+ case HW_EVENT_SATA_SPINUP_HOLD:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_SATA_SPINUP_HOLD\n"));
+- sas_ha->notify_phy_event(&phy->sas_phy, PHYE_SPINUP_HOLD);
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_SATA_SPINUP_HOLD\n");
++ sas_notify_phy_event(&phy->sas_phy, PHYE_SPINUP_HOLD);
+ break;
+ case HW_EVENT_PHY_DOWN:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_PHY_DOWN\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PHY_DOWN\n");
+ hw_event_phy_down(pm8001_ha, piomb);
+ if (pm8001_ha->reset_in_progress) {
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("Reset in progress\n"));
++ pm8001_dbg(pm8001_ha, MSG, "Reset in progress\n");
+ return 0;
+ }
+ phy->phy_attached = 0;
+ phy->phy_state = PHY_LINK_DISABLE;
+ break;
+ case HW_EVENT_PORT_INVALID:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_PORT_INVALID\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PORT_INVALID\n");
+ sas_phy_disconnected(sas_phy);
+ phy->phy_attached = 0;
+- sas_ha->notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
++ sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
+ break;
+ /* the broadcast change primitive received, tell the LIBSAS this event
+ to revalidate the sas domain*/
+ case HW_EVENT_BROADCAST_CHANGE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_BROADCAST_CHANGE\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_BROADCAST_CHANGE\n");
+ pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_BROADCAST_CHANGE,
+ port_id, phy_id, 1, 0);
+ spin_lock_irqsave(&sas_phy->sas_prim_lock, flags);
+ sas_phy->sas_prim = HW_EVENT_BROADCAST_CHANGE;
+ spin_unlock_irqrestore(&sas_phy->sas_prim_lock, flags);
+- sas_ha->notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
++ sas_notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
+ break;
+ case HW_EVENT_PHY_ERROR:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_PHY_ERROR\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PHY_ERROR\n");
+ sas_phy_disconnected(&phy->sas_phy);
+ phy->phy_attached = 0;
+- sas_ha->notify_phy_event(&phy->sas_phy, PHYE_OOB_ERROR);
++ sas_notify_phy_event(&phy->sas_phy, PHYE_OOB_ERROR);
+ break;
+ case HW_EVENT_BROADCAST_EXP:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_BROADCAST_EXP\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_BROADCAST_EXP\n");
+ spin_lock_irqsave(&sas_phy->sas_prim_lock, flags);
+ sas_phy->sas_prim = HW_EVENT_BROADCAST_EXP;
+ spin_unlock_irqrestore(&sas_phy->sas_prim_lock, flags);
+- sas_ha->notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
++ sas_notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
+ break;
+ case HW_EVENT_LINK_ERR_INVALID_DWORD:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_LINK_ERR_INVALID_DWORD\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "HW_EVENT_LINK_ERR_INVALID_DWORD\n");
+ pm80xx_hw_event_ack_req(pm8001_ha, 0,
+ HW_EVENT_LINK_ERR_INVALID_DWORD, port_id, phy_id, 0, 0);
+ break;
+ case HW_EVENT_LINK_ERR_DISPARITY_ERROR:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_LINK_ERR_DISPARITY_ERROR\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "HW_EVENT_LINK_ERR_DISPARITY_ERROR\n");
+ pm80xx_hw_event_ack_req(pm8001_ha, 0,
+ HW_EVENT_LINK_ERR_DISPARITY_ERROR,
+ port_id, phy_id, 0, 0);
+ break;
+ case HW_EVENT_LINK_ERR_CODE_VIOLATION:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_LINK_ERR_CODE_VIOLATION\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "HW_EVENT_LINK_ERR_CODE_VIOLATION\n");
+ pm80xx_hw_event_ack_req(pm8001_ha, 0,
+ HW_EVENT_LINK_ERR_CODE_VIOLATION,
+ port_id, phy_id, 0, 0);
+ break;
+ case HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH:
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk(
+- "HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH\n");
+ pm80xx_hw_event_ack_req(pm8001_ha, 0,
+ HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH,
+ port_id, phy_id, 0, 0);
+ break;
+ case HW_EVENT_MALFUNCTION:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_MALFUNCTION\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_MALFUNCTION\n");
+ break;
+ case HW_EVENT_BROADCAST_SES:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_BROADCAST_SES\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_BROADCAST_SES\n");
+ spin_lock_irqsave(&sas_phy->sas_prim_lock, flags);
+ sas_phy->sas_prim = HW_EVENT_BROADCAST_SES;
+ spin_unlock_irqrestore(&sas_phy->sas_prim_lock, flags);
+- sas_ha->notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
++ sas_notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
+ break;
+ case HW_EVENT_INBOUND_CRC_ERROR:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_INBOUND_CRC_ERROR\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_INBOUND_CRC_ERROR\n");
+ pm80xx_hw_event_ack_req(pm8001_ha, 0,
+ HW_EVENT_INBOUND_CRC_ERROR,
+ port_id, phy_id, 0, 0);
+ break;
+ case HW_EVENT_HARD_RESET_RECEIVED:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_HARD_RESET_RECEIVED\n"));
+- sas_ha->notify_port_event(sas_phy, PORTE_HARD_RESET);
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_HARD_RESET_RECEIVED\n");
++ sas_notify_port_event(sas_phy, PORTE_HARD_RESET);
+ break;
+ case HW_EVENT_ID_FRAME_TIMEOUT:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_ID_FRAME_TIMEOUT\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_ID_FRAME_TIMEOUT\n");
+ sas_phy_disconnected(sas_phy);
+ phy->phy_attached = 0;
+- sas_ha->notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
++ sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
+ break;
+ case HW_EVENT_LINK_ERR_PHY_RESET_FAILED:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_LINK_ERR_PHY_RESET_FAILED\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "HW_EVENT_LINK_ERR_PHY_RESET_FAILED\n");
+ pm80xx_hw_event_ack_req(pm8001_ha, 0,
+ HW_EVENT_LINK_ERR_PHY_RESET_FAILED,
+ port_id, phy_id, 0, 0);
+ sas_phy_disconnected(sas_phy);
+ phy->phy_attached = 0;
+- sas_ha->notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
++ sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
+ break;
+ case HW_EVENT_PORT_RESET_TIMER_TMO:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_PORT_RESET_TIMER_TMO\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PORT_RESET_TIMER_TMO\n");
+ pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_PHY_DOWN,
+ port_id, phy_id, 0, 0);
+ sas_phy_disconnected(sas_phy);
+ phy->phy_attached = 0;
+- sas_ha->notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
++ sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR);
+ if (pm8001_ha->phy[phy_id].reset_completion) {
+ pm8001_ha->phy[phy_id].port_reset_status =
+ PORT_RESET_TMO;
+@@ -3723,28 +3634,26 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ }
+ break;
+ case HW_EVENT_PORT_RECOVERY_TIMER_TMO:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_PORT_RECOVERY_TIMER_TMO\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "HW_EVENT_PORT_RECOVERY_TIMER_TMO\n");
+ pm80xx_hw_event_ack_req(pm8001_ha, 0,
+ HW_EVENT_PORT_RECOVERY_TIMER_TMO,
+ port_id, phy_id, 0, 0);
+ for (i = 0; i < pm8001_ha->chip->n_phy; i++) {
+ if (port->wide_port_phymap & (1 << i)) {
+ phy = &pm8001_ha->phy[i];
+- sas_ha->notify_phy_event(&phy->sas_phy,
++ sas_notify_phy_event(&phy->sas_phy,
+ PHYE_LOSS_OF_SIGNAL);
+ port->wide_port_phymap &= ~(1 << i);
+ }
+ }
+ break;
+ case HW_EVENT_PORT_RECOVER:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_PORT_RECOVER\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PORT_RECOVER\n");
+ hw_event_port_recover(pm8001_ha, piomb);
+ break;
+ case HW_EVENT_PORT_RESET_COMPLETE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("HW_EVENT_PORT_RESET_COMPLETE\n"));
++ pm8001_dbg(pm8001_ha, MSG, "HW_EVENT_PORT_RESET_COMPLETE\n");
+ if (pm8001_ha->phy[phy_id].reset_completion) {
+ pm8001_ha->phy[phy_id].port_reset_status =
+ PORT_RESET_SUCCESS;
+@@ -3753,12 +3662,11 @@ static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ }
+ break;
+ case EVENT_BROADCAST_ASYNCH_EVENT:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("EVENT_BROADCAST_ASYNCH_EVENT\n"));
++ pm8001_dbg(pm8001_ha, MSG, "EVENT_BROADCAST_ASYNCH_EVENT\n");
+ break;
+ default:
+- PM8001_DEVIO_DBG(pm8001_ha,
+- pm8001_printk("Unknown event type 0x%x\n", eventType));
++ pm8001_dbg(pm8001_ha, DEVIO, "Unknown event type 0x%x\n",
++ eventType);
+ break;
+ }
+ return 0;
+@@ -3778,9 +3686,8 @@ static int mpi_phy_stop_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ u32 phyid =
+ le32_to_cpu(pPayload->phyid) & 0xFF;
+ struct pm8001_phy *phy = &pm8001_ha->phy[phyid];
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("phy:0x%x status:0x%x\n",
+- phyid, status));
++ pm8001_dbg(pm8001_ha, MSG, "phy:0x%x status:0x%x\n",
++ phyid, status);
+ if (status == PHY_STOP_SUCCESS ||
+ status == PHY_STOP_ERR_DEVICE_ATTACHED)
+ phy->phy_state = PHY_LINK_DISABLE;
+@@ -3800,9 +3707,9 @@ static int mpi_set_controller_config_resp(struct pm8001_hba_info *pm8001_ha,
+ u32 status = le32_to_cpu(pPayload->status);
+ u32 err_qlfr_pgcd = le32_to_cpu(pPayload->err_qlfr_pgcd);
+
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk(
+- "SET CONTROLLER RESP: status 0x%x qlfr_pgcd 0x%x\n",
+- status, err_qlfr_pgcd));
++ pm8001_dbg(pm8001_ha, MSG,
++ "SET CONTROLLER RESP: status 0x%x qlfr_pgcd 0x%x\n",
++ status, err_qlfr_pgcd);
+
+ return 0;
+ }
+@@ -3815,8 +3722,7 @@ static int mpi_set_controller_config_resp(struct pm8001_hba_info *pm8001_ha,
+ static int mpi_get_controller_config_resp(struct pm8001_hba_info *pm8001_ha,
+ void *piomb)
+ {
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" pm80xx_addition_functionality\n"));
++ pm8001_dbg(pm8001_ha, MSG, " pm80xx_addition_functionality\n");
+
+ return 0;
+ }
+@@ -3829,8 +3735,7 @@ static int mpi_get_controller_config_resp(struct pm8001_hba_info *pm8001_ha,
+ static int mpi_get_phy_profile_resp(struct pm8001_hba_info *pm8001_ha,
+ void *piomb)
+ {
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" pm80xx_addition_functionality\n"));
++ pm8001_dbg(pm8001_ha, MSG, " pm80xx_addition_functionality\n");
+
+ return 0;
+ }
+@@ -3842,8 +3747,7 @@ static int mpi_get_phy_profile_resp(struct pm8001_hba_info *pm8001_ha,
+ */
+ static int mpi_flash_op_ext_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
+ {
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" pm80xx_addition_functionality\n"));
++ pm8001_dbg(pm8001_ha, MSG, " pm80xx_addition_functionality\n");
+
+ return 0;
+ }
+@@ -3868,15 +3772,14 @@ static int mpi_set_phy_profile_resp(struct pm8001_hba_info *pm8001_ha,
+ page_code = (u8)((ppc_phyid & 0xFF00) >> 8);
+ if (status) {
+ /* status is FAILED */
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("PhyProfile command failed with status "
+- "0x%08X \n", status));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "PhyProfile command failed with status 0x%08X\n",
++ status);
+ rc = -1;
+ } else {
+ if (page_code != SAS_PHY_ANALOG_SETTINGS_PAGE) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("Invalid page code 0x%X\n",
+- page_code));
++ pm8001_dbg(pm8001_ha, FAIL, "Invalid page code 0x%X\n",
++ page_code);
+ rc = -1;
+ }
+ }
+@@ -3898,9 +3801,9 @@ static int mpi_kek_management_resp(struct pm8001_hba_info *pm8001_ha,
+ u32 kidx_new_curr_ksop = le32_to_cpu(pPayload->kidx_new_curr_ksop);
+ u32 err_qlfr = le32_to_cpu(pPayload->err_qlfr);
+
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk(
+- "KEK MGMT RESP. Status 0x%x idx_ksop 0x%x err_qlfr 0x%x\n",
+- status, kidx_new_curr_ksop, err_qlfr));
++ pm8001_dbg(pm8001_ha, MSG,
++ "KEK MGMT RESP. Status 0x%x idx_ksop 0x%x err_qlfr 0x%x\n",
++ status, kidx_new_curr_ksop, err_qlfr);
+
+ return 0;
+ }
+@@ -3913,8 +3816,7 @@ static int mpi_kek_management_resp(struct pm8001_hba_info *pm8001_ha,
+ static int mpi_dek_management_resp(struct pm8001_hba_info *pm8001_ha,
+ void *piomb)
+ {
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" pm80xx_addition_functionality\n"));
++ pm8001_dbg(pm8001_ha, MSG, " pm80xx_addition_functionality\n");
+
+ return 0;
+ }
+@@ -3927,8 +3829,7 @@ static int mpi_dek_management_resp(struct pm8001_hba_info *pm8001_ha,
+ static int ssp_coalesced_comp_resp(struct pm8001_hba_info *pm8001_ha,
+ void *piomb)
+ {
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk(" pm80xx_addition_functionality\n"));
++ pm8001_dbg(pm8001_ha, MSG, " pm80xx_addition_functionality\n");
+
+ return 0;
+ }
+@@ -3945,248 +3846,206 @@ static void process_one_iomb(struct pm8001_hba_info *pm8001_ha, void *piomb)
+
+ switch (opc) {
+ case OPC_OUB_ECHO:
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk("OPC_OUB_ECHO\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_ECHO\n");
+ break;
+ case OPC_OUB_HW_EVENT:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_HW_EVENT\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_HW_EVENT\n");
+ mpi_hw_event(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_THERM_HW_EVENT:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_THERMAL_EVENT\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_THERMAL_EVENT\n");
+ mpi_thermal_hw_event(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_SSP_COMP:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SSP_COMP\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SSP_COMP\n");
+ mpi_ssp_completion(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_SMP_COMP:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SMP_COMP\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SMP_COMP\n");
+ mpi_smp_completion(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_LOCAL_PHY_CNTRL:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_LOCAL_PHY_CNTRL\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_LOCAL_PHY_CNTRL\n");
+ pm8001_mpi_local_phy_ctl(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_DEV_REGIST:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_DEV_REGIST\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_DEV_REGIST\n");
+ pm8001_mpi_reg_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_DEREG_DEV:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("unregister the device\n"));
++ pm8001_dbg(pm8001_ha, MSG, "unregister the device\n");
+ pm8001_mpi_dereg_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_GET_DEV_HANDLE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_GET_DEV_HANDLE\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_GET_DEV_HANDLE\n");
+ break;
+ case OPC_OUB_SATA_COMP:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SATA_COMP\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SATA_COMP\n");
+ mpi_sata_completion(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_SATA_EVENT:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SATA_EVENT\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SATA_EVENT\n");
+ mpi_sata_event(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_SSP_EVENT:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SSP_EVENT\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SSP_EVENT\n");
+ mpi_ssp_event(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_DEV_HANDLE_ARRIV:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_DEV_HANDLE_ARRIV\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_DEV_HANDLE_ARRIV\n");
+ /*This is for target*/
+ break;
+ case OPC_OUB_SSP_RECV_EVENT:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SSP_RECV_EVENT\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SSP_RECV_EVENT\n");
+ /*This is for target*/
+ break;
+ case OPC_OUB_FW_FLASH_UPDATE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_FW_FLASH_UPDATE\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_FW_FLASH_UPDATE\n");
+ pm8001_mpi_fw_flash_update_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_GPIO_RESPONSE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_GPIO_RESPONSE\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_GPIO_RESPONSE\n");
+ break;
+ case OPC_OUB_GPIO_EVENT:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_GPIO_EVENT\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_GPIO_EVENT\n");
+ break;
+ case OPC_OUB_GENERAL_EVENT:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_GENERAL_EVENT\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_GENERAL_EVENT\n");
+ pm8001_mpi_general_event(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_SSP_ABORT_RSP:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SSP_ABORT_RSP\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SSP_ABORT_RSP\n");
+ pm8001_mpi_task_abort_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_SATA_ABORT_RSP:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SATA_ABORT_RSP\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SATA_ABORT_RSP\n");
+ pm8001_mpi_task_abort_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_SAS_DIAG_MODE_START_END:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SAS_DIAG_MODE_START_END\n"));
++ pm8001_dbg(pm8001_ha, MSG,
++ "OPC_OUB_SAS_DIAG_MODE_START_END\n");
+ break;
+ case OPC_OUB_SAS_DIAG_EXECUTE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SAS_DIAG_EXECUTE\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SAS_DIAG_EXECUTE\n");
+ break;
+ case OPC_OUB_GET_TIME_STAMP:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_GET_TIME_STAMP\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_GET_TIME_STAMP\n");
+ break;
+ case OPC_OUB_SAS_HW_EVENT_ACK:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SAS_HW_EVENT_ACK\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SAS_HW_EVENT_ACK\n");
+ break;
+ case OPC_OUB_PORT_CONTROL:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_PORT_CONTROL\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_PORT_CONTROL\n");
+ break;
+ case OPC_OUB_SMP_ABORT_RSP:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SMP_ABORT_RSP\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SMP_ABORT_RSP\n");
+ pm8001_mpi_task_abort_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_GET_NVMD_DATA:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_GET_NVMD_DATA\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_GET_NVMD_DATA\n");
+ pm8001_mpi_get_nvmd_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_SET_NVMD_DATA:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SET_NVMD_DATA\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SET_NVMD_DATA\n");
+ pm8001_mpi_set_nvmd_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_DEVICE_HANDLE_REMOVAL:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_DEVICE_HANDLE_REMOVAL\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_DEVICE_HANDLE_REMOVAL\n");
+ break;
+ case OPC_OUB_SET_DEVICE_STATE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SET_DEVICE_STATE\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SET_DEVICE_STATE\n");
+ pm8001_mpi_set_dev_state_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_GET_DEVICE_STATE:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_GET_DEVICE_STATE\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_GET_DEVICE_STATE\n");
+ break;
+ case OPC_OUB_SET_DEV_INFO:
+- PM8001_MSG_DBG(pm8001_ha,
+- pm8001_printk("OPC_OUB_SET_DEV_INFO\n"));
++ pm8001_dbg(pm8001_ha, MSG, "OPC_OUB_SET_DEV_INFO\n");
+ break;
+ /* spcv specifc commands */
+ case OPC_OUB_PHY_START_RESP:
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk(
+- "OPC_OUB_PHY_START_RESP opcode:%x\n", opc));
++ pm8001_dbg(pm8001_ha, MSG,
++ "OPC_OUB_PHY_START_RESP opcode:%x\n", opc);
+ mpi_phy_start_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_PHY_STOP_RESP:
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk(
+- "OPC_OUB_PHY_STOP_RESP opcode:%x\n", opc));
++ pm8001_dbg(pm8001_ha, MSG,
++ "OPC_OUB_PHY_STOP_RESP opcode:%x\n", opc);
+ mpi_phy_stop_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_SET_CONTROLLER_CONFIG:
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk(
+- "OPC_OUB_SET_CONTROLLER_CONFIG opcode:%x\n", opc));
++ pm8001_dbg(pm8001_ha, MSG,
++ "OPC_OUB_SET_CONTROLLER_CONFIG opcode:%x\n", opc);
+ mpi_set_controller_config_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_GET_CONTROLLER_CONFIG:
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk(
+- "OPC_OUB_GET_CONTROLLER_CONFIG opcode:%x\n", opc));
++ pm8001_dbg(pm8001_ha, MSG,
++ "OPC_OUB_GET_CONTROLLER_CONFIG opcode:%x\n", opc);
+ mpi_get_controller_config_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_GET_PHY_PROFILE:
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk(
+- "OPC_OUB_GET_PHY_PROFILE opcode:%x\n", opc));
++ pm8001_dbg(pm8001_ha, MSG,
++ "OPC_OUB_GET_PHY_PROFILE opcode:%x\n", opc);
+ mpi_get_phy_profile_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_FLASH_OP_EXT:
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk(
+- "OPC_OUB_FLASH_OP_EXT opcode:%x\n", opc));
++ pm8001_dbg(pm8001_ha, MSG,
++ "OPC_OUB_FLASH_OP_EXT opcode:%x\n", opc);
+ mpi_flash_op_ext_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_SET_PHY_PROFILE:
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk(
+- "OPC_OUB_SET_PHY_PROFILE opcode:%x\n", opc));
++ pm8001_dbg(pm8001_ha, MSG,
++ "OPC_OUB_SET_PHY_PROFILE opcode:%x\n", opc);
+ mpi_set_phy_profile_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_KEK_MANAGEMENT_RESP:
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk(
+- "OPC_OUB_KEK_MANAGEMENT_RESP opcode:%x\n", opc));
++ pm8001_dbg(pm8001_ha, MSG,
++ "OPC_OUB_KEK_MANAGEMENT_RESP opcode:%x\n", opc);
+ mpi_kek_management_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_DEK_MANAGEMENT_RESP:
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk(
+- "OPC_OUB_DEK_MANAGEMENT_RESP opcode:%x\n", opc));
++ pm8001_dbg(pm8001_ha, MSG,
++ "OPC_OUB_DEK_MANAGEMENT_RESP opcode:%x\n", opc);
+ mpi_dek_management_resp(pm8001_ha, piomb);
+ break;
+ case OPC_OUB_SSP_COALESCED_COMP_RESP:
+- PM8001_MSG_DBG(pm8001_ha, pm8001_printk(
+- "OPC_OUB_SSP_COALESCED_COMP_RESP opcode:%x\n", opc));
++ pm8001_dbg(pm8001_ha, MSG,
++ "OPC_OUB_SSP_COALESCED_COMP_RESP opcode:%x\n", opc);
+ ssp_coalesced_comp_resp(pm8001_ha, piomb);
+ break;
+ default:
+- PM8001_DEVIO_DBG(pm8001_ha, pm8001_printk(
+- "Unknown outbound Queue IOMB OPC = 0x%x\n", opc));
++ pm8001_dbg(pm8001_ha, DEVIO,
++ "Unknown outbound Queue IOMB OPC = 0x%x\n", opc);
+ break;
+ }
+ }
+
+ static void print_scratchpad_registers(struct pm8001_hba_info *pm8001_ha)
+ {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("MSGU_SCRATCH_PAD_0: 0x%x\n",
+- pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_0)));
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("MSGU_SCRATCH_PAD_1:0x%x\n",
+- pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1)));
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("MSGU_SCRATCH_PAD_2: 0x%x\n",
+- pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_2)));
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("MSGU_SCRATCH_PAD_3: 0x%x\n",
+- pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_3)));
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("MSGU_HOST_SCRATCH_PAD_0: 0x%x\n",
+- pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_0)));
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("MSGU_HOST_SCRATCH_PAD_1: 0x%x\n",
+- pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_1)));
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("MSGU_HOST_SCRATCH_PAD_2: 0x%x\n",
+- pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_2)));
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("MSGU_HOST_SCRATCH_PAD_3: 0x%x\n",
+- pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_3)));
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("MSGU_HOST_SCRATCH_PAD_4: 0x%x\n",
+- pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_4)));
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("MSGU_HOST_SCRATCH_PAD_5: 0x%x\n",
+- pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_5)));
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("MSGU_RSVD_SCRATCH_PAD_0: 0x%x\n",
+- pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_6)));
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("MSGU_RSVD_SCRATCH_PAD_1: 0x%x\n",
+- pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_7)));
++ pm8001_dbg(pm8001_ha, FAIL, "MSGU_SCRATCH_PAD_0: 0x%x\n",
++ pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_0));
++ pm8001_dbg(pm8001_ha, FAIL, "MSGU_SCRATCH_PAD_1:0x%x\n",
++ pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1));
++ pm8001_dbg(pm8001_ha, FAIL, "MSGU_SCRATCH_PAD_2: 0x%x\n",
++ pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_2));
++ pm8001_dbg(pm8001_ha, FAIL, "MSGU_SCRATCH_PAD_3: 0x%x\n",
++ pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_3));
++ pm8001_dbg(pm8001_ha, FAIL, "MSGU_HOST_SCRATCH_PAD_0: 0x%x\n",
++ pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_0));
++ pm8001_dbg(pm8001_ha, FAIL, "MSGU_HOST_SCRATCH_PAD_1: 0x%x\n",
++ pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_1));
++ pm8001_dbg(pm8001_ha, FAIL, "MSGU_HOST_SCRATCH_PAD_2: 0x%x\n",
++ pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_2));
++ pm8001_dbg(pm8001_ha, FAIL, "MSGU_HOST_SCRATCH_PAD_3: 0x%x\n",
++ pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_3));
++ pm8001_dbg(pm8001_ha, FAIL, "MSGU_HOST_SCRATCH_PAD_4: 0x%x\n",
++ pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_4));
++ pm8001_dbg(pm8001_ha, FAIL, "MSGU_HOST_SCRATCH_PAD_5: 0x%x\n",
++ pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_5));
++ pm8001_dbg(pm8001_ha, FAIL, "MSGU_RSVD_SCRATCH_PAD_0: 0x%x\n",
++ pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_6));
++ pm8001_dbg(pm8001_ha, FAIL, "MSGU_RSVD_SCRATCH_PAD_1: 0x%x\n",
++ pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_7));
+ }
+
+ static int process_oq(struct pm8001_hba_info *pm8001_ha, u8 vec)
+@@ -4203,8 +4062,9 @@ static int process_oq(struct pm8001_hba_info *pm8001_ha, u8 vec)
+ if ((regval & SCRATCH_PAD_MIPSALL_READY) !=
+ SCRATCH_PAD_MIPSALL_READY) {
+ pm8001_ha->controller_fatal_error = true;
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk(
+- "Firmware Fatal error! Regval:0x%x\n", regval));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "Firmware Fatal error! Regval:0x%x\n",
++ regval);
+ print_scratchpad_registers(pm8001_ha);
+ return ret;
+ }
+@@ -4281,7 +4141,6 @@ static int pm80xx_chip_smp_req(struct pm8001_hba_info *pm8001_ha,
+ char *preq_dma_addr = NULL;
+ __le64 tmp_addr;
+ u32 i, length;
+- unsigned long flags;
+
+ memset(&smp_cmd, 0, sizeof(smp_cmd));
+ /*
+@@ -4311,8 +4170,7 @@ static int pm80xx_chip_smp_req(struct pm8001_hba_info *pm8001_ha,
+ smp_cmd.tag = cpu_to_le32(ccb->ccb_tag);
+
+ length = sg_req->length;
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("SMP Frame Length %d\n", sg_req->length));
++ pm8001_dbg(pm8001_ha, IO, "SMP Frame Length %d\n", sg_req->length);
+ if (!(length - 8))
+ pm8001_ha->smp_exp_mode = SMP_DIRECT;
+ else
+@@ -4324,8 +4182,7 @@ static int pm80xx_chip_smp_req(struct pm8001_hba_info *pm8001_ha,
+
+ /* INDIRECT MODE command settings. Use DMA */
+ if (pm8001_ha->smp_exp_mode == SMP_INDIRECT) {
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("SMP REQUEST INDIRECT MODE\n"));
++ pm8001_dbg(pm8001_ha, IO, "SMP REQUEST INDIRECT MODE\n");
+ /* for SPCv indirect mode. Place the top 4 bytes of
+ * SMP Request header here. */
+ for (i = 0; i < 4; i++)
+@@ -4357,30 +4214,27 @@ static int pm80xx_chip_smp_req(struct pm8001_hba_info *pm8001_ha,
+ ((u32)sg_dma_len(&task->smp_task.smp_resp)-4);
+ }
+ if (pm8001_ha->smp_exp_mode == SMP_DIRECT) {
+- PM8001_IO_DBG(pm8001_ha,
+- pm8001_printk("SMP REQUEST DIRECT MODE\n"));
++ pm8001_dbg(pm8001_ha, IO, "SMP REQUEST DIRECT MODE\n");
+ for (i = 0; i < length; i++)
+ if (i < 16) {
+ smp_cmd.smp_req16[i] = *(preq_dma_addr+i);
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk(
+- "Byte[%d]:%x (DMA data:%x)\n",
+- i, smp_cmd.smp_req16[i],
+- *(preq_dma_addr)));
++ pm8001_dbg(pm8001_ha, IO,
++ "Byte[%d]:%x (DMA data:%x)\n",
++ i, smp_cmd.smp_req16[i],
++ *(preq_dma_addr));
+ } else {
+ smp_cmd.smp_req[i] = *(preq_dma_addr+i);
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk(
+- "Byte[%d]:%x (DMA data:%x)\n",
+- i, smp_cmd.smp_req[i],
+- *(preq_dma_addr)));
++ pm8001_dbg(pm8001_ha, IO,
++ "Byte[%d]:%x (DMA data:%x)\n",
++ i, smp_cmd.smp_req[i],
++ *(preq_dma_addr));
+ }
+ }
+
+ build_smp_cmd(pm8001_dev->device_id, smp_cmd.tag,
+ &smp_cmd, pm8001_ha->smp_exp_mode, length);
+- spin_lock_irqsave(&circularQ->iq_lock, flags);
+ rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &smp_cmd,
+ sizeof(smp_cmd), 0);
+- spin_unlock_irqrestore(&circularQ->iq_lock, flags);
+ if (rc)
+ goto err_out_2;
+ return 0;
+@@ -4444,7 +4298,6 @@ static int pm80xx_chip_ssp_io_req(struct pm8001_hba_info *pm8001_ha,
+ u64 phys_addr, start_addr, end_addr;
+ u32 end_addr_high, end_addr_low;
+ struct inbound_queue_table *circularQ;
+- unsigned long flags;
+ u32 q_index, cpu_id;
+ u32 opc = OPC_INB_SSPINIIOSTART;
+ memset(&ssp_cmd, 0, sizeof(ssp_cmd));
+@@ -4471,9 +4324,9 @@ static int pm80xx_chip_ssp_io_req(struct pm8001_hba_info *pm8001_ha,
+ /* Check if encryption is set */
+ if (pm8001_ha->chip->encrypt &&
+ !(pm8001_ha->encrypt_info.status) && check_enc_sas_cmd(task)) {
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk(
+- "Encryption enabled.Sending Encrypt SAS command 0x%x\n",
+- task->ssp_task.cmd->cmnd[0]));
++ pm8001_dbg(pm8001_ha, IO,
++ "Encryption enabled.Sending Encrypt SAS command 0x%x\n",
++ task->ssp_task.cmd->cmnd[0]);
+ opc = OPC_INB_SSP_INI_DIF_ENC_IO;
+ /* enable encryption. 0 for SAS 1.1 and SAS 2.0 compatible TLR*/
+ ssp_cmd.dad_dir_m_tlr = cpu_to_le32
+@@ -4503,13 +4356,10 @@ static int pm80xx_chip_ssp_io_req(struct pm8001_hba_info *pm8001_ha,
+ end_addr_low = cpu_to_le32(lower_32_bits(end_addr));
+ end_addr_high = cpu_to_le32(upper_32_bits(end_addr));
+ if (end_addr_high != ssp_cmd.enc_addr_high) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("The sg list address "
+- "start_addr=0x%016llx data_len=0x%x "
+- "end_addr_high=0x%08x end_addr_low="
+- "0x%08x has crossed 4G boundary\n",
+- start_addr, ssp_cmd.enc_len,
+- end_addr_high, end_addr_low));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "The sg list address start_addr=0x%016llx data_len=0x%x end_addr_high=0x%08x end_addr_low=0x%08x has crossed 4G boundary\n",
++ start_addr, ssp_cmd.enc_len,
++ end_addr_high, end_addr_low);
+ pm8001_chip_make_sg(task->scatter, 1,
+ ccb->buf_prd);
+ phys_addr = ccb->ccb_dma_handle;
+@@ -4533,9 +4383,9 @@ static int pm80xx_chip_ssp_io_req(struct pm8001_hba_info *pm8001_ha,
+ (task->ssp_task.cmd->cmnd[4] << 8) |
+ (task->ssp_task.cmd->cmnd[5]));
+ } else {
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk(
+- "Sending Normal SAS command 0x%x inb q %x\n",
+- task->ssp_task.cmd->cmnd[0], q_index));
++ pm8001_dbg(pm8001_ha, IO,
++ "Sending Normal SAS command 0x%x inb q %x\n",
++ task->ssp_task.cmd->cmnd[0], q_index);
+ /* fill in PRD (scatter/gather) table, if any */
+ if (task->num_scatter > 1) {
+ pm8001_chip_make_sg(task->scatter, ccb->n_elem,
+@@ -4559,13 +4409,10 @@ static int pm80xx_chip_ssp_io_req(struct pm8001_hba_info *pm8001_ha,
+ end_addr_low = cpu_to_le32(lower_32_bits(end_addr));
+ end_addr_high = cpu_to_le32(upper_32_bits(end_addr));
+ if (end_addr_high != ssp_cmd.addr_high) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("The sg list address "
+- "start_addr=0x%016llx data_len=0x%x "
+- "end_addr_high=0x%08x end_addr_low="
+- "0x%08x has crossed 4G boundary\n",
+- start_addr, ssp_cmd.len,
+- end_addr_high, end_addr_low));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "The sg list address start_addr=0x%016llx data_len=0x%x end_addr_high=0x%08x end_addr_low=0x%08x has crossed 4G boundary\n",
++ start_addr, ssp_cmd.len,
++ end_addr_high, end_addr_low);
+ pm8001_chip_make_sg(task->scatter, 1,
+ ccb->buf_prd);
+ phys_addr = ccb->ccb_dma_handle;
+@@ -4582,10 +4429,8 @@ static int pm80xx_chip_ssp_io_req(struct pm8001_hba_info *pm8001_ha,
+ ssp_cmd.esgl = 0;
+ }
+ }
+- spin_lock_irqsave(&circularQ->iq_lock, flags);
+ ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc,
+ &ssp_cmd, sizeof(ssp_cmd), q_index);
+- spin_unlock_irqrestore(&circularQ->iq_lock, flags);
+ return ret;
+ }
+
+@@ -4614,19 +4459,19 @@ static int pm80xx_chip_sata_req(struct pm8001_hba_info *pm8001_ha,
+
+ if (task->data_dir == DMA_NONE) {
+ ATAP = 0x04; /* no data*/
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("no data\n"));
++ pm8001_dbg(pm8001_ha, IO, "no data\n");
+ } else if (likely(!task->ata_task.device_control_reg_update)) {
+ if (task->ata_task.dma_xfer) {
+ ATAP = 0x06; /* DMA */
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("DMA\n"));
++ pm8001_dbg(pm8001_ha, IO, "DMA\n");
+ } else {
+ ATAP = 0x05; /* PIO*/
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("PIO\n"));
++ pm8001_dbg(pm8001_ha, IO, "PIO\n");
+ }
+ if (task->ata_task.use_ncq &&
+ dev->sata_dev.class != ATA_DEV_ATAPI) {
+ ATAP = 0x07; /* FPDMA */
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk("FPDMA\n"));
++ pm8001_dbg(pm8001_ha, IO, "FPDMA\n");
+ }
+ }
+ if (task->ata_task.use_ncq && pm8001_get_ncq_tag(task, &hdr_tag)) {
+@@ -4646,9 +4491,9 @@ static int pm80xx_chip_sata_req(struct pm8001_hba_info *pm8001_ha,
+ /* Check if encryption is set */
+ if (pm8001_ha->chip->encrypt &&
+ !(pm8001_ha->encrypt_info.status) && check_enc_sat_cmd(task)) {
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk(
+- "Encryption enabled.Sending Encrypt SATA cmd 0x%x\n",
+- sata_cmd.sata_fis.command));
++ pm8001_dbg(pm8001_ha, IO,
++ "Encryption enabled.Sending Encrypt SATA cmd 0x%x\n",
++ sata_cmd.sata_fis.command);
+ opc = OPC_INB_SATA_DIF_ENC_IO;
+
+ /* set encryption bit */
+@@ -4676,13 +4521,10 @@ static int pm80xx_chip_sata_req(struct pm8001_hba_info *pm8001_ha,
+ end_addr_low = cpu_to_le32(lower_32_bits(end_addr));
+ end_addr_high = cpu_to_le32(upper_32_bits(end_addr));
+ if (end_addr_high != sata_cmd.enc_addr_high) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("The sg list address "
+- "start_addr=0x%016llx data_len=0x%x "
+- "end_addr_high=0x%08x end_addr_low"
+- "=0x%08x has crossed 4G boundary\n",
+- start_addr, sata_cmd.enc_len,
+- end_addr_high, end_addr_low));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "The sg list address start_addr=0x%016llx data_len=0x%x end_addr_high=0x%08x end_addr_low=0x%08x has crossed 4G boundary\n",
++ start_addr, sata_cmd.enc_len,
++ end_addr_high, end_addr_low);
+ pm8001_chip_make_sg(task->scatter, 1,
+ ccb->buf_prd);
+ phys_addr = ccb->ccb_dma_handle;
+@@ -4711,9 +4553,9 @@ static int pm80xx_chip_sata_req(struct pm8001_hba_info *pm8001_ha,
+ cpu_to_le32((sata_cmd.sata_fis.lbah_exp << 8) |
+ (sata_cmd.sata_fis.lbam_exp));
+ } else {
+- PM8001_IO_DBG(pm8001_ha, pm8001_printk(
+- "Sending Normal SATA command 0x%x inb %x\n",
+- sata_cmd.sata_fis.command, q_index));
++ pm8001_dbg(pm8001_ha, IO,
++ "Sending Normal SATA command 0x%x inb %x\n",
++ sata_cmd.sata_fis.command, q_index);
+ /* dad (bit 0-1) is 0 */
+ sata_cmd.ncqtag_atap_dir_m_dad =
+ cpu_to_le32(((ncg_tag & 0xff)<<16) |
+@@ -4739,13 +4581,10 @@ static int pm80xx_chip_sata_req(struct pm8001_hba_info *pm8001_ha,
+ end_addr_low = cpu_to_le32(lower_32_bits(end_addr));
+ end_addr_high = cpu_to_le32(upper_32_bits(end_addr));
+ if (end_addr_high != sata_cmd.addr_high) {
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("The sg list address "
+- "start_addr=0x%016llx data_len=0x%x"
+- "end_addr_high=0x%08x end_addr_low="
+- "0x%08x has crossed 4G boundary\n",
+- start_addr, sata_cmd.len,
+- end_addr_high, end_addr_low));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "The sg list address start_addr=0x%016llx data_len=0x%xend_addr_high=0x%08x end_addr_low=0x%08x has crossed 4G boundary\n",
++ start_addr, sata_cmd.len,
++ end_addr_high, end_addr_low);
+ pm8001_chip_make_sg(task->scatter, 1,
+ ccb->buf_prd);
+ phys_addr = ccb->ccb_dma_handle;
+@@ -4804,10 +4643,10 @@ static int pm80xx_chip_sata_req(struct pm8001_hba_info *pm8001_ha,
+ SAS_TASK_STATE_ABORTED))) {
+ spin_unlock_irqrestore(&task->task_state_lock,
+ flags);
+- PM8001_FAIL_DBG(pm8001_ha,
+- pm8001_printk("task 0x%p resp 0x%x "
+- " stat 0x%x but aborted by upper layer "
+- "\n", task, ts->resp, ts->stat));
++ pm8001_dbg(pm8001_ha, FAIL,
++ "task 0x%p resp 0x%x stat 0x%x but aborted by upper layer\n",
++ task, ts->resp,
++ ts->stat);
+ pm8001_ccb_task_free(pm8001_ha, task, ccb, tag);
+ return 0;
+ } else {
+@@ -4815,14 +4654,13 @@ static int pm80xx_chip_sata_req(struct pm8001_hba_info *pm8001_ha,
+ flags);
+ pm8001_ccb_task_free_done(pm8001_ha, task,
+ ccb, tag);
++ atomic_dec(&pm8001_ha_dev->running_req);
+ return 0;
+ }
+ }
+ }
+- spin_lock_irqsave(&circularQ->iq_lock, flags);
+ ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc,
+ &sata_cmd, sizeof(sata_cmd), q_index);
+- spin_unlock_irqrestore(&circularQ->iq_lock, flags);
+ return ret;
+ }
+
+@@ -4843,8 +4681,7 @@ pm80xx_chip_phy_start_req(struct pm8001_hba_info *pm8001_ha, u8 phy_id)
+ memset(&payload, 0, sizeof(payload));
+ payload.tag = cpu_to_le32(tag);
+
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("PHY START REQ for phy_id %d\n", phy_id));
++ pm8001_dbg(pm8001_ha, INIT, "PHY START REQ for phy_id %d\n", phy_id);
+
+ payload.ase_sh_lm_slr_phyid = cpu_to_le32(SPINHOLD_DISABLE |
+ LINKMODE_AUTO | pm8001_ha->link_rate | phy_id);
+@@ -5008,9 +4845,9 @@ static irqreturn_t
+ pm80xx_chip_isr(struct pm8001_hba_info *pm8001_ha, u8 vec)
+ {
+ pm80xx_chip_interrupt_disable(pm8001_ha, vec);
+- PM8001_DEVIO_DBG(pm8001_ha, pm8001_printk(
+- "irq vec %d, ODMR:0x%x\n",
+- vec, pm8001_cr32(pm8001_ha, 0, 0x30)));
++ pm8001_dbg(pm8001_ha, DEVIO,
++ "irq vec %d, ODMR:0x%x\n",
++ vec, pm8001_cr32(pm8001_ha, 0, 0x30));
+ process_oq(pm8001_ha, vec);
+ pm80xx_chip_interrupt_enable(pm8001_ha, vec);
+ return IRQ_HANDLED;
+@@ -5029,13 +4866,13 @@ static void mpi_set_phy_profile_req(struct pm8001_hba_info *pm8001_ha,
+ memset(&payload, 0, sizeof(payload));
+ rc = pm8001_tag_alloc(pm8001_ha, &tag);
+ if (rc)
+- PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("Invalid tag\n"));
++ pm8001_dbg(pm8001_ha, FAIL, "Invalid tag\n");
+ circularQ = &pm8001_ha->inbnd_q_tbl[0];
+ payload.tag = cpu_to_le32(tag);
+ payload.ppc_phyid = (((operation & 0xF) << 8) | (phyid & 0xFF));
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk(" phy profile command for phy %x ,length is %d\n",
+- payload.ppc_phyid, length));
++ pm8001_dbg(pm8001_ha, INIT,
++ " phy profile command for phy %x ,length is %d\n",
++ payload.ppc_phyid, length);
+ for (i = length; i < (length + PHY_DWORD_LENGTH - 1); i++) {
+ payload.reserved[j] = cpu_to_le32(*((u32 *)buf + i));
+ j++;
+@@ -5056,7 +4893,7 @@ void pm8001_set_phy_profile(struct pm8001_hba_info *pm8001_ha,
+ SAS_PHY_ANALOG_SETTINGS_PAGE, i, length, (u32 *)buf);
+ length = length + PHY_DWORD_LENGTH;
+ }
+- PM8001_INIT_DBG(pm8001_ha, pm8001_printk("phy settings completed\n"));
++ pm8001_dbg(pm8001_ha, INIT, "phy settings completed\n");
+ }
+
+ void pm8001_set_phy_profile_single(struct pm8001_hba_info *pm8001_ha,
+@@ -5071,7 +4908,7 @@ void pm8001_set_phy_profile_single(struct pm8001_hba_info *pm8001_ha,
+
+ rc = pm8001_tag_alloc(pm8001_ha, &tag);
+ if (rc)
+- PM8001_INIT_DBG(pm8001_ha, pm8001_printk("Invalid tag"));
++ pm8001_dbg(pm8001_ha, INIT, "Invalid tag\n");
+
+ circularQ = &pm8001_ha->inbnd_q_tbl[0];
+ opc = OPC_INB_SET_PHY_PROFILE;
+@@ -5088,8 +4925,7 @@ void pm8001_set_phy_profile_single(struct pm8001_hba_info *pm8001_ha,
+ if (rc)
+ pm8001_tag_free(pm8001_ha, tag);
+
+- PM8001_INIT_DBG(pm8001_ha,
+- pm8001_printk("PHY %d settings applied", phy));
++ pm8001_dbg(pm8001_ha, INIT, "PHY %d settings applied\n", phy);
+ }
+ const struct pm8001_dispatch pm8001_80xx_dispatch = {
+ .name = "pmc80xx",
+diff --git a/drivers/scsi/ufs/ufs-mediatek.c b/drivers/scsi/ufs/ufs-mediatek.c
+index 934713472ebce..09d2ac20508b5 100644
+--- a/drivers/scsi/ufs/ufs-mediatek.c
++++ b/drivers/scsi/ufs/ufs-mediatek.c
+@@ -813,7 +813,7 @@ static void ufs_mtk_vreg_set_lpm(struct ufs_hba *hba, bool lpm)
+ if (!hba->vreg_info.vccq2 || !hba->vreg_info.vcc)
+ return;
+
+- if (lpm & !hba->vreg_info.vcc->enabled)
++ if (lpm && !hba->vreg_info.vcc->enabled)
+ regulator_set_mode(hba->vreg_info.vccq2->reg,
+ REGULATOR_MODE_IDLE);
+ else if (!lpm)
+diff --git a/drivers/spi/spi-cadence-quadspi.c b/drivers/spi/spi-cadence-quadspi.c
+index 826b01f346246..2e1255bf1b429 100644
+--- a/drivers/spi/spi-cadence-quadspi.c
++++ b/drivers/spi/spi-cadence-quadspi.c
+@@ -1198,6 +1198,7 @@ static int cqspi_probe(struct platform_device *pdev)
+ cqspi = spi_master_get_devdata(master);
+
+ cqspi->pdev = pdev;
++ platform_set_drvdata(pdev, cqspi);
+
+ /* Obtain configuration from OF. */
+ ret = cqspi_of_get_pdata(cqspi);
+diff --git a/drivers/staging/media/sunxi/cedrus/cedrus.c b/drivers/staging/media/sunxi/cedrus/cedrus.c
+index e0e35502e34a3..1dd833757c4ee 100644
+--- a/drivers/staging/media/sunxi/cedrus/cedrus.c
++++ b/drivers/staging/media/sunxi/cedrus/cedrus.c
+@@ -103,6 +103,25 @@ static const struct cedrus_control cedrus_controls[] = {
+ .codec = CEDRUS_CODEC_H264,
+ .required = false,
+ },
++ /*
++ * We only expose supported profiles information,
++ * and not levels as it's not clear what is supported
++ * for each hardware/core version.
++ * In any case, TRY/S_FMT will clamp the format resolution
++ * to the maximum supported.
++ */
++ {
++ .cfg = {
++ .id = V4L2_CID_MPEG_VIDEO_H264_PROFILE,
++ .min = V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE,
++ .def = V4L2_MPEG_VIDEO_H264_PROFILE_MAIN,
++ .max = V4L2_MPEG_VIDEO_H264_PROFILE_HIGH,
++ .menu_skip_mask =
++ BIT(V4L2_MPEG_VIDEO_H264_PROFILE_EXTENDED),
++ },
++ .codec = CEDRUS_CODEC_H264,
++ .required = false,
++ },
+ {
+ .cfg = {
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_SPS,
+diff --git a/drivers/thunderbolt/switch.c b/drivers/thunderbolt/switch.c
+index c73bbfe69ba16..9a272a516b2d7 100644
+--- a/drivers/thunderbolt/switch.c
++++ b/drivers/thunderbolt/switch.c
+@@ -761,12 +761,6 @@ static int tb_init_port(struct tb_port *port)
+
+ tb_dump_port(port->sw->tb, &port->config);
+
+- /* Control port does not need HopID allocation */
+- if (port->port) {
+- ida_init(&port->in_hopids);
+- ida_init(&port->out_hopids);
+- }
+-
+ INIT_LIST_HEAD(&port->list);
+ return 0;
+
+@@ -1764,10 +1758,8 @@ static void tb_switch_release(struct device *dev)
+ dma_port_free(sw->dma_port);
+
+ tb_switch_for_each_port(sw, port) {
+- if (!port->disabled) {
+- ida_destroy(&port->in_hopids);
+- ida_destroy(&port->out_hopids);
+- }
++ ida_destroy(&port->in_hopids);
++ ida_destroy(&port->out_hopids);
+ }
+
+ kfree(sw->uuid);
+@@ -1947,6 +1939,12 @@ struct tb_switch *tb_switch_alloc(struct tb *tb, struct device *parent,
+ /* minimum setup for tb_find_cap and tb_drom_read to work */
+ sw->ports[i].sw = sw;
+ sw->ports[i].port = i;
++
++ /* Control port does not need HopID allocation */
++ if (i) {
++ ida_init(&sw->ports[i].in_hopids);
++ ida_init(&sw->ports[i].out_hopids);
++ }
+ }
+
+ ret = tb_switch_find_vse_cap(sw, TB_VSE_CAP_PLUG_EVENTS);
+diff --git a/drivers/thunderbolt/tb.c b/drivers/thunderbolt/tb.c
+index 214fbc92c1b7d..a56ea540af00b 100644
+--- a/drivers/thunderbolt/tb.c
++++ b/drivers/thunderbolt/tb.c
+@@ -138,6 +138,10 @@ static void tb_discover_tunnels(struct tb_switch *sw)
+ parent->boot = true;
+ parent = tb_switch_parent(parent);
+ }
++ } else if (tb_tunnel_is_dp(tunnel)) {
++ /* Keep the domain from powering down */
++ pm_runtime_get_sync(&tunnel->src_port->sw->dev);
++ pm_runtime_get_sync(&tunnel->dst_port->sw->dev);
+ }
+
+ list_add_tail(&tunnel->list, &tcm->tunnel_list);
+diff --git a/drivers/tty/serial/stm32-usart.c b/drivers/tty/serial/stm32-usart.c
+index ee6c7762d3559..6248304a001f4 100644
+--- a/drivers/tty/serial/stm32-usart.c
++++ b/drivers/tty/serial/stm32-usart.c
+@@ -350,7 +350,6 @@ static void stm32_transmit_chars_dma(struct uart_port *port)
+ struct stm32_usart_offsets *ofs = &stm32port->info->ofs;
+ struct circ_buf *xmit = &port->state->xmit;
+ struct dma_async_tx_descriptor *desc = NULL;
+- dma_cookie_t cookie;
+ unsigned int count, i;
+
+ if (stm32port->tx_dma_busy)
+@@ -384,17 +383,18 @@ static void stm32_transmit_chars_dma(struct uart_port *port)
+ DMA_MEM_TO_DEV,
+ DMA_PREP_INTERRUPT);
+
+- if (!desc) {
+- for (i = count; i > 0; i--)
+- stm32_transmit_chars_pio(port);
+- return;
+- }
++ if (!desc)
++ goto fallback_err;
+
+ desc->callback = stm32_tx_dma_complete;
+ desc->callback_param = port;
+
+ /* Push current DMA TX transaction in the pending queue */
+- cookie = dmaengine_submit(desc);
++ if (dma_submit_error(dmaengine_submit(desc))) {
++ /* dma no yet started, safe to free resources */
++ dmaengine_terminate_async(stm32port->tx_ch);
++ goto fallback_err;
++ }
+
+ /* Issue pending DMA TX requests */
+ dma_async_issue_pending(stm32port->tx_ch);
+@@ -403,6 +403,11 @@ static void stm32_transmit_chars_dma(struct uart_port *port)
+
+ xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE - 1);
+ port->icount.tx += count;
++ return;
++
++fallback_err:
++ for (i = count; i > 0; i--)
++ stm32_transmit_chars_pio(port);
+ }
+
+ static void stm32_transmit_chars(struct uart_port *port)
+@@ -1087,7 +1092,6 @@ static int stm32_of_dma_rx_probe(struct stm32_port *stm32port,
+ struct device *dev = &pdev->dev;
+ struct dma_slave_config config;
+ struct dma_async_tx_descriptor *desc = NULL;
+- dma_cookie_t cookie;
+ int ret;
+
+ /* Request DMA RX channel */
+@@ -1132,7 +1136,11 @@ static int stm32_of_dma_rx_probe(struct stm32_port *stm32port,
+ desc->callback_param = NULL;
+
+ /* Push current DMA transaction in the pending queue */
+- cookie = dmaengine_submit(desc);
++ ret = dma_submit_error(dmaengine_submit(desc));
++ if (ret) {
++ dmaengine_terminate_sync(stm32port->rx_ch);
++ goto config_err;
++ }
+
+ /* Issue pending DMA requests */
+ dma_async_issue_pending(stm32port->rx_ch);
+diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
+index 56f7235bc068c..2a86ad4b12b34 100644
+--- a/drivers/usb/dwc3/gadget.c
++++ b/drivers/usb/dwc3/gadget.c
+@@ -783,8 +783,6 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep)
+
+ trace_dwc3_gadget_ep_disable(dep);
+
+- dwc3_remove_requests(dwc, dep);
+-
+ /* make sure HW endpoint isn't stalled */
+ if (dep->flags & DWC3_EP_STALL)
+ __dwc3_gadget_ep_set_halt(dep, 0, false);
+@@ -803,6 +801,8 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep)
+ dep->endpoint.desc = NULL;
+ }
+
++ dwc3_remove_requests(dwc, dep);
++
+ return 0;
+ }
+
+@@ -1617,7 +1617,7 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req)
+ {
+ struct dwc3 *dwc = dep->dwc;
+
+- if (!dep->endpoint.desc || !dwc->pullups_connected) {
++ if (!dep->endpoint.desc || !dwc->pullups_connected || !dwc->connected) {
+ dev_err(dwc->dev, "%s: can't queue to disabled endpoint\n",
+ dep->name);
+ return -ESHUTDOWN;
+@@ -2125,6 +2125,17 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on)
+ }
+ }
+
++ /*
++ * Check the return value for successful resume, or error. For a
++ * successful resume, the DWC3 runtime PM resume routine will handle
++ * the run stop sequence, so avoid duplicate operations here.
++ */
++ ret = pm_runtime_get_sync(dwc->dev);
++ if (!ret || ret < 0) {
++ pm_runtime_put(dwc->dev);
++ return 0;
++ }
++
+ /*
+ * Synchronize any pending event handling before executing the controller
+ * halt routine.
+@@ -2139,6 +2150,7 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on)
+ if (!is_on) {
+ u32 count;
+
++ dwc->connected = false;
+ /*
+ * In the Synopsis DesignWare Cores USB3 Databook Rev. 3.30a
+ * Section 4.1.8 Table 4-7, it states that for a device-initiated
+@@ -2169,6 +2181,7 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on)
+
+ ret = dwc3_gadget_run_stop(dwc, is_on, false);
+ spin_unlock_irqrestore(&dwc->lock, flags);
++ pm_runtime_put(dwc->dev);
+
+ return ret;
+ }
+@@ -3254,8 +3267,6 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)
+ {
+ u32 reg;
+
+- dwc->connected = true;
+-
+ /*
+ * WORKAROUND: DWC3 revisions <1.88a have an issue which
+ * would cause a missing Disconnect Event if there's a
+@@ -3295,6 +3306,7 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)
+ * transfers."
+ */
+ dwc3_stop_active_transfers(dwc);
++ dwc->connected = true;
+
+ reg = dwc3_readl(dwc->regs, DWC3_DCTL);
+ reg &= ~DWC3_DCTL_TSTCTRL_MASK;
+diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c
+index 36ffb43f9c1a0..9b7fa53d6642b 100644
+--- a/drivers/usb/gadget/configfs.c
++++ b/drivers/usb/gadget/configfs.c
+@@ -97,6 +97,8 @@ struct gadget_config_name {
+ struct list_head list;
+ };
+
++#define USB_MAX_STRING_WITH_NULL_LEN (USB_MAX_STRING_LEN+1)
++
+ static int usb_string_copy(const char *s, char **s_copy)
+ {
+ int ret;
+@@ -106,12 +108,16 @@ static int usb_string_copy(const char *s, char **s_copy)
+ if (ret > USB_MAX_STRING_LEN)
+ return -EOVERFLOW;
+
+- str = kstrdup(s, GFP_KERNEL);
+- if (!str)
+- return -ENOMEM;
++ if (copy) {
++ str = copy;
++ } else {
++ str = kmalloc(USB_MAX_STRING_WITH_NULL_LEN, GFP_KERNEL);
++ if (!str)
++ return -ENOMEM;
++ }
++ strcpy(str, s);
+ if (str[ret - 1] == '\n')
+ str[ret - 1] = '\0';
+- kfree(copy);
+ *s_copy = str;
+ return 0;
+ }
+diff --git a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c
+index 238a8088e17f6..7cc8813f5d8cb 100644
+--- a/drivers/usb/storage/transport.c
++++ b/drivers/usb/storage/transport.c
+@@ -651,6 +651,13 @@ void usb_stor_invoke_transport(struct scsi_cmnd *srb, struct us_data *us)
+ need_auto_sense = 1;
+ }
+
++ /* Some devices (Kindle) require another command after SYNC CACHE */
++ if ((us->fflags & US_FL_SENSE_AFTER_SYNC) &&
++ srb->cmnd[0] == SYNCHRONIZE_CACHE) {
++ usb_stor_dbg(us, "-- sense after SYNC CACHE\n");
++ need_auto_sense = 1;
++ }
++
+ /*
+ * If we have a failure, we're going to do a REQUEST_SENSE
+ * automatically. Note that we differentiate between a command
+diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
+index 5732e9691f08f..efa972be2ee34 100644
+--- a/drivers/usb/storage/unusual_devs.h
++++ b/drivers/usb/storage/unusual_devs.h
+@@ -2211,6 +2211,18 @@ UNUSUAL_DEV( 0x1908, 0x3335, 0x0200, 0x0200,
+ USB_SC_DEVICE, USB_PR_DEVICE, NULL,
+ US_FL_NO_READ_DISC_INFO ),
+
++/*
++ * Reported by Matthias Schwarzott <zzam@gentoo.org>
++ * The Amazon Kindle treats SYNCHRONIZE CACHE as an indication that
++ * the host may be finished with it, and automatically ejects its
++ * emulated media unless it receives another command within one second.
++ */
++UNUSUAL_DEV( 0x1949, 0x0004, 0x0000, 0x9999,
++ "Amazon",
++ "Kindle",
++ USB_SC_DEVICE, USB_PR_DEVICE, NULL,
++ US_FL_SENSE_AFTER_SYNC ),
++
+ /*
+ * Reported by Oliver Neukum <oneukum@suse.com>
+ * This device morphes spontaneously into another device if the access
+diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
+index a6fae1f865051..563658096b675 100644
+--- a/drivers/usb/typec/tcpm/tcpm.c
++++ b/drivers/usb/typec/tcpm/tcpm.c
+@@ -785,6 +785,7 @@ static int tcpm_set_current_limit(struct tcpm_port *port, u32 max_ma, u32 mv)
+
+ port->supply_voltage = mv;
+ port->current_limit = max_ma;
++ power_supply_changed(port->psy);
+
+ if (port->tcpc->set_current_limit)
+ ret = port->tcpc->set_current_limit(port->tcpc, max_ma, mv);
+@@ -2300,6 +2301,7 @@ static int tcpm_pd_select_pdo(struct tcpm_port *port, int *sink_pdo,
+
+ port->pps_data.supported = false;
+ port->usb_type = POWER_SUPPLY_USB_TYPE_PD;
++ power_supply_changed(port->psy);
+
+ /*
+ * Select the source PDO providing the most power which has a
+@@ -2324,6 +2326,7 @@ static int tcpm_pd_select_pdo(struct tcpm_port *port, int *sink_pdo,
+ port->pps_data.supported = true;
+ port->usb_type =
+ POWER_SUPPLY_USB_TYPE_PD_PPS;
++ power_supply_changed(port->psy);
+ }
+ continue;
+ default:
+@@ -2481,6 +2484,7 @@ static unsigned int tcpm_pd_select_pps_apdo(struct tcpm_port *port)
+ port->pps_data.out_volt));
+ port->pps_data.op_curr = min(port->pps_data.max_curr,
+ port->pps_data.op_curr);
++ power_supply_changed(port->psy);
+ }
+
+ return src_pdo;
+@@ -2716,6 +2720,7 @@ static int tcpm_set_charge(struct tcpm_port *port, bool charge)
+ return ret;
+ }
+ port->vbus_charge = charge;
++ power_supply_changed(port->psy);
+ return 0;
+ }
+
+@@ -2880,6 +2885,7 @@ static void tcpm_reset_port(struct tcpm_port *port)
+ port->try_src_count = 0;
+ port->try_snk_count = 0;
+ port->usb_type = POWER_SUPPLY_USB_TYPE_C;
++ power_supply_changed(port->psy);
+ port->nr_sink_caps = 0;
+ port->sink_cap_done = false;
+ if (port->tcpc->enable_frs)
+@@ -4982,7 +4988,7 @@ static int tcpm_psy_set_prop(struct power_supply *psy,
+ ret = -EINVAL;
+ break;
+ }
+-
++ power_supply_changed(port->psy);
+ return ret;
+ }
+
+@@ -5134,6 +5140,7 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc)
+ err = devm_tcpm_psy_register(port);
+ if (err)
+ goto out_role_sw_put;
++ power_supply_changed(port->psy);
+
+ port->typec_port = typec_register_port(port->dev, &port->typec_caps);
+ if (IS_ERR(port->typec_port)) {
+diff --git a/drivers/usb/typec/tps6598x.c b/drivers/usb/typec/tps6598x.c
+index 3db33bb622c38..d8e4594fe0090 100644
+--- a/drivers/usb/typec/tps6598x.c
++++ b/drivers/usb/typec/tps6598x.c
+@@ -62,7 +62,6 @@ enum {
+ struct tps6598x_rx_identity_reg {
+ u8 status;
+ struct usb_pd_identity identity;
+- u32 vdo[3];
+ } __packed;
+
+ /* Standard Task return codes */
+diff --git a/drivers/usb/usbip/vudc_sysfs.c b/drivers/usb/usbip/vudc_sysfs.c
+index a3ec39fc61778..7383a543c6d12 100644
+--- a/drivers/usb/usbip/vudc_sysfs.c
++++ b/drivers/usb/usbip/vudc_sysfs.c
+@@ -174,7 +174,7 @@ static ssize_t usbip_sockfd_store(struct device *dev,
+
+ udc->ud.tcp_socket = socket;
+ udc->ud.tcp_rx = tcp_rx;
+- udc->ud.tcp_rx = tcp_tx;
++ udc->ud.tcp_tx = tcp_tx;
+ udc->ud.status = SDEV_ST_USED;
+
+ spin_unlock_irq(&udc->ud.lock);
+diff --git a/drivers/vfio/Kconfig b/drivers/vfio/Kconfig
+index 5533df91b257d..90c0525b1e0cf 100644
+--- a/drivers/vfio/Kconfig
++++ b/drivers/vfio/Kconfig
+@@ -21,7 +21,7 @@ config VFIO_VIRQFD
+
+ menuconfig VFIO
+ tristate "VFIO Non-Privileged userspace driver framework"
+- depends on IOMMU_API
++ select IOMMU_API
+ select VFIO_IOMMU_TYPE1 if (X86 || S390 || ARM || ARM64)
+ help
+ VFIO provides a framework for secure userspace device drivers.
+diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c
+index 29ed4173f04e6..fc5707ada024e 100644
+--- a/drivers/vhost/vdpa.c
++++ b/drivers/vhost/vdpa.c
+@@ -312,8 +312,10 @@ static long vhost_vdpa_get_vring_num(struct vhost_vdpa *v, u16 __user *argp)
+
+ static void vhost_vdpa_config_put(struct vhost_vdpa *v)
+ {
+- if (v->config_ctx)
++ if (v->config_ctx) {
+ eventfd_ctx_put(v->config_ctx);
++ v->config_ctx = NULL;
++ }
+ }
+
+ static long vhost_vdpa_set_config_call(struct vhost_vdpa *v, u32 __user *argp)
+@@ -333,8 +335,12 @@ static long vhost_vdpa_set_config_call(struct vhost_vdpa *v, u32 __user *argp)
+ if (!IS_ERR_OR_NULL(ctx))
+ eventfd_ctx_put(ctx);
+
+- if (IS_ERR(v->config_ctx))
+- return PTR_ERR(v->config_ctx);
++ if (IS_ERR(v->config_ctx)) {
++ long ret = PTR_ERR(v->config_ctx);
++
++ v->config_ctx = NULL;
++ return ret;
++ }
+
+ v->vdpa->config->set_config_cb(v->vdpa, &cb);
+
+@@ -904,14 +910,10 @@ err:
+
+ static void vhost_vdpa_clean_irq(struct vhost_vdpa *v)
+ {
+- struct vhost_virtqueue *vq;
+ int i;
+
+- for (i = 0; i < v->nvqs; i++) {
+- vq = &v->vqs[i];
+- if (vq->call_ctx.producer.irq)
+- irq_bypass_unregister_producer(&vq->call_ctx.producer);
+- }
++ for (i = 0; i < v->nvqs; i++)
++ vhost_vdpa_unsetup_vq_irq(v, i);
+ }
+
+ static int vhost_vdpa_release(struct inode *inode, struct file *filep)
+diff --git a/fs/afs/dir.c b/fs/afs/dir.c
+index 9068d5578a26f..9dc6f4b1c4177 100644
+--- a/fs/afs/dir.c
++++ b/fs/afs/dir.c
+@@ -69,7 +69,6 @@ const struct inode_operations afs_dir_inode_operations = {
+ .permission = afs_permission,
+ .getattr = afs_getattr,
+ .setattr = afs_setattr,
+- .listxattr = afs_listxattr,
+ };
+
+ const struct address_space_operations afs_dir_aops = {
+diff --git a/fs/afs/file.c b/fs/afs/file.c
+index 85f5adf21aa08..960b64268623e 100644
+--- a/fs/afs/file.c
++++ b/fs/afs/file.c
+@@ -43,7 +43,6 @@ const struct inode_operations afs_file_inode_operations = {
+ .getattr = afs_getattr,
+ .setattr = afs_setattr,
+ .permission = afs_permission,
+- .listxattr = afs_listxattr,
+ };
+
+ const struct address_space_operations afs_fs_aops = {
+diff --git a/fs/afs/fs_operation.c b/fs/afs/fs_operation.c
+index 97cab12b0a6c2..71c58723763d2 100644
+--- a/fs/afs/fs_operation.c
++++ b/fs/afs/fs_operation.c
+@@ -181,10 +181,13 @@ void afs_wait_for_operation(struct afs_operation *op)
+ if (test_bit(AFS_SERVER_FL_IS_YFS, &op->server->flags) &&
+ op->ops->issue_yfs_rpc)
+ op->ops->issue_yfs_rpc(op);
+- else
++ else if (op->ops->issue_afs_rpc)
+ op->ops->issue_afs_rpc(op);
++ else
++ op->ac.error = -ENOTSUPP;
+
+- op->error = afs_wait_for_call_to_complete(op->call, &op->ac);
++ if (op->call)
++ op->error = afs_wait_for_call_to_complete(op->call, &op->ac);
+ }
+
+ switch (op->error) {
+diff --git a/fs/afs/inode.c b/fs/afs/inode.c
+index b0d7b892090da..1d03eb1920ec0 100644
+--- a/fs/afs/inode.c
++++ b/fs/afs/inode.c
+@@ -27,7 +27,6 @@
+
+ static const struct inode_operations afs_symlink_inode_operations = {
+ .get_link = page_get_link,
+- .listxattr = afs_listxattr,
+ };
+
+ static noinline void dump_vnode(struct afs_vnode *vnode, struct afs_vnode *parent_vnode)
+diff --git a/fs/afs/internal.h b/fs/afs/internal.h
+index 0d150a29e39ec..525ef075fcd90 100644
+--- a/fs/afs/internal.h
++++ b/fs/afs/internal.h
+@@ -1508,7 +1508,6 @@ extern int afs_launder_page(struct page *);
+ * xattr.c
+ */
+ extern const struct xattr_handler *afs_xattr_handlers[];
+-extern ssize_t afs_listxattr(struct dentry *, char *, size_t);
+
+ /*
+ * yfsclient.c
+diff --git a/fs/afs/mntpt.c b/fs/afs/mntpt.c
+index 052dab2f5c03a..bbb2c210d139d 100644
+--- a/fs/afs/mntpt.c
++++ b/fs/afs/mntpt.c
+@@ -32,7 +32,6 @@ const struct inode_operations afs_mntpt_inode_operations = {
+ .lookup = afs_mntpt_lookup,
+ .readlink = page_readlink,
+ .getattr = afs_getattr,
+- .listxattr = afs_listxattr,
+ };
+
+ const struct inode_operations afs_autocell_inode_operations = {
+diff --git a/fs/afs/xattr.c b/fs/afs/xattr.c
+index 95c573dcda116..6a29337bd562f 100644
+--- a/fs/afs/xattr.c
++++ b/fs/afs/xattr.c
+@@ -11,29 +11,6 @@
+ #include <linux/xattr.h>
+ #include "internal.h"
+
+-static const char afs_xattr_list[] =
+- "afs.acl\0"
+- "afs.cell\0"
+- "afs.fid\0"
+- "afs.volume\0"
+- "afs.yfs.acl\0"
+- "afs.yfs.acl_inherited\0"
+- "afs.yfs.acl_num_cleaned\0"
+- "afs.yfs.vol_acl";
+-
+-/*
+- * Retrieve a list of the supported xattrs.
+- */
+-ssize_t afs_listxattr(struct dentry *dentry, char *buffer, size_t size)
+-{
+- if (size == 0)
+- return sizeof(afs_xattr_list);
+- if (size < sizeof(afs_xattr_list))
+- return -ERANGE;
+- memcpy(buffer, afs_xattr_list, sizeof(afs_xattr_list));
+- return sizeof(afs_xattr_list);
+-}
+-
+ /*
+ * Deal with the result of a successful fetch ACL operation.
+ */
+@@ -230,6 +207,8 @@ static int afs_xattr_get_yfs(const struct xattr_handler *handler,
+ else
+ ret = -ERANGE;
+ }
++ } else if (ret == -ENOTSUPP) {
++ ret = -ENODATA;
+ }
+
+ error_yacl:
+@@ -254,6 +233,7 @@ static int afs_xattr_set_yfs(const struct xattr_handler *handler,
+ {
+ struct afs_operation *op;
+ struct afs_vnode *vnode = AFS_FS_I(inode);
++ int ret;
+
+ if (flags == XATTR_CREATE ||
+ strcmp(name, "acl") != 0)
+@@ -268,7 +248,10 @@ static int afs_xattr_set_yfs(const struct xattr_handler *handler,
+ return afs_put_operation(op);
+
+ op->ops = &yfs_store_opaque_acl2_operation;
+- return afs_do_sync_operation(op);
++ ret = afs_do_sync_operation(op);
++ if (ret == -ENOTSUPP)
++ ret = -ENODATA;
++ return ret;
+ }
+
+ static const struct xattr_handler afs_xattr_yfs_handler = {
+diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
+index f2f6f65038923..9faf15bd5a548 100644
+--- a/fs/btrfs/ctree.c
++++ b/fs/btrfs/ctree.c
+@@ -1367,7 +1367,9 @@ get_old_root(struct btrfs_root *root, u64 time_seq)
+ "failed to read tree block %llu from get_old_root",
+ logical);
+ } else {
++ btrfs_tree_read_lock(old);
+ eb = btrfs_clone_extent_buffer(old);
++ btrfs_tree_read_unlock(old);
+ free_extent_buffer(old);
+ }
+ } else if (old_root) {
+diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
+index cbeb0cdaca7af..4162ef602a024 100644
+--- a/fs/btrfs/inode.c
++++ b/fs/btrfs/inode.c
+@@ -8811,7 +8811,7 @@ int __init btrfs_init_cachep(void)
+
+ btrfs_free_space_bitmap_cachep = kmem_cache_create("btrfs_free_space_bitmap",
+ PAGE_SIZE, PAGE_SIZE,
+- SLAB_RED_ZONE, NULL);
++ SLAB_MEM_SPREAD, NULL);
+ if (!btrfs_free_space_bitmap_cachep)
+ goto fail;
+
+diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
+index 9ee5f304592f1..b1f0c05d6eaf8 100644
+--- a/fs/cifs/inode.c
++++ b/fs/cifs/inode.c
+@@ -2375,7 +2375,7 @@ int cifs_getattr(const struct path *path, struct kstat *stat,
+ * We need to be sure that all dirty pages are written and the server
+ * has actual ctime, mtime and file length.
+ */
+- if ((request_mask & (STATX_CTIME | STATX_MTIME | STATX_SIZE)) &&
++ if ((request_mask & (STATX_CTIME | STATX_MTIME | STATX_SIZE | STATX_BLOCKS)) &&
+ !CIFS_CACHE_READ(CIFS_I(inode)) &&
+ inode->i_mapping && inode->i_mapping->nrpages != 0) {
+ rc = filemap_fdatawait(inode->i_mapping);
+@@ -2565,6 +2565,14 @@ set_size_out:
+ if (rc == 0) {
+ cifsInode->server_eof = attrs->ia_size;
+ cifs_setsize(inode, attrs->ia_size);
++ /*
++ * i_blocks is not related to (i_size / i_blksize), but instead
++ * 512 byte (2**9) size is required for calculating num blocks.
++ * Until we can query the server for actual allocation size,
++ * this is best estimate we have for blocks allocated for a file
++ * Number of blocks must be rounded up so size 1 is not 0 blocks
++ */
++ inode->i_blocks = (512 - 1 + attrs->ia_size) >> 9;
+
+ /*
+ * The man page of truncate says if the size changed,
+diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c
+index 0b9f1a0cba1a3..7b45b3b79df56 100644
+--- a/fs/cifs/transport.c
++++ b/fs/cifs/transport.c
+@@ -1156,9 +1156,12 @@ compound_send_recv(const unsigned int xid, struct cifs_ses *ses,
+ /*
+ * Compounding is never used during session establish.
+ */
+- if ((ses->status == CifsNew) || (optype & CIFS_NEG_OP))
++ if ((ses->status == CifsNew) || (optype & CIFS_NEG_OP)) {
++ mutex_lock(&server->srv_mutex);
+ smb311_update_preauth_hash(ses, rqst[0].rq_iov,
+ rqst[0].rq_nvec);
++ mutex_unlock(&server->srv_mutex);
++ }
+
+ for (i = 0; i < num_rqst; i++) {
+ rc = wait_for_response(server, midQ[i]);
+@@ -1226,7 +1229,9 @@ compound_send_recv(const unsigned int xid, struct cifs_ses *ses,
+ .iov_base = resp_iov[0].iov_base,
+ .iov_len = resp_iov[0].iov_len
+ };
++ mutex_lock(&server->srv_mutex);
+ smb311_update_preauth_hash(ses, &iov, 1);
++ mutex_unlock(&server->srv_mutex);
+ }
+
+ out:
+diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
+index 65ecaf96d0a4d..b92acb6603139 100644
+--- a/fs/ext4/ext4.h
++++ b/fs/ext4/ext4.h
+@@ -2762,6 +2762,8 @@ void __ext4_fc_track_link(handle_t *handle, struct inode *inode,
+ struct dentry *dentry);
+ void ext4_fc_track_unlink(handle_t *handle, struct dentry *dentry);
+ void ext4_fc_track_link(handle_t *handle, struct dentry *dentry);
++void __ext4_fc_track_create(handle_t *handle, struct inode *inode,
++ struct dentry *dentry);
+ void ext4_fc_track_create(handle_t *handle, struct dentry *dentry);
+ void ext4_fc_track_inode(handle_t *handle, struct inode *inode);
+ void ext4_fc_mark_ineligible(struct super_block *sb, int reason);
+diff --git a/fs/ext4/fast_commit.c b/fs/ext4/fast_commit.c
+index a1dd7ca962c3f..4008a674250cf 100644
+--- a/fs/ext4/fast_commit.c
++++ b/fs/ext4/fast_commit.c
+@@ -452,10 +452,10 @@ void ext4_fc_track_link(handle_t *handle, struct dentry *dentry)
+ __ext4_fc_track_link(handle, d_inode(dentry), dentry);
+ }
+
+-void ext4_fc_track_create(handle_t *handle, struct dentry *dentry)
++void __ext4_fc_track_create(handle_t *handle, struct inode *inode,
++ struct dentry *dentry)
+ {
+ struct __track_dentry_update_args args;
+- struct inode *inode = d_inode(dentry);
+ int ret;
+
+ args.dentry = dentry;
+@@ -466,6 +466,11 @@ void ext4_fc_track_create(handle_t *handle, struct dentry *dentry)
+ trace_ext4_fc_track_create(inode, dentry, ret);
+ }
+
++void ext4_fc_track_create(handle_t *handle, struct dentry *dentry)
++{
++ __ext4_fc_track_create(handle, d_inode(dentry), dentry);
++}
++
+ /* __track_fn for inode tracking */
+ static int __track_inode(struct inode *inode, void *arg, bool update)
+ {
+diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
+index 0afab6d5c65bd..c2b8ba343bb4b 100644
+--- a/fs/ext4/inode.c
++++ b/fs/ext4/inode.c
+@@ -5029,7 +5029,7 @@ static int ext4_do_update_inode(handle_t *handle,
+ struct ext4_inode_info *ei = EXT4_I(inode);
+ struct buffer_head *bh = iloc->bh;
+ struct super_block *sb = inode->i_sb;
+- int err = 0, rc, block;
++ int err = 0, block;
+ int need_datasync = 0, set_large_file = 0;
+ uid_t i_uid;
+ gid_t i_gid;
+@@ -5141,9 +5141,9 @@ static int ext4_do_update_inode(handle_t *handle,
+ bh->b_data);
+
+ BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata");
+- rc = ext4_handle_dirty_metadata(handle, NULL, bh);
+- if (!err)
+- err = rc;
++ err = ext4_handle_dirty_metadata(handle, NULL, bh);
++ if (err)
++ goto out_brelse;
+ ext4_clear_inode_state(inode, EXT4_STATE_NEW);
+ if (set_large_file) {
+ BUFFER_TRACE(EXT4_SB(sb)->s_sbh, "get write access");
+@@ -5385,8 +5385,10 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr)
+ inode->i_gid = attr->ia_gid;
+ error = ext4_mark_inode_dirty(handle, inode);
+ ext4_journal_stop(handle);
+- if (unlikely(error))
++ if (unlikely(error)) {
++ ext4_fc_stop_update(inode);
+ return error;
++ }
+ }
+
+ if (attr->ia_valid & ATTR_SIZE) {
+diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
+index 14783f7dcbe98..6c7eba426a678 100644
+--- a/fs/ext4/namei.c
++++ b/fs/ext4/namei.c
+@@ -3604,6 +3604,31 @@ static int ext4_setent(handle_t *handle, struct ext4_renament *ent,
+ return retval;
+ }
+
++static void ext4_resetent(handle_t *handle, struct ext4_renament *ent,
++ unsigned ino, unsigned file_type)
++{
++ struct ext4_renament old = *ent;
++ int retval = 0;
++
++ /*
++ * old->de could have moved from under us during make indexed dir,
++ * so the old->de may no longer valid and need to find it again
++ * before reset old inode info.
++ */
++ old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de, NULL);
++ if (IS_ERR(old.bh))
++ retval = PTR_ERR(old.bh);
++ if (!old.bh)
++ retval = -ENOENT;
++ if (retval) {
++ ext4_std_error(old.dir->i_sb, retval);
++ return;
++ }
++
++ ext4_setent(handle, &old, ino, file_type);
++ brelse(old.bh);
++}
++
+ static int ext4_find_delete_entry(handle_t *handle, struct inode *dir,
+ const struct qstr *d_name)
+ {
+@@ -3839,6 +3864,7 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry,
+ retval = ext4_mark_inode_dirty(handle, whiteout);
+ if (unlikely(retval))
+ goto end_rename;
++
+ }
+ if (!new.bh) {
+ retval = ext4_add_entry(handle, new.dentry, old.inode);
+@@ -3912,6 +3938,8 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry,
+ ext4_fc_track_unlink(handle, new.dentry);
+ __ext4_fc_track_link(handle, old.inode, new.dentry);
+ __ext4_fc_track_unlink(handle, old.inode, old.dentry);
++ if (whiteout)
++ __ext4_fc_track_create(handle, whiteout, old.dentry);
+ }
+
+ if (new.inode) {
+@@ -3926,8 +3954,8 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry,
+ end_rename:
+ if (whiteout) {
+ if (retval) {
+- ext4_setent(handle, &old,
+- old.inode->i_ino, old_file_type);
++ ext4_resetent(handle, &old,
++ old.inode->i_ino, old_file_type);
+ drop_nlink(whiteout);
+ }
+ unlock_new_inode(whiteout);
+diff --git a/fs/ext4/verity.c b/fs/ext4/verity.c
+index 5b7ba8f711538..00e3cbde472e4 100644
+--- a/fs/ext4/verity.c
++++ b/fs/ext4/verity.c
+@@ -201,55 +201,76 @@ static int ext4_end_enable_verity(struct file *filp, const void *desc,
+ struct inode *inode = file_inode(filp);
+ const int credits = 2; /* superblock and inode for ext4_orphan_del() */
+ handle_t *handle;
++ struct ext4_iloc iloc;
+ int err = 0;
+- int err2;
+
+- if (desc != NULL) {
+- /* Succeeded; write the verity descriptor. */
+- err = ext4_write_verity_descriptor(inode, desc, desc_size,
+- merkle_tree_size);
+-
+- /* Write all pages before clearing VERITY_IN_PROGRESS. */
+- if (!err)
+- err = filemap_write_and_wait(inode->i_mapping);
+- }
++ /*
++ * If an error already occurred (which fs/verity/ signals by passing
++ * desc == NULL), then only clean-up is needed.
++ */
++ if (desc == NULL)
++ goto cleanup;
+
+- /* If we failed, truncate anything we wrote past i_size. */
+- if (desc == NULL || err)
+- ext4_truncate(inode);
++ /* Append the verity descriptor. */
++ err = ext4_write_verity_descriptor(inode, desc, desc_size,
++ merkle_tree_size);
++ if (err)
++ goto cleanup;
+
+ /*
+- * We must always clean up by clearing EXT4_STATE_VERITY_IN_PROGRESS and
+- * deleting the inode from the orphan list, even if something failed.
+- * If everything succeeded, we'll also set the verity bit in the same
+- * transaction.
++ * Write all pages (both data and verity metadata). Note that this must
++ * happen before clearing EXT4_STATE_VERITY_IN_PROGRESS; otherwise pages
++ * beyond i_size won't be written properly. For crash consistency, this
++ * also must happen before the verity inode flag gets persisted.
+ */
++ err = filemap_write_and_wait(inode->i_mapping);
++ if (err)
++ goto cleanup;
+
+- ext4_clear_inode_state(inode, EXT4_STATE_VERITY_IN_PROGRESS);
++ /*
++ * Finally, set the verity inode flag and remove the inode from the
++ * orphan list (in a single transaction).
++ */
+
+ handle = ext4_journal_start(inode, EXT4_HT_INODE, credits);
+ if (IS_ERR(handle)) {
+- ext4_orphan_del(NULL, inode);
+- return PTR_ERR(handle);
++ err = PTR_ERR(handle);
++ goto cleanup;
+ }
+
+- err2 = ext4_orphan_del(handle, inode);
+- if (err2)
+- goto out_stop;
++ err = ext4_orphan_del(handle, inode);
++ if (err)
++ goto stop_and_cleanup;
+
+- if (desc != NULL && !err) {
+- struct ext4_iloc iloc;
++ err = ext4_reserve_inode_write(handle, inode, &iloc);
++ if (err)
++ goto stop_and_cleanup;
+
+- err = ext4_reserve_inode_write(handle, inode, &iloc);
+- if (err)
+- goto out_stop;
+- ext4_set_inode_flag(inode, EXT4_INODE_VERITY);
+- ext4_set_inode_flags(inode, false);
+- err = ext4_mark_iloc_dirty(handle, inode, &iloc);
+- }
+-out_stop:
++ ext4_set_inode_flag(inode, EXT4_INODE_VERITY);
++ ext4_set_inode_flags(inode, false);
++ err = ext4_mark_iloc_dirty(handle, inode, &iloc);
++ if (err)
++ goto stop_and_cleanup;
++
++ ext4_journal_stop(handle);
++
++ ext4_clear_inode_state(inode, EXT4_STATE_VERITY_IN_PROGRESS);
++ return 0;
++
++stop_and_cleanup:
+ ext4_journal_stop(handle);
+- return err ?: err2;
++cleanup:
++ /*
++ * Verity failed to be enabled, so clean up by truncating any verity
++ * metadata that was written beyond i_size (both from cache and from
++ * disk), removing the inode from the orphan list (if it wasn't done
++ * already), and clearing EXT4_STATE_VERITY_IN_PROGRESS.
++ */
++ truncate_inode_pages(inode->i_mapping, inode->i_size);
++ ext4_truncate(inode);
++ ext4_orphan_del(NULL, inode);
++ ext4_clear_inode_state(inode, EXT4_STATE_VERITY_IN_PROGRESS);
++ return err;
+ }
+
+ static int ext4_get_verity_descriptor_location(struct inode *inode,
+diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
+index 6127e94ea4f5d..4698471795732 100644
+--- a/fs/ext4/xattr.c
++++ b/fs/ext4/xattr.c
+@@ -2398,7 +2398,7 @@ retry_inode:
+ * external inode if possible.
+ */
+ if (ext4_has_feature_ea_inode(inode->i_sb) &&
+- !i.in_inode) {
++ i.value_len && !i.in_inode) {
+ i.in_inode = 1;
+ goto retry_inode;
+ }
+diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c
+index 61fce59cb4d38..f2c6bbe5cdb81 100644
+--- a/fs/gfs2/ops_fstype.c
++++ b/fs/gfs2/ops_fstype.c
+@@ -1084,6 +1084,7 @@ static int gfs2_fill_super(struct super_block *sb, struct fs_context *fc)
+ int silent = fc->sb_flags & SB_SILENT;
+ struct gfs2_sbd *sdp;
+ struct gfs2_holder mount_gh;
++ struct gfs2_holder freeze_gh;
+ int error;
+
+ sdp = init_sbd(sb);
+@@ -1195,25 +1196,18 @@ static int gfs2_fill_super(struct super_block *sb, struct fs_context *fc)
+ goto fail_per_node;
+ }
+
+- if (sb_rdonly(sb)) {
+- struct gfs2_holder freeze_gh;
++ error = gfs2_freeze_lock(sdp, &freeze_gh, 0);
++ if (error)
++ goto fail_per_node;
+
+- error = gfs2_glock_nq_init(sdp->sd_freeze_gl, LM_ST_SHARED,
+- LM_FLAG_NOEXP | GL_EXACT,
+- &freeze_gh);
+- if (error) {
+- fs_err(sdp, "can't make FS RO: %d\n", error);
+- goto fail_per_node;
+- }
+- gfs2_glock_dq_uninit(&freeze_gh);
+- } else {
++ if (!sb_rdonly(sb))
+ error = gfs2_make_fs_rw(sdp);
+- if (error) {
+- fs_err(sdp, "can't make FS RW: %d\n", error);
+- goto fail_per_node;
+- }
+- }
+
++ gfs2_freeze_unlock(&freeze_gh);
++ if (error) {
++ fs_err(sdp, "can't make FS RW: %d\n", error);
++ goto fail_per_node;
++ }
+ gfs2_glock_dq_uninit(&mount_gh);
+ gfs2_online_uevent(sdp);
+ return 0;
+@@ -1514,6 +1508,12 @@ static int gfs2_reconfigure(struct fs_context *fc)
+ fc->sb_flags |= SB_RDONLY;
+
+ if ((sb->s_flags ^ fc->sb_flags) & SB_RDONLY) {
++ struct gfs2_holder freeze_gh;
++
++ error = gfs2_freeze_lock(sdp, &freeze_gh, 0);
++ if (error)
++ return -EINVAL;
++
+ if (fc->sb_flags & SB_RDONLY) {
+ error = gfs2_make_fs_ro(sdp);
+ if (error)
+@@ -1523,6 +1523,7 @@ static int gfs2_reconfigure(struct fs_context *fc)
+ if (error)
+ errorfc(fc, "unable to remount read-write");
+ }
++ gfs2_freeze_unlock(&freeze_gh);
+ }
+ sdp->sd_args = *newargs;
+
+diff --git a/fs/gfs2/recovery.c b/fs/gfs2/recovery.c
+index a3c1911862f01..8f9c6480a5df4 100644
+--- a/fs/gfs2/recovery.c
++++ b/fs/gfs2/recovery.c
+@@ -470,9 +470,7 @@ void gfs2_recover_func(struct work_struct *work)
+
+ /* Acquire a shared hold on the freeze lock */
+
+- error = gfs2_glock_nq_init(sdp->sd_freeze_gl, LM_ST_SHARED,
+- LM_FLAG_NOEXP | LM_FLAG_PRIORITY |
+- GL_EXACT, &thaw_gh);
++ error = gfs2_freeze_lock(sdp, &thaw_gh, LM_FLAG_PRIORITY);
+ if (error)
+ goto fail_gunlock_ji;
+
+@@ -524,7 +522,7 @@ void gfs2_recover_func(struct work_struct *work)
+ clean_journal(jd, &head);
+ up_read(&sdp->sd_log_flush_lock);
+
+- gfs2_glock_dq_uninit(&thaw_gh);
++ gfs2_freeze_unlock(&thaw_gh);
+ t_rep = ktime_get();
+ fs_info(sdp, "jid=%u: Journal replayed in %lldms [jlck:%lldms, "
+ "jhead:%lldms, tlck:%lldms, replay:%lldms]\n",
+@@ -546,7 +544,7 @@ void gfs2_recover_func(struct work_struct *work)
+ goto done;
+
+ fail_gunlock_thaw:
+- gfs2_glock_dq_uninit(&thaw_gh);
++ gfs2_freeze_unlock(&thaw_gh);
+ fail_gunlock_ji:
+ if (jlocked) {
+ gfs2_glock_dq_uninit(&ji_gh);
+diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c
+index b3d951ab80680..ddd40c96f7a23 100644
+--- a/fs/gfs2/super.c
++++ b/fs/gfs2/super.c
+@@ -165,7 +165,6 @@ int gfs2_make_fs_rw(struct gfs2_sbd *sdp)
+ {
+ struct gfs2_inode *ip = GFS2_I(sdp->sd_jdesc->jd_inode);
+ struct gfs2_glock *j_gl = ip->i_gl;
+- struct gfs2_holder freeze_gh;
+ struct gfs2_log_header_host head;
+ int error;
+
+@@ -173,12 +172,6 @@ int gfs2_make_fs_rw(struct gfs2_sbd *sdp)
+ if (error)
+ return error;
+
+- error = gfs2_glock_nq_init(sdp->sd_freeze_gl, LM_ST_SHARED,
+- LM_FLAG_NOEXP | GL_EXACT,
+- &freeze_gh);
+- if (error)
+- goto fail_threads;
+-
+ j_gl->gl_ops->go_inval(j_gl, DIO_METADATA);
+ if (gfs2_withdrawn(sdp)) {
+ error = -EIO;
+@@ -205,13 +198,9 @@ int gfs2_make_fs_rw(struct gfs2_sbd *sdp)
+
+ set_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags);
+
+- gfs2_glock_dq_uninit(&freeze_gh);
+-
+ return 0;
+
+ fail:
+- gfs2_glock_dq_uninit(&freeze_gh);
+-fail_threads:
+ if (sdp->sd_quotad_process)
+ kthread_stop(sdp->sd_quotad_process);
+ sdp->sd_quotad_process = NULL;
+@@ -454,7 +443,7 @@ static int gfs2_lock_fs_check_clean(struct gfs2_sbd *sdp)
+ }
+
+ if (error)
+- gfs2_glock_dq_uninit(&sdp->sd_freeze_gh);
++ gfs2_freeze_unlock(&sdp->sd_freeze_gh);
+
+ out:
+ while (!list_empty(&list)) {
+@@ -611,30 +600,9 @@ out:
+
+ int gfs2_make_fs_ro(struct gfs2_sbd *sdp)
+ {
+- struct gfs2_holder freeze_gh;
+ int error = 0;
+ int log_write_allowed = test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags);
+
+- gfs2_holder_mark_uninitialized(&freeze_gh);
+- if (sdp->sd_freeze_gl &&
+- !gfs2_glock_is_locked_by_me(sdp->sd_freeze_gl)) {
+- if (!log_write_allowed) {
+- error = gfs2_glock_nq_init(sdp->sd_freeze_gl,
+- LM_ST_SHARED, LM_FLAG_TRY |
+- LM_FLAG_NOEXP | GL_EXACT,
+- &freeze_gh);
+- if (error == GLR_TRYFAILED)
+- error = 0;
+- } else {
+- error = gfs2_glock_nq_init(sdp->sd_freeze_gl,
+- LM_ST_SHARED,
+- LM_FLAG_NOEXP | GL_EXACT,
+- &freeze_gh);
+- if (error && !gfs2_withdrawn(sdp))
+- return error;
+- }
+- }
+-
+ gfs2_flush_delete_work(sdp);
+ if (!log_write_allowed && current == sdp->sd_quotad_process)
+ fs_warn(sdp, "The quotad daemon is withdrawing.\n");
+@@ -663,9 +631,6 @@ int gfs2_make_fs_ro(struct gfs2_sbd *sdp)
+ atomic_read(&sdp->sd_reserving_log) == 0,
+ HZ * 5);
+ }
+- if (gfs2_holder_initialized(&freeze_gh))
+- gfs2_glock_dq_uninit(&freeze_gh);
+-
+ gfs2_quota_cleanup(sdp);
+
+ if (!log_write_allowed)
+@@ -774,10 +739,8 @@ void gfs2_freeze_func(struct work_struct *work)
+ struct super_block *sb = sdp->sd_vfs;
+
+ atomic_inc(&sb->s_active);
+- error = gfs2_glock_nq_init(sdp->sd_freeze_gl, LM_ST_SHARED,
+- LM_FLAG_NOEXP | GL_EXACT, &freeze_gh);
++ error = gfs2_freeze_lock(sdp, &freeze_gh, 0);
+ if (error) {
+- fs_info(sdp, "GFS2: couldn't get freeze lock : %d\n", error);
+ gfs2_assert_withdraw(sdp, 0);
+ } else {
+ atomic_set(&sdp->sd_freeze_state, SFS_UNFROZEN);
+@@ -787,7 +750,7 @@ void gfs2_freeze_func(struct work_struct *work)
+ error);
+ gfs2_assert_withdraw(sdp, 0);
+ }
+- gfs2_glock_dq_uninit(&freeze_gh);
++ gfs2_freeze_unlock(&freeze_gh);
+ }
+ deactivate_super(sb);
+ clear_bit_unlock(SDF_FS_FROZEN, &sdp->sd_flags);
+@@ -855,7 +818,7 @@ static int gfs2_unfreeze(struct super_block *sb)
+ return 0;
+ }
+
+- gfs2_glock_dq_uninit(&sdp->sd_freeze_gh);
++ gfs2_freeze_unlock(&sdp->sd_freeze_gh);
+ mutex_unlock(&sdp->sd_freeze_mutex);
+ return wait_on_bit(&sdp->sd_flags, SDF_FS_FROZEN, TASK_INTERRUPTIBLE);
+ }
+diff --git a/fs/gfs2/util.c b/fs/gfs2/util.c
+index b7d4e4550880d..3ece99e6490c2 100644
+--- a/fs/gfs2/util.c
++++ b/fs/gfs2/util.c
+@@ -91,19 +91,50 @@ out_unlock:
+ return error;
+ }
+
++/**
++ * gfs2_freeze_lock - hold the freeze glock
++ * @sdp: the superblock
++ * @freeze_gh: pointer to the requested holder
++ * @caller_flags: any additional flags needed by the caller
++ */
++int gfs2_freeze_lock(struct gfs2_sbd *sdp, struct gfs2_holder *freeze_gh,
++ int caller_flags)
++{
++ int flags = LM_FLAG_NOEXP | GL_EXACT | caller_flags;
++ int error;
++
++ error = gfs2_glock_nq_init(sdp->sd_freeze_gl, LM_ST_SHARED, flags,
++ freeze_gh);
++ if (error && error != GLR_TRYFAILED)
++ fs_err(sdp, "can't lock the freeze lock: %d\n", error);
++ return error;
++}
++
++void gfs2_freeze_unlock(struct gfs2_holder *freeze_gh)
++{
++ if (gfs2_holder_initialized(freeze_gh))
++ gfs2_glock_dq_uninit(freeze_gh);
++}
++
+ static void signal_our_withdraw(struct gfs2_sbd *sdp)
+ {
+ struct gfs2_glock *live_gl = sdp->sd_live_gh.gh_gl;
+- struct inode *inode = sdp->sd_jdesc->jd_inode;
+- struct gfs2_inode *ip = GFS2_I(inode);
+- struct gfs2_glock *i_gl = ip->i_gl;
+- u64 no_formal_ino = ip->i_no_formal_ino;
++ struct inode *inode;
++ struct gfs2_inode *ip;
++ struct gfs2_glock *i_gl;
++ u64 no_formal_ino;
++ int log_write_allowed = test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags);
+ int ret = 0;
+ int tries;
+
+- if (test_bit(SDF_NORECOVERY, &sdp->sd_flags))
++ if (test_bit(SDF_NORECOVERY, &sdp->sd_flags) || !sdp->sd_jdesc)
+ return;
+
++ inode = sdp->sd_jdesc->jd_inode;
++ ip = GFS2_I(inode);
++ i_gl = ip->i_gl;
++ no_formal_ino = ip->i_no_formal_ino;
++
+ /* Prevent any glock dq until withdraw recovery is complete */
+ set_bit(SDF_WITHDRAW_RECOVERY, &sdp->sd_flags);
+ /*
+@@ -118,8 +149,21 @@ static void signal_our_withdraw(struct gfs2_sbd *sdp)
+ * therefore we need to clear SDF_JOURNAL_LIVE manually.
+ */
+ clear_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags);
+- if (!sb_rdonly(sdp->sd_vfs))
+- ret = gfs2_make_fs_ro(sdp);
++ if (!sb_rdonly(sdp->sd_vfs)) {
++ struct gfs2_holder freeze_gh;
++
++ gfs2_holder_mark_uninitialized(&freeze_gh);
++ if (sdp->sd_freeze_gl &&
++ !gfs2_glock_is_locked_by_me(sdp->sd_freeze_gl)) {
++ ret = gfs2_freeze_lock(sdp, &freeze_gh,
++ log_write_allowed ? 0 : LM_FLAG_TRY);
++ if (ret == GLR_TRYFAILED)
++ ret = 0;
++ }
++ if (!ret)
++ ret = gfs2_make_fs_ro(sdp);
++ gfs2_freeze_unlock(&freeze_gh);
++ }
+
+ if (sdp->sd_lockstruct.ls_ops->lm_lock == NULL) { /* lock_nolock */
+ if (!ret)
+diff --git a/fs/gfs2/util.h b/fs/gfs2/util.h
+index d7562981b3a09..aa3771281acac 100644
+--- a/fs/gfs2/util.h
++++ b/fs/gfs2/util.h
+@@ -149,6 +149,9 @@ int gfs2_io_error_i(struct gfs2_sbd *sdp, const char *function,
+
+ extern int check_journal_clean(struct gfs2_sbd *sdp, struct gfs2_jdesc *jd,
+ bool verbose);
++extern int gfs2_freeze_lock(struct gfs2_sbd *sdp,
++ struct gfs2_holder *freeze_gh, int caller_flags);
++extern void gfs2_freeze_unlock(struct gfs2_holder *freeze_gh);
+
+ #define gfs2_io_error(sdp) \
+ gfs2_io_error_i((sdp), __func__, __FILE__, __LINE__);
+diff --git a/fs/io_uring.c b/fs/io_uring.c
+index 691c998691439..06e9c21819957 100644
+--- a/fs/io_uring.c
++++ b/fs/io_uring.c
+@@ -2085,6 +2085,7 @@ static void __io_req_task_submit(struct io_kiocb *req)
+ __io_req_task_cancel(req, -EFAULT);
+ mutex_unlock(&ctx->uring_lock);
+
++ ctx->flags &= ~IORING_SETUP_R_DISABLED;
+ if (ctx->flags & IORING_SETUP_SQPOLL)
+ io_sq_thread_drop_mm();
+ }
+@@ -2616,6 +2617,13 @@ static bool io_rw_reissue(struct io_kiocb *req, long res)
+ return false;
+ if ((res != -EAGAIN && res != -EOPNOTSUPP) || io_wq_current_is_worker())
+ return false;
++ /*
++ * If ref is dying, we might be running poll reap from the exit work.
++ * Don't attempt to reissue from that path, just let it fail with
++ * -EAGAIN.
++ */
++ if (percpu_ref_is_dying(&req->ctx->refs))
++ return false;
+
+ ret = io_sq_thread_acquire_mm(req->ctx, req);
+
+@@ -3493,6 +3501,7 @@ retry:
+ goto out_free;
+ } else if (ret > 0 && ret < io_size) {
+ /* we got some bytes, but not all. retry. */
++ kiocb->ki_flags &= ~IOCB_WAITQ;
+ goto retry;
+ }
+ done:
+@@ -6233,9 +6242,10 @@ static enum hrtimer_restart io_link_timeout_fn(struct hrtimer *timer)
+ if (prev) {
+ req_set_fail_links(prev);
+ io_async_find_and_cancel(ctx, req, prev->user_data, -ETIME);
+- io_put_req(prev);
++ io_put_req_deferred(prev, 1);
+ } else {
+- io_req_complete(req, -ETIME);
++ io_cqring_add_event(req, -ETIME, 0);
++ io_put_req_deferred(req, 1);
+ }
+ return HRTIMER_NORESTART;
+ }
+@@ -8684,6 +8694,8 @@ static void io_disable_sqo_submit(struct io_ring_ctx *ctx)
+ {
+ mutex_lock(&ctx->uring_lock);
+ ctx->sqo_dead = 1;
++ if (ctx->flags & IORING_SETUP_R_DISABLED)
++ io_sq_offload_start(ctx);
+ mutex_unlock(&ctx->uring_lock);
+
+ /* make sure callers enter the ring to get error */
+@@ -9662,10 +9674,7 @@ static int io_register_enable_rings(struct io_ring_ctx *ctx)
+ if (ctx->restrictions.registered)
+ ctx->restricted = 1;
+
+- ctx->flags &= ~IORING_SETUP_R_DISABLED;
+-
+ io_sq_offload_start(ctx);
+-
+ return 0;
+ }
+
+diff --git a/fs/nfsd/filecache.c b/fs/nfsd/filecache.c
+index 5849c1bd88f17..e5aad1c10ea32 100644
+--- a/fs/nfsd/filecache.c
++++ b/fs/nfsd/filecache.c
+@@ -897,6 +897,8 @@ nfsd_file_find_locked(struct inode *inode, unsigned int may_flags,
+ continue;
+ if (!nfsd_match_cred(nf->nf_cred, current_cred()))
+ continue;
++ if (!test_bit(NFSD_FILE_HASHED, &nf->nf_flags))
++ continue;
+ if (nfsd_file_get(nf) != NULL)
+ return nf;
+ }
+diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
+index e83b21778816d..2e68cea148e0d 100644
+--- a/fs/nfsd/nfs4proc.c
++++ b/fs/nfsd/nfs4proc.c
+@@ -1299,7 +1299,7 @@ nfsd4_cleanup_inter_ssc(struct vfsmount *ss_mnt, struct nfsd_file *src,
+ struct nfsd_file *dst)
+ {
+ nfs42_ssc_close(src->nf_file);
+- /* 'src' is freed by nfsd4_do_async_copy */
++ fput(src->nf_file);
+ nfsd_file_put(dst);
+ mntput(ss_mnt);
+ }
+diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
+index ee4e6e3b995d4..55cf60b71cde0 100644
+--- a/fs/nfsd/nfs4state.c
++++ b/fs/nfsd/nfs4state.c
+@@ -5372,7 +5372,7 @@ nfs4_laundromat(struct nfsd_net *nn)
+ idr_for_each_entry(&nn->s2s_cp_stateids, cps_t, i) {
+ cps = container_of(cps_t, struct nfs4_cpntf_state, cp_stateid);
+ if (cps->cp_stateid.sc_type == NFS4_COPYNOTIFY_STID &&
+- cps->cpntf_time > cutoff)
++ cps->cpntf_time < cutoff)
+ _free_cpntf_state_locked(nn, cps);
+ }
+ spin_unlock(&nn->s2s_cp_lock);
+diff --git a/fs/pstore/inode.c b/fs/pstore/inode.c
+index c331efe8de953..bbf241a431f27 100644
+--- a/fs/pstore/inode.c
++++ b/fs/pstore/inode.c
+@@ -467,7 +467,7 @@ static struct dentry *pstore_mount(struct file_system_type *fs_type,
+ static void pstore_kill_sb(struct super_block *sb)
+ {
+ mutex_lock(&pstore_sb_lock);
+- WARN_ON(pstore_sb != sb);
++ WARN_ON(pstore_sb && pstore_sb != sb);
+
+ kill_litter_super(sb);
+ pstore_sb = NULL;
+diff --git a/fs/select.c b/fs/select.c
+index 37aaa8317f3ae..945896d0ac9e7 100644
+--- a/fs/select.c
++++ b/fs/select.c
+@@ -1055,10 +1055,9 @@ static long do_restart_poll(struct restart_block *restart_block)
+
+ ret = do_sys_poll(ufds, nfds, to);
+
+- if (ret == -ERESTARTNOHAND) {
+- restart_block->fn = do_restart_poll;
+- ret = -ERESTART_RESTARTBLOCK;
+- }
++ if (ret == -ERESTARTNOHAND)
++ ret = set_restart_fn(restart_block, do_restart_poll);
++
+ return ret;
+ }
+
+@@ -1080,7 +1079,6 @@ SYSCALL_DEFINE3(poll, struct pollfd __user *, ufds, unsigned int, nfds,
+ struct restart_block *restart_block;
+
+ restart_block = &current->restart_block;
+- restart_block->fn = do_restart_poll;
+ restart_block->poll.ufds = ufds;
+ restart_block->poll.nfds = nfds;
+
+@@ -1091,7 +1089,7 @@ SYSCALL_DEFINE3(poll, struct pollfd __user *, ufds, unsigned int, nfds,
+ } else
+ restart_block->poll.has_timeout = 0;
+
+- ret = -ERESTART_RESTARTBLOCK;
++ ret = set_restart_fn(restart_block, do_restart_poll);
+ }
+ return ret;
+ }
+diff --git a/fs/zonefs/super.c b/fs/zonefs/super.c
+index 3fe933b1010c3..2243dc1fb48fe 100644
+--- a/fs/zonefs/super.c
++++ b/fs/zonefs/super.c
+@@ -159,6 +159,21 @@ static int zonefs_writepages(struct address_space *mapping,
+ return iomap_writepages(mapping, wbc, &wpc, &zonefs_writeback_ops);
+ }
+
++static int zonefs_swap_activate(struct swap_info_struct *sis,
++ struct file *swap_file, sector_t *span)
++{
++ struct inode *inode = file_inode(swap_file);
++ struct zonefs_inode_info *zi = ZONEFS_I(inode);
++
++ if (zi->i_ztype != ZONEFS_ZTYPE_CNV) {
++ zonefs_err(inode->i_sb,
++ "swap file: not a conventional zone file\n");
++ return -EINVAL;
++ }
++
++ return iomap_swapfile_activate(sis, swap_file, span, &zonefs_iomap_ops);
++}
++
+ static const struct address_space_operations zonefs_file_aops = {
+ .readpage = zonefs_readpage,
+ .readahead = zonefs_readahead,
+@@ -171,6 +186,7 @@ static const struct address_space_operations zonefs_file_aops = {
+ .is_partially_uptodate = iomap_is_partially_uptodate,
+ .error_remove_page = generic_error_remove_page,
+ .direct_IO = noop_direct_IO,
++ .swap_activate = zonefs_swap_activate,
+ };
+
+ static void zonefs_update_stats(struct inode *inode, loff_t new_isize)
+@@ -719,6 +735,68 @@ out_release:
+ return ret;
+ }
+
++/*
++ * Do not exceed the LFS limits nor the file zone size. If pos is under the
++ * limit it becomes a short access. If it exceeds the limit, return -EFBIG.
++ */
++static loff_t zonefs_write_check_limits(struct file *file, loff_t pos,
++ loff_t count)
++{
++ struct inode *inode = file_inode(file);
++ struct zonefs_inode_info *zi = ZONEFS_I(inode);
++ loff_t limit = rlimit(RLIMIT_FSIZE);
++ loff_t max_size = zi->i_max_size;
++
++ if (limit != RLIM_INFINITY) {
++ if (pos >= limit) {
++ send_sig(SIGXFSZ, current, 0);
++ return -EFBIG;
++ }
++ count = min(count, limit - pos);
++ }
++
++ if (!(file->f_flags & O_LARGEFILE))
++ max_size = min_t(loff_t, MAX_NON_LFS, max_size);
++
++ if (unlikely(pos >= max_size))
++ return -EFBIG;
++
++ return min(count, max_size - pos);
++}
++
++static ssize_t zonefs_write_checks(struct kiocb *iocb, struct iov_iter *from)
++{
++ struct file *file = iocb->ki_filp;
++ struct inode *inode = file_inode(file);
++ struct zonefs_inode_info *zi = ZONEFS_I(inode);
++ loff_t count;
++
++ if (IS_SWAPFILE(inode))
++ return -ETXTBSY;
++
++ if (!iov_iter_count(from))
++ return 0;
++
++ if ((iocb->ki_flags & IOCB_NOWAIT) && !(iocb->ki_flags & IOCB_DIRECT))
++ return -EINVAL;
++
++ if (iocb->ki_flags & IOCB_APPEND) {
++ if (zi->i_ztype != ZONEFS_ZTYPE_SEQ)
++ return -EINVAL;
++ mutex_lock(&zi->i_truncate_mutex);
++ iocb->ki_pos = zi->i_wpoffset;
++ mutex_unlock(&zi->i_truncate_mutex);
++ }
++
++ count = zonefs_write_check_limits(file, iocb->ki_pos,
++ iov_iter_count(from));
++ if (count < 0)
++ return count;
++
++ iov_iter_truncate(from, count);
++ return iov_iter_count(from);
++}
++
+ /*
+ * Handle direct writes. For sequential zone files, this is the only possible
+ * write path. For these files, check that the user is issuing writes
+@@ -736,8 +814,7 @@ static ssize_t zonefs_file_dio_write(struct kiocb *iocb, struct iov_iter *from)
+ struct super_block *sb = inode->i_sb;
+ bool sync = is_sync_kiocb(iocb);
+ bool append = false;
+- size_t count;
+- ssize_t ret;
++ ssize_t ret, count;
+
+ /*
+ * For async direct IOs to sequential zone files, refuse IOCB_NOWAIT
+@@ -755,12 +832,11 @@ static ssize_t zonefs_file_dio_write(struct kiocb *iocb, struct iov_iter *from)
+ inode_lock(inode);
+ }
+
+- ret = generic_write_checks(iocb, from);
+- if (ret <= 0)
++ count = zonefs_write_checks(iocb, from);
++ if (count <= 0) {
++ ret = count;
+ goto inode_unlock;
+-
+- iov_iter_truncate(from, zi->i_max_size - iocb->ki_pos);
+- count = iov_iter_count(from);
++ }
+
+ if ((iocb->ki_pos | count) & (sb->s_blocksize - 1)) {
+ ret = -EINVAL;
+@@ -820,12 +896,10 @@ static ssize_t zonefs_file_buffered_write(struct kiocb *iocb,
+ inode_lock(inode);
+ }
+
+- ret = generic_write_checks(iocb, from);
++ ret = zonefs_write_checks(iocb, from);
+ if (ret <= 0)
+ goto inode_unlock;
+
+- iov_iter_truncate(from, zi->i_max_size - iocb->ki_pos);
+-
+ ret = iomap_file_buffered_write(iocb, from, &zonefs_iomap_ops);
+ if (ret > 0)
+ iocb->ki_pos += ret;
+@@ -958,9 +1032,7 @@ static int zonefs_open_zone(struct inode *inode)
+
+ mutex_lock(&zi->i_truncate_mutex);
+
+- zi->i_wr_refcnt++;
+- if (zi->i_wr_refcnt == 1) {
+-
++ if (!zi->i_wr_refcnt) {
+ if (atomic_inc_return(&sbi->s_open_zones) > sbi->s_max_open_zones) {
+ atomic_dec(&sbi->s_open_zones);
+ ret = -EBUSY;
+@@ -970,7 +1042,6 @@ static int zonefs_open_zone(struct inode *inode)
+ if (i_size_read(inode) < zi->i_max_size) {
+ ret = zonefs_zone_mgmt(inode, REQ_OP_ZONE_OPEN);
+ if (ret) {
+- zi->i_wr_refcnt--;
+ atomic_dec(&sbi->s_open_zones);
+ goto unlock;
+ }
+@@ -978,6 +1049,8 @@ static int zonefs_open_zone(struct inode *inode)
+ }
+ }
+
++ zi->i_wr_refcnt++;
++
+ unlock:
+ mutex_unlock(&zi->i_truncate_mutex);
+
+diff --git a/include/linux/bpf.h b/include/linux/bpf.h
+index 642ce03f19c4c..76322b6452c80 100644
+--- a/include/linux/bpf.h
++++ b/include/linux/bpf.h
+@@ -1201,8 +1201,6 @@ struct bpf_prog * __must_check bpf_prog_inc_not_zero(struct bpf_prog *prog);
+ void bpf_prog_put(struct bpf_prog *prog);
+ int __bpf_prog_charge(struct user_struct *user, u32 pages);
+ void __bpf_prog_uncharge(struct user_struct *user, u32 pages);
+-void __bpf_free_used_maps(struct bpf_prog_aux *aux,
+- struct bpf_map **used_maps, u32 len);
+
+ void bpf_prog_free_id(struct bpf_prog *prog, bool do_idr_lock);
+ void bpf_map_free_id(struct bpf_map *map, bool do_idr_lock);
+@@ -1652,6 +1650,9 @@ static inline struct bpf_prog *bpf_prog_get_type(u32 ufd,
+ return bpf_prog_get_type_dev(ufd, type, false);
+ }
+
++void __bpf_free_used_maps(struct bpf_prog_aux *aux,
++ struct bpf_map **used_maps, u32 len);
++
+ bool bpf_prog_get_ok(struct bpf_prog *, enum bpf_prog_type *, bool);
+
+ int bpf_prog_offload_compile(struct bpf_prog *prog);
+diff --git a/include/linux/efi.h b/include/linux/efi.h
+index d7c0e73af2b97..e17cd4c44f93a 100644
+--- a/include/linux/efi.h
++++ b/include/linux/efi.h
+@@ -72,8 +72,10 @@ typedef void *efi_handle_t;
+ */
+ typedef guid_t efi_guid_t __aligned(__alignof__(u32));
+
+-#define EFI_GUID(a,b,c,d0,d1,d2,d3,d4,d5,d6,d7) \
+- GUID_INIT(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7)
++#define EFI_GUID(a, b, c, d...) (efi_guid_t){ { \
++ (a) & 0xff, ((a) >> 8) & 0xff, ((a) >> 16) & 0xff, ((a) >> 24) & 0xff, \
++ (b) & 0xff, ((b) >> 8) & 0xff, \
++ (c) & 0xff, ((c) >> 8) & 0xff, d } }
+
+ /*
+ * Generic EFI table header
+diff --git a/include/linux/regulator/pca9450.h b/include/linux/regulator/pca9450.h
+index 1bbd3014f9067..71902f41c9199 100644
+--- a/include/linux/regulator/pca9450.h
++++ b/include/linux/regulator/pca9450.h
+@@ -147,6 +147,9 @@ enum {
+ #define BUCK6_FPWM 0x04
+ #define BUCK6_ENMODE_MASK 0x03
+
++/* PCA9450_REG_BUCK123_PRESET_EN bit */
++#define BUCK123_PRESET_EN 0x80
++
+ /* PCA9450_BUCK1OUT_DVS0 bits */
+ #define BUCK1OUT_DVS0_MASK 0x7F
+ #define BUCK1OUT_DVS0_DEFAULT 0x14
+@@ -216,4 +219,11 @@ enum {
+ #define IRQ_THERM_105 0x02
+ #define IRQ_THERM_125 0x01
+
++/* PCA9450_REG_RESET_CTRL bits */
++#define WDOG_B_CFG_MASK 0xC0
++#define WDOG_B_CFG_NONE 0x00
++#define WDOG_B_CFG_WARM 0x40
++#define WDOG_B_CFG_COLD_LDO12 0x80
++#define WDOG_B_CFG_COLD 0xC0
++
+ #endif /* __LINUX_REG_PCA9450_H__ */
+diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h
+index e93e249a4e9bf..f3040b0b4b235 100644
+--- a/include/linux/thread_info.h
++++ b/include/linux/thread_info.h
+@@ -11,6 +11,7 @@
+ #include <linux/types.h>
+ #include <linux/bug.h>
+ #include <linux/restart_block.h>
++#include <linux/errno.h>
+
+ #ifdef CONFIG_THREAD_INFO_IN_TASK
+ /*
+@@ -39,6 +40,18 @@ enum {
+
+ #ifdef __KERNEL__
+
++#ifndef arch_set_restart_data
++#define arch_set_restart_data(restart) do { } while (0)
++#endif
++
++static inline long set_restart_fn(struct restart_block *restart,
++ long (*fn)(struct restart_block *))
++{
++ restart->fn = fn;
++ arch_set_restart_data(restart);
++ return -ERESTART_RESTARTBLOCK;
++}
++
+ #ifndef THREAD_ALIGN
+ #define THREAD_ALIGN THREAD_SIZE
+ #endif
+diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h
+index 6b03fdd69d274..712363c7a2e8e 100644
+--- a/include/linux/usb_usual.h
++++ b/include/linux/usb_usual.h
+@@ -86,6 +86,8 @@
+ /* lies about caching, so always sync */ \
+ US_FLAG(NO_SAME, 0x40000000) \
+ /* Cannot handle WRITE_SAME */ \
++ US_FLAG(SENSE_AFTER_SYNC, 0x80000000) \
++ /* Do REQUEST_SENSE after SYNCHRONIZE_CACHE */ \
+
+ #define US_FLAG(name, value) US_FL_##name = value ,
+ enum { US_DO_ALL_FLAGS };
+diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h
+index 4e2d61e8fb1ed..e6a43163ab5b7 100644
+--- a/include/scsi/libsas.h
++++ b/include/scsi/libsas.h
+@@ -391,10 +391,6 @@ struct sas_ha_struct {
+ int strict_wide_ports; /* both sas_addr and attached_sas_addr must match
+ * their siblings when forming wide ports */
+
+- /* LLDD calls these to notify the class of an event. */
+- int (*notify_port_event)(struct asd_sas_phy *, enum port_event);
+- int (*notify_phy_event)(struct asd_sas_phy *, enum phy_event);
+-
+ void *lldd_ha; /* not touched by sas class code */
+
+ struct list_head eh_done_q; /* complete via scsi_eh_flush_done_q */
+@@ -706,4 +702,11 @@ struct sas_phy *sas_get_local_phy(struct domain_device *dev);
+
+ int sas_request_addr(struct Scsi_Host *shost, u8 *addr);
+
++int sas_notify_port_event(struct asd_sas_phy *phy, enum port_event event);
++int sas_notify_phy_event(struct asd_sas_phy *phy, enum phy_event event);
++int sas_notify_port_event_gfp(struct asd_sas_phy *phy, enum port_event event,
++ gfp_t gfp_flags);
++int sas_notify_phy_event_gfp(struct asd_sas_phy *phy, enum phy_event event,
++ gfp_t gfp_flags);
++
+ #endif /* _SASLIB_H_ */
+diff --git a/kernel/futex.c b/kernel/futex.c
+index 0693b3ea0f9a4..7cf1987cfdb4f 100644
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -2730,14 +2730,13 @@ retry:
+ goto out;
+
+ restart = &current->restart_block;
+- restart->fn = futex_wait_restart;
+ restart->futex.uaddr = uaddr;
+ restart->futex.val = val;
+ restart->futex.time = *abs_time;
+ restart->futex.bitset = bitset;
+ restart->futex.flags = flags | FLAGS_HAS_TIMEOUT;
+
+- ret = -ERESTART_RESTARTBLOCK;
++ ret = set_restart_fn(restart, futex_wait_restart);
+
+ out:
+ if (to) {
+diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
+index c460e0496006e..79dc02b956dc3 100644
+--- a/kernel/irq/manage.c
++++ b/kernel/irq/manage.c
+@@ -1072,11 +1072,15 @@ irq_forced_thread_fn(struct irq_desc *desc, struct irqaction *action)
+ irqreturn_t ret;
+
+ local_bh_disable();
++ if (!IS_ENABLED(CONFIG_PREEMPT_RT))
++ local_irq_disable();
+ ret = action->thread_fn(action->irq, action->dev_id);
+ if (ret == IRQ_HANDLED)
+ atomic_inc(&desc->threads_handled);
+
+ irq_finalize_oneshot(desc, action);
++ if (!IS_ENABLED(CONFIG_PREEMPT_RT))
++ local_irq_enable();
+ local_bh_enable();
+ return ret;
+ }
+diff --git a/kernel/jump_label.c b/kernel/jump_label.c
+index 015ef903ce8cc..a0c325664190b 100644
+--- a/kernel/jump_label.c
++++ b/kernel/jump_label.c
+@@ -407,6 +407,14 @@ static bool jump_label_can_update(struct jump_entry *entry, bool init)
+ return false;
+
+ if (!kernel_text_address(jump_entry_code(entry))) {
++ /*
++ * This skips patching built-in __exit, which
++ * is part of init_section_contains() but is
++ * not part of kernel_text_address().
++ *
++ * Skipping built-in __exit is fine since it
++ * will never be executed.
++ */
+ WARN_ONCE(!jump_entry_is_init(entry),
+ "can't patch jump_label at %pS",
+ (void *)jump_entry_code(entry));
+diff --git a/kernel/module.c b/kernel/module.c
+index 94f926473e350..908d46abe1656 100644
+--- a/kernel/module.c
++++ b/kernel/module.c
+@@ -2922,20 +2922,14 @@ static int module_sig_check(struct load_info *info, int flags)
+ * enforcing, certain errors are non-fatal.
+ */
+ case -ENODATA:
+- reason = "Loading of unsigned module";
+- goto decide;
++ reason = "unsigned module";
++ break;
+ case -ENOPKG:
+- reason = "Loading of module with unsupported crypto";
+- goto decide;
++ reason = "module with unsupported crypto";
++ break;
+ case -ENOKEY:
+- reason = "Loading of module with unavailable key";
+- decide:
+- if (is_module_sig_enforced()) {
+- pr_notice("%s: %s is rejected\n", info->name, reason);
+- return -EKEYREJECTED;
+- }
+-
+- return security_locked_down(LOCKDOWN_MODULE_SIGNATURE);
++ reason = "module with unavailable key";
++ break;
+
+ /* All other errors are fatal, including nomem, unparseable
+ * signatures and signature check failures - even if signatures
+@@ -2944,6 +2938,13 @@ static int module_sig_check(struct load_info *info, int flags)
+ default:
+ return err;
+ }
++
++ if (is_module_sig_enforced()) {
++ pr_notice("Loading of %s is rejected\n", reason);
++ return -EKEYREJECTED;
++ }
++
++ return security_locked_down(LOCKDOWN_MODULE_SIGNATURE);
+ }
+ #else /* !CONFIG_MODULE_SIG */
+ static int module_sig_check(struct load_info *info, int flags)
+@@ -2952,9 +2953,33 @@ static int module_sig_check(struct load_info *info, int flags)
+ }
+ #endif /* !CONFIG_MODULE_SIG */
+
+-/* Sanity checks against invalid binaries, wrong arch, weird elf version. */
+-static int elf_header_check(struct load_info *info)
++static int validate_section_offset(struct load_info *info, Elf_Shdr *shdr)
++{
++ unsigned long secend;
++
++ /*
++ * Check for both overflow and offset/size being
++ * too large.
++ */
++ secend = shdr->sh_offset + shdr->sh_size;
++ if (secend < shdr->sh_offset || secend > info->len)
++ return -ENOEXEC;
++
++ return 0;
++}
++
++/*
++ * Sanity checks against invalid binaries, wrong arch, weird elf version.
++ *
++ * Also do basic validity checks against section offsets and sizes, the
++ * section name string table, and the indices used for it (sh_name).
++ */
++static int elf_validity_check(struct load_info *info)
+ {
++ unsigned int i;
++ Elf_Shdr *shdr, *strhdr;
++ int err;
++
+ if (info->len < sizeof(*(info->hdr)))
+ return -ENOEXEC;
+
+@@ -2964,11 +2989,78 @@ static int elf_header_check(struct load_info *info)
+ || info->hdr->e_shentsize != sizeof(Elf_Shdr))
+ return -ENOEXEC;
+
++ /*
++ * e_shnum is 16 bits, and sizeof(Elf_Shdr) is
++ * known and small. So e_shnum * sizeof(Elf_Shdr)
++ * will not overflow unsigned long on any platform.
++ */
+ if (info->hdr->e_shoff >= info->len
+ || (info->hdr->e_shnum * sizeof(Elf_Shdr) >
+ info->len - info->hdr->e_shoff))
+ return -ENOEXEC;
+
++ info->sechdrs = (void *)info->hdr + info->hdr->e_shoff;
++
++ /*
++ * Verify if the section name table index is valid.
++ */
++ if (info->hdr->e_shstrndx == SHN_UNDEF
++ || info->hdr->e_shstrndx >= info->hdr->e_shnum)
++ return -ENOEXEC;
++
++ strhdr = &info->sechdrs[info->hdr->e_shstrndx];
++ err = validate_section_offset(info, strhdr);
++ if (err < 0)
++ return err;
++
++ /*
++ * The section name table must be NUL-terminated, as required
++ * by the spec. This makes strcmp and pr_* calls that access
++ * strings in the section safe.
++ */
++ info->secstrings = (void *)info->hdr + strhdr->sh_offset;
++ if (info->secstrings[strhdr->sh_size - 1] != '\0')
++ return -ENOEXEC;
++
++ /*
++ * The code assumes that section 0 has a length of zero and
++ * an addr of zero, so check for it.
++ */
++ if (info->sechdrs[0].sh_type != SHT_NULL
++ || info->sechdrs[0].sh_size != 0
++ || info->sechdrs[0].sh_addr != 0)
++ return -ENOEXEC;
++
++ for (i = 1; i < info->hdr->e_shnum; i++) {
++ shdr = &info->sechdrs[i];
++ switch (shdr->sh_type) {
++ case SHT_NULL:
++ case SHT_NOBITS:
++ continue;
++ case SHT_SYMTAB:
++ if (shdr->sh_link == SHN_UNDEF
++ || shdr->sh_link >= info->hdr->e_shnum)
++ return -ENOEXEC;
++ fallthrough;
++ default:
++ err = validate_section_offset(info, shdr);
++ if (err < 0) {
++ pr_err("Invalid ELF section in module (section %u type %u)\n",
++ i, shdr->sh_type);
++ return err;
++ }
++
++ if (shdr->sh_flags & SHF_ALLOC) {
++ if (shdr->sh_name >= strhdr->sh_size) {
++ pr_err("Invalid ELF section name in module (section %u type %u)\n",
++ i, shdr->sh_type);
++ return -ENOEXEC;
++ }
++ }
++ break;
++ }
++ }
++
+ return 0;
+ }
+
+@@ -3070,11 +3162,6 @@ static int rewrite_section_headers(struct load_info *info, int flags)
+
+ for (i = 1; i < info->hdr->e_shnum; i++) {
+ Elf_Shdr *shdr = &info->sechdrs[i];
+- if (shdr->sh_type != SHT_NOBITS
+- && info->len < shdr->sh_offset + shdr->sh_size) {
+- pr_err("Module len %lu truncated\n", info->len);
+- return -ENOEXEC;
+- }
+
+ /* Mark all sections sh_addr with their address in the
+ temporary image. */
+@@ -3106,11 +3193,6 @@ static int setup_load_info(struct load_info *info, int flags)
+ {
+ unsigned int i;
+
+- /* Set up the convenience variables */
+- info->sechdrs = (void *)info->hdr + info->hdr->e_shoff;
+- info->secstrings = (void *)info->hdr
+- + info->sechdrs[info->hdr->e_shstrndx].sh_offset;
+-
+ /* Try to find a name early so we can log errors with a module name */
+ info->index.info = find_sec(info, ".modinfo");
+ if (info->index.info)
+@@ -3854,26 +3936,50 @@ static int load_module(struct load_info *info, const char __user *uargs,
+ long err = 0;
+ char *after_dashes;
+
+- err = elf_header_check(info);
++ /*
++ * Do the signature check (if any) first. All that
++ * the signature check needs is info->len, it does
++ * not need any of the section info. That can be
++ * set up later. This will minimize the chances
++ * of a corrupt module causing problems before
++ * we even get to the signature check.
++ *
++ * The check will also adjust info->len by stripping
++ * off the sig length at the end of the module, making
++ * checks against info->len more correct.
++ */
++ err = module_sig_check(info, flags);
++ if (err)
++ goto free_copy;
++
++ /*
++ * Do basic sanity checks against the ELF header and
++ * sections.
++ */
++ err = elf_validity_check(info);
+ if (err) {
+- pr_err("Module has invalid ELF header\n");
++ pr_err("Module has invalid ELF structures\n");
+ goto free_copy;
+ }
+
++ /*
++ * Everything checks out, so set up the section info
++ * in the info structure.
++ */
+ err = setup_load_info(info, flags);
+ if (err)
+ goto free_copy;
+
++ /*
++ * Now that we know we have the correct module name, check
++ * if it's blacklisted.
++ */
+ if (blacklisted(info->name)) {
+ err = -EPERM;
+ pr_err("Module %s is blacklisted\n", info->name);
+ goto free_copy;
+ }
+
+- err = module_sig_check(info, flags);
+- if (err)
+- goto free_copy;
+-
+ err = rewrite_section_headers(info, flags);
+ if (err)
+ goto free_copy;
+diff --git a/kernel/module_signature.c b/kernel/module_signature.c
+index 4224a1086b7d8..00132d12487cd 100644
+--- a/kernel/module_signature.c
++++ b/kernel/module_signature.c
+@@ -25,7 +25,7 @@ int mod_check_sig(const struct module_signature *ms, size_t file_len,
+ return -EBADMSG;
+
+ if (ms->id_type != PKEY_ID_PKCS7) {
+- pr_err("%s: Module is not signed with expected PKCS#7 message\n",
++ pr_err("%s: not signed with expected PKCS#7 message\n",
+ name);
+ return -ENOPKG;
+ }
+diff --git a/kernel/module_signing.c b/kernel/module_signing.c
+index 9d9fc678c91d6..8723ae70ea1fe 100644
+--- a/kernel/module_signing.c
++++ b/kernel/module_signing.c
+@@ -30,7 +30,7 @@ int mod_verify_sig(const void *mod, struct load_info *info)
+
+ memcpy(&ms, mod + (modlen - sizeof(ms)), sizeof(ms));
+
+- ret = mod_check_sig(&ms, modlen, info->name);
++ ret = mod_check_sig(&ms, modlen, "module");
+ if (ret)
+ return ret;
+
+diff --git a/kernel/static_call.c b/kernel/static_call.c
+index 84565c2a41b8f..db914da6e7854 100644
+--- a/kernel/static_call.c
++++ b/kernel/static_call.c
+@@ -182,7 +182,16 @@ void __static_call_update(struct static_call_key *key, void *tramp, void *func)
+ }
+
+ if (!kernel_text_address((unsigned long)site_addr)) {
+- WARN_ONCE(1, "can't patch static call site at %pS",
++ /*
++ * This skips patching built-in __exit, which
++ * is part of init_section_contains() but is
++ * not part of kernel_text_address().
++ *
++ * Skipping built-in __exit is fine since it
++ * will never be executed.
++ */
++ WARN_ONCE(!static_call_is_init(site),
++ "can't patch static call site at %pS",
+ site_addr);
+ continue;
+ }
+diff --git a/kernel/time/alarmtimer.c b/kernel/time/alarmtimer.c
+index f4ace1bf83828..daeaa7140d0aa 100644
+--- a/kernel/time/alarmtimer.c
++++ b/kernel/time/alarmtimer.c
+@@ -848,9 +848,9 @@ static int alarm_timer_nsleep(const clockid_t which_clock, int flags,
+ if (flags == TIMER_ABSTIME)
+ return -ERESTARTNOHAND;
+
+- restart->fn = alarm_timer_nsleep_restart;
+ restart->nanosleep.clockid = type;
+ restart->nanosleep.expires = exp;
++ set_restart_fn(restart, alarm_timer_nsleep_restart);
+ return ret;
+ }
+
+diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
+index 4416f5d72c11e..9505b1f21cdf8 100644
+--- a/kernel/time/hrtimer.c
++++ b/kernel/time/hrtimer.c
+@@ -1957,9 +1957,9 @@ long hrtimer_nanosleep(ktime_t rqtp, const enum hrtimer_mode mode,
+ }
+
+ restart = &current->restart_block;
+- restart->fn = hrtimer_nanosleep_restart;
+ restart->nanosleep.clockid = t.timer.base->clockid;
+ restart->nanosleep.expires = hrtimer_get_expires_tv64(&t.timer);
++ set_restart_fn(restart, hrtimer_nanosleep_restart);
+ out:
+ destroy_hrtimer_on_stack(&t.timer);
+ return ret;
+diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c
+index a71758e34e456..9abe15255bc4e 100644
+--- a/kernel/time/posix-cpu-timers.c
++++ b/kernel/time/posix-cpu-timers.c
+@@ -1480,8 +1480,8 @@ static int posix_cpu_nsleep(const clockid_t which_clock, int flags,
+ if (flags & TIMER_ABSTIME)
+ return -ERESTARTNOHAND;
+
+- restart_block->fn = posix_cpu_nsleep_restart;
+ restart_block->nanosleep.clockid = which_clock;
++ set_restart_fn(restart_block, posix_cpu_nsleep_restart);
+ }
+ return error;
+ }
+diff --git a/net/qrtr/qrtr.c b/net/qrtr/qrtr.c
+index 38de24af24c44..54031ee079a2c 100644
+--- a/net/qrtr/qrtr.c
++++ b/net/qrtr/qrtr.c
+@@ -433,7 +433,7 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len)
+ if (len == 0 || len & 3)
+ return -EINVAL;
+
+- skb = netdev_alloc_skb(NULL, len);
++ skb = __netdev_alloc_skb(NULL, len, GFP_ATOMIC | __GFP_NOWARN);
+ if (!skb)
+ return -ENOMEM;
+
+diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c
+index c211b607239ed..d38788cd9433a 100644
+--- a/net/sunrpc/svc.c
++++ b/net/sunrpc/svc.c
+@@ -1408,7 +1408,7 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv)
+
+ sendit:
+ if (svc_authorise(rqstp))
+- goto close;
++ goto close_xprt;
+ return 1; /* Caller can now send it */
+
+ release_dropit:
+@@ -1420,6 +1420,8 @@ release_dropit:
+ return 0;
+
+ close:
++ svc_authorise(rqstp);
++close_xprt:
+ if (rqstp->rq_xprt && test_bit(XPT_TEMP, &rqstp->rq_xprt->xpt_flags))
+ svc_close_xprt(rqstp->rq_xprt);
+ dprintk("svc: svc_process close\n");
+@@ -1428,7 +1430,7 @@ release_dropit:
+ err_short_len:
+ svc_printk(rqstp, "short len %zd, dropping request\n",
+ argv->iov_len);
+- goto close;
++ goto close_xprt;
+
+ err_bad_rpc:
+ serv->sv_stats->rpcbadfmt++;
+diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c
+index 43cf8dbde898b..06e503466c32c 100644
+--- a/net/sunrpc/svc_xprt.c
++++ b/net/sunrpc/svc_xprt.c
+@@ -1062,7 +1062,7 @@ static int svc_close_list(struct svc_serv *serv, struct list_head *xprt_list, st
+ struct svc_xprt *xprt;
+ int ret = 0;
+
+- spin_lock(&serv->sv_lock);
++ spin_lock_bh(&serv->sv_lock);
+ list_for_each_entry(xprt, xprt_list, xpt_list) {
+ if (xprt->xpt_net != net)
+ continue;
+@@ -1070,7 +1070,7 @@ static int svc_close_list(struct svc_serv *serv, struct list_head *xprt_list, st
+ set_bit(XPT_CLOSE, &xprt->xpt_flags);
+ svc_xprt_enqueue(xprt);
+ }
+- spin_unlock(&serv->sv_lock);
++ spin_unlock_bh(&serv->sv_lock);
+ return ret;
+ }
+
+diff --git a/net/sunrpc/xprtrdma/svc_rdma_backchannel.c b/net/sunrpc/xprtrdma/svc_rdma_backchannel.c
+index 5e7c4ba9e1476..c5154bc38e129 100644
+--- a/net/sunrpc/xprtrdma/svc_rdma_backchannel.c
++++ b/net/sunrpc/xprtrdma/svc_rdma_backchannel.c
+@@ -246,9 +246,9 @@ xprt_setup_rdma_bc(struct xprt_create *args)
+ xprt->timeout = &xprt_rdma_bc_timeout;
+ xprt_set_bound(xprt);
+ xprt_set_connected(xprt);
+- xprt->bind_timeout = RPCRDMA_BIND_TO;
+- xprt->reestablish_timeout = RPCRDMA_INIT_REEST_TO;
+- xprt->idle_timeout = RPCRDMA_IDLE_DISC_TO;
++ xprt->bind_timeout = 0;
++ xprt->reestablish_timeout = 0;
++ xprt->idle_timeout = 0;
+
+ xprt->prot = XPRT_TRANSPORT_BC_RDMA;
+ xprt->ops = &xprt_rdma_bc_procs;
+diff --git a/sound/firewire/dice/dice-stream.c b/sound/firewire/dice/dice-stream.c
+index 8e0c0380b4c4b..1a14c083e8cea 100644
+--- a/sound/firewire/dice/dice-stream.c
++++ b/sound/firewire/dice/dice-stream.c
+@@ -493,11 +493,10 @@ void snd_dice_stream_stop_duplex(struct snd_dice *dice)
+ struct reg_params tx_params, rx_params;
+
+ if (dice->substreams_counter == 0) {
+- if (get_register_params(dice, &tx_params, &rx_params) >= 0) {
+- amdtp_domain_stop(&dice->domain);
++ if (get_register_params(dice, &tx_params, &rx_params) >= 0)
+ finish_session(dice, &tx_params, &rx_params);
+- }
+
++ amdtp_domain_stop(&dice->domain);
+ release_resources(dice);
+ }
+ }
+diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
+index 8060cc86dfea3..96903295a9677 100644
+--- a/sound/pci/hda/hda_generic.c
++++ b/sound/pci/hda/hda_generic.c
+@@ -4065,7 +4065,7 @@ static int add_micmute_led_hook(struct hda_codec *codec)
+
+ spec->micmute_led.led_mode = MICMUTE_LED_FOLLOW_MUTE;
+ spec->micmute_led.capture = 0;
+- spec->micmute_led.led_value = 0;
++ spec->micmute_led.led_value = -1;
+ spec->micmute_led.old_hook = spec->cap_sync_hook;
+ spec->cap_sync_hook = update_micmute_led;
+ if (!snd_hda_gen_add_kctl(spec, NULL, &micmute_led_mode_ctl))
+diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
+index b47504fa8dfd0..316b9b4ccb32d 100644
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -4225,6 +4225,12 @@ static void alc_fixup_hp_gpio_led(struct hda_codec *codec,
+ }
+ }
+
++static void alc236_fixup_hp_gpio_led(struct hda_codec *codec,
++ const struct hda_fixup *fix, int action)
++{
++ alc_fixup_hp_gpio_led(codec, action, 0x02, 0x01);
++}
++
+ static void alc269_fixup_hp_gpio_led(struct hda_codec *codec,
+ const struct hda_fixup *fix, int action)
+ {
+@@ -6381,6 +6387,7 @@ enum {
+ ALC294_FIXUP_ASUS_GX502_VERBS,
+ ALC285_FIXUP_HP_GPIO_LED,
+ ALC285_FIXUP_HP_MUTE_LED,
++ ALC236_FIXUP_HP_GPIO_LED,
+ ALC236_FIXUP_HP_MUTE_LED,
+ ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET,
+ ALC295_FIXUP_ASUS_MIC_NO_PRESENCE,
+@@ -7616,6 +7623,10 @@ static const struct hda_fixup alc269_fixups[] = {
+ .type = HDA_FIXUP_FUNC,
+ .v.func = alc285_fixup_hp_mute_led,
+ },
++ [ALC236_FIXUP_HP_GPIO_LED] = {
++ .type = HDA_FIXUP_FUNC,
++ .v.func = alc236_fixup_hp_gpio_led,
++ },
+ [ALC236_FIXUP_HP_MUTE_LED] = {
+ .type = HDA_FIXUP_FUNC,
+ .v.func = alc236_fixup_hp_mute_led,
+@@ -8045,9 +8056,12 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
+ SND_PCI_QUIRK(0x103c, 0x8783, "HP ZBook Fury 15 G7 Mobile Workstation",
+ ALC285_FIXUP_HP_GPIO_AMP_INIT),
+ SND_PCI_QUIRK(0x103c, 0x87c8, "HP", ALC287_FIXUP_HP_GPIO_LED),
++ SND_PCI_QUIRK(0x103c, 0x87e5, "HP ProBook 440 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
+ SND_PCI_QUIRK(0x103c, 0x87f4, "HP", ALC287_FIXUP_HP_GPIO_LED),
+ SND_PCI_QUIRK(0x103c, 0x87f5, "HP", ALC287_FIXUP_HP_GPIO_LED),
+ SND_PCI_QUIRK(0x103c, 0x87f7, "HP Spectre x360 14", ALC245_FIXUP_HP_X360_AMP),
++ SND_PCI_QUIRK(0x103c, 0x8846, "HP EliteBook 850 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED),
++ SND_PCI_QUIRK(0x103c, 0x884c, "HP EliteBook 840 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED),
+ SND_PCI_QUIRK(0x1043, 0x103e, "ASUS X540SA", ALC256_FIXUP_ASUS_MIC),
+ SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300),
+ SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
+@@ -8242,7 +8256,9 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
+ SND_PCI_QUIRK(0x1b35, 0x1237, "CZC L101", ALC269_FIXUP_CZC_L101),
+ SND_PCI_QUIRK(0x1b7d, 0xa831, "Ordissimo EVE2 ", ALC269VB_FIXUP_ORDISSIMO_EVE2), /* Also known as Malata PC-B1303 */
+ SND_PCI_QUIRK(0x1d72, 0x1602, "RedmiBook", ALC255_FIXUP_XIAOMI_HEADSET_MIC),
++ SND_PCI_QUIRK(0x1d72, 0x1701, "XiaomiNotebook Pro", ALC298_FIXUP_DELL1_MIC_NO_PRESENCE),
+ SND_PCI_QUIRK(0x1d72, 0x1901, "RedmiBook 14", ALC256_FIXUP_ASUS_HEADSET_MIC),
++ SND_PCI_QUIRK(0x1d72, 0x1947, "RedmiBook Air", ALC255_FIXUP_XIAOMI_HEADSET_MIC),
+ SND_PCI_QUIRK(0x10ec, 0x118c, "Medion EE4254 MD62100", ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE),
+ SND_PCI_QUIRK(0x1c06, 0x2013, "Lemote A1802", ALC269_FIXUP_LEMOTE_A1802),
+ SND_PCI_QUIRK(0x1c06, 0x2015, "Lemote A190X", ALC269_FIXUP_LEMOTE_A190X),
+diff --git a/sound/soc/codecs/ak4458.c b/sound/soc/codecs/ak4458.c
+index 472caad17012e..85a1d00894a9c 100644
+--- a/sound/soc/codecs/ak4458.c
++++ b/sound/soc/codecs/ak4458.c
+@@ -812,6 +812,7 @@ static const struct of_device_id ak4458_of_match[] = {
+ { .compatible = "asahi-kasei,ak4497", .data = &ak4497_drvdata},
+ { },
+ };
++MODULE_DEVICE_TABLE(of, ak4458_of_match);
+
+ static struct i2c_driver ak4458_i2c_driver = {
+ .driver = {
+diff --git a/sound/soc/codecs/ak5558.c b/sound/soc/codecs/ak5558.c
+index 2f076d5ee284d..65a248c92f669 100644
+--- a/sound/soc/codecs/ak5558.c
++++ b/sound/soc/codecs/ak5558.c
+@@ -419,6 +419,7 @@ static const struct of_device_id ak5558_i2c_dt_ids[] = {
+ { .compatible = "asahi-kasei,ak5558"},
+ { }
+ };
++MODULE_DEVICE_TABLE(of, ak5558_i2c_dt_ids);
+
+ static struct i2c_driver ak5558_i2c_driver = {
+ .driver = {
+diff --git a/sound/soc/codecs/wcd934x.c b/sound/soc/codecs/wcd934x.c
+index 40f682f5dab8b..d18ae5e3ee809 100644
+--- a/sound/soc/codecs/wcd934x.c
++++ b/sound/soc/codecs/wcd934x.c
+@@ -1873,6 +1873,12 @@ static int wcd934x_set_channel_map(struct snd_soc_dai *dai,
+
+ wcd = snd_soc_component_get_drvdata(dai->component);
+
++ if (tx_num > WCD934X_TX_MAX || rx_num > WCD934X_RX_MAX) {
++ dev_err(wcd->dev, "Invalid tx %d or rx %d channel count\n",
++ tx_num, rx_num);
++ return -EINVAL;
++ }
++
+ if (!tx_slot || !rx_slot) {
+ dev_err(wcd->dev, "Invalid tx_slot=%p, rx_slot=%p\n",
+ tx_slot, rx_slot);
+diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c
+index 404be27c15fed..1d774c876c52e 100644
+--- a/sound/soc/fsl/fsl_ssi.c
++++ b/sound/soc/fsl/fsl_ssi.c
+@@ -878,6 +878,7 @@ static int fsl_ssi_hw_free(struct snd_pcm_substream *substream,
+ static int _fsl_ssi_set_dai_fmt(struct fsl_ssi *ssi, unsigned int fmt)
+ {
+ u32 strcr = 0, scr = 0, stcr, srcr, mask;
++ unsigned int slots;
+
+ ssi->dai_fmt = fmt;
+
+@@ -909,10 +910,11 @@ static int _fsl_ssi_set_dai_fmt(struct fsl_ssi *ssi, unsigned int fmt)
+ return -EINVAL;
+ }
+
++ slots = ssi->slots ? : 2;
+ regmap_update_bits(ssi->regs, REG_SSI_STCCR,
+- SSI_SxCCR_DC_MASK, SSI_SxCCR_DC(2));
++ SSI_SxCCR_DC_MASK, SSI_SxCCR_DC(slots));
+ regmap_update_bits(ssi->regs, REG_SSI_SRCCR,
+- SSI_SxCCR_DC_MASK, SSI_SxCCR_DC(2));
++ SSI_SxCCR_DC_MASK, SSI_SxCCR_DC(slots));
+
+ /* Data on rising edge of bclk, frame low, 1clk before data */
+ strcr |= SSI_STCR_TFSI | SSI_STCR_TSCKP | SSI_STCR_TEFS;
+diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c
+index ab31045cfc952..6cada4c1e283b 100644
+--- a/sound/soc/generic/simple-card-utils.c
++++ b/sound/soc/generic/simple-card-utils.c
+@@ -172,15 +172,16 @@ int asoc_simple_parse_clk(struct device *dev,
+ * or device's module clock.
+ */
+ clk = devm_get_clk_from_child(dev, node, NULL);
+- if (IS_ERR(clk))
+- clk = devm_get_clk_from_child(dev, dlc->of_node, NULL);
+-
+ if (!IS_ERR(clk)) {
+- simple_dai->clk = clk;
+ simple_dai->sysclk = clk_get_rate(clk);
+- } else if (!of_property_read_u32(node, "system-clock-frequency",
+- &val)) {
++
++ simple_dai->clk = clk;
++ } else if (!of_property_read_u32(node, "system-clock-frequency", &val)) {
+ simple_dai->sysclk = val;
++ } else {
++ clk = devm_get_clk_from_child(dev, dlc->of_node, NULL);
++ if (!IS_ERR(clk))
++ simple_dai->sysclk = clk_get_rate(clk);
+ }
+
+ if (of_property_read_bool(node, "system-clock-direction-out"))
+diff --git a/sound/soc/intel/boards/bytcr_rt5640.c b/sound/soc/intel/boards/bytcr_rt5640.c
+index d56db9f34373e..d5812e73eb63f 100644
+--- a/sound/soc/intel/boards/bytcr_rt5640.c
++++ b/sound/soc/intel/boards/bytcr_rt5640.c
+@@ -577,7 +577,7 @@ static const struct dmi_system_id byt_rt5640_quirk_table[] = {
+ },
+ .driver_data = (void *)(BYT_RT5640_DMIC1_MAP |
+ BYT_RT5640_JD_SRC_JD1_IN4P |
+- BYT_RT5640_OVCD_TH_1500UA |
++ BYT_RT5640_OVCD_TH_2000UA |
+ BYT_RT5640_OVCD_SF_0P75 |
+ BYT_RT5640_MCLK_EN),
+ },
+diff --git a/sound/soc/qcom/lpass-cpu.c b/sound/soc/qcom/lpass-cpu.c
+index 3ddd32fd3a44b..4fb2ec7c8867b 100644
+--- a/sound/soc/qcom/lpass-cpu.c
++++ b/sound/soc/qcom/lpass-cpu.c
+@@ -737,7 +737,7 @@ static void of_lpass_cpu_parse_dai_data(struct device *dev,
+
+ for_each_child_of_node(dev->of_node, node) {
+ ret = of_property_read_u32(node, "reg", &id);
+- if (ret || id < 0 || id >= data->variant->num_dai) {
++ if (ret || id < 0) {
+ dev_err(dev, "valid dai id not found: %d\n", ret);
+ continue;
+ }
+diff --git a/sound/soc/qcom/sdm845.c b/sound/soc/qcom/sdm845.c
+index 6c2760e27ea6f..153e9b2de0b53 100644
+--- a/sound/soc/qcom/sdm845.c
++++ b/sound/soc/qcom/sdm845.c
+@@ -27,18 +27,18 @@
+ #define SPK_TDM_RX_MASK 0x03
+ #define NUM_TDM_SLOTS 8
+ #define SLIM_MAX_TX_PORTS 16
+-#define SLIM_MAX_RX_PORTS 16
++#define SLIM_MAX_RX_PORTS 13
+ #define WCD934X_DEFAULT_MCLK_RATE 9600000
+
+ struct sdm845_snd_data {
+ struct snd_soc_jack jack;
+ bool jack_setup;
+- bool stream_prepared[SLIM_MAX_RX_PORTS];
++ bool stream_prepared[AFE_PORT_MAX];
+ struct snd_soc_card *card;
+ uint32_t pri_mi2s_clk_count;
+ uint32_t sec_mi2s_clk_count;
+ uint32_t quat_tdm_clk_count;
+- struct sdw_stream_runtime *sruntime[SLIM_MAX_RX_PORTS];
++ struct sdw_stream_runtime *sruntime[AFE_PORT_MAX];
+ };
+
+ static unsigned int tdm_slot_offset[8] = {0, 4, 8, 12, 16, 20, 24, 28};
+diff --git a/sound/soc/sof/intel/hda-dsp.c b/sound/soc/sof/intel/hda-dsp.c
+index cd324f3d11d17..c731b9bd60b4c 100644
+--- a/sound/soc/sof/intel/hda-dsp.c
++++ b/sound/soc/sof/intel/hda-dsp.c
+@@ -207,7 +207,7 @@ int hda_dsp_core_power_down(struct snd_sof_dev *sdev, unsigned int core_mask)
+
+ ret = snd_sof_dsp_read_poll_timeout(sdev, HDA_DSP_BAR,
+ HDA_DSP_REG_ADSPCS, adspcs,
+- !(adspcs & HDA_DSP_ADSPCS_SPA_MASK(core_mask)),
++ !(adspcs & HDA_DSP_ADSPCS_CPA_MASK(core_mask)),
+ HDA_DSP_REG_POLL_INTERVAL_US,
+ HDA_DSP_PD_TIMEOUT * USEC_PER_MSEC);
+ if (ret < 0)
+diff --git a/sound/soc/sof/intel/hda.c b/sound/soc/sof/intel/hda.c
+index bb4128a72a42f..b0faf050132d8 100644
+--- a/sound/soc/sof/intel/hda.c
++++ b/sound/soc/sof/intel/hda.c
+@@ -898,6 +898,7 @@ free_streams:
+ /* dsp_unmap: not currently used */
+ iounmap(sdev->bar[HDA_DSP_BAR]);
+ hdac_bus_unmap:
++ platform_device_unregister(hdev->dmic_dev);
+ iounmap(bus->remap_addr);
+ hda_codec_i915_exit(sdev);
+ err:
+diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c
+index 448de77f43fd8..5171b3dc1eb9e 100644
+--- a/sound/usb/mixer_quirks.c
++++ b/sound/usb/mixer_quirks.c
+@@ -2883,7 +2883,7 @@ static int snd_djm_controls_put(struct snd_kcontrol *kctl, struct snd_ctl_elem_v
+ u8 group = (private_value & SND_DJM_GROUP_MASK) >> SND_DJM_GROUP_SHIFT;
+ u16 value = elem->value.enumerated.item[0];
+
+- kctl->private_value = ((device << SND_DJM_DEVICE_SHIFT) |
++ kctl->private_value = (((unsigned long)device << SND_DJM_DEVICE_SHIFT) |
+ (group << SND_DJM_GROUP_SHIFT) |
+ value);
+
+@@ -2921,7 +2921,7 @@ static int snd_djm_controls_create(struct usb_mixer_interface *mixer,
+ value = device->controls[i].default_value;
+ knew.name = device->controls[i].name;
+ knew.private_value = (
+- (device_idx << SND_DJM_DEVICE_SHIFT) |
++ ((unsigned long)device_idx << SND_DJM_DEVICE_SHIFT) |
+ (i << SND_DJM_GROUP_SHIFT) |
+ value);
+ err = snd_djm_controls_update(mixer, device_idx, i, value);