mirror of
https://github.com/xemu-project/xemu.git
synced 2025-02-20 04:11:28 +00:00
hw/nvme: add pi tuple size helper
A subsequent patch will introduce a new tuple size; so add a helper and use that instead of sizeof() and magic numbers. Reviewed-by: Keith Busch <kbusch@kernel.org> Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
This commit is contained in:
parent
763c05dfb0
commit
ac0b34c58d
@ -1068,7 +1068,8 @@ static uint16_t nvme_map_data(NvmeCtrl *n, uint32_t nlb, NvmeRequest *req)
|
||||
size_t len = nvme_l2b(ns, nlb);
|
||||
uint16_t status;
|
||||
|
||||
if (nvme_ns_ext(ns) && !(pi && pract && ns->lbaf.ms == 8)) {
|
||||
if (nvme_ns_ext(ns) &&
|
||||
!(pi && pract && ns->lbaf.ms == nvme_pi_tuple_size(ns))) {
|
||||
NvmeSg sg;
|
||||
|
||||
len += nvme_m2b(ns, nlb);
|
||||
@ -1247,7 +1248,8 @@ uint16_t nvme_bounce_data(NvmeCtrl *n, void *ptr, uint32_t len,
|
||||
bool pi = !!NVME_ID_NS_DPS_TYPE(ns->id_ns.dps);
|
||||
bool pract = !!(le16_to_cpu(rw->control) & NVME_RW_PRINFO_PRACT);
|
||||
|
||||
if (nvme_ns_ext(ns) && !(pi && pract && ns->lbaf.ms == 8)) {
|
||||
if (nvme_ns_ext(ns) &&
|
||||
!(pi && pract && ns->lbaf.ms == nvme_pi_tuple_size(ns))) {
|
||||
return nvme_tx_interleaved(n, &req->sg, ptr, len, ns->lbasz,
|
||||
ns->lbaf.ms, 0, dir);
|
||||
}
|
||||
@ -2184,7 +2186,7 @@ static void nvme_compare_mdata_cb(void *opaque, int ret)
|
||||
* tuple.
|
||||
*/
|
||||
if (!(ns->id_ns.dps & NVME_ID_NS_DPS_FIRST_EIGHT)) {
|
||||
pil = ns->lbaf.ms - sizeof(NvmeDifTuple);
|
||||
pil = ns->lbaf.ms - nvme_pi_tuple_size(ns);
|
||||
}
|
||||
|
||||
for (bufp = buf; mbufp < end; bufp += ns->lbaf.ms, mbufp += ns->lbaf.ms) {
|
||||
@ -3167,7 +3169,7 @@ static uint16_t nvme_read(NvmeCtrl *n, NvmeRequest *req)
|
||||
if (NVME_ID_NS_DPS_TYPE(ns->id_ns.dps)) {
|
||||
bool pract = prinfo & NVME_PRINFO_PRACT;
|
||||
|
||||
if (pract && ns->lbaf.ms == 8) {
|
||||
if (pract && ns->lbaf.ms == nvme_pi_tuple_size(ns)) {
|
||||
mapped_size = data_size;
|
||||
}
|
||||
}
|
||||
@ -3244,7 +3246,7 @@ static uint16_t nvme_do_write(NvmeCtrl *n, NvmeRequest *req, bool append,
|
||||
if (NVME_ID_NS_DPS_TYPE(ns->id_ns.dps)) {
|
||||
bool pract = prinfo & NVME_PRINFO_PRACT;
|
||||
|
||||
if (pract && ns->lbaf.ms == 8) {
|
||||
if (pract && ns->lbaf.ms == nvme_pi_tuple_size(ns)) {
|
||||
mapped_size -= nvme_m2b(ns, nlb);
|
||||
}
|
||||
}
|
||||
@ -5553,7 +5555,7 @@ static uint16_t nvme_format_check(NvmeNamespace *ns, uint8_t lbaf, uint8_t pi)
|
||||
return NVME_INVALID_FORMAT | NVME_DNR;
|
||||
}
|
||||
|
||||
if (pi && (ns->id_ns.lbaf[lbaf].ms < sizeof(NvmeDifTuple))) {
|
||||
if (pi && (ns->id_ns.lbaf[lbaf].ms < nvme_pi_tuple_size(ns))) {
|
||||
return NVME_INVALID_FORMAT | NVME_DNR;
|
||||
}
|
||||
|
||||
|
@ -48,7 +48,7 @@ void nvme_dif_pract_generate_dif(NvmeNamespace *ns, uint8_t *buf, size_t len,
|
||||
int16_t pil = 0;
|
||||
|
||||
if (!(ns->id_ns.dps & NVME_ID_NS_DPS_FIRST_EIGHT)) {
|
||||
pil = ns->lbaf.ms - sizeof(NvmeDifTuple);
|
||||
pil = ns->lbaf.ms - nvme_pi_tuple_size(ns);
|
||||
}
|
||||
|
||||
trace_pci_nvme_dif_pract_generate_dif(len, ns->lbasz, ns->lbasz + pil,
|
||||
@ -145,7 +145,7 @@ uint16_t nvme_dif_check(NvmeNamespace *ns, uint8_t *buf, size_t len,
|
||||
}
|
||||
|
||||
if (!(ns->id_ns.dps & NVME_ID_NS_DPS_FIRST_EIGHT)) {
|
||||
pil = ns->lbaf.ms - sizeof(NvmeDifTuple);
|
||||
pil = ns->lbaf.ms - nvme_pi_tuple_size(ns);
|
||||
}
|
||||
|
||||
trace_pci_nvme_dif_check(prinfo, ns->lbasz + pil);
|
||||
@ -184,7 +184,7 @@ uint16_t nvme_dif_mangle_mdata(NvmeNamespace *ns, uint8_t *mbuf, size_t mlen,
|
||||
|
||||
|
||||
if (!(ns->id_ns.dps & NVME_ID_NS_DPS_FIRST_EIGHT)) {
|
||||
pil = ns->lbaf.ms - sizeof(NvmeDifTuple);
|
||||
pil = ns->lbaf.ms - nvme_pi_tuple_size(ns);
|
||||
}
|
||||
|
||||
do {
|
||||
@ -210,7 +210,7 @@ uint16_t nvme_dif_mangle_mdata(NvmeNamespace *ns, uint8_t *mbuf, size_t mlen,
|
||||
end = mbufp + mlen;
|
||||
|
||||
for (; mbufp < end; mbufp += ns->lbaf.ms) {
|
||||
memset(mbufp + pil, 0xff, sizeof(NvmeDifTuple));
|
||||
memset(mbufp + pil, 0xff, nvme_pi_tuple_size(ns));
|
||||
}
|
||||
}
|
||||
|
||||
@ -284,7 +284,7 @@ static void nvme_dif_rw_check_cb(void *opaque, int ret)
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (prinfo & NVME_PRINFO_PRACT && ns->lbaf.ms == 8) {
|
||||
if (prinfo & NVME_PRINFO_PRACT && ns->lbaf.ms == nvme_pi_tuple_size(ns)) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -388,7 +388,7 @@ uint16_t nvme_dif_rw(NvmeCtrl *n, NvmeRequest *req)
|
||||
|
||||
if (pract) {
|
||||
uint8_t *mbuf, *end;
|
||||
int16_t pil = ns->lbaf.ms - sizeof(NvmeDifTuple);
|
||||
int16_t pil = ns->lbaf.ms - nvme_pi_tuple_size(ns);
|
||||
|
||||
status = nvme_check_prinfo(ns, prinfo, slba, reftag);
|
||||
if (status) {
|
||||
@ -428,7 +428,7 @@ uint16_t nvme_dif_rw(NvmeCtrl *n, NvmeRequest *req)
|
||||
return NVME_NO_COMPLETE;
|
||||
}
|
||||
|
||||
if (nvme_ns_ext(ns) && !(pract && ns->lbaf.ms == 8)) {
|
||||
if (nvme_ns_ext(ns) && !(pract && ns->lbaf.ms == nvme_pi_tuple_size(ns))) {
|
||||
mapped_len += mlen;
|
||||
}
|
||||
|
||||
@ -462,7 +462,7 @@ uint16_t nvme_dif_rw(NvmeCtrl *n, NvmeRequest *req)
|
||||
qemu_iovec_init(&ctx->mdata.iov, 1);
|
||||
qemu_iovec_add(&ctx->mdata.iov, ctx->mdata.bounce, mlen);
|
||||
|
||||
if (!(pract && ns->lbaf.ms == 8)) {
|
||||
if (!(pract && ns->lbaf.ms == nvme_pi_tuple_size(ns))) {
|
||||
status = nvme_bounce_mdata(n, ctx->mdata.bounce, ctx->mdata.iov.size,
|
||||
NVME_TX_DIRECTION_TO_DEVICE, req);
|
||||
if (status) {
|
||||
|
@ -37,6 +37,11 @@ static const uint16_t t10_dif_crc_table[256] = {
|
||||
0xF0D8, 0x7B6F, 0x6C01, 0xE7B6, 0x42DD, 0xC96A, 0xDE04, 0x55B3
|
||||
};
|
||||
|
||||
static inline size_t nvme_pi_tuple_size(NvmeNamespace *ns)
|
||||
{
|
||||
return sizeof(NvmeDifTuple);
|
||||
}
|
||||
|
||||
uint16_t nvme_check_prinfo(NvmeNamespace *ns, uint8_t prinfo, uint64_t slba,
|
||||
uint32_t reftag);
|
||||
uint16_t nvme_dif_mangle_mdata(NvmeNamespace *ns, uint8_t *mbuf, size_t mlen,
|
||||
|
Loading…
x
Reference in New Issue
Block a user