diff options
| author | Christian Krinitsin <mail@krinitsin.com> | 2025-06-30 12:34:26 +0000 |
|---|---|---|
| committer | Christian Krinitsin <mail@krinitsin.com> | 2025-06-30 12:35:44 +0000 |
| commit | 25f8033d556aa17afaea4a5196ea7a69fe248320 (patch) | |
| tree | 0f056db167683be54ea1e5e72d29d6069af55e7d /results/classifier/deepseek-2-tmp/output/hypervisor/1362635 | |
| parent | 8e6da29e4ee5fc14bc1cc816a24f21271f14090d (diff) | |
| download | emulator-bug-study-25f8033d556aa17afaea4a5196ea7a69fe248320.tar.gz emulator-bug-study-25f8033d556aa17afaea4a5196ea7a69fe248320.zip | |
add new temporary deepseek-r1:14b results
Diffstat (limited to 'results/classifier/deepseek-2-tmp/output/hypervisor/1362635')
| -rw-r--r-- | results/classifier/deepseek-2-tmp/output/hypervisor/1362635 | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/results/classifier/deepseek-2-tmp/output/hypervisor/1362635 b/results/classifier/deepseek-2-tmp/output/hypervisor/1362635 new file mode 100644 index 00000000..0da1b419 --- /dev/null +++ b/results/classifier/deepseek-2-tmp/output/hypervisor/1362635 @@ -0,0 +1,43 @@ + +bdrv_read co-routine re-entered recursively + +calling bdrv_read in a loop leads to the follwing situation: + +bs->drv->bdrv_aio_readv is called, and finally calls bdrv_co_io_em_complete in other thread context. +there is a possibility of calling bdrv_co_io_em_complete before calling qemu_coroutine_yield in bdrv_co_io_em. And qemu fails with "co-routine re-entered recursively". + +static void bdrv_co_io_em_complete(void *opaque, int ret) +{ + CoroutineIOCompletion *co = opaque; + + co->ret = ret; + qemu_coroutine_enter(co->coroutine, NULL); +} + +static int coroutine_fn bdrv_co_io_em(BlockDriverState *bs, int64_t sector_num, + int nb_sectors, QEMUIOVector *iov, + bool is_write) +{ + CoroutineIOCompletion co = { + .coroutine = qemu_coroutine_self(), + }; + BlockDriverAIOCB *acb; + + if (is_write) { + acb = bs->drv->bdrv_aio_writev(bs, sector_num, iov, nb_sectors, + bdrv_co_io_em_complete, &co); + } else { + acb = bs->drv->bdrv_aio_readv(bs, sector_num, iov, nb_sectors, + bdrv_co_io_em_complete, &co); + } + + trace_bdrv_co_io_em(bs, sector_num, nb_sectors, is_write, acb); + if (!acb) { + return -EIO; + } + qemu_coroutine_yield(); + + return co.ret; +} + +is it a bug, or may be I don't understand something? \ No newline at end of file |