On 03/16/2018 07:20 AM, Mark Cave-Ayland wrote: > On 05/03/18 21:54, Mark Cave-Ayland wrote: > >> On 02/03/18 17:08, Anton Nefedov wrote: >> >>> commit 947858b0 "ide: abort TRIM operation for invalid range" >>> is incorrect for macio; just ide_dma_error() without doing a callback >>> is not enough for that errorpath. >>> >>> Instead, pass -EINVAL to the callback and handle it there >>> (see related motivation for read/write in 58ac32113). >>> >>> It will however catch possible EINVAL from the block layer too. >>> >>> Signed-off-by: Anton Nefedov <anton.nefe...@virtuozzo.com> >>> --- >>> hw/ide/core.c | 17 +++++++++-------- >>> 1 file changed, 9 insertions(+), 8 deletions(-) >>> >>> diff --git a/hw/ide/core.c b/hw/ide/core.c >>> index 257b429..54510d4 100644 >>> --- a/hw/ide/core.c >>> +++ b/hw/ide/core.c >>> @@ -402,7 +402,6 @@ typedef struct TrimAIOCB { >>> QEMUIOVector *qiov; >>> BlockAIOCB *aiocb; >>> int i, j; >>> - bool is_invalid; >>> } TrimAIOCB; >>> static void trim_aio_cancel(BlockAIOCB *acb) >>> @@ -430,11 +429,8 @@ static void ide_trim_bh_cb(void *opaque) >>> { >>> TrimAIOCB *iocb = opaque; >>> - if (iocb->is_invalid) { >>> - ide_dma_error(iocb->s); >>> - } else { >>> - iocb->common.cb(iocb->common.opaque, iocb->ret); >>> - } >>> + iocb->common.cb(iocb->common.opaque, iocb->ret); >>> + >>> qemu_bh_delete(iocb->bh); >>> iocb->bh = NULL; >>> qemu_aio_unref(iocb); >>> @@ -462,7 +458,7 @@ static void ide_issue_trim_cb(void *opaque, int ret) >>> } >>> if (!ide_sect_range_ok(s, sector, count)) { >>> - iocb->is_invalid = true; >>> + iocb->ret = -EINVAL; >>> goto done; >>> } >>> @@ -502,7 +498,6 @@ BlockAIOCB *ide_issue_trim( >>> iocb->qiov = qiov; >>> iocb->i = -1; >>> iocb->j = 0; >>> - iocb->is_invalid = false; >>> ide_issue_trim_cb(iocb, 0); >>> return &iocb->common; >>> } >>> @@ -848,6 +843,12 @@ static void ide_dma_cb(void *opaque, int ret) >>> if (ret == -ECANCELED) { >>> return; >>> } >>> + >>> + if (ret == -EINVAL) { >>> + ide_dma_error(s); >>> + return; >>> + } >>> + >>> if (ret < 0) { >>> if (ide_handle_rw_error(s, -ret, >>> ide_dma_cmd_to_retry(s->dma_cmd))) { >>> s->bus->dma->aiocb = NULL; >>> >> >> Hi Anton, >> >> Thanks for this. I applied this patch to git master with my macio >> patch at >> https://lists.gnu.org/archive/html/qemu-devel/2018-02/msg06076.html >> and it allowed to continue all the way through the Debian installer >> for the PPC g3beige machine so I believe it is working. >> >> Tested-by: Mark Cave-Ayland <mark.cave-ayl...@ilande.co.uk> > > Hi John, > > I know that you're busy, but just wondering if you have managed to > review these 2 TRIM patches? They are a candidate for 2.12 since they > prevent a qemu-system-ppc segfault on Mac machines when issuing IDE TRIM > commands. > > > ATB, > > Mark.
Will send a PR once it looks as if Peter Maydell has caught up with all of the last-minute PR panic for soft freeze -- they're not forgotten, I promise! Thank you for checking in on me. --John