[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
Description: px-xen-ipf-hypercall.patch

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.