linux_old1/arch/powerpc/platforms/pseries
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
..
Kconfig powerpc: Disable Collaborative Memory Manager for kdump 2008-12-21 14:21:15 +11:00
Makefile powerpc/pseries: Add collaborative memory manager 2008-07-25 15:44:42 +10:00
cmm.c powerpc: Add reboot notifier to Collaborative Memory Manager 2008-12-21 14:21:15 +11:00
eeh.c powerpc/eeh: Make EEH device add/remove more robust 2008-11-06 09:25:15 +11:00
eeh_cache.c [POWERPC] Add CONFIG_PPC_PSERIES_DEBUG to enable debugging for platforms/pseries 2008-04-24 21:08:12 +10:00
eeh_driver.c powerpc/eeh: Only disable/enable LSI interrupts in EEH 2009-02-11 16:00:08 +11:00
eeh_event.c [POWERPC] Rename get_property to of_get_property: arch/powerpc 2007-04-13 03:55:19 +10:00
eeh_sysfs.c [POWERPC] Show EEH per-device false positives 2007-06-14 22:29:55 +10:00
firmware.c [POWERPC] pseries/firmware.c should include pseries/pseries.h 2008-05-14 22:32:00 +10:00
hotplug-cpu.c powerpc/pseries: Fix cpu hotplug 2008-12-23 15:13:27 +11:00
hotplug-memory.c powerpc: Add missing sparsemem.h include 2009-02-10 14:39:09 +11:00
hvCall.S [POWERPC] Bypass hcall stats until cpu features have run 2007-03-22 15:01:43 +11:00
hvCall_inst.c [PATCH] mark struct file_operations const 2 2007-02-12 09:48:44 -08:00
hvconsole.c [POWERPC] clean up pseries hcall interfaces 2006-08-01 16:19:15 +10:00
hvcserver.c [PATCH] powerpc/pseries: Change H_StudlyCaps to H_SHOUTING_CAPS 2006-04-01 22:36:57 +11:00
iommu.c powerpc: Change u64/s64 to a long long integer type 2009-01-13 14:47:59 +11:00
kexec.c powerpc/pseries: Call pseries_kexec_setup only on pseries 2008-06-30 22:30:57 +10:00
lpar.c powerpc: Remove unnecessary condition when sanity-checking WIMG bits 2008-07-15 12:24:59 +10:00
msi.c powerpc/pseries: Implement a quota system for MSIs 2009-02-23 15:53:03 +11:00
nvram.c [POWERPC] Add missing of_node_put in pseries/nvram.c 2008-06-16 15:00:32 +10:00
pci.c [POWERPC] Rename get_property to of_get_property: arch/powerpc 2007-04-13 03:55:19 +10:00
pci_dlpar.c powerpc/pseries: Remove write only variable in PCI DLPAR 2009-02-11 13:37:59 +11:00
phyp_dump.c powerpc: Printing fix for l64 to ll64 conversion: phyp_dump.c 2009-01-28 17:15:51 +11:00
plpar_wrappers.h powerpc: Fix CMM page loaning on 64k page kernel with 4k hardware pages 2008-08-18 14:22:35 +10:00
power.c [POWERPC] Fix warning in pseries/power.c 2008-02-20 13:33:37 +11:00
pseries.h [POWERPC] Move prototype for find_udbg_vterm() into a header file 2008-04-17 10:00:59 +10:00
ras.c [POWERPC] Fix sparse warnings in arch/powerpc/platforms/pseries 2008-05-14 22:32:02 +10:00
reconfig.c powerpc: Check rc of notifier chain for memory remove 2008-09-15 11:07:52 -07:00
rtasd.c "Tree RCU": scalable classic RCU implementation 2008-12-18 21:56:04 +01:00
scanlog.c [POWERPC] Assign PDE->data before gluing PDE into /proc tree 2008-05-05 16:47:14 +10:00
setup.c Remove asm/a.out.h files for all architectures without a.out support. 2008-09-06 19:30:24 +01:00
smp.c powerpc: Use cpu_thread_in_core in smp_init for of_spin_map 2008-10-21 15:19:12 +11:00
xics.c Merge branch 'cpus4096-for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-01-02 11:44:09 -08:00
xics.h powerpc/xics: Consolidate ipi message encode and decode 2008-10-13 16:24:16 +11:00