diff options
Diffstat (limited to 'drivers/misc/genwqe/card_utils.c')
| -rw-r--r-- | drivers/misc/genwqe/card_utils.c | 20 | 
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/misc/genwqe/card_utils.c b/drivers/misc/genwqe/card_utils.c index 62cc6bb3f62e..a6400f09229c 100644 --- a/drivers/misc/genwqe/card_utils.c +++ b/drivers/misc/genwqe/card_utils.c @@ -53,12 +53,17 @@   */  int __genwqe_writeq(struct genwqe_dev *cd, u64 byte_offs, u64 val)  { +	struct pci_dev *pci_dev = cd->pci_dev; +  	if (cd->err_inject & GENWQE_INJECT_HARDWARE_FAILURE)  		return -EIO;  	if (cd->mmio == NULL)  		return -EIO; +	if (pci_channel_offline(pci_dev)) +		return -EIO; +  	__raw_writeq((__force u64)cpu_to_be64(val), cd->mmio + byte_offs);  	return 0;  } @@ -99,12 +104,17 @@ u64 __genwqe_readq(struct genwqe_dev *cd, u64 byte_offs)   */  int __genwqe_writel(struct genwqe_dev *cd, u64 byte_offs, u32 val)  { +	struct pci_dev *pci_dev = cd->pci_dev; +  	if (cd->err_inject & GENWQE_INJECT_HARDWARE_FAILURE)  		return -EIO;  	if (cd->mmio == NULL)  		return -EIO; +	if (pci_channel_offline(pci_dev)) +		return -EIO; +  	__raw_writel((__force u32)cpu_to_be32(val), cd->mmio + byte_offs);  	return 0;  } @@ -718,10 +728,12 @@ int genwqe_set_interrupt_capability(struct genwqe_dev *cd, int count)  	int rc;  	struct pci_dev *pci_dev = cd->pci_dev; -	rc = pci_enable_msi_exact(pci_dev, count); -	if (rc == 0) -		cd->flags |= GENWQE_FLAG_MSI_ENABLED; -	return rc; +	rc = pci_enable_msi_range(pci_dev, 1, count); +	if (rc < 0) +		return rc; + +	cd->flags |= GENWQE_FLAG_MSI_ENABLED; +	return 0;  }  /**  |