Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cf9f123b authored by Matthew Wilcox's avatar Matthew Wilcox
Browse files

NVMe: Use dma_set_mask() correctly



In some circumstances setting a 64-bit DMA mask can fail, as explained
in Documentation/DMA-API-HOWTO.txt.  Use the recommended code sequence
to set a 32-bit DMA mask if setting a 64-bit DMA mask fails.

Reported-by: default avatarChayan Biswas <Chayan.Biswas@sandisk.com>
Signed-off-by: default avatarMatthew Wilcox <matthew.r.wilcox@intel.com>
parent cf90bc48
Loading
Loading
Loading
Loading
+8 −2
Original line number Original line Diff line number Diff line
@@ -1927,8 +1927,14 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id)
	INIT_LIST_HEAD(&dev->namespaces);
	INIT_LIST_HEAD(&dev->namespaces);
	dev->pci_dev = pdev;
	dev->pci_dev = pdev;
	pci_set_drvdata(pdev, dev);
	pci_set_drvdata(pdev, dev);
	dma_set_mask(&pdev->dev, DMA_BIT_MASK(64));

	if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(64)))
		dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64));
		dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64));
	else if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)))
		dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
	else
		goto disable;

	result = nvme_set_instance(dev);
	result = nvme_set_instance(dev);
	if (result)
	if (result)
		goto disable;
		goto disable;