Hi, On 7/16/20 4:26 AM, Xia, Chenbo wrote: > Hi Adrian, > >> -----Original Message----- >> From: Adrian Moreno <amore...@redhat.com> >> Sent: Thursday, July 16, 2020 1:18 AM >> To: dev@dpdk.org >> Cc: maxime.coque...@redhat.com; Wang, Zhihong <zhihong.w...@intel.com>; >> amore...@redhat.com; Xia, Chenbo <chenbo....@intel.com> >> Subject: [PATCH 2/5] net/virtio: add DEVICE_NEEDS_RESET status bit >> >> For the sake of completeness, add the definition of the missing status bit in >> accordance with the virtio spec >> >> Signed-off-by: Adrian Moreno <amore...@redhat.com> >> --- >> drivers/net/virtio/virtio_pci.h | 13 +++++++------ >> 1 file changed, 7 insertions(+), 6 deletions(-) >> >> diff --git a/drivers/net/virtio/virtio_pci.h >> b/drivers/net/virtio/virtio_pci.h index >> 74ed77e33..ab61e911b 100644 >> --- a/drivers/net/virtio/virtio_pci.h >> +++ b/drivers/net/virtio/virtio_pci.h >> @@ -57,12 +57,13 @@ struct virtnet_ctl; >> #define VIRTIO_ID_9P 0x09 >> >> /* Status byte for guest to report progress. */ >> -#define VIRTIO_CONFIG_STATUS_RESET 0x00 >> -#define VIRTIO_CONFIG_STATUS_ACK 0x01 >> -#define VIRTIO_CONFIG_STATUS_DRIVER 0x02 >> -#define VIRTIO_CONFIG_STATUS_DRIVER_OK 0x04 -#define >> VIRTIO_CONFIG_STATUS_FEATURES_OK 0x08 >> -#define VIRTIO_CONFIG_STATUS_FAILED 0x80 >> +#define VIRTIO_CONFIG_STATUS_RESET 0x00 >> +#define VIRTIO_CONFIG_STATUS_ACK 0x01 >> +#define VIRTIO_CONFIG_STATUS_DRIVER 0x02 >> +#define VIRTIO_CONFIG_STATUS_DRIVER_OK 0x04 >> +#define VIRTIO_CONFIG_STATUS_FEATURES_OK 0x08 >> +#define VIRTIO_CONFIG_STATUS_DEV_NEED_RESET 0x40 >> +#define VIRTIO_CONFIG_STATUS_FAILED 0x80 > > Do we need to delete ' VIRTIO_CONFIG_STATUS_RESET'? I see vhost lib does not > have it now. And I read virtio 1.1 spec and find the description of writing 0 > to > reset device is deleted. I think virtio 1.1 spec is not very clear about > reset status. > Does 'DEV_NEED_RESET' equal old 'RESET'? > In virtio 1.1 "2.1.2 Device Requirements: Device Status Field
The device MUST initialize device status to 0 upon reset. ... " So I think having "#define VIRTIO_CONFIG_STATUS_RESET 0x00" is still useful to understand what is going on in: void vtpci_reset(struct virtio_hw *hw) { VTPCI_OPS(hw)->set_status(hw, VIRTIO_CONFIG_STATUS_RESET); /* flush status write */ VTPCI_OPS(hw)->get_status(hw); } DEV_NEED_RESET is used for the device to notify that it has encountered an unrecoverable error. Therefore, the driver would never "set_status(VIRTIO_CONFIG_STATUS_DEV_NEED_RESET)"; instead, it should read the status and if this bit is set, reset the device. > Thanks! > Chenbo > >> >> /* >> * Each virtqueue indirect descriptor list must be physically contiguous. >> -- >> 2.26.2 > -- Adrián Moreno