idxd: Replace the read_8 function pointer with another one
Just remove this function pointer and add a new one,i.e., dump_sw_error. Because this function pointer is only used to read a sw err info. We can hide it in the detailed idxd implemenation. Signed-off-by: Ziye Yang <ziye.yang@intel.com> Change-Id: I42fe2220dae85df307b5af64e37acfd7f748915b Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/8707 Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com> Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
This commit is contained in:
parent
2f5abdb7fd
commit
13eb8f2fb3
@ -81,12 +81,6 @@ struct device_config g_dev_cfg1 = {
|
|||||||
.total_engines = 4,
|
.total_engines = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
static uint64_t
|
|
||||||
idxd_read_8(struct spdk_idxd_device *idxd, void *portal, uint32_t offset)
|
|
||||||
{
|
|
||||||
return idxd->impl->read_8(idxd, portal, offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct spdk_idxd_io_channel *
|
struct spdk_idxd_io_channel *
|
||||||
spdk_idxd_get_channel(struct spdk_idxd_device *idxd)
|
spdk_idxd_get_channel(struct spdk_idxd_device *idxd)
|
||||||
{
|
{
|
||||||
@ -1020,23 +1014,13 @@ spdk_idxd_batch_prep_compare(struct spdk_idxd_io_channel *chan, struct idxd_batc
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static inline void
|
||||||
_dump_error_reg(struct spdk_idxd_io_channel *chan)
|
_dump_sw_error_reg(struct spdk_idxd_io_channel *chan)
|
||||||
{
|
{
|
||||||
uint64_t sw_error_0;
|
struct spdk_idxd_device *idxd = chan->idxd;
|
||||||
uint16_t i;
|
|
||||||
|
|
||||||
sw_error_0 = idxd_read_8(chan->idxd, chan->portal, IDXD_SWERR_OFFSET);
|
assert(idxd != NULL);
|
||||||
|
idxd->impl->dump_sw_error(idxd, chan->portal);
|
||||||
SPDK_NOTICELOG("SW Error bits set:");
|
|
||||||
for (i = 0; i < CHAR_BIT; i++) {
|
|
||||||
if ((1ULL << i) & sw_error_0) {
|
|
||||||
SPDK_NOTICELOG(" %d\n", i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SPDK_NOTICELOG("SW Error error code: %#x\n", (uint8_t)(sw_error_0 >> 8));
|
|
||||||
SPDK_NOTICELOG("SW Error WQ index: %u\n", (uint8_t)(sw_error_0 >> 16));
|
|
||||||
SPDK_NOTICELOG("SW Error Operation: %u\n", (uint8_t)(sw_error_0 >> 32));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: there are multiple ways of getting completions but we can't really pick the best one without
|
/* TODO: there are multiple ways of getting completions but we can't really pick the best one without
|
||||||
@ -1070,7 +1054,7 @@ spdk_idxd_process_events(struct spdk_idxd_io_channel *chan)
|
|||||||
|
|
||||||
if (spdk_unlikely(IDXD_FAILURE(comp_ctx->hw.status))) {
|
if (spdk_unlikely(IDXD_FAILURE(comp_ctx->hw.status))) {
|
||||||
status = -EINVAL;
|
status = -EINVAL;
|
||||||
_dump_error_reg(chan);
|
_dump_sw_error_reg(chan);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (comp_ctx->desc->opcode) {
|
switch (comp_ctx->desc->opcode) {
|
||||||
|
@ -177,7 +177,7 @@ struct spdk_idxd_impl {
|
|||||||
void (*set_config)(struct device_config *g_dev_cfg, uint32_t config_num);
|
void (*set_config)(struct device_config *g_dev_cfg, uint32_t config_num);
|
||||||
int (*probe)(void *cb_ctx, spdk_idxd_attach_cb attach_cb);
|
int (*probe)(void *cb_ctx, spdk_idxd_attach_cb attach_cb);
|
||||||
void (*destruct)(struct spdk_idxd_device *idxd);
|
void (*destruct)(struct spdk_idxd_device *idxd);
|
||||||
uint64_t (*read_8)(struct spdk_idxd_device *idxd, void *portal, uint32_t offset);
|
void (*dump_sw_error)(struct spdk_idxd_device *idxd, void *portal);
|
||||||
char *(*portal_get_addr)(struct spdk_idxd_device *idxd);
|
char *(*portal_get_addr)(struct spdk_idxd_device *idxd);
|
||||||
/* It is a workround for simulator */
|
/* It is a workround for simulator */
|
||||||
bool (*nop_check)(struct spdk_idxd_device *idxd);
|
bool (*nop_check)(struct spdk_idxd_device *idxd);
|
||||||
|
@ -90,12 +90,6 @@ _idxd_read_8(struct spdk_idxd_device *idxd, uint32_t offset)
|
|||||||
return spdk_mmio_read_8((uint64_t *)(user_idxd->reg_base + offset));
|
return spdk_mmio_read_8((uint64_t *)(user_idxd->reg_base + offset));
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint64_t
|
|
||||||
idxd_read_8(struct spdk_idxd_device *idxd, void *portal, uint32_t offset)
|
|
||||||
{
|
|
||||||
return _idxd_read_8(idxd, offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_idxd_write_8(struct spdk_idxd_device *idxd, uint32_t offset, uint64_t value)
|
_idxd_write_8(struct spdk_idxd_device *idxd, uint32_t offset, uint64_t value)
|
||||||
{
|
{
|
||||||
@ -503,6 +497,25 @@ user_idxd_probe(void *cb_ctx, spdk_idxd_attach_cb attach_cb)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
user_idxd_dump_sw_err(struct spdk_idxd_device *idxd, void *portal)
|
||||||
|
{
|
||||||
|
uint64_t sw_error_0;
|
||||||
|
uint16_t i;
|
||||||
|
|
||||||
|
sw_error_0 = _idxd_read_8(idxd, IDXD_SWERR_OFFSET);
|
||||||
|
|
||||||
|
SPDK_NOTICELOG("SW Error bits set:");
|
||||||
|
for (i = 0; i < CHAR_BIT; i++) {
|
||||||
|
if ((1ULL << i) & sw_error_0) {
|
||||||
|
SPDK_NOTICELOG(" %d\n", i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SPDK_NOTICELOG("SW Error error code: %#x\n", (uint8_t)(sw_error_0 >> 8));
|
||||||
|
SPDK_NOTICELOG("SW Error WQ index: %u\n", (uint8_t)(sw_error_0 >> 16));
|
||||||
|
SPDK_NOTICELOG("SW Error Operation: %u\n", (uint8_t)(sw_error_0 >> 32));
|
||||||
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
user_idxd_portal_get_addr(struct spdk_idxd_device *idxd)
|
user_idxd_portal_get_addr(struct spdk_idxd_device *idxd)
|
||||||
{
|
{
|
||||||
@ -527,7 +540,7 @@ static struct spdk_idxd_impl g_user_idxd_impl = {
|
|||||||
.set_config = user_idxd_set_config,
|
.set_config = user_idxd_set_config,
|
||||||
.probe = user_idxd_probe,
|
.probe = user_idxd_probe,
|
||||||
.destruct = user_idxd_device_destruct,
|
.destruct = user_idxd_device_destruct,
|
||||||
.read_8 = idxd_read_8,
|
.dump_sw_error = user_idxd_dump_sw_err,
|
||||||
.portal_get_addr = user_idxd_portal_get_addr,
|
.portal_get_addr = user_idxd_portal_get_addr,
|
||||||
.nop_check = user_idxd_nop_check,
|
.nop_check = user_idxd_nop_check,
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user