mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 10:34:58 -06:00
tpm-be: call request_completed() out of thread
Lift from the backend implementation the responsability to call the request_completed() callback outside of thread context. This also simplify frontend/interface work, as they no longer need to care whether the callback is called from a different thread. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Stefan Berger <stefanb@linux.vnet.ibm.com> Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
This commit is contained in:
parent
36e8658924
commit
689990598a
6 changed files with 27 additions and 29 deletions
|
@ -76,7 +76,6 @@ typedef struct TPMState {
|
|||
ISADevice busdev;
|
||||
MemoryRegion mmio;
|
||||
|
||||
QEMUBH *bh;
|
||||
uint32_t offset;
|
||||
uint8_t buf[TPM_TIS_BUFFER_MAX];
|
||||
|
||||
|
@ -410,10 +409,20 @@ static void tpm_tis_prep_abort(TPMState *s, uint8_t locty, uint8_t newlocty)
|
|||
tpm_tis_abort(s, locty);
|
||||
}
|
||||
|
||||
static void tpm_tis_receive_bh(void *opaque)
|
||||
/*
|
||||
* Callback from the TPM to indicate that the response was received.
|
||||
*/
|
||||
static void tpm_tis_request_completed(TPMIf *ti)
|
||||
{
|
||||
TPMState *s = opaque;
|
||||
TPMState *s = TPM(ti);
|
||||
uint8_t locty = s->cmd.locty;
|
||||
uint8_t l;
|
||||
|
||||
if (s->cmd.selftest_done) {
|
||||
for (l = 0; l < TPM_TIS_NUM_LOCALITIES; l++) {
|
||||
s->loc[locty].sts |= TPM_TIS_STS_SELFTEST_DONE;
|
||||
}
|
||||
}
|
||||
|
||||
tpm_tis_sts_set(&s->loc[locty],
|
||||
TPM_TIS_STS_VALID | TPM_TIS_STS_DATA_AVAILABLE);
|
||||
|
@ -431,23 +440,6 @@ static void tpm_tis_receive_bh(void *opaque)
|
|||
TPM_TIS_INT_DATA_AVAILABLE | TPM_TIS_INT_STS_VALID);
|
||||
}
|
||||
|
||||
static void tpm_tis_request_completed(TPMIf *ti)
|
||||
{
|
||||
TPMState *s = TPM(ti);
|
||||
|
||||
bool is_selftest_done = s->cmd.selftest_done;
|
||||
uint8_t locty = s->cmd.locty;
|
||||
uint8_t l;
|
||||
|
||||
if (is_selftest_done) {
|
||||
for (l = 0; l < TPM_TIS_NUM_LOCALITIES; l++) {
|
||||
s->loc[locty].sts |= TPM_TIS_STS_SELFTEST_DONE;
|
||||
}
|
||||
}
|
||||
|
||||
qemu_bh_schedule(s->bh);
|
||||
}
|
||||
|
||||
/*
|
||||
* Read a byte of response data
|
||||
*/
|
||||
|
@ -1094,8 +1086,6 @@ static void tpm_tis_realizefn(DeviceState *dev, Error **errp)
|
|||
return;
|
||||
}
|
||||
|
||||
s->bh = qemu_bh_new(tpm_tis_receive_bh, s);
|
||||
|
||||
isa_init_irq(&s->busdev, &s->irq, s->irq_num);
|
||||
|
||||
memory_region_add_subregion(isa_address_space(ISA_DEVICE(dev)),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue