mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 17:23:56 -06:00
hw/cxl: Support aborting background commands
As of 3.1 spec, background commands can be canceled with a new abort command. Implement the support, which is advertised in the CEL. No ad-hoc context undoing is necessary as all the command logic of the running bg command is done upon completion. Arbitrarily, the on-going background cmd will not be aborted if already at least 85% done; A mutex is introduced to stabilize mbox request cancel command vs the timer callback being fired scenarios (as well as reading the mbox registers). While some operations under critical regions may be unnecessary (irq notifying, cmd callbacks), this is not a path where performance is important, so simplicity is preferred. Tested-by: Ajay Joshi <ajay.opensrc@micron.com> Reviewed-by: Ajay Joshi <ajay.opensrc@micron.com> Signed-off-by: Davidlohr Bueso <dave@stgolabs.net> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Message-Id: <20250305092501.191929-2-Jonathan.Cameron@huawei.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
7be29f2f1a
commit
98cbac128f
5 changed files with 86 additions and 13 deletions
|
@ -176,10 +176,12 @@ typedef struct CXLCCI {
|
|||
uint16_t opcode;
|
||||
uint16_t complete_pct;
|
||||
uint16_t ret_code; /* Current value of retcode */
|
||||
bool aborted;
|
||||
uint64_t starttime;
|
||||
/* set by each bg cmd, cleared by the bg_timer when complete */
|
||||
uint64_t runtime;
|
||||
QEMUTimer *timer;
|
||||
QemuMutex lock; /* serializes mbox abort vs timer cb */
|
||||
} bg;
|
||||
|
||||
/* firmware update */
|
||||
|
@ -201,6 +203,7 @@ typedef struct CXLCCI {
|
|||
DeviceState *d;
|
||||
/* Pointer to the device hosting the protocol conversion */
|
||||
DeviceState *intf;
|
||||
bool initialized;
|
||||
} CXLCCI;
|
||||
|
||||
typedef struct cxl_device_state {
|
||||
|
@ -316,6 +319,7 @@ void cxl_initialize_mailbox_t3(CXLCCI *cci, DeviceState *d, size_t payload_max);
|
|||
void cxl_initialize_mailbox_swcci(CXLCCI *cci, DeviceState *intf,
|
||||
DeviceState *d, size_t payload_max);
|
||||
void cxl_init_cci(CXLCCI *cci, size_t payload_max);
|
||||
void cxl_destroy_cci(CXLCCI *cci);
|
||||
void cxl_add_cci_commands(CXLCCI *cci, const struct cxl_cmd (*cxl_cmd_set)[256],
|
||||
size_t payload_max);
|
||||
int cxl_process_cci_message(CXLCCI *cci, uint8_t set, uint8_t cmd,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue