[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] RE: [Xen-ia64-devel] [PATCH 2/3] IA64: add cpufreq support
Please see attached updated patch. Three changes are made: 1. use ia64 platfrom hypercall instead of dom0 ops hypercall for cpufreq info notify. 2. make ia64_acpiid_to_sapicid[] static 3. fix the indent Best Regards Ke Isaku Yamahata wrote: > On Sat, Sep 27, 2008 at 10:12:37AM +0800, Yu, Ke wrote: >> IA64: implement ia64 cpufreq notify hypercall >> >> This patch implement the ia64 cpufreq hypercall to get dom0 cpufreq >> ACPI info. >> >> Signed-off-by: Yu Ke <ke.yu@xxxxxxxxx> >> Liu Jinsong <jinsong.liu@xxxxxxxxx> > > Hi, some comments below. > > >> IA64: implement ia64 cpufreq notify hypercall >> >> This patch implement the ia64 cpufreq hypercall to get dom0 cpufreq >> ACPI info. >> >> Signed-off-by: Yu Ke <ke.yu@xxxxxxxxx> >> Liu Jinsong <jinsong.liu@xxxxxxxxx> >> >> diff -r ac0516cfe654 xen/arch/ia64/linux-xen/acpi.c >> --- a/xen/arch/ia64/linux-xen/acpi.c Fri Sep 26 19:44:23 2008 +0800 >> +++ b/xen/arch/ia64/linux-xen/acpi.c Fri Sep 26 19:44:53 2008 +0800 >> @@ -219,6 +219,10 @@ return 0; >> } >> >> +#ifdef XEN >> +extern u16 ia64_acpiid_to_sapicid[]; >> +#endif >> + > > Please don't insert delcartions into .c file. > Please declare it in header file. > > >> static int __init >> acpi_parse_lsapic(struct acpi_subtable_header * header, const >> unsigned long end) { @@ -232,6 +236,10 @@ >> #ifdef CONFIG_SMP >> smp_boot_data.cpu_phys_id[available_cpus] = >> (lsapic->id << 8) | lsapic->eid; >> +#endif >> +#ifdef XEN >> + ia64_acpiid_to_sapicid[lsapic->processor_id] = >> + (lsapic->id << 8) | lsapic->eid; >> #endif >> ++available_cpus; >> } >> diff -r ac0516cfe654 xen/arch/ia64/xen/cpufreq/cpufreq.c >> --- a/xen/arch/ia64/xen/cpufreq/cpufreq.c Fri Sep 26 19:44:23 >> 2008 +0800 +++ b/xen/arch/ia64/xen/cpufreq/cpufreq.c Fri Sep 26 >> 19:44:53 2008 +0800 @@ -300,4 +300,34 @@ >> >> return ret; >> } >> + >> +#define MAX_LOCAL_SAPIC 255 >> +u16 ia64_acpiid_to_sapicid[ MAX_LOCAL_SAPIC ] = >> + {[0 ... MAX_LOCAL_SAPIC - 1] = 0xffff }; >> + >> +/* acpiid to cpuid */ >> +int get_cpu_id(u8 acpi_id) >> +{ >> + int i; >> + u16 apic_id; >> + >> + apic_id = ia64_acpiid_to_sapicid[acpi_id]; >> + if ( apic_id == 0xffff ) >> + return -EINVAL; >> + >> + for ( i = 0; i < NR_CPUS; i++ ) >> + { >> + if ( apic_id == ia64_cpu_to_sapicid[i] >> + ) >> + return i; >> + } >> + >> + return -1; >> +} >> + >> __initcall(cpufreq_driver_init); >> + >> +int cpufreq_cpu_init(unsigned int cpuid) >> +{ >> + return cpufreq_add_cpu(cpuid); >> +} > > Please Linux style, not 4 tab. > >> diff -r ac0516cfe654 xen/arch/ia64/xen/dom0_ops.c >> --- a/xen/arch/ia64/xen/dom0_ops.c Fri Sep 26 19:44:23 2008 +0800 >> +++ b/xen/arch/ia64/xen/dom0_ops.c Fri Sep 26 19:44:53 2008 +0800 >> @@ -14,6 +14,7 @@ #include <public/sysctl.h> >> #include <xen/sched.h> >> #include <xen/event.h> >> +#include <xen/domain.h> >> #include <asm/pdb.h> >> #include <xen/trace.h> >> #include <xen/console.h> >> @@ -28,10 +29,21 @@ >> #include <asm/hvm/support.h> >> #include <xsm/xsm.h> >> #include <public/hvm/save.h> >> +#include <public/platform.h> >> +#include <acpi/cpufreq/cpufreq.h> >> >> #define get_xen_guest_handle(val, hnd) do { val = (hnd).p; } while >> (0) >> >> extern unsigned long total_pages; >> + >> +int xenpf_copy_px_states(struct processor_performance *pxpt, >> + struct xen_processor_performance *dom0_px_info) +{ >> + if (!pxpt || !dom0_px_info) >> + return -EINVAL; >> + return copy_from_guest(pxpt->states, dom0_px_info->states, >> + dom0_px_info->state_count); >> +} >> >> long arch_do_domctl(xen_domctl_t *op, >> XEN_GUEST_HANDLE(xen_domctl_t) u_domctl) { @@ -597,6 +609,40 @@ >> case IA64_DOM0VP_unexpose_foreign_p2m: >> ret = dom0vp_unexpose_foreign_p2m(d, arg0, arg1); >> break; + >> + case IA64_DOM0VP_set_pm_info: { >> + XEN_GUEST_HANDLE(xenpf_set_processor_pminfo_t) hnd; >> + struct xenpf_set_processor_pminfo pminfo; >> + extern int set_px_pminfo(uint32_t cpuid, struct >> + xen_processor_performance *perf); >> + >> + set_xen_guest_handle(hnd, >> (xenpf_set_processor_pminfo_t*)arg0); + if >> (copy_from_guest(&pminfo, hnd, 1)){ + return -EFAULT; >> + } >> + >> + switch (pminfo.type) >> + { >> + case XEN_PM_PX: >> + if ( !(xen_processor_pmbits & XEN_PROCESSOR_PM_PX) >> ) + { + ret = -ENOSYS; >> + break; >> + } >> + ret = set_px_pminfo(pminfo.id, &pminfo.perf); + >> break; + case XEN_PM_CX: >> + /* Place holder for Cx */ >> + ret = -ENOSYS; >> + break; >> + default: >> + ret = -EINVAL; >> + break; >> + } >> + >> + break; >> + } >> + >> default: >> ret = -1; >> printk("unknown dom0_vp_op 0x%lx\n", cmd); > > Hmm, why not use XENPF_set_processor_pminfo. > Ah, I guess you did this because Xen/IA64 doesn't define > do_platform_op(). So please define do_platform_op() in > xen/arch/ia64/xen/platform_hypercall.c following the x86 way. > And update ia64_hypercall_table in xen/arch/ia64/linux-xen/entry.S. > You also have to update the next patch for Linux. > > >> diff -r ac0516cfe654 xen/arch/ia64/xen/domain.c >> --- a/xen/arch/ia64/xen/domain.c Fri Sep 26 19:44:23 2008 +0800 >> +++ b/xen/arch/ia64/xen/domain.c Fri Sep 26 19:44:53 2008 +0800 >> @@ -2160,6 +2160,7 @@ snprintf(si->magic, sizeof(si->magic), >> "xen-3.0-ia64"); si->nr_pages = max_pages; >> si->flags = SIF_INITDOMAIN|SIF_PRIVILEGED; >> + si->flags |= (xen_processor_pmbits << 8) & SIF_PM_MASK; >> >> printk("Dom0: 0x%lx\n", (u64)dom0); >> > > not space, but tab. > > >> diff -r ac0516cfe654 xen/include/public/arch-ia64.h >> --- a/xen/include/public/arch-ia64.h Fri Sep 26 19:44:23 2008 +0800 >> +++ b/xen/include/public/arch-ia64.h Fri Sep 26 19:44:53 2008 +0800 >> @@ -453,6 +453,9 @@ /* unexpose the foreign domain's p2m table into >> privileged domain */ #define IA64_DOM0VP_unexpose_foreign_p2m >> 13 >> >> +/* pass power management info to hypervisor */ >> +#define IA64_DOM0VP_set_pm_info 14 >> + >> // flags for page assignement to pseudo physical address space >> #define _ASSIGN_readonly 0 >> #define ASSIGN_readonly (1UL << _ASSIGN_readonly) Attachment:
px-xen-ipf-hypercall.patch _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |