nvme-pci: fix page size checks
authorKeith Busch <kbusch@kernel.org>
Mon, 19 Dec 2022 21:54:55 +0000 (13:54 -0800)
committerChristoph Hellwig <hch@lst.de>
Wed, 21 Dec 2022 08:17:30 +0000 (09:17 +0100)
The size allocated out of the dma pool is at most NVME_CTRL_PAGE_SIZE,
which may be smaller than the PAGE_SIZE.

Fixes: c61b82c7b7134 ("nvme-pci: fix PRP pool size")
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/host/pci.c

index 6e9d1c7409a9cdf5442af058b1e6a31942d001a0..804b6a6cb43a9c950d4376a7a2723dce8be29398 100644 (file)
@@ -36,7 +36,7 @@
 #define SQ_SIZE(q)     ((q)->q_depth << (q)->sqes)
 #define CQ_SIZE(q)     ((q)->q_depth * sizeof(struct nvme_completion))
 
-#define SGES_PER_PAGE  (PAGE_SIZE / sizeof(struct nvme_sgl_desc))
+#define SGES_PER_PAGE  (NVME_CTRL_PAGE_SIZE / sizeof(struct nvme_sgl_desc))
 
 /*
  * These can be higher, but we need to ensure that any command doesn't
@@ -383,7 +383,7 @@ static int nvme_pci_npages_prp(void)
 {
        unsigned max_bytes = (NVME_MAX_KB_SZ * 1024) + NVME_CTRL_PAGE_SIZE;
        unsigned nprps = DIV_ROUND_UP(max_bytes, NVME_CTRL_PAGE_SIZE);
-       return DIV_ROUND_UP(8 * nprps, PAGE_SIZE - 8);
+       return DIV_ROUND_UP(8 * nprps, NVME_CTRL_PAGE_SIZE - 8);
 }
 
 /*
@@ -393,7 +393,7 @@ static int nvme_pci_npages_prp(void)
 static int nvme_pci_npages_sgl(void)
 {
        return DIV_ROUND_UP(NVME_MAX_SEGS * sizeof(struct nvme_sgl_desc),
-                       PAGE_SIZE);
+                       NVME_CTRL_PAGE_SIZE);
 }
 
 static int nvme_admin_init_hctx(struct blk_mq_hw_ctx *hctx, void *data,
@@ -709,7 +709,7 @@ static void nvme_pci_sgl_set_seg(struct nvme_sgl_desc *sge,
                sge->length = cpu_to_le32(entries * sizeof(*sge));
                sge->type = NVME_SGL_FMT_LAST_SEG_DESC << 4;
        } else {
-               sge->length = cpu_to_le32(PAGE_SIZE);
+               sge->length = cpu_to_le32(NVME_CTRL_PAGE_SIZE);
                sge->type = NVME_SGL_FMT_SEG_DESC << 4;
        }
 }