lsi: Purge request queue on soft reset
Avoid keeping zombie requests across controller reset by purging the queue and also dropping the currently active request. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
37905d6ae5
commit
51336214da
@ -283,6 +283,8 @@ static inline int lsi_irq_on_rsl(LSIState *s)
|
|||||||
|
|
||||||
static void lsi_soft_reset(LSIState *s)
|
static void lsi_soft_reset(LSIState *s)
|
||||||
{
|
{
|
||||||
|
lsi_request *p;
|
||||||
|
|
||||||
DPRINTF("Reset\n");
|
DPRINTF("Reset\n");
|
||||||
s->carry = 0;
|
s->carry = 0;
|
||||||
|
|
||||||
@ -345,6 +347,15 @@ static void lsi_soft_reset(LSIState *s)
|
|||||||
s->sbc = 0;
|
s->sbc = 0;
|
||||||
s->csbc = 0;
|
s->csbc = 0;
|
||||||
s->sbr = 0;
|
s->sbr = 0;
|
||||||
|
while (!QTAILQ_EMPTY(&s->queue)) {
|
||||||
|
p = QTAILQ_FIRST(&s->queue);
|
||||||
|
QTAILQ_REMOVE(&s->queue, p, next);
|
||||||
|
qemu_free(p);
|
||||||
|
}
|
||||||
|
if (s->current) {
|
||||||
|
qemu_free(s->current);
|
||||||
|
s->current = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int lsi_dma_40bit(LSIState *s)
|
static int lsi_dma_40bit(LSIState *s)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user