ide/core: Remove explicit setting of BM_STATUS_INT
BM_STATUS_INT is automatically set during ide_set_irq(), there's no reason to set it manually in addition. There is even one case where the interrupt status bit was set, but no IRQ was raised. This is when the PRD table was reached but there is more data to transfer. The correct behaviour for this case is not to set BM_STATUS_INT. Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
a90d469007
commit
69c38b8fce
@ -430,7 +430,6 @@ void ide_dma_error(IDEState *s)
|
|||||||
s->error = ABRT_ERR;
|
s->error = ABRT_ERR;
|
||||||
s->status = READY_STAT | ERR_STAT;
|
s->status = READY_STAT | ERR_STAT;
|
||||||
ide_set_inactive(s);
|
ide_set_inactive(s);
|
||||||
s->bus->dma->ops->add_status(s->bus->dma, BM_STATUS_INT);
|
|
||||||
ide_set_irq(s->bus);
|
ide_set_irq(s->bus);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -500,8 +499,11 @@ handle_rw_error:
|
|||||||
n = s->nsector;
|
n = s->nsector;
|
||||||
s->io_buffer_index = 0;
|
s->io_buffer_index = 0;
|
||||||
s->io_buffer_size = n * 512;
|
s->io_buffer_size = n * 512;
|
||||||
if (s->bus->dma->ops->prepare_buf(s->bus->dma, s->is_read) == 0)
|
if (s->bus->dma->ops->prepare_buf(s->bus->dma, s->is_read) == 0) {
|
||||||
|
/* The PRDs were too short. Reset the Active bit, but don't raise an
|
||||||
|
* interrupt. */
|
||||||
goto eot;
|
goto eot;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_AIO
|
#ifdef DEBUG_AIO
|
||||||
printf("ide_dma_cb: sector_num=%" PRId64 " n=%d, is_read=%d\n",
|
printf("ide_dma_cb: sector_num=%" PRId64 " n=%d, is_read=%d\n",
|
||||||
@ -523,7 +525,6 @@ handle_rw_error:
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
eot:
|
eot:
|
||||||
s->bus->dma->ops->add_status(s->bus->dma, BM_STATUS_INT);
|
|
||||||
ide_set_inactive(s);
|
ide_set_inactive(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user