• Vitaly Kuznetsov's avatar
    PCI: hv: Handle all pending messages in hv_pci_onchannelcallback() · 837d741e
    Vitaly Kuznetsov authored
    When we have an interrupt from the host we have a bit set in event page
    indicating there are messages for the particular channel.  We need to read
    them all as we won't get signaled for what was on the queue before we
    cleared the bit in vmbus_on_event().  This applies to all Hyper-V drivers
    and the pass-through driver should do the same.
    
    I did not meet any bugs; the issue was found by code inspection.  We don't
    have many events going through hv_pci_onchannelcallback(), which explains
    why nobody reported the issue before.
    
    While on it, fix handling non-zero vmbus_recvpacket_raw() return values by
    dropping out.  If the return value is not zero, it is wrong to inspect
    buffer or bytes_recvd as these may contain invalid data.
    Signed-off-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Acked-by: default avatarJake Oshins <jakeo@microsoft.com>
    837d741e
pci-hyperv.c 65 KB