Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F103815036
D14703.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D14703.diff
View Options
Index: sys/dev/nvme/nvme.h
===================================================================
--- sys/dev/nvme/nvme.h
+++ sys/dev/nvme/nvme.h
@@ -128,11 +128,11 @@
#define NVME_STATUS_DNR_SHIFT (15)
#define NVME_STATUS_DNR_MASK (0x1)
-#define NVME_STATUS_GET_P(st) (((st) >> NVME_STATUS_P_SHIFT) & NVME_STATUS_P_MASK)
-#define NVME_STATUS_GET_SC(st) (((st) >> NVME_STATUS_SC_SHIFT) & NVME_STATUS_SC_MASK)
-#define NVME_STATUS_GET_SCT(st) (((st) >> NVME_STATUS_SCT_SHIFT) & NVME_STATUS_SCT_MASK)
-#define NVME_STATUS_GET_M(st) (((st) >> NVME_STATUS_M_SHIFT) & NVME_STATUS_M_MASK)
-#define NVME_STATUS_GET_DNR(st) (((st) >> NVME_STATUS_DNR_SHIFT) & NVME_STATUS_DNR_MASK)
+#define NVME_STATUS_GET_P(st) (st.p)
+#define NVME_STATUS_GET_SC(st) (st.sc)
+#define NVME_STATUS_GET_SCT(st) (st.sct)
+#define NVME_STATUS_GET_M(st) (st.m)
+#define NVME_STATUS_GET_DNR(st) (st.dnr)
#define NVME_PWR_ST_MPS_SHIFT (0)
#define NVME_PWR_ST_MPS_MASK (0x1)
@@ -428,7 +428,21 @@
struct nvme_command
{
/* dword 0 */
- uint16_t opc_fuse; /* opcode, fused operation */
+ union {
+ uint16_t opc_fuse; /* opcode, fused operation */
+/* Backward compatible API, only for userland */
+ struct {
+#if _BYTE_ORDER == _LITTLE_ENDIAN
+ uint16_t opc : 8,
+ fuse : 2,
+ rsvd1 : 6;
+#else
+ uint16_t rsvd1 : 6,
+ fuse : 2,
+ opc : 8;
+#endif
+ };
+ };
uint16_t cid; /* command identifier */
/* dword 1 */
@@ -458,6 +472,24 @@
_Static_assert(sizeof(struct nvme_command) == 16 * 4, "bad size for nvme_command");
+struct nvme_status {
+#if _BYTE_ORDER == _LITTLE_ENDIAN
+ uint16_t p : 1, /* phase tag */
+ sc : 8, /* status code */
+ sct : 3, /* status code type */
+ rsvd2 : 2,
+ m : 1, /* more */
+ dnr : 1; /* do not retry */
+#else
+ uint16_t dnr : 1, /* do not retry */
+ m : 1, /* more */
+ rsvd2 : 2,
+ sct : 3, /* status code type */
+ sc : 8, /* status code */
+ p : 1; /* phase tag */
+#endif
+} __packed;
+
struct nvme_completion {
/* dword 0 */
@@ -472,7 +504,7 @@
/* dword 3 */
uint16_t cid; /* command identifier */
- uint16_t status;
+ struct nvme_status status;
} __packed;
_Static_assert(sizeof(struct nvme_completion) == 4 * 4, "bad size for nvme_completion");
@@ -1336,7 +1368,7 @@
s->sqhd = le16toh(s->sqhd);
s->sqid = le16toh(s->sqid);
/* omit cid */
- s->status = le16toh(s->status);
+// s->status = le16toh(s->status);
}
static inline
Index: sys/dev/nvme/nvme.c
===================================================================
--- sys/dev/nvme/nvme.c
+++ sys/dev/nvme/nvme.c
@@ -240,9 +240,11 @@
nvme_dump_completion(struct nvme_completion *cpl)
{
uint8_t p, sc, sct, m, dnr;
- uint16_t status;
+// uint16_t status;
+ struct nvme_status status;
- status = le16toh(cpl->status);
+// status = le16toh(cpl->status);
+ status = cpl->status;
p = NVME_STATUS_GET_P(status);
sc = NVME_STATUS_GET_SC(status);
Index: sys/dev/nvme/nvme_ctrlr.c
===================================================================
--- sys/dev/nvme/nvme_ctrlr.c
+++ sys/dev/nvme/nvme_ctrlr.c
@@ -978,13 +978,13 @@
nvme_pt_done(void *arg, const struct nvme_completion *cpl)
{
struct nvme_pt_command *pt = arg;
- uint16_t status;
+ struct nvme_status status;
bzero(&pt->cpl, sizeof(pt->cpl));
pt->cpl.cdw0 = cpl->cdw0;
status = cpl->status;
- status &= ~NVME_STATUS_P_MASK;
+ status.p = 0;
pt->cpl.status = status;
mtx_lock(pt->driver_lock);
Index: sys/dev/nvme/nvme_ns.c
===================================================================
--- sys/dev/nvme/nvme_ns.c
+++ sys/dev/nvme/nvme_ns.c
@@ -272,10 +272,8 @@
inbed = atomic_fetchadd_int(&parent->bio_inbed, 1) + 1;
if (inbed == children) {
bzero(&parent_cpl, sizeof(parent_cpl));
- if (parent->bio_flags & BIO_ERROR) {
- parent_cpl.status &= ~(NVME_STATUS_SC_MASK << NVME_STATUS_SC_SHIFT);
- parent_cpl.status |= (NVME_SC_DATA_TRANSFER_ERROR) << NVME_STATUS_SC_SHIFT;
- }
+ if (parent->bio_flags & BIO_ERROR)
+ parent_cpl.status.sc = NVME_SC_DATA_TRANSFER_ERROR;
nvme_ns_bio_done(parent, &parent_cpl);
}
}
Index: sys/dev/nvme/nvme_qpair.c
===================================================================
--- sys/dev/nvme/nvme_qpair.c
+++ sys/dev/nvme/nvme_qpair.c
@@ -437,9 +437,9 @@
memset(&cpl, 0, sizeof(cpl));
cpl.sqid = qpair->id;
cpl.cid = tr->cid;
- cpl.status |= (sct & NVME_STATUS_SCT_MASK) << NVME_STATUS_SCT_SHIFT;
- cpl.status |= (sc & NVME_STATUS_SC_MASK) << NVME_STATUS_SC_SHIFT;
- cpl.status |= (dnr & NVME_STATUS_DNR_MASK) << NVME_STATUS_DNR_SHIFT;
+ cpl.status.sct = sct;
+ cpl.status.sc = sc;
+ cpl.status.dnr = dnr;
nvme_qpair_complete_tracker(qpair, tr, &cpl, print_on_error);
}
@@ -453,8 +453,8 @@
memset(&cpl, 0, sizeof(cpl));
cpl.sqid = qpair->id;
- cpl.status |= (sct & NVME_STATUS_SCT_MASK) << NVME_STATUS_SCT_SHIFT;
- cpl.status |= (sc & NVME_STATUS_SC_MASK) << NVME_STATUS_SC_SHIFT;
+ cpl.status.sct = sct;
+ cpl.status.sc = sc;
error = nvme_completion_is_error(&cpl);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Nov 30, 7:29 PM (21 h, 42 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14949086
Default Alt Text
D14703.diff (4 KB)
Attached To
Mode
D14703: nvme: Revert to using the old API.
Attached
Detach File
Event Timeline
Log In to Comment