linux/arch/powerpc
Michael Ellerman 448e2ca0e3 powerpc/pseries: Implement a quota system for MSIs
There are hardware limitations on the number of available MSIs,
which firmware expresses using a property named "ibm,pe-total-#msi".
This property tells us how many MSIs are available for devices below
the point in the PCI tree where we find the property.

For old firmwares which don't have the property, we assume there are
8 MSIs available per "partitionable endpoint" (PE). The PE can be
found using existing EEH code, which uses the methods described in
PAPR. For our purposes we want the parent of the node that's
identified using this method.

When a driver requests n MSIs for a device, we first establish where
the "ibm,pe-total-#msi" property above that device is, or we find the
PE if the property is not found. In both cases we call this node
the "pe_dn".

We then count all non-bridge devices below the pe_dn, to establish
how many devices in total may need MSIs. The quota is then simply the
total available divided by the number of devices, if the request is
less than or equal to the quota, the request is fine and we're done.

If the request is greater than the quota, we try to determine if there
are any "spare" MSIs which we can give to this device. Spare MSIs are
found by looking for other devices which can never use their full
quota, because their "req#msi(-x)" property is less than the quota.

If we find any spare, we divide the spares by the number of devices
that could request more than their quota. This ensures the spare
MSIs are spread evenly amongst all over-quota requestors.

Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
2009-02-23 15:53:03 +11:00
..
boot Merge commit 'kumar/next' into next 2009-02-18 13:23:30 +11:00
configs powerpc/amigaone: Default config for AmigaOne boards 2009-02-11 16:00:10 +11:00
include/asm powerpc: Add support for using doorbells for SMP IPI 2009-02-23 15:53:03 +11:00
kernel powerpc: Add support for using doorbells for SMP IPI 2009-02-23 15:53:03 +11:00
kvm KVM: Add kvm_arch_sync_events to sync with asynchronize events 2009-02-15 02:47:36 +02:00
lib powerpc: Rework dma-noncoherent to use generic vmalloc layer 2009-02-23 10:48:57 +11:00
math-emu powerpc: Add SPE/EFP math emulation for E500v1/v2 processors. 2008-12-03 08:19:16 -06:00
mm powerpc/mm: Reduce hashtable size when using 64kB pages 2009-02-23 10:48:58 +11:00
oprofile powerpc/cell: Add missing #include for oprofile 2009-02-10 14:39:08 +11:00
platforms powerpc/pseries: Implement a quota system for MSIs 2009-02-23 15:53:03 +11:00
sysdev Merge commit 'kumar/next' into next 2009-02-11 13:37:44 +11:00
xmon powerpc: Prepare xmon_save_regs for use with kdump 2008-12-23 15:13:28 +11:00
Kconfig powerpc: Rework dma-noncoherent to use generic vmalloc layer 2009-02-23 10:48:57 +11:00
Kconfig.debug powerpc: Allow the max stack trace depth to be configured 2008-12-03 20:46:35 +11:00
Makefile powerpc: Remove unncessary SPE related compiler flag 2008-12-03 08:19:10 -06:00