• Konrad Rzeszutek Wilk's avatar
    xen/pciback: Restore configuration space when detaching from a guest. · b1df4a56
    Konrad Rzeszutek Wilk authored
    The commit "xen/pciback: Don't deadlock when unbinding." was using
    the version of pci_reset_function which would lock the device lock.
    That is no good as we can dead-lock. As such we swapped to using
    the lock-less version and requiring that the callers
    of 'pcistub_put_pci_dev' take the device lock. And as such
    this bug got exposed.
    
    Using the lock-less version is  OK, except that we tried to
    use 'pci_restore_state' after the lock-less version of
    __pci_reset_function_locked - which won't work as 'state_saved'
    is set to false. Said 'state_saved' is a toggle boolean that
    is to be used by the sequence of a) pci_save_state/pci_restore_state
    or b) pci_load_and_free_saved_state/pci_restore_state. We don't
    want to use a) as the guest might have messed up the PCI
    configuration space and we want it to revert to the state
    when the PCI device was binded to us. Therefore we pick
    b) to restore the configuration space.
    
    We restore from our 'golden' version of PCI configuration space, when an:
     - Device is unbinded from pciback
     - Device is detached from a guest.
    Reported-by: default avatarSander Eikelenboom <linux@eikelenboom.it>
    Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: default avatarDavid Vrabel <david.vrabel@citrix.com>
    b1df4a56
pci_stub.c 38.5 KB