Skip to content
  • Peter Maydell's avatar
    0c285e01
    hw/block/fdc-sysbus: Always mark sysbus floppy controllers as not having DMA · 0c285e01
    Peter Maydell authored
    The sysbus floppy controllers (devices sysbus-fdc and sun-fdtwo)
    don't support DMA.  The core floppy controller code expects this to
    be indicated by setting FDCtrl::dma_chann to -1.  This used to be
    done in the device instance_init functions sysbus_fdc_initfn() and
    sun4m_fdc_initfn(), but in commit 1430759e we refactored this code
    and accidentally lost the setting of dma_chann.
    
    For sysbus-fdc this has no ill effects because we were redundantly
    also setting dma_chann in fdctrl_init_sysbus(), but for sun-fdtwo
    this means that guests which try to enable DMA on the floppy
    controller will cause QEMU to crash because FDCtrl::dma is NULL.
    
    Set dma_chann to -1 in the common instance init, and remove the
    redundant code in fdctrl_init_sysbus() that is also setting it.
    
    There is a six-year-old FIXME comment in the jazz board code to the
    effect that in theory it should support doing DMA via a custom DMA
    controller.  If anybody ever chooses to fix that they can do it by
    adding support for setting both FDCtrl::dma_chann and FDCtrl::dma.
    (A QOM link property 'dma-controller' on the sysbus device which can
    be set to an instance of IsaDmaClass is probably the way to go.)
    
    Fixes: 1430759e ("hw/block/fdc: Extract SysBus floppy controllers to fdc-sysbus.c")
    Resolves: https://gitlab.com/qemu-project/qemu/-/issues/958
    
    
    Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
    Reviewed-by: default avatarPhilippe Mathieu-Daudé <f4bug@amsat.org>
    Reviewed-by: default avatarMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
    Message-Id: <20220505101842.2757905-1-peter.maydell@linaro.org>
    Signed-off-by: default avatarPhilippe Mathieu-Daudé <f4bug@amsat.org>
    0c285e01
    hw/block/fdc-sysbus: Always mark sysbus floppy controllers as not having DMA
    Peter Maydell authored
    The sysbus floppy controllers (devices sysbus-fdc and sun-fdtwo)
    don't support DMA.  The core floppy controller code expects this to
    be indicated by setting FDCtrl::dma_chann to -1.  This used to be
    done in the device instance_init functions sysbus_fdc_initfn() and
    sun4m_fdc_initfn(), but in commit 1430759e we refactored this code
    and accidentally lost the setting of dma_chann.
    
    For sysbus-fdc this has no ill effects because we were redundantly
    also setting dma_chann in fdctrl_init_sysbus(), but for sun-fdtwo
    this means that guests which try to enable DMA on the floppy
    controller will cause QEMU to crash because FDCtrl::dma is NULL.
    
    Set dma_chann to -1 in the common instance init, and remove the
    redundant code in fdctrl_init_sysbus() that is also setting it.
    
    There is a six-year-old FIXME comment in the jazz board code to the
    effect that in theory it should support doing DMA via a custom DMA
    controller.  If anybody ever chooses to fix that they can do it by
    adding support for setting both FDCtrl::dma_chann and FDCtrl::dma.
    (A QOM link property 'dma-controller' on the sysbus device which can
    be set to an instance of IsaDmaClass is probably the way to go.)
    
    Fixes: 1430759e ("hw/block/fdc: Extract SysBus floppy controllers to fdc-sysbus.c")
    Resolves: https://gitlab.com/qemu-project/qemu/-/issues/958
    
    
    Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
    Reviewed-by: default avatarPhilippe Mathieu-Daudé <f4bug@amsat.org>
    Reviewed-by: default avatarMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
    Message-Id: <20220505101842.2757905-1-peter.maydell@linaro.org>
    Signed-off-by: default avatarPhilippe Mathieu-Daudé <f4bug@amsat.org>
Loading