Merge tag 'block-6.2-2023-02-16' of git://git.kernel.dk/linux
Pull block fixes from Jens Axboe:
"Just a few NVMe fixes that should go into the 6.2 release, adding a
quirk and fixing two issues introduced in this release:
- NVMe fixes via Christoph:
- Always return an ERR_PTR from nvme_pci_alloc_dev (Irvin Cote)
- Add bogus ID quirk for ADATA SX6000PNP (Daniel Wagner)
- Set the DMA mask earlier (Christoph Hellwig)"
* tag 'block-6.2-2023-02-16' of git://git.kernel.dk/linux:
nvme-pci: always return an ERR_PTR from nvme_pci_alloc_dev
nvme-pci: set the DMA mask earlier
nvme-pci: add bogus ID quirk for ADATA SX6000PNP
This commit is contained in:
@@ -2509,18 +2509,12 @@ static int nvme_pci_enable(struct nvme_dev *dev)
|
|||||||
{
|
{
|
||||||
int result = -ENOMEM;
|
int result = -ENOMEM;
|
||||||
struct pci_dev *pdev = to_pci_dev(dev->dev);
|
struct pci_dev *pdev = to_pci_dev(dev->dev);
|
||||||
int dma_address_bits = 64;
|
|
||||||
|
|
||||||
if (pci_enable_device_mem(pdev))
|
if (pci_enable_device_mem(pdev))
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
pci_set_master(pdev);
|
pci_set_master(pdev);
|
||||||
|
|
||||||
if (dev->ctrl.quirks & NVME_QUIRK_DMA_ADDRESS_BITS_48)
|
|
||||||
dma_address_bits = 48;
|
|
||||||
if (dma_set_mask_and_coherent(dev->dev, DMA_BIT_MASK(dma_address_bits)))
|
|
||||||
goto disable;
|
|
||||||
|
|
||||||
if (readl(dev->bar + NVME_REG_CSTS) == -1) {
|
if (readl(dev->bar + NVME_REG_CSTS) == -1) {
|
||||||
result = -ENODEV;
|
result = -ENODEV;
|
||||||
goto disable;
|
goto disable;
|
||||||
@@ -2970,7 +2964,7 @@ static struct nvme_dev *nvme_pci_alloc_dev(struct pci_dev *pdev,
|
|||||||
|
|
||||||
dev = kzalloc_node(sizeof(*dev), GFP_KERNEL, node);
|
dev = kzalloc_node(sizeof(*dev), GFP_KERNEL, node);
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return NULL;
|
return ERR_PTR(-ENOMEM);
|
||||||
INIT_WORK(&dev->ctrl.reset_work, nvme_reset_work);
|
INIT_WORK(&dev->ctrl.reset_work, nvme_reset_work);
|
||||||
mutex_init(&dev->shutdown_lock);
|
mutex_init(&dev->shutdown_lock);
|
||||||
|
|
||||||
@@ -2999,6 +2993,10 @@ static struct nvme_dev *nvme_pci_alloc_dev(struct pci_dev *pdev,
|
|||||||
if (ret)
|
if (ret)
|
||||||
goto out_put_device;
|
goto out_put_device;
|
||||||
|
|
||||||
|
if (dev->ctrl.quirks & NVME_QUIRK_DMA_ADDRESS_BITS_48)
|
||||||
|
dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(48));
|
||||||
|
else
|
||||||
|
dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
|
||||||
dma_set_min_align_mask(&pdev->dev, NVME_CTRL_PAGE_SIZE - 1);
|
dma_set_min_align_mask(&pdev->dev, NVME_CTRL_PAGE_SIZE - 1);
|
||||||
dma_set_max_seg_size(&pdev->dev, 0xffffffff);
|
dma_set_max_seg_size(&pdev->dev, 0xffffffff);
|
||||||
|
|
||||||
@@ -3031,8 +3029,8 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||||||
int result = -ENOMEM;
|
int result = -ENOMEM;
|
||||||
|
|
||||||
dev = nvme_pci_alloc_dev(pdev, id);
|
dev = nvme_pci_alloc_dev(pdev, id);
|
||||||
if (!dev)
|
if (IS_ERR(dev))
|
||||||
return -ENOMEM;
|
return PTR_ERR(dev);
|
||||||
|
|
||||||
result = nvme_dev_map(dev);
|
result = nvme_dev_map(dev);
|
||||||
if (result)
|
if (result)
|
||||||
@@ -3423,6 +3421,8 @@ static const struct pci_device_id nvme_id_table[] = {
|
|||||||
{ PCI_DEVICE(0x10ec, 0x5762), /* ADATA SX6000LNP */
|
{ PCI_DEVICE(0x10ec, 0x5762), /* ADATA SX6000LNP */
|
||||||
.driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN |
|
.driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN |
|
||||||
NVME_QUIRK_BOGUS_NID, },
|
NVME_QUIRK_BOGUS_NID, },
|
||||||
|
{ PCI_DEVICE(0x10ec, 0x5763), /* ADATA SX6000PNP */
|
||||||
|
.driver_data = NVME_QUIRK_BOGUS_NID, },
|
||||||
{ PCI_DEVICE(0x1cc1, 0x8201), /* ADATA SX8200PNP 512GB */
|
{ PCI_DEVICE(0x1cc1, 0x8201), /* ADATA SX8200PNP 512GB */
|
||||||
.driver_data = NVME_QUIRK_NO_DEEPEST_PS |
|
.driver_data = NVME_QUIRK_NO_DEEPEST_PS |
|
||||||
NVME_QUIRK_IGNORE_DEV_SUBNQN, },
|
NVME_QUIRK_IGNORE_DEV_SUBNQN, },
|
||||||
|
|||||||
Reference in New Issue
Block a user