• Joerg Roedel's avatar
    kvm: irqchip: Break up high order allocations of kvm_irq_routing_table · e73f61e4
    Joerg Roedel authored
    The allocation size of the kvm_irq_routing_table depends on
    the number of irq routing entries because they are all
    allocated with one kzalloc call.
    
    When the irq routing table gets bigger this requires high
    order allocations which fail from time to time:
    
    	qemu-kvm: page allocation failure: order:4, mode:0xd0
    
    This patch fixes this issue by breaking up the allocation of
    the table and its entries into individual kzalloc calls.
    These could all be satisfied with order-0 allocations, which
    are less likely to fail.
    
    The downside of this change is the lower performance, because
    of more calls to kzalloc. But given how often kvm_set_irq_routing
    is called in the lifetime of a guest, it doesn't really
    matter much.
    Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    [Avoid sparse warning through rcu_access_pointer. - Paolo]
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    e73f61e4
irqchip.c 5.78 KB