[RFC] Fix for interrupt distribution
Anton Blanchard
anton at samba.org
Fri Nov 17 02:36:16 EST 2006
Hi,
Thanks for fixing this problem. One thing I noticed in the patch:
> + np = cpuid_to_of_node(boot_cpuid);
> + BUG_ON(!np);
> + ireg = get_property(np, "ibm,ppc-interrupt-gserver#s", &ilen);
> + hcpuid = get_hard_smp_processor_id(boot_cpuid);
> +
> + if (ireg[0] == hcpuid)
> + default_distrib_server = ireg[1];
> + else
> + default_distrib_server = ireg[3];
While this will work on current firmware it would be more robust to loop
through interrupt-gserver#s until you find your cpuid. For example we
set up multiple interrupt-gserver#s entries in the lab so we can have
chip, node local and global targets:
ibm,ppc-interrupt-server#s
00000002 00000003
ibm,ppc-interrupt-gserver#s
00000002 000000ff 00000003 000000ff 00000002 000000f7
00000003 000000f7 00000002 000000d7
00000003 000000d7
We always put the global target at the end (0xd7 in this case) because
the current code in Linux just grabs the last entry in the array to get
the global server. So the question is, do we look for the first or the
last entry that matches your cpuid to find the global server?
It might be worth getting something added to the architecture (PAPR) to
clear it up. To match what current Linux does, we would want servers to
go from including the least to the most cpus, so the global one is at
the end.
Anton
More information about the Linuxppc-dev
mailing list