Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F110659271
D34873.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D34873.diff
View Options
diff --git a/sys/dev/nvme/nvme_qpair.c b/sys/dev/nvme/nvme_qpair.c
--- a/sys/dev/nvme/nvme_qpair.c
+++ b/sys/dev/nvme/nvme_qpair.c
@@ -702,9 +702,10 @@
/* Note: NVMe PRP format is restricted to 4-byte alignment. */
err = bus_dma_tag_create(bus_get_dma_tag(ctrlr->dev),
- 4, PAGE_SIZE, BUS_SPACE_MAXADDR,
+ 4, ctrlr->page_size, BUS_SPACE_MAXADDR,
BUS_SPACE_MAXADDR, NULL, NULL, ctrlr->max_xfer_size,
- btoc(ctrlr->max_xfer_size) + 1, PAGE_SIZE, 0,
+ howmany(ctrlr->max_xfer_size, ctrlr->page_size) + 1,
+ ctrlr->page_size, 0,
NULL, NULL, &qpair->dma_tag_payload);
if (err != 0) {
nvme_printf(ctrlr, "payload tag create failed %d\n", err);
@@ -716,20 +717,21 @@
* cannot cross a page boundary.
*/
cmdsz = qpair->num_entries * sizeof(struct nvme_command);
- cmdsz = roundup2(cmdsz, PAGE_SIZE);
+ cmdsz = roundup2(cmdsz, ctrlr->page_size);
cplsz = qpair->num_entries * sizeof(struct nvme_completion);
- cplsz = roundup2(cplsz, PAGE_SIZE);
+ cplsz = roundup2(cplsz, ctrlr->page_size);
/*
* For commands requiring more than 2 PRP entries, one PRP will be
* embedded in the command (prp1), and the rest of the PRP entries
* will be in a list pointed to by the command (prp2).
*/
- prpsz = sizeof(uint64_t) * btoc(ctrlr->max_xfer_size);
+ prpsz = sizeof(uint64_t) *
+ howmany(ctrlr->max_xfer_size, ctrlr->page_size);
prpmemsz = qpair->num_trackers * prpsz;
allocsz = cmdsz + cplsz + prpmemsz;
err = bus_dma_tag_create(bus_get_dma_tag(ctrlr->dev),
- PAGE_SIZE, 0, BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, NULL, NULL,
+ ctrlr->page_size, 0, BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, NULL, NULL,
allocsz, 1, allocsz, 0, NULL, NULL, &qpair->dma_tag);
if (err != 0) {
nvme_printf(ctrlr, "tag create failed %d\n", err);
@@ -791,13 +793,13 @@
/*
* Make sure that the PRP list for this tracker doesn't
- * overflow to another page.
+ * overflow to another nvme page.
*/
if (trunc_page(list_phys) !=
trunc_page(list_phys + prpsz - 1)) {
- list_phys = roundup2(list_phys, PAGE_SIZE);
+ list_phys = roundup2(list_phys, ctrlr->page_size);
prp_list =
- (uint8_t *)roundup2((uintptr_t)prp_list, PAGE_SIZE);
+ (uint8_t *)roundup2((uintptr_t)prp_list, ctrlr->page_size);
}
tr = malloc_domainset(sizeof(*tr), M_NVME,
@@ -1101,10 +1103,9 @@
}
/*
- * Note that we specified PAGE_SIZE for alignment and max
- * segment size when creating the bus dma tags. So here
- * we can safely just transfer each segment to its
- * associated PRP entry.
+ * Note that we specified ctrlr->page_size for alignment and max
+ * segment size when creating the bus dma tags. So here we can safely
+ * just transfer each segment to its associated PRP entry.
*/
tr->req->cmd.prp1 = htole64(seg[0].ds_addr);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Feb 22, 1:59 PM (2 h, 44 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16772743
Default Alt Text
D34873.diff (2 KB)
Attached To
Mode
D34873: nvme: Use controller's page size instead of PAGE_SIZE to create qpair
Attached
Detach File
Event Timeline
Log In to Comment