I'm looking at adding Xen SMP support, so I'm trying to work out what pv_ops we need, and how to cut into the existing smp stuff. smpboot.c has a mixture of stuff which is generally useful for SMP stuff (the various CPU sets, and presumably the sibling relationships are useful in principle), but also a whole pile of APIC stuff which is irrelevent to Xen. It has these exported symbols, with my first pass comments: 00000644 T __cpu_die -- need pv_op 000008a5 T __cpu_disable -- need pv_op 000006aa T __cpu_up -- need pv_op 00000000 T cpu_coregroup_map -- ? ignore 00000868 T cpu_exit_clear -- ? 00000d9f T initialize_secondary -- Xen no-op 000008ee T smp_alloc_memory -- Xen no-op (doesn't matter if it gets called) 00000057 T smp_cpus_done -- unwanted for Xen 00000015 T smp_intr_init -- need something to set up IPIs, but APIC independent 0000082a T smp_prepare_boot_cpu -- looks OK for Xen, I think 00000066 T smp_prepare_cpus -- need pv_op So at first pass, it looks like we need 6-8 new pv_ops for SMP, which isn't very appealing. Any thoughts about how to come up with a more elegant interface? I'm digging through smpboot.c and friends, but there's a lot of goo in there... It's not clear to me what we should do with all the topology stuff. Clearly a VCPU won't have any fixed physical relationship with other VCPUs unless they're pinned; I'm wondering if the existing code will confuse itself if it gets basically random topology info from cpuid. J