Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F148279195
D11361.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D11361.id.diff
View Options
Index: head/sys/cam/cam_ccb.h
===================================================================
--- head/sys/cam/cam_ccb.h
+++ head/sys/cam/cam_ccb.h
@@ -831,7 +831,8 @@
struct nvme_completion cpl; /* NVME completion, per NVME standard */
uint8_t *data_ptr; /* Ptr to the data buf/SG list */
uint32_t dxfer_len; /* Data transfer length */
- uint32_t resid; /* Transfer residual length: 2's comp unused ?*/
+ uint16_t sglist_cnt; /* Number of SG list entries */
+ uint16_t unused; /* padding for removed uint32_t */
};
/*
Index: head/sys/cam/nvme/nvme_da.c
===================================================================
--- head/sys/cam/nvme/nvme_da.c
+++ head/sys/cam/nvme/nvme_da.c
@@ -1010,12 +1010,7 @@
bp->bio_resid = bp->bio_bcount;
bp->bio_flags |= BIO_ERROR;
} else {
- if (state == NDA_CCB_TRIM)
- bp->bio_resid = 0;
- else
- bp->bio_resid = nvmeio->resid;
- if (bp->bio_resid > 0)
- bp->bio_flags |= BIO_ERROR;
+ bp->bio_resid = 0;
}
if (state == NDA_CCB_TRIM)
free(bp->bio_driver2, M_NVMEDA);
Index: head/sys/cam/scsi/scsi_pass.c
===================================================================
--- head/sys/cam/scsi/scsi_pass.c
+++ head/sys/cam/scsi/scsi_pass.c
@@ -1396,15 +1396,11 @@
io_req->data_flags = ccb->ccb_h.flags & CAM_DATA_MASK;
- /*
- * We only support a single virtual address for NVMe
- */
- if ((ccb->ccb_h.flags & CAM_DATA_MASK) != CAM_DATA_VADDR)
- return (EINVAL);
-
data_ptrs[0] = &ccb->nvmeio.data_ptr;
lengths[0] = ccb->nvmeio.dxfer_len;
dirs[0] = ccb->ccb_h.flags & CAM_DIR_MASK;
+ num_segs = ccb->nvmeio.sglist_cnt;
+ seg_cnt_ptr = &ccb->nvmeio.sglist_cnt;
numbufs = 1;
maxmap = softc->maxio;
break;
Index: head/sys/dev/nvme/nvme_private.h
===================================================================
--- head/sys/dev/nvme/nvme_private.h
+++ head/sys/dev/nvme/nvme_private.h
@@ -135,6 +135,7 @@
#ifdef NVME_UNMAPPED_BIO_SUPPORT
#define NVME_REQUEST_BIO 4
#endif
+#define NVME_REQUEST_CCB 5
struct nvme_request {
@@ -514,6 +515,20 @@
req->payload_size = bio->bio_bcount;
#endif
}
+ return (req);
+}
+
+static __inline struct nvme_request *
+nvme_allocate_request_ccb(union ccb *ccb, nvme_cb_fn_t cb_fn, void *cb_arg)
+{
+ struct nvme_request *req;
+
+ req = _nvme_allocate_request(cb_fn, cb_arg);
+ if (req != NULL) {
+ req->type = NVME_REQUEST_CCB;
+ req->u.payload = ccb;
+ }
+
return (req);
}
Index: head/sys/dev/nvme/nvme_qpair.c
===================================================================
--- head/sys/dev/nvme/nvme_qpair.c
+++ head/sys/dev/nvme/nvme_qpair.c
@@ -851,6 +851,14 @@
"bus_dmamap_load_bio returned 0x%x!\n", err);
break;
#endif
+ case NVME_REQUEST_CCB:
+ err = bus_dmamap_load_ccb(tr->qpair->dma_tag_payload,
+ tr->payload_dma_map, req->u.payload,
+ nvme_payload_map, tr, 0);
+ if (err != 0)
+ nvme_printf(qpair->ctrlr,
+ "bus_dmamap_load_ccb returned 0x%x!\n", err);
+ break;
default:
panic("unknown nvme request type 0x%x\n", req->type);
break;
Index: head/sys/dev/nvme/nvme_sim.c
===================================================================
--- head/sys/dev/nvme/nvme_sim.c
+++ head/sys/dev/nvme/nvme_sim.c
@@ -96,6 +96,8 @@
if ((nvmeio->ccb_h.flags & CAM_DATA_MASK) == CAM_DATA_BIO)
req = nvme_allocate_request_bio((struct bio *)payload,
nvme_sim_nvmeio_done, ccb);
+ else if ((nvmeio->ccb_h.flags & CAM_DATA_SG) == CAM_DATA_SG)
+ req = nvme_allocate_request_ccb(ccb, nvme_sim_nvmeio_done, ccb);
else if (payload == NULL)
req = nvme_allocate_request_null(nvme_sim_nvmeio_done, ccb);
else
Index: head/sys/kern/subr_bus_dma.c
===================================================================
--- head/sys/kern/subr_bus_dma.c
+++ head/sys/kern/subr_bus_dma.c
@@ -225,7 +225,7 @@
nvmeio = &ccb->nvmeio;
data_ptr = nvmeio->data_ptr;
dxfer_len = nvmeio->dxfer_len;
- sglist_cnt = 0;
+ sglist_cnt = nvmeio->sglist_cnt;
break;
}
default:
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Mar 17, 11:28 PM (10 h, 46 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29845922
Default Alt Text
D11361.id.diff (3 KB)
Attached To
Mode
D11361: Add CAM/NVMe support for CAM_DATA_SG
Attached
Detach File
Event Timeline
Log In to Comment