summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorPaolo Bonzini2018-06-06 21:09:55 +0200
committerJohn Snow2018-06-08 19:36:31 +0200
commitc173723f247c69974a83af1395020d0f01a0d334 (patch)
tree6951a90343b7720974921c64b48dc157f24dd98b /include
parentatapi: call ide_set_irq before ide_transfer_start (diff)
downloadqemu-c173723f247c69974a83af1395020d0f01a0d334.tar.gz
qemu-c173723f247c69974a83af1395020d0f01a0d334.tar.xz
qemu-c173723f247c69974a83af1395020d0f01a0d334.zip
ide: introduce ide_transfer_start_norecurse
For the case where the end_transfer_func is also the caller of ide_transfer_start, the mutual recursion can lead to unlimited stack usage. Introduce a new version that can be used to change tail recursion into a loop, and use it in trace_ide_atapi_cmd_reply_end. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: John Snow <jsnow@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-id: 20180606190955.20845-8-jsnow@redhat.com Signed-off-by: John Snow <jsnow@redhat.com>
Diffstat (limited to 'include')
-rw-r--r--include/hw/ide/internal.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/include/hw/ide/internal.h b/include/hw/ide/internal.h
index f3de6f9b73..594081e57f 100644
--- a/include/hw/ide/internal.h
+++ b/include/hw/ide/internal.h
@@ -623,6 +623,8 @@ void ide_exec_cmd(IDEBus *bus, uint32_t val);
void ide_transfer_start(IDEState *s, uint8_t *buf, int size,
EndTransferFunc *end_transfer_func);
+bool ide_transfer_start_norecurse(IDEState *s, uint8_t *buf, int size,
+ EndTransferFunc *end_transfer_func);
void ide_transfer_stop(IDEState *s);
void ide_set_inactive(IDEState *s, bool more);
BlockAIOCB *ide_issue_trim(