[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH 0/5] atapi: change unlimited recursion to while
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [RFC PATCH 0/5] atapi: change unlimited recursion to while loop |
Date: |
Fri, 23 Feb 2018 16:26:35 +0100 |
Real hardware doesn't have an unlimited stack, so the unlimited
recursion in the ATAPI code smells a bit. In fact, the call to
ide_transfer_start easily becomes a tail call with a small change
to the code (patch 4). The remaining four patches move code around
so as to the turn the call back to ide_atapi_cmd_reply_end into
another tail call, and then convert the (double) tail recursion into
a while loop.
I'm not sure how this can be tested, apart from adding a READ CD
test to ahci-test (which I don't really have time for now, hence
the RFC tag). The existing AHCI tests still pass, so patches 1-3
aren't complete crap.
Paolo
Paolo Bonzini (5):
ide: push call to end_transfer_func out of start_transfer callback
ide: push end_transfer callback to ide_transfer_halt
ide: make ide_transfer_stop idempotent
atapi: call ide_set_irq before ide_transfer_start
ide: introduce ide_transfer_start_norecurse
hw/ide/ahci.c | 12 +++++++-----
hw/ide/atapi.c | 37 ++++++++++++++++++++-----------------
hw/ide/core.c | 37 +++++++++++++++++++++++--------------
include/hw/ide/internal.h | 3 +++
4 files changed, 53 insertions(+), 36 deletions(-)
--
2.14.3
- [Qemu-devel] [RFC PATCH 0/5] atapi: change unlimited recursion to while loop,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 3/5] ide: do not set s->end_transfer_func to ide_transfer_cancel, Paolo Bonzini, 2018/02/23
- [Qemu-devel] [PATCH 4/5] atapi: call ide_set_irq before ide_transfer_start, Paolo Bonzini, 2018/02/23
- [Qemu-devel] [PATCH 2/5] ide: push end_transfer callback to ide_transfer_halt, Paolo Bonzini, 2018/02/23
- [Qemu-devel] [PATCH 1/5] ide: push call to end_transfer_func out of start_transfer callback, Paolo Bonzini, 2018/02/23
- [Qemu-devel] [PATCH 5/5] ide: introduce ide_transfer_start_norecurse, Paolo Bonzini, 2018/02/23
- Re: [Qemu-devel] [RFC PATCH 0/5] atapi: change unlimited recursion to while loop, John Snow, 2018/02/27