From xen-ia64-devel-bounces@lists.xensource.com Wed Oct 01 02:13:49 2008
Return-path: <xen-ia64-devel-bounces@lists.xensource.com>
Envelope-to: www-data@lists.xensource.com
Delivery-date: Wed, 01 Oct 2008 02:13:49 -0700
Received: from localhost ([127.0.0.1] helo=lists.colo.xensource.com)
	by lists.xensource.com with esmtp (Exim 4.43)
	id 1KkxmH-0002t6-2i; Wed, 01 Oct 2008 02:13:49 -0700
Received: from spam.xensource.com ([70.42.241.90])
	by lists.xensource.com with esmtp (Exim 4.43) id 1Kkxlb-0002U4-Bz
	for xen-ia64-devel@lists.xensource.com; Wed, 01 Oct 2008 02:13:07 -0700
X-ASG-Debug-ID: 1222852386-091600000000-zRdJ7k
X-Barracuda-URL: http://spam.xensource.com:8000/cgi-bin/mark.cgi
Received: from mga02.intel.com (localhost [127.0.0.1])
	by spam.xensource.com (Spam Firewall) with ESMTP id EA66AB3237
	for <xen-ia64-devel@lists.xensource.com>;
	Wed,  1 Oct 2008 02:13:06 -0700 (PDT)
Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by
	spam.xensource.com with ESMTP id 6bQNf8quRaO388N8 for
	<xen-ia64-devel@lists.xensource.com>;
	Wed, 01 Oct 2008 02:13:06 -0700 (PDT)
Received: from orsmga002.jf.intel.com ([10.7.209.21])
	by orsmga101.jf.intel.com with ESMTP; 01 Oct 2008 02:07:03 -0700
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="4.33,342,1220252400"; d="scan'208";a="342509029"
Received: from fmsmsxpoc001.amr.corp.intel.com ([132.233.49.22])
	by orsmga002.jf.intel.com with ESMTP; 01 Oct 2008 02:12:49 -0700
Received: from pdsmsx601.ccr.corp.intel.com (172.16.12.94) by
	fmsmsxpoc001.amr.corp.intel.com (132.233.49.22) with Microsoft SMTP
	Server (TLS) id 8.1.291.1; Wed, 1 Oct 2008 02:13:05 -0700
Received: from pdsmsx502.ccr.corp.intel.com ([172.16.12.96]) by
	pdsmsx601.ccr.corp.intel.com ([172.16.12.94]) with mapi; Wed, 1 Oct 2008
	17:13:04 +0800
From: "Yu, Ke" <ke.yu@intel.com>
To: "Yang, Fred" <fred.yang@intel.com>, Isaku Yamahata
	<yamahata@valinux.co.jp>, Ian Jackson <Ian.Jackson@eu.citrix.com>
Date: Wed, 1 Oct 2008 17:13:02 +0800
X-ASG-Orig-Subj: RE: [Xen-ia64-devel] ia64 builds broken in xen-unstable
	mainline
Subject: RE: [Xen-ia64-devel] ia64 builds broken in xen-unstable mainline
Thread-Topic: [Xen-ia64-devel] ia64 builds broken in xen-unstable mainline
Thread-Index: AckjaXrH8tdW02gASZak/geN+6zIkAABCcFgAA36I0A=
Message-ID: <49582C73AC36CC4C8C6C42390304E81C08A6563B30@pdsmsx502.ccr.corp.intel.com>
References: <18658.2196.838426.529887@mariner.uk.xensource.com>
	<20081001020011.GA5224%yamahata@valinux.co.jp>
	<8EA2C2C4116BF44AB370468FBF85A7779AEF70A6@orsmsx504.amr.corp.intel.com>
In-Reply-To: <8EA2C2C4116BF44AB370468FBF85A7779AEF70A6@orsmsx504.amr.corp.intel.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Barracuda-Connect: mga02.intel.com[134.134.136.20]
X-Barracuda-Start-Time: 1222852386
X-Barracuda-Virus-Scanned: by Barracuda Spam Firewall at xensource.com
X-Barracuda-Spam-Score: 0.00
X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=3.5
	QUARANTINE_LEVEL=6.0 KILL_LEVEL=1000.0 tests=
X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.6967
	Rule breakdown below
	pts rule name              description
	---- ----------------------
	--------------------------------------------------
Cc: "xen-ia64-devel@lists.xensource.com" <xen-ia64-devel@lists.xensource.com>
X-BeenThere: xen-ia64-devel@lists.xensource.com
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: Discussion of the ia64 port of Xen
	<xen-ia64-devel.lists.xensource.com>
List-Unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-ia64-devel>, 
	<mailto:xen-ia64-devel-request@lists.xensource.com?subject=unsubscribe>
List-Post: <mailto:xen-ia64-devel@lists.xensource.com>
List-Help: <mailto:xen-ia64-devel-request@lists.xensource.com?subject=help>
List-Subscribe: <http://lists.xensource.com/mailman/listinfo/xen-ia64-devel>, 
	<mailto:xen-ia64-devel-request@lists.xensource.com?subject=subscribe>
Sender: xen-ia64-devel-bounces@lists.xensource.com
Errors-To: xen-ia64-devel-bounces@lists.xensource.com

Isaku,

Sorry for the late response, as Fred said, we are in holiday now.

I am updating the patch now. And it should be ready today or tomorrow.

Best Regards
Ke

Yang, Fred wrote:
> Isaku,
>
> You may need to create a patch to workaround the issue first since
> our PRC team is on the national holiday for the week.
>
> Thanks,
> -Fred
>
> Isaku Yamahata wrote:
>> Sorry for that.
>> This should be fixed by Yu's patches.
>> I've been waiting for Yu to respin the patches. Yu?
>>
>> If it would take a while, I could create a band aid patch to define
>> those symbols.
>>
>> thanks,
>>
>> On Tue, Sep 30, 2008 at 12:08:04PM +0100, Ian Jackson wrote:
>>> Currently the automatic patch forwarding machinery which sits
>>> between commits to xen-unstable mainline and the public non-staging
>>> tree isn't feeding anything through because the ia64 build is
>>> broken:
>>>
>>> .../xen/drivers/built_in.o: In function `set_px_pminfo':
>>> .../xen/drivers/cpufreq/cpufreq.c:226: undefined reference to
>>> `get_cpu_id' .../xen/drivers/cpufreq/cpufreq.c:268: undefined
>>> reference to `xenpf_copy_px_states'
>>> .../xen/drivers/cpufreq/cpufreq.c:303: undefined reference to
>>> `cpufreq_cpu_init' This looks like it was introduce in one of these
>>> changes:
>>>
>>> changeset:   18552:19b0a4f91712
>>> summary:     x86 and ia64: move cpufreq notify code to commone place
>>>
>>> changeset:   18551:d1d9915041de
>>> summary:     X86 and IA64: Update cpufreq statistic logic for
>>> supporting both x86
>>>
>>> changeset:   18550:08374be21318
>>> summary:     X86 and IA64: Rebase cpufreq logic for supporting both
>>> x86 and ia64 Perhaps an ia64 part is missing ?
>>>
>>> It would be nice to get this fixed ...
>>>
>>> Thanks,
>>> Ian.
>>>
>>> _______________________________________________
>>> Xen-ia64-devel mailing list
>>> Xen-ia64-devel@lists.xensource.com
>>> http://lists.xensource.com/xen-ia64-devel


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

From xen-ia64-devel-bounces@lists.xensource.com Wed Oct 01 07:10:34 2008
Return-path: <xen-ia64-devel-bounces@lists.xensource.com>
Envelope-to: www-data@lists.xensource.com
Delivery-date: Wed, 01 Oct 2008 07:10:34 -0700
Received: from localhost ([127.0.0.1] helo=lists.colo.xensource.com)
	by lists.xensource.com with esmtp (Exim 4.43)
	id 1Kl2PS-0007Bi-Fm; Wed, 01 Oct 2008 07:10:34 -0700
Received: from spam.xensource.com ([70.42.241.90])
	by lists.xensource.com with esmtp (Exim 4.43) id 1Kl2On-0006lE-LZ
	for xen-ia64-devel@lists.xensource.com; Wed, 01 Oct 2008 07:09:53 -0700
X-ASG-Debug-ID: 1222870192-44eb00070000-zRdJ7k
X-Barracuda-URL: http://spam.xensource.com:8000/cgi-bin/mark.cgi
Received: from mga02.intel.com (localhost [127.0.0.1])
	by spam.xensource.com (Spam Firewall) with ESMTP
	id 60816B36FC; Wed,  1 Oct 2008 07:09:52 -0700 (PDT)
Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by
	spam.xensource.com with ESMTP id gnUCdPRYtocfgMoS;
	Wed, 01 Oct 2008 07:09:52 -0700 (PDT)
Received: from orsmga001.jf.intel.com ([10.7.209.18])
	by orsmga101.jf.intel.com with ESMTP; 01 Oct 2008 07:03:48 -0700
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="4.33,344,1220252400"; d="scan'208";a="445743470"
Received: from fmsmsxpoc001.amr.corp.intel.com ([132.233.49.22])
	by orsmga001.jf.intel.com with ESMTP; 01 Oct 2008 07:08:55 -0700
Received: from pdsmsx501.ccr.corp.intel.com (172.16.12.89) by
	fmsmsxpoc001.amr.corp.intel.com (132.233.49.22) with Microsoft SMTP
	Server (TLS) id 8.1.291.1; Wed, 1 Oct 2008 07:09:51 -0700
Received: from pdsmsx502.ccr.corp.intel.com ([172.16.12.96]) by
	PDSMSX501.ccr.corp.intel.com ([172.16.12.89]) with mapi; Wed, 1 Oct 2008
	22:09:49 +0800
From: "Yu, Ke" <ke.yu@intel.com>
To: Isaku Yamahata <yamahata@valinux.co.jp>
Date: Wed, 1 Oct 2008 22:09:47 +0800
X-ASG-Orig-Subj: RE: [Xen-ia64-devel] [PATCH 1/3] IA64: add cpufreq support
Subject: RE: [Xen-ia64-devel] [PATCH 1/3] IA64: add cpufreq support
Thread-Topic: [Xen-ia64-devel] [PATCH 1/3] IA64: add cpufreq support
Thread-Index: Ackh5GE7HwMoftW4Rge7QshnqYZCvwB5jqxw
Message-ID: <49582C73AC36CC4C8C6C42390304E81C08A6563B4F@pdsmsx502.ccr.corp.intel.com>
References: <49582C73AC36CC4C8C6C42390304E81C0887A9D795@pdsmsx502.ccr.corp.intel.com>
	<20080929033505.GD26025%yamahata@valinux.co.jp>
In-Reply-To: <20080929033505.GD26025%yamahata@valinux.co.jp>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator: 
acceptlanguage: en-US
Content-Type: multipart/mixed;
	boundary="_002_49582C73AC36CC4C8C6C42390304E81C08A6563B4Fpdsmsx502ccrc_"
MIME-Version: 1.0
X-Barracuda-Connect: mga02.intel.com[134.134.136.20]
X-Barracuda-Start-Time: 1222870192
X-Barracuda-Virus-Scanned: by Barracuda Spam Firewall at xensource.com
X-Barracuda-Spam-Score: 0.00
X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=3.5
	QUARANTINE_LEVEL=6.0 KILL_LEVEL=1000.0 tests=
X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.6980
	Rule breakdown below
	pts rule name              description
	---- ----------------------
	--------------------------------------------------
Cc: "xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>,
	"xen-ia64-devel@lists.xensource.com" <xen-ia64-devel@lists.xensource.com>
X-BeenThere: xen-ia64-devel@lists.xensource.com
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: Discussion of the ia64 port of Xen
	<xen-ia64-devel.lists.xensource.com>
List-Unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-ia64-devel>, 
	<mailto:xen-ia64-devel-request@lists.xensource.com?subject=unsubscribe>
List-Post: <mailto:xen-ia64-devel@lists.xensource.com>
List-Help: <mailto:xen-ia64-devel-request@lists.xensource.com?subject=help>
List-Subscribe: <http://lists.xensource.com/mailman/listinfo/xen-ia64-devel>, 
	<mailto:xen-ia64-devel-request@lists.xensource.com?subject=subscribe>
Sender: xen-ia64-devel-bounces@lists.xensource.com
Errors-To: xen-ia64-devel-bounces@lists.xensource.com

--_002_49582C73AC36CC4C8C6C42390304E81C08A6563B4Fpdsmsx502ccrc_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Thanks for the comments. Please see attached updated patch.

Two changes are made:
1. change the cpufreq.c to linux style indent
2. split the x86 change from cpufreq.h

Best Regards
Ke

Isaku Yamahata wrote:
> On Sat, Sep 27, 2008 at 10:12:03AM +0800, Yu, Ke wrote:
>> IA64: Add cpufreq ia64 driver
>>
>> For IA64 Platform, add cpufreq driver for ia64 cpu, implementing
>> cpufreq_driver->init()/ exit()/ verify()/ target()/ get()
>>
>> Signed-off-by: Yu, Ke <ke.yu@intel.com>
>>                Liu, Jinsong <jinsong.liu@intel.com>
>
> Hi.
> About indentation.
> Xen/IA64 have done very badly about indent style.
> Some files are Linux style, others xen style.
> I think cpufreq.c is drived from linux so Linux style would be better.
> Please make it Linux style instead of 4 tab.
>
> About xen/include/acpi/cpufreq/cpufreq.h:
> Since it is the common file which is shared by x86 and ia64.
> So split out this hunk and send to xen-devel.
>
> thanks,
>
>> IA64: Add cpufreq ia64 driver
>>
>> For IA64 Platform, add cpufreq driver for ia64 cpu, implementing
>> cpufreq_driver->init()/ exit()/ verify()/ target()/ get()
>>
>> Signed-off-by: Yu, Ke <ke.yu@intel.com>
>>                Liu, Jinsong <jinsong.liu@intel.com>
>>
>> diff -r 2aaf950e6f50 xen/arch/ia64/xen/Makefile
>> --- a/xen/arch/ia64/xen/Makefile      Fri Sep 26 15:21:26 2008 +0800
>> +++ b/xen/arch/ia64/xen/Makefile      Fri Sep 26 15:37:39 2008 +0800
>>  @@ -1,4 +1,5 @@ subdir-y +=3D oprofile
>> +subdir-y +=3D cpufreq
>>
>>  obj-y +=3D relocate_kernel.o
>>  obj-y +=3D machine_kexec.o
>> diff -r 2aaf950e6f50 xen/arch/ia64/xen/cpufreq/Makefile
>> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
>> +++ b/xen/arch/ia64/xen/cpufreq/Makefile      Fri Sep 26 15:37:39
>> 2008 +0800 @@ -0,0 +1,1 @@ +obj-y +=3D cpufreq.o
>> diff -r 2aaf950e6f50 xen/arch/ia64/xen/cpufreq/cpufreq.c
>> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
>> +++ b/xen/arch/ia64/xen/cpufreq/cpufreq.c     Fri Sep 26 15:37:39
>> 2008 +0800 @@ -0,0 +1,303 @@ +/*
>> + * arch/ia64/kernel/cpufreq/acpi-cpufreq.c
>> + * This file provides the ACPI based P-state support. This
>> + * module works with generic cpufreq infrastructure. Most of
>> + * the code is based on i386 version
>> + * (arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c)
>> + *
>> + * Copyright (C) 2005 Intel Corp
>> + *      Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> + *
>> + * Sep 2008 - Liu Jinsong <jinsong.liu@intel.com>
>> + *      porting IPF acpi-cpufreq.c from Linux 2.6.23 to Xen
>> hypervisor + */ +
>> +#include <xen/types.h>
>> +#include <xen/errno.h>
>> +#include <xen/delay.h>
>> +#include <xen/cpumask.h>
>> +#include <xen/sched.h>
>> +#include <xen/timer.h>
>> +#include <xen/xmalloc.h>
>> +#include <asm/bug.h>
>> +#include <asm/io.h>
>> +#include <asm/config.h>
>> +#include <asm/processor.h>
>> +#include <asm/percpu.h>
>> +#include <asm/pal.h>
>> +#include <acpi/acpi.h>
>> +#include <acpi/cpufreq/cpufreq.h>
>> +
>> +static struct acpi_cpufreq_data *drv_data[NR_CPUS]; +
>> +static struct cpufreq_driver acpi_cpufreq_driver;
>> +
>> +static int
>> +processor_get_pstate (u32 *value)
>> +{
>> +    u64 pstate_index =3D 0;
>> +    s64 retval;
>> +
>> +    retval =3D ia64_pal_get_pstate(&pstate_index,
>> +                                 PAL_GET_PSTATE_TYPE_INSTANT);
>> +    *value =3D (u32) pstate_index;
>> +
>> +    if (retval)
>> +        printk("Failed to get current freq\n");
>> +
>> +    return (int)retval;
>> +}
>> +
>> +static unsigned int
>> +extract_clock (unsigned value)
>> +{
>> +    unsigned long i;
>> +    unsigned int cpu;
>> +    struct processor_performance *perf;
>> +
>> +    cpu =3D smp_processor_id();
>> +    perf =3D &processor_pminfo[cpu]->perf;
>> +
>> +    for (i =3D 0; i < perf->state_count; i++) {
>> +        if (value =3D=3D perf->states[i].status)
>> +            return perf->states[i].core_frequency; +    }
>> +    return perf->states[i-1].core_frequency;
>> +}
>> +
>> +static void
>> +processor_get_freq (void *data)
>> +{
>> +    unsigned int *freq =3D data;
>> +    int ret =3D 0;
>> +    u32 value =3D 0;
>> +    unsigned int clock_freq;
>> +
>> +    ret =3D processor_get_pstate(&value);
>> +    if (ret) {
>> +        *freq =3D 0;
>> +        return;
>> +    }
>> +
>> +    clock_freq =3D extract_clock(value);
>> +    *freq =3D (clock_freq*1000);
>> +    return;
>> +}
>> +
>> +static unsigned int
>> +acpi_cpufreq_get (unsigned int cpu)
>> +{
>> +    unsigned int freq;
>> +
>> +    if (!cpu_online(cpu))
>> +        return 0;
>> +
>> +    if (cpu =3D=3D smp_processor_id())
>> +        processor_get_freq((void*)&freq);
>> +    else
>> +        smp_call_function_single(cpu, processor_get_freq, (void
>> *)&freq, 0, 1); + +    return freq;
>> +}
>> +
>> +static void
>> +processor_set_pstate (void *data)
>> +{
>> +    u32 *value =3D data;
>> +    s64 retval;
>> +
>> +    retval =3D ia64_pal_set_pstate((u64)*value);
>> +
>> +    if (retval)
>> +        *value =3D 1;
>> +    else
>> +        *value =3D 0;
>> +}
>> +
>> +static int
>> +processor_set_freq (struct acpi_cpufreq_data *data,
>> +                    struct cpufreq_policy *policy, int state) +{
>> +    u32 value =3D 0;
>> +    unsigned int cpu =3D policy->cpu;
>> +
>> +    if (!cpu_online(cpu))
>> +        return -ENODEV;
>> +
>> +    if (state =3D=3D data->acpi_data->state) {
>> +        if (unlikely(policy->resume)) {
>> +            printk(KERN_INFO"Called after resume, resetting to
>> P%d\n", state); +            policy->resume =3D 0;
>> +        } else {
>> +            printk(KERN_DEBUG"Already at target state (P%d)\n",
>> state); +            return 0; +        }
>> +    }
>> +
>> +    value =3D (u32) data->acpi_data->states[state].control; +
>> +    if (cpu =3D=3D smp_processor_id())
>> +        processor_set_pstate((void *)&value);
>> +    else
>> +        smp_call_function_single(cpu, processor_set_pstate,
>> +                                (void *)&value, 0, 1); +
>> +    if (value) {
>> +        printk(KERN_WARNING "Transition failed\n"); +        return
>> -ENODEV; +    }
>> +
>> +    cpufreq_statistic_update(cpu, data->acpi_data->state, state); +
>> +    data->acpi_data->state =3D state;
>> +
>> +    return 0;
>> +}
>> +
>> +static int
>> +acpi_cpufreq_target (struct cpufreq_policy *policy,
>> +                     unsigned int target_freq, unsigned int
>> relation) +{ +    struct acpi_cpufreq_data *data =3D
>> drv_data[policy->cpu]; +    unsigned int next_state =3D 0;
>> +    unsigned int result =3D 0;
>> +
>> +    result =3D cpufreq_frequency_table_target(policy,
>> +             data->freq_table, target_freq, relation, &next_state);
>> +    if (result) +        return (result);
>> +
>> +    result =3D processor_set_freq(data, policy, next_state); +
>> +    return (result);
>> +}
>> +
>> +static int
>> +acpi_cpufreq_verify (struct cpufreq_policy *policy) +{
>> +    struct acpi_cpufreq_data *data =3D drv_data[policy->cpu];
>> +    struct processor_performance *perf =3D
>> &processor_pminfo[policy->cpu]->perf; + +    if (!policy || !data)
>> +        return -EINVAL;
>> +
>> +    cpufreq_verify_within_limits(policy, 0,
>> +        perf->states[perf->platform_limit].core_frequency * 1000); +
>> +    return cpufreq_frequency_table_verify(policy,
>> data->freq_table); +} +
>> +static int
>> +acpi_cpufreq_cpu_init (struct cpufreq_policy *policy) +{
>> +    unsigned int i;
>> +    unsigned int cpu =3D policy->cpu;
>> +    unsigned int result =3D 0;
>> +    struct acpi_cpufreq_data *data;
>> +
>> +    data =3D xmalloc(struct acpi_cpufreq_data);
>> +    if (!data)
>> +        return -ENOMEM;
>> +    memset(data, 0, sizeof(struct acpi_cpufreq_data)); +
>> +    drv_data[cpu] =3D data;
>> +
>> +    data->acpi_data =3D &processor_pminfo[cpu]->perf; +
>> +    /* capability check */
>> +    if (data->acpi_data->state_count <=3D 1) {
>> +        printk(KERN_WARNING "P-States\n");
>> +        result =3D -ENODEV;
>> +        goto err_unreg;
>> +    }
>> +
>> +    if ((data->acpi_data->control_register.space_id !=3D
>> +                ACPI_ADR_SPACE_FIXED_HARDWARE) ||
>> +        (data->acpi_data->status_register.space_id !=3D
>> +                ACPI_ADR_SPACE_FIXED_HARDWARE)) {
>> +        result =3D -ENODEV;
>> +        goto err_unreg;
>> +    }
>> +
>> +    data->freq_table =3D xmalloc_array(struct cpufreq_frequency_table,
>> +                                    (data->acpi_data->state_count +
>> 1)); +    if (!data->freq_table) { +        result =3D -ENOMEM;
>> +        goto err_unreg;
>> +    }
>> +
>> +    /* detect transition latency */
>> +    policy->cpuinfo.transition_latency =3D 0;
>> +    for (i=3D0; i<data->acpi_data->state_count; i++) {
>> +        if ((data->acpi_data->states[i].transition_latency * 1000) >
>> +            policy->cpuinfo.transition_latency) {
>> +                policy->cpuinfo.transition_latency =3D
>> +                    data->acpi_data->states[i].transition_latency *
>> 1000; +        } +    }
>> +    policy->governor =3D CPUFREQ_DEFAULT_GOVERNOR;
>> +
>> +    policy->cur =3D acpi_cpufreq_get(policy->cpu);
>> +    printk(KERN_INFO "Current freq of CPU %u is %u\n", cpu,
>> policy->cur); + +    /* table init */
>> +    for (i =3D 0; i <=3D data->acpi_data->state_count; i++) {
>> +        data->freq_table[i].index =3D i;
>> +        if (i < data->acpi_data->state_count) {
>> +            data->freq_table[i].frequency =3D
>> +                data->acpi_data->states[i].core_frequency * 1000; +
>> } else { +            data->freq_table[i].frequency =3D
>> CPUFREQ_TABLE_END; +        } +    }
>> +
>> +    result =3D cpufreq_frequency_table_cpuinfo(policy,
>> data->freq_table); +    if (result) +        goto err_freqfree;
>> +
>> +    data->acpi_data->state =3D 0;
>> +    policy->resume =3D 1;
>> +
>> +    return result;
>> +
>> + err_freqfree:
>> +    xfree(data->freq_table);
>> + err_unreg:
>> +    xfree(data);
>> +    drv_data[cpu] =3D NULL;
>> +
>> +    return result;
>> +}
>> +
>> +static int
>> +acpi_cpufreq_cpu_exit (struct cpufreq_policy *policy) +{
>> +    struct acpi_cpufreq_data *data =3D drv_data[policy->cpu]; +
>> +    if (data) {
>> +        drv_data[policy->cpu] =3D NULL;
>> +        xfree(data->freq_table);
>> +        xfree(data);
>> +    }
>> +
>> +    return 0;
>> +}
>> +
>> +static struct cpufreq_driver acpi_cpufreq_driver =3D {
>> +    .verify     =3D acpi_cpufreq_verify,
>> +    .target     =3D acpi_cpufreq_target,
>> +    .get        =3D acpi_cpufreq_get,
>> +    .init       =3D acpi_cpufreq_cpu_init,
>> +    .exit       =3D acpi_cpufreq_cpu_exit,
>> +};
>> +
>> +static int __init cpufreq_driver_init(void)
>> +{
>> +    int ret =3D 0;
>> +
>> +    if (cpufreq_controller =3D=3D FREQCTL_xen)
>> +        ret =3D cpufreq_register_driver(&acpi_cpufreq_driver); +
>> +    return ret;
>> +}
>> +__initcall(cpufreq_driver_init);
>> diff -r 2aaf950e6f50 xen/include/acpi/cpufreq/cpufreq.h
>> --- a/xen/include/acpi/cpufreq/cpufreq.h      Fri Sep 26 15:21:26
>> 2008 +0800 +++ b/xen/include/acpi/cpufreq/cpufreq.h      Fri Sep 26
>>  15:37:39 2008 +0800 @@ -24,8 +24,10 @@ struct acpi_cpufreq_data {
>>      struct processor_performance *acpi_data;
>>      struct cpufreq_frequency_table *freq_table;
>> +#ifdef CONFIG_X86
>>      unsigned int max_freq;
>>      unsigned int cpu_feature;
>> +#endif
>>  };
>>
>>  struct cpufreq_cpuinfo {


--_002_49582C73AC36CC4C8C6C42390304E81C08A6563B4Fpdsmsx502ccrc_
Content-Type: application/octet-stream; name="px-xen-ipf-driver.patch"
Content-Description: px-xen-ipf-driver.patch
Content-Disposition: attachment; filename="px-xen-ipf-driver.patch";
	size=7977; creation-date="Wed, 01 Oct 2008 21:34:06 GMT";
	modification-date="Wed, 01 Oct 2008 21:34:06 GMT"
Content-Transfer-Encoding: base64

SUE2NDogQWRkIGNwdWZyZXEgaWE2NCBkcml2ZXIKCkZvciBJQTY0IFBsYXRmb3JtLCBhZGQgY3B1
ZnJlcSBkcml2ZXIgZm9yIGlhNjQgY3B1LCBpbXBsZW1lbnRpbmcKY3B1ZnJlcV9kcml2ZXItPmlu
aXQoKS8gZXhpdCgpLyB2ZXJpZnkoKS8gdGFyZ2V0KCkvIGdldCgpCgpTaWduZWQtb2ZmLWJ5OiBZ
dSwgS2UgPGtlLnl1QGludGVsLmNvbT4KICAgICAgICAgICAgICAgTGl1LCBKaW5zb25nIDxqaW5z
b25nLmxpdUBpbnRlbC5jb20+CgpkaWZmIC1yIDZlMGZhODljYzAyMiB4ZW4vYXJjaC9pYTY0L3hl
bi9NYWtlZmlsZQotLS0gYS94ZW4vYXJjaC9pYTY0L3hlbi9NYWtlZmlsZQlUdWUgU2VwIDMwIDE5
OjEwOjUzIDIwMDggKzA4MDAKKysrIGIveGVuL2FyY2gvaWE2NC94ZW4vTWFrZWZpbGUJV2VkIE9j
dCAwMSAxNjo1Mzo1MiAyMDA4ICswODAwCkBAIC0xLDQgKzEsNSBAQAogc3ViZGlyLXkgKz0gb3By
b2ZpbGUKK3N1YmRpci15ICs9IGNwdWZyZXEKIAogb2JqLXkgKz0gcmVsb2NhdGVfa2VybmVsLm8K
IG9iai15ICs9IG1hY2hpbmVfa2V4ZWMubwpkaWZmIC1yIDZlMGZhODljYzAyMiB4ZW4vYXJjaC9p
YTY0L3hlbi9jcHVmcmVxL01ha2VmaWxlCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDow
MCAxOTcwICswMDAwCisrKyBiL3hlbi9hcmNoL2lhNjQveGVuL2NwdWZyZXEvTWFrZWZpbGUJV2Vk
IE9jdCAwMSAxNjo1Mzo1MiAyMDA4ICswODAwCkBAIC0wLDAgKzEsMSBAQAorb2JqLXkgKz0gY3B1
ZnJlcS5vCmRpZmYgLXIgNmUwZmE4OWNjMDIyIHhlbi9hcmNoL2lhNjQveGVuL2NwdWZyZXEvY3B1
ZnJlcS5jCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBi
L3hlbi9hcmNoL2lhNjQveGVuL2NwdWZyZXEvY3B1ZnJlcS5jCVdlZCBPY3QgMDEgMTY6NTM6NTIg
MjAwOCArMDgwMApAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAqIGFyY2gvaWE2NC9rZXJuZWwvY3B1
ZnJlcS9hY3BpLWNwdWZyZXEuYworICogVGhpcyBmaWxlIHByb3ZpZGVzIHRoZSBBQ1BJIGJhc2Vk
IFAtc3RhdGUgc3VwcG9ydC4gVGhpcworICogbW9kdWxlIHdvcmtzIHdpdGggZ2VuZXJpYyBjcHVm
cmVxIGluZnJhc3RydWN0dXJlLiBNb3N0IG9mCisgKiB0aGUgY29kZSBpcyBiYXNlZCBvbiBpMzg2
IHZlcnNpb24KKyAqIChhcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5j
KQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBJbnRlbCBDb3JwCisgKiAgICAgIFZlbmthdGVz
aCBQYWxsaXBhZGkgPHZlbmthdGVzaC5wYWxsaXBhZGlAaW50ZWwuY29tPgorICoKKyAqIFNlcCAy
MDA4IC0gTGl1IEppbnNvbmcgPGppbnNvbmcubGl1QGludGVsLmNvbT4KKyAqICAgICAgcG9ydGlu
ZyBJUEYgYWNwaS1jcHVmcmVxLmMgZnJvbSBMaW51eCAyLjYuMjMgdG8gWGVuIGh5cGVydmlzb3IK
KyAqLworCisjaW5jbHVkZSA8eGVuL3R5cGVzLmg+CisjaW5jbHVkZSA8eGVuL2Vycm5vLmg+Cisj
aW5jbHVkZSA8eGVuL2RlbGF5Lmg+CisjaW5jbHVkZSA8eGVuL2NwdW1hc2suaD4KKyNpbmNsdWRl
IDx4ZW4vc2NoZWQuaD4KKyNpbmNsdWRlIDx4ZW4vdGltZXIuaD4KKyNpbmNsdWRlIDx4ZW4veG1h
bGxvYy5oPgorI2luY2x1ZGUgPGFzbS9idWcuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNs
dWRlIDxhc20vY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUg
PGFzbS9wZXJjcHUuaD4KKyNpbmNsdWRlIDxhc20vcGFsLmg+CisjaW5jbHVkZSA8YWNwaS9hY3Bp
Lmg+CisjaW5jbHVkZSA8YWNwaS9jcHVmcmVxL2NwdWZyZXEuaD4KKworc3RhdGljIHN0cnVjdCBh
Y3BpX2NwdWZyZXFfZGF0YSAqZHJ2X2RhdGFbTlJfQ1BVU107CisKK3N0YXRpYyBzdHJ1Y3QgY3B1
ZnJlcV9kcml2ZXIgYWNwaV9jcHVmcmVxX2RyaXZlcjsKKworc3RhdGljIGludAorcHJvY2Vzc29y
X2dldF9wc3RhdGUgKHUzMiAqdmFsdWUpCit7CisJdTY0IHBzdGF0ZV9pbmRleCA9IDA7CisJczY0
IHJldHZhbDsKKworCXJldHZhbCA9IGlhNjRfcGFsX2dldF9wc3RhdGUoJnBzdGF0ZV9pbmRleCwK
KwkJCVBBTF9HRVRfUFNUQVRFX1RZUEVfSU5TVEFOVCk7CisJKnZhbHVlID0gKHUzMikgcHN0YXRl
X2luZGV4OworCisJaWYgKHJldHZhbCkKKwkJcHJpbnRrKCJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQg
ZnJlcVxuIik7CisKKwlyZXR1cm4gKGludClyZXR2YWw7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBp
bnQKK2V4dHJhY3RfY2xvY2sgKHVuc2lnbmVkIHZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgaTsK
Kwl1bnNpZ25lZCBpbnQgY3B1OworCXN0cnVjdCBwcm9jZXNzb3JfcGVyZm9ybWFuY2UgKnBlcmY7
CisKKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJcGVyZiA9ICZwcm9jZXNzb3JfcG1pbmZv
W2NwdV0tPnBlcmY7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGVyZi0+c3RhdGVfY291bnQ7IGkrKykg
eworCQlpZiAodmFsdWUgPT0gcGVyZi0+c3RhdGVzW2ldLnN0YXR1cykKKwkJCXJldHVybiBwZXJm
LT5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3k7CisJfQorCXJldHVybiBwZXJmLT5zdGF0ZXNbaS0x
XS5jb3JlX2ZyZXF1ZW5jeTsKK30KKworc3RhdGljIHZvaWQKK3Byb2Nlc3Nvcl9nZXRfZnJlcSAo
dm9pZCAqZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgKmZyZXEgPSBkYXRhOworCWludCByZXQgPSAw
OworCXUzMiB2YWx1ZSA9IDA7CisJdW5zaWduZWQgaW50IGNsb2NrX2ZyZXE7CisKKwlyZXQgPSBw
cm9jZXNzb3JfZ2V0X3BzdGF0ZSgmdmFsdWUpOworCWlmIChyZXQpIHsKKwkJKmZyZXEgPSAwOwor
CQlyZXR1cm47CisJfQorCisJY2xvY2tfZnJlcSA9IGV4dHJhY3RfY2xvY2sodmFsdWUpOworCSpm
cmVxID0gKGNsb2NrX2ZyZXEqMTAwMCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdW5zaWduZWQg
aW50CithY3BpX2NwdWZyZXFfZ2V0ICh1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGlu
dCBmcmVxOworCisJaWYgKCFjcHVfb25saW5lKGNwdSkpCisJCXJldHVybiAwOworCisJaWYgKGNw
dSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCXByb2Nlc3Nvcl9nZXRfZnJlcSgodm9pZCopJmZy
ZXEpOworCWVsc2UKKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgcHJvY2Vzc29yX2dl
dF9mcmVxLCAodm9pZCAqKSZmcmVxLCAwLCAxKTsKKworCXJldHVybiBmcmVxOworfQorCitzdGF0
aWMgdm9pZAorcHJvY2Vzc29yX3NldF9wc3RhdGUgKHZvaWQgKmRhdGEpCit7CisJdTMyICp2YWx1
ZSA9IGRhdGE7CisJczY0IHJldHZhbDsKKworCXJldHZhbCA9IGlhNjRfcGFsX3NldF9wc3RhdGUo
KHU2NCkqdmFsdWUpOworCisJaWYgKHJldHZhbCkKKwkJKnZhbHVlID0gMTsKKwllbHNlCisJCSp2
YWx1ZSA9IDA7Cit9CisKK3N0YXRpYyBpbnQKK3Byb2Nlc3Nvcl9zZXRfZnJlcSAoc3RydWN0IGFj
cGlfY3B1ZnJlcV9kYXRhICpkYXRhLAorCQlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwg
aW50IHN0YXRlKQoreworCXUzMiB2YWx1ZSA9IDA7CisJdW5zaWduZWQgaW50IGNwdSA9IHBvbGlj
eS0+Y3B1OworCisJaWYgKCFjcHVfb25saW5lKGNwdSkpCisJCXJldHVybiAtRU5PREVWOworCisJ
aWYgKHN0YXRlID09IGRhdGEtPmFjcGlfZGF0YS0+c3RhdGUpIHsKKwkJaWYgKHVubGlrZWx5KHBv
bGljeS0+cmVzdW1lKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyJDYWxsZWQgYWZ0ZXIgcmVzdW1l
LCByZXNldHRpbmcgdG8gUCVkXG4iLCBzdGF0ZSk7CisJCQlwb2xpY3ktPnJlc3VtZSA9IDA7CisJ
CX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyJBbHJlYWR5IGF0IHRhcmdldCBzdGF0ZSAo
UCVkKVxuIiwgc3RhdGUpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwl2YWx1ZSA9ICh1MzIp
IGRhdGEtPmFjcGlfZGF0YS0+c3RhdGVzW3N0YXRlXS5jb250cm9sOworCisJaWYgKGNwdSA9PSBz
bXBfcHJvY2Vzc29yX2lkKCkpCisJCXByb2Nlc3Nvcl9zZXRfcHN0YXRlKCh2b2lkICopJnZhbHVl
KTsKKwllbHNlCisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIHByb2Nlc3Nvcl9zZXRf
cHN0YXRlLAorCQkJCSh2b2lkICopJnZhbHVlLCAwLCAxKTsKKworCWlmICh2YWx1ZSkgeworCQlw
cmludGsoS0VSTl9XQVJOSU5HICJUcmFuc2l0aW9uIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5P
REVWOworCX0KKworCWNwdWZyZXFfc3RhdGlzdGljX3VwZGF0ZShjcHUsIGRhdGEtPmFjcGlfZGF0
YS0+c3RhdGUsIHN0YXRlKTsKKworCWRhdGEtPmFjcGlfZGF0YS0+c3RhdGUgPSBzdGF0ZTsKKwor
CXJldHVybiAwOworfQorCitzdGF0aWMgaW50CithY3BpX2NwdWZyZXFfdGFyZ2V0IChzdHJ1Y3Qg
Y3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKKwkJdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLCB1bnNp
Z25lZCBpbnQgcmVsYXRpb24pCit7CisJc3RydWN0IGFjcGlfY3B1ZnJlcV9kYXRhICpkYXRhID0g
ZHJ2X2RhdGFbcG9saWN5LT5jcHVdOworCXVuc2lnbmVkIGludCBuZXh0X3N0YXRlID0gMDsKKwl1
bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKKworCXJlc3VsdCA9IGNwdWZyZXFfZnJlcXVlbmN5X3Rh
YmxlX3RhcmdldChwb2xpY3ksCisJCQlkYXRhLT5mcmVxX3RhYmxlLCB0YXJnZXRfZnJlcSwgcmVs
YXRpb24sICZuZXh0X3N0YXRlKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gKHJlc3VsdCk7CisK
KwlyZXN1bHQgPSBwcm9jZXNzb3Jfc2V0X2ZyZXEoZGF0YSwgcG9saWN5LCBuZXh0X3N0YXRlKTsK
KworCXJldHVybiAocmVzdWx0KTsKK30KKworc3RhdGljIGludAorYWNwaV9jcHVmcmVxX3Zlcmlm
eSAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCit7CisJc3RydWN0IGFjcGlfY3B1ZnJl
cV9kYXRhICpkYXRhID0gZHJ2X2RhdGFbcG9saWN5LT5jcHVdOworCXN0cnVjdCBwcm9jZXNzb3Jf
cGVyZm9ybWFuY2UgKnBlcmYgPSAmcHJvY2Vzc29yX3BtaW5mb1twb2xpY3ktPmNwdV0tPnBlcmY7
CisKKwlpZiAoIXBvbGljeSB8fCAhZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljcHVmcmVx
X3ZlcmlmeV93aXRoaW5fbGltaXRzKHBvbGljeSwgMCwKKwkJCXBlcmYtPnN0YXRlc1twZXJmLT5w
bGF0Zm9ybV9saW1pdF0uY29yZV9mcmVxdWVuY3kgKiAxMDAwKTsKKworCXJldHVybiBjcHVmcmVx
X2ZyZXF1ZW5jeV90YWJsZV92ZXJpZnkocG9saWN5LCBkYXRhLT5mcmVxX3RhYmxlKTsKK30KKwor
c3RhdGljIGludAorYWNwaV9jcHVmcmVxX2NwdV9pbml0IChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kg
KnBvbGljeSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gcG9saWN5
LT5jcHU7CisJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IGFjcGlfY3B1ZnJlcV9k
YXRhICpkYXRhOworCisJZGF0YSA9IHhtYWxsb2Moc3RydWN0IGFjcGlfY3B1ZnJlcV9kYXRhKTsK
KwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChkYXRhLCAwLCBzaXplb2Yo
c3RydWN0IGFjcGlfY3B1ZnJlcV9kYXRhKSk7CisKKwlkcnZfZGF0YVtjcHVdID0gZGF0YTsKKwor
CWRhdGEtPmFjcGlfZGF0YSA9ICZwcm9jZXNzb3JfcG1pbmZvW2NwdV0tPnBlcmY7CisKKwkvKiBj
YXBhYmlsaXR5IGNoZWNrICovCisJaWYgKGRhdGEtPmFjcGlfZGF0YS0+c3RhdGVfY291bnQgPD0g
MSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJQLVN0YXRlc1xuIik7CisJCXJlc3VsdCA9IC1F
Tk9ERVY7CisJCWdvdG8gZXJyX3VucmVnOworCX0KKworCWlmICgoZGF0YS0+YWNwaV9kYXRhLT5j
b250cm9sX3JlZ2lzdGVyLnNwYWNlX2lkICE9CisJCQkJQUNQSV9BRFJfU1BBQ0VfRklYRURfSEFS
RFdBUkUpIHx8CisJCQkoZGF0YS0+YWNwaV9kYXRhLT5zdGF0dXNfcmVnaXN0ZXIuc3BhY2VfaWQg
IT0KKwkJCSBBQ1BJX0FEUl9TUEFDRV9GSVhFRF9IQVJEV0FSRSkpIHsKKwkJcmVzdWx0ID0gLUVO
T0RFVjsKKwkJZ290byBlcnJfdW5yZWc7CisJfQorCisJZGF0YS0+ZnJlcV90YWJsZSA9IHhtYWxs
b2NfYXJyYXkoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlLAorCQkJKGRhdGEtPmFjcGlf
ZGF0YS0+c3RhdGVfY291bnQgKyAxKSk7CisJaWYgKCFkYXRhLT5mcmVxX3RhYmxlKSB7CisJCXJl
c3VsdCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3VucmVnOworCX0KKworCS8qIGRldGVjdCB0cmFu
c2l0aW9uIGxhdGVuY3kgKi8KKwlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0g
MDsKKwlmb3IgKGk9MDsgaTxkYXRhLT5hY3BpX2RhdGEtPnN0YXRlX2NvdW50OyBpKyspIHsKKwkJ
aWYgKChkYXRhLT5hY3BpX2RhdGEtPnN0YXRlc1tpXS50cmFuc2l0aW9uX2xhdGVuY3kgKiAxMDAw
KSA+CisJCQkJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSkgeworCQkJcG9saWN5
LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9CisJCQkJZGF0YS0+YWNwaV9kYXRhLT5zdGF0
ZXNbaV0udHJhbnNpdGlvbl9sYXRlbmN5ICogMTAwMDsKKwkJfQorCX0KKwlwb2xpY3ktPmdvdmVy
bm9yID0gQ1BVRlJFUV9ERUZBVUxUX0dPVkVSTk9SOworCisJcG9saWN5LT5jdXIgPSBhY3BpX2Nw
dWZyZXFfZ2V0KHBvbGljeS0+Y3B1KTsKKwlwcmludGsoS0VSTl9JTkZPICJDdXJyZW50IGZyZXEg
b2YgQ1BVICV1IGlzICV1XG4iLCBjcHUsIHBvbGljeS0+Y3VyKTsKKworCS8qIHRhYmxlIGluaXQg
Ki8KKwlmb3IgKGkgPSAwOyBpIDw9IGRhdGEtPmFjcGlfZGF0YS0+c3RhdGVfY291bnQ7IGkrKykg
eworCQlkYXRhLT5mcmVxX3RhYmxlW2ldLmluZGV4ID0gaTsKKwkJaWYgKGkgPCBkYXRhLT5hY3Bp
X2RhdGEtPnN0YXRlX2NvdW50KSB7CisJCQlkYXRhLT5mcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeSA9
CisJCQkJZGF0YS0+YWNwaV9kYXRhLT5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3kgKiAxMDAwOwor
CQl9IGVsc2UgeworCQkJZGF0YS0+ZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX1RB
QkxFX0VORDsKKwkJfQorCX0KKworCXJlc3VsdCA9IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2Nw
dWluZm8ocG9saWN5LCBkYXRhLT5mcmVxX3RhYmxlKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIGVy
cl9mcmVxZnJlZTsKKworCWRhdGEtPmFjcGlfZGF0YS0+c3RhdGUgPSAwOworCXBvbGljeS0+cmVz
dW1lID0gMTsKKworCXJldHVybiByZXN1bHQ7CisKK2Vycl9mcmVxZnJlZToKKwl4ZnJlZShkYXRh
LT5mcmVxX3RhYmxlKTsKK2Vycl91bnJlZzoKKwl4ZnJlZShkYXRhKTsKKwlkcnZfZGF0YVtjcHVd
ID0gTlVMTDsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQKK2FjcGlfY3B1ZnJl
cV9jcHVfZXhpdCAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCit7CisJc3RydWN0IGFj
cGlfY3B1ZnJlcV9kYXRhICpkYXRhID0gZHJ2X2RhdGFbcG9saWN5LT5jcHVdOworCisJaWYgKGRh
dGEpIHsKKwkJZHJ2X2RhdGFbcG9saWN5LT5jcHVdID0gTlVMTDsKKwkJeGZyZWUoZGF0YS0+ZnJl
cV90YWJsZSk7CisJCXhmcmVlKGRhdGEpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMg
c3RydWN0IGNwdWZyZXFfZHJpdmVyIGFjcGlfY3B1ZnJlcV9kcml2ZXIgPSB7CisJLnZlcmlmeSAg
ICAgPSBhY3BpX2NwdWZyZXFfdmVyaWZ5LAorCS50YXJnZXQgICAgID0gYWNwaV9jcHVmcmVxX3Rh
cmdldCwKKwkuZ2V0ICAgICAgICA9IGFjcGlfY3B1ZnJlcV9nZXQsCisJLmluaXQgICAgICAgPSBh
Y3BpX2NwdWZyZXFfY3B1X2luaXQsCisJLmV4aXQgICAgICAgPSBhY3BpX2NwdWZyZXFfY3B1X2V4
aXQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjcHVmcmVxX2RyaXZlcl9pbml0KHZvaWQpCit7
CisJaW50IHJldCA9IDA7CisKKwlpZiAoY3B1ZnJlcV9jb250cm9sbGVyID09IEZSRVFDVExfeGVu
KQorCQlyZXQgPSBjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9jcHVmcmVxX2RyaXZlcik7
CisKKwlyZXR1cm4gcmV0OworfQorX19pbml0Y2FsbChjcHVmcmVxX2RyaXZlcl9pbml0KTsK

--_002_49582C73AC36CC4C8C6C42390304E81C08A6563B4Fpdsmsx502ccrc_
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

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


From xen-devel-bounces@lists.xensource.com Wed Oct 01 07:11:56 2008
Return-path: <xen-devel-bounces@lists.xensource.com>
Envelope-to: www-data@lists.xensource.com
Delivery-date: Wed, 01 Oct 2008 07:11:56 -0700
Received: from localhost ([127.0.0.1] helo=lists.colo.xensource.com)
	by lists.xensource.com with esmtp (Exim 4.43)
	id 1Kl2Qm-0007xj-OB; Wed, 01 Oct 2008 07:11:56 -0700
Received: from spam.xensource.com ([70.42.241.90])
	by lists.xensource.com with esmtp (Exim 4.43) id 1Kl2P5-0006vy-S9
	for xen-devel@lists.xensource.com; Wed, 01 Oct 2008 07:10:11 -0700
X-ASG-Debug-ID: 1222870208-453a00010000-8pertM
X-Barracuda-URL: http://spam.xensource.com:8000/cgi-bin/mark.cgi
Received: from mga11.intel.com (localhost [127.0.0.1])
	by spam.xensource.com (Spam Firewall) with ESMTP
	id 158A7B3709; Wed,  1 Oct 2008 07:10:09 -0700 (PDT)
Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by
	spam.xensource.com with ESMTP id 83eTjBvoybwdRX3u;
	Wed, 01 Oct 2008 07:10:09 -0700 (PDT)
Received: from fmsmga002.fm.intel.com ([10.253.24.26])
	by fmsmga102.fm.intel.com with ESMTP; 01 Oct 2008 07:06:41 -0700
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="4.33,344,1220252400"; d="scan'208";a="386392683"
Received: from fmsmsxpoc001.amr.corp.intel.com ([132.233.49.22])
	by fmsmga002.fm.intel.com with ESMTP; 01 Oct 2008 07:06:53 -0700
Received: from pdsmsx501.ccr.corp.intel.com (172.16.12.89) by
	fmsmsxpoc001.amr.corp.intel.com (132.233.49.22) with Microsoft SMTP
	Server (TLS) id 8.1.291.1; Wed, 1 Oct 2008 07:10:08 -0700
Received: from pdsmsx502.ccr.corp.intel.com ([172.16.12.96]) by
	PDSMSX501.ccr.corp.intel.com ([172.16.12.89]) with mapi; Wed, 1 Oct 2008
	22:10:06 +0800
From: "Yu, Ke" <ke.yu@intel.com>
To: Isaku Yamahata <yamahata@valinux.co.jp>
Date: Wed, 1 Oct 2008 22:10:04 +0800
X-ASG-Orig-Subj: RE: [Xen-ia64-devel] [PATCH 2/3] IA64: add cpufreq support
Thread-Topic: [Xen-ia64-devel] [PATCH 2/3] IA64: add cpufreq support
Thread-Index: Ackh5TqmvRYnqbqFQxKwMqqfKKC8kAB5eaug
Message-ID: <49582C73AC36CC4C8C6C42390304E81C08A6563B50@pdsmsx502.ccr.corp.intel.com>
References: <49582C73AC36CC4C8C6C42390304E81C0887A9D796@pdsmsx502.ccr.corp.intel.com>
	<20080929034108.GE26025%yamahata@valinux.co.jp>
In-Reply-To: <20080929034108.GE26025%yamahata@valinux.co.jp>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator: 
acceptlanguage: en-US
Content-Type: multipart/mixed;
	boundary="_002_49582C73AC36CC4C8C6C42390304E81C08A6563B50pdsmsx502ccrc_"
MIME-Version: 1.0
X-Barracuda-Connect: mga11.intel.com[192.55.52.93]
X-Barracuda-Start-Time: 1222870209
X-Barracuda-Virus-Scanned: by Barracuda Spam Firewall at xensource.com
X-Barracuda-Spam-Score: 0.50
X-Barracuda-Spam-Status: No, SCORE=0.50 using per-user scores of TAG_LEVEL=3.5
	QUARANTINE_LEVEL=6.0 KILL_LEVEL=1000.0 tests=BSF_RULE7568M
X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.6980
	Rule breakdown below
	pts rule name              description
	---- ----------------------
	--------------------------------------------------
	0.50 BSF_RULE7568M          Custom Rule 7568M
Cc: "xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>,
	"xen-ia64-devel@lists.xensource.com" <xen-ia64-devel@lists.xensource.com>
Subject: [Xen-devel] RE: [Xen-ia64-devel] [PATCH 2/3] IA64: add cpufreq
	support
X-BeenThere: xen-devel@lists.xensource.com
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: Xen developer discussion <xen-devel.lists.xensource.com>
List-Unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>,
	<mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
List-Post: <mailto:xen-devel@lists.xensource.com>
List-Help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-Subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>,
	<mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com

--_002_49582C73AC36CC4C8C6C42390304E81C08A6563B50pdsmsx502ccrc_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Please see attached updated patch.

Three changes are made:
1. use ia64 platfrom hypercall instead of dom0 ops hypercall for cpufreq in=
fo 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@intel.com>
>>                Liu Jinsong <jinsong.liu@intel.com>
>
> 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@intel.com>
>>                Liu Jinsong <jinsong.liu@intel.com>
>>
>> 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] =3D
>>                   (lsapic->id << 8) | lsapic->eid;
>> +#endif
>> +#ifdef XEN
>> +        ia64_acpiid_to_sapicid[lsapic->processor_id] =3D
>> +            (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 ] =3D
>> +    {[0 ... MAX_LOCAL_SAPIC - 1] =3D 0xffff };
>> +
>> +/* acpiid to cpuid */
>> +int get_cpu_id(u8 acpi_id)
>> +{
>> +    int i;
>> +    u16 apic_id;
>> +
>> +    apic_id =3D ia64_acpiid_to_sapicid[acpi_id];
>> +    if ( apic_id =3D=3D 0xffff )
>> +        return -EINVAL;
>> +
>> +    for ( i =3D 0; i < NR_CPUS; i++ )
>> +    {
>> +        if ( apic_id =3D=3D 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 =3D (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 =3D 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 =3D -ENOSYS;
>> +                    break;
>> +                }
>> +                ret =3D set_px_pminfo(pminfo.id, &pminfo.perf); +
>> break; +            case XEN_PM_CX:
>> +                /* Place holder for Cx */
>> +                ret =3D -ENOSYS;
>> +                break;
>> +            default:
>> +                ret =3D -EINVAL;
>> +                break;
>> +        }
>> +
>> +        break;
>> +    }
>> +
>>      default:
>>          ret =3D -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     =3D max_pages;
>>       si->flags =3D SIF_INITDOMAIN|SIF_PRIVILEGED;
>> +    si->flags |=3D (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)


--_002_49582C73AC36CC4C8C6C42390304E81C08A6563B50pdsmsx502ccrc_
Content-Type: application/octet-stream; name="px-xen-ipf-hypercall.patch"
Content-Description: px-xen-ipf-hypercall.patch
Content-Disposition: attachment; filename="px-xen-ipf-hypercall.patch";
	size=5320; creation-date="Wed, 01 Oct 2008 21:34:06 GMT";
	modification-date="Wed, 01 Oct 2008 21:48:17 GMT"
Content-Transfer-Encoding: base64

SUE2NDogaW1wbGVtZW50IGlhNjQgY3B1ZnJlcSBub3RpZnkgaHlwZXJjYWxsCgpUaGlzIHBhdGNo
IGltcGxlbWVudCB0aGUgaWE2NCBjcHVmcmVxIGh5cGVyY2FsbCB0byBnZXQgZG9tMCBjcHVmcmVx
IEFDUEkgaW5mby4KClNpZ25lZC1vZmYtYnk6IFl1IEtlIDxrZS55dUBpbnRlbC5jb20+CiAgICAg
ICAgICAgICAgIExpdSBKaW5zb25nIDxqaW5zb25nLmxpdUBpbnRlbC5jb20+CgpkaWZmIC1yIGFm
M2U1ODYzMTAxYSB4ZW4vYXJjaC9pYTY0L2xpbnV4LXhlbi9hY3BpLmMKLS0tIGEveGVuL2FyY2gv
aWE2NC9saW51eC14ZW4vYWNwaS5jCVdlZCBPY3QgMDEgMTc6Mzk6MTAgMjAwOCArMDgwMAorKysg
Yi94ZW4vYXJjaC9pYTY0L2xpbnV4LXhlbi9hY3BpLmMJV2VkIE9jdCAwMSAyMToyNjozMCAyMDA4
ICswODAwCkBAIC0yMTksNiArMjE5LDMyIEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBYRU4K
KworI2RlZmluZSBNQVhfTE9DQUxfU0FQSUMgMjU1CitzdGF0aWMgdTE2IGlhNjRfYWNwaWlkX3Rv
X3NhcGljaWRbIE1BWF9MT0NBTF9TQVBJQyBdID0KKwkJe1swIC4uLiBNQVhfTE9DQUxfU0FQSUMg
LSAxXSA9IDB4ZmZmZiB9OworCisvKiBhY3BpIGlkIHRvIGNwdSBpZCAqLworaW50IGdldF9jcHVf
aWQodTggYWNwaV9pZCkKK3sKKwlpbnQgaTsKKwl1MTYgYXBpY19pZDsKKworCWFwaWNfaWQgPSBp
YTY0X2FjcGlpZF90b19zYXBpY2lkW2FjcGlfaWRdOworCWlmICggYXBpY19pZCA9PSAweGZmZmYg
KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoIGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrICkK
Kwl7CisJCWlmICggYXBpY19pZCA9PSBpYTY0X2NwdV90b19zYXBpY2lkW2ldICkKKwkJCXJldHVy
biBpOworCX0KKworCXJldHVybiAtMTsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IF9faW5pdAog
YWNwaV9wYXJzZV9sc2FwaWMoc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICogaGVhZGVyLCBj
b25zdCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKQEAgLTIzMiw2ICsyNTgsMTAgQEAKICNpZmRlZiBD
T05GSUdfU01QCiAJCXNtcF9ib290X2RhdGEuY3B1X3BoeXNfaWRbYXZhaWxhYmxlX2NwdXNdID0K
IAkJICAgIChsc2FwaWMtPmlkIDw8IDgpIHwgbHNhcGljLT5laWQ7CisjZW5kaWYKKyNpZmRlZiBY
RU4KKyAgICAgICAgaWE2NF9hY3BpaWRfdG9fc2FwaWNpZFtsc2FwaWMtPnByb2Nlc3Nvcl9pZF0g
PQorICAgICAgICAgICAgKGxzYXBpYy0+aWQgPDwgOCkgfCBsc2FwaWMtPmVpZDsKICNlbmRpZgog
CQkrK2F2YWlsYWJsZV9jcHVzOwogCX0KZGlmZiAtciBhZjNlNTg2MzEwMWEgeGVuL2FyY2gvaWE2
NC9saW51eC14ZW4vZW50cnkuUwotLS0gYS94ZW4vYXJjaC9pYTY0L2xpbnV4LXhlbi9lbnRyeS5T
CVdlZCBPY3QgMDEgMTc6Mzk6MTAgMjAwOCArMDgwMAorKysgYi94ZW4vYXJjaC9pYTY0L2xpbnV4
LXhlbi9lbnRyeS5TCVdlZCBPY3QgMDEgMjE6MjY6MzAgMjAwOCArMDgwMApAQCAtMTUyNCw3ICsx
NTI0LDcgQEAKIAlkYXRhOCBkb19uaV9oeXBlcmNhbGwJCS8qIGRvX3NldF9jYWxsYmFja3MgKi8K
IAlkYXRhOCBkb19uaV9oeXBlcmNhbGwJCS8qIGRvX2ZwdV90YXNrc3dpdGNoICovLyogIDUgKi8K
IAlkYXRhOCBkb19zY2hlZF9vcF9jb21wYXQKLQlkYXRhOCBkb19uaV9oeXBlcmNhbGwKKwlkYXRh
OCBkb19wbGF0Zm9ybV9vcAogCWRhdGE4IGRvX25pX2h5cGVyY2FsbAkJLyogZG9fc2V0X2RlYnVn
cmVnICovCiAJZGF0YTggZG9fbmlfaHlwZXJjYWxsCQkvKiBkb19nZXRfZGVidWdyZWcgKi8KIAlk
YXRhOCBkb19uaV9oeXBlcmNhbGwJCS8qIGRvX3VwZGF0ZV9kZXNjcmlwdG9yICogMTAgKi8KZGlm
ZiAtciBhZjNlNTg2MzEwMWEgeGVuL2FyY2gvaWE2NC94ZW4vTWFrZWZpbGUKLS0tIGEveGVuL2Fy
Y2gvaWE2NC94ZW4vTWFrZWZpbGUJV2VkIE9jdCAwMSAxNzozOToxMCAyMDA4ICswODAwCisrKyBi
L3hlbi9hcmNoL2lhNjQveGVuL01ha2VmaWxlCVdlZCBPY3QgMDEgMjE6MjY6MzAgMjAwOCArMDgw
MApAQCAtMTUsNiArMTUsNyBAQAogb2JqLXkgKz0gZndfZW11bC5vCiBvYmoteSArPSBocHNpbXNl
cmlhbC5vCiBvYmoteSArPSBoeXBlcmNhbGwubworb2JqLXkgKz0gcGxhdGZvcm1faHlwZXJjYWxs
Lm8KIG9iai15ICs9IGh5cGVycHJpdm9wLm8KIG9iai15ICs9IGlkbGUwX3Rhc2subwogb2JqLXkg
Kz0gaXJxLm8KZGlmZiAtciBhZjNlNTg2MzEwMWEgeGVuL2FyY2gvaWE2NC94ZW4vY3B1ZnJlcS9j
cHVmcmVxLmMKLS0tIGEveGVuL2FyY2gvaWE2NC94ZW4vY3B1ZnJlcS9jcHVmcmVxLmMJV2VkIE9j
dCAwMSAxNzozOToxMCAyMDA4ICswODAwCisrKyBiL3hlbi9hcmNoL2lhNjQveGVuL2NwdWZyZXEv
Y3B1ZnJlcS5jCVdlZCBPY3QgMDEgMjE6MjY6MzAgMjAwOCArMDgwMApAQCAtMzAwLDQgKzMwMCwx
MCBAQAogCiAJcmV0dXJuIHJldDsKIH0KKwogX19pbml0Y2FsbChjcHVmcmVxX2RyaXZlcl9pbml0
KTsKKworaW50IGNwdWZyZXFfY3B1X2luaXQodW5zaWduZWQgaW50IGNwdWlkKQoreworCXJldHVy
biBjcHVmcmVxX2FkZF9jcHUoY3B1aWQpOworfQpkaWZmIC1yIGFmM2U1ODYzMTAxYSB4ZW4vYXJj
aC9pYTY0L3hlbi9kb21haW4uYwotLS0gYS94ZW4vYXJjaC9pYTY0L3hlbi9kb21haW4uYwlXZWQg
T2N0IDAxIDE3OjM5OjEwIDIwMDggKzA4MDAKKysrIGIveGVuL2FyY2gvaWE2NC94ZW4vZG9tYWlu
LmMJV2VkIE9jdCAwMSAyMToyNjozMCAyMDA4ICswODAwCkBAIC0yMTYwLDYgKzIxNjAsNyBAQAog
CXNucHJpbnRmKHNpLT5tYWdpYywgc2l6ZW9mKHNpLT5tYWdpYyksICJ4ZW4tMy4wLWlhNjQiKTsK
IAlzaS0+bnJfcGFnZXMgICAgID0gbWF4X3BhZ2VzOwogCXNpLT5mbGFncyA9IFNJRl9JTklURE9N
QUlOfFNJRl9QUklWSUxFR0VEOworCXNpLT5mbGFncyB8PSAoeGVuX3Byb2Nlc3Nvcl9wbWJpdHMg
PDwgOCkgJiBTSUZfUE1fTUFTSzsKIAogCXByaW50aygiRG9tMDogMHglbHhcbiIsICh1NjQpZG9t
MCk7CiAKZGlmZiAtciBhZjNlNTg2MzEwMWEgeGVuL2FyY2gvaWE2NC94ZW4vcGxhdGZvcm1faHlw
ZXJjYWxsLmMKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysr
IGIveGVuL2FyY2gvaWE2NC94ZW4vcGxhdGZvcm1faHlwZXJjYWxsLmMJV2VkIE9jdCAwMSAyMToy
NjozMCAyMDA4ICswODAwCkBAIC0wLDAgKzEsODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
KyAqIHBsYXRmb3JtX2h5cGVyY2FsbC5jCisgKiAKKyAqIEhhcmR3YXJlIHBsYXRmb3JtIG9wZXJh
dGlvbnMuIEludGVuZGVkIGZvciB1c2UgYnkgZG9tYWluLTAga2VybmVsLgorICogCisgKiBDb3B5
cmlnaHQgKGMpIDIwMDItMjAwNiwgSyBGcmFzZXIKKyAqLworCisjaW5jbHVkZSA8eGVuL2NvbmZp
Zy5oPgorI2luY2x1ZGUgPHhlbi90eXBlcy5oPgorI2luY2x1ZGUgPHhlbi9saWIuaD4KKyNpbmNs
dWRlIDx4ZW4vc2NoZWQuaD4KKyNpbmNsdWRlIDx4ZW4vZ3Vlc3RfYWNjZXNzLmg+CisjaW5jbHVk
ZSA8eGVuL2FjcGkuaD4KKyNpbmNsdWRlIDxwdWJsaWMvcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxh
Y3BpL2NwdWZyZXEvcHJvY2Vzc29yX3BlcmYuaD4KKworREVGSU5FX1NQSU5MT0NLKHhlbnBmX2xv
Y2spOworCitleHRlcm4gaW50IHNldF9weF9wbWluZm8odWludDMyX3QgY3B1LCBzdHJ1Y3QgeGVu
X3Byb2Nlc3Nvcl9wZXJmb3JtYW5jZSAqcGVyZik7CitleHRlcm4gbG9uZyBzZXRfY3hfcG1pbmZv
KHVpbnQzMl90IGNwdSwgc3RydWN0IHhlbl9wcm9jZXNzb3JfcG93ZXIgKnBvd2VyKTsKKworaW50
IHhlbnBmX2NvcHlfcHhfc3RhdGVzKHN0cnVjdCBwcm9jZXNzb3JfcGVyZm9ybWFuY2UgKnB4cHQs
CisgICAgICAgIHN0cnVjdCB4ZW5fcHJvY2Vzc29yX3BlcmZvcm1hbmNlICpkb20wX3B4X2luZm8p
Cit7CisgICAgaWYgKCFweHB0IHx8ICFkb20wX3B4X2luZm8pCisgICAgICAgIHJldHVybiAtRUlO
VkFMOworICAgIHJldHVybiAgY29weV9mcm9tX2d1ZXN0KHB4cHQtPnN0YXRlcywgZG9tMF9weF9p
bmZvLT5zdGF0ZXMsCisgICAgICAgICAgICAgICAgICAgIGRvbTBfcHhfaW5mby0+c3RhdGVfY291
bnQpOworfQorCitsb25nIGRvX3BsYXRmb3JtX29wKFhFTl9HVUVTVF9IQU5ETEUoeGVuX3BsYXRm
b3JtX29wX3QpIHVfeGVucGZfb3ApCit7CisgICAgbG9uZyByZXQgPSAwOworICAgIHN0cnVjdCB4
ZW5fcGxhdGZvcm1fb3AgY3Vyb3AsICpvcCA9ICZjdXJvcDsKKworICAgIGlmICggIUlTX1BSSVYo
Y3VycmVudC0+ZG9tYWluKSApCisgICAgICAgIHJldHVybiAtRVBFUk07CisKKyAgICBpZiAoIGNv
cHlfZnJvbV9ndWVzdChvcCwgdV94ZW5wZl9vcCwgMSkgKQorICAgICAgICByZXR1cm4gLUVGQVVM
VDsKKworICAgIGlmICggb3AtPmludGVyZmFjZV92ZXJzaW9uICE9IFhFTlBGX0lOVEVSRkFDRV9W
RVJTSU9OICkKKyAgICAgICAgcmV0dXJuIC1FQUNDRVM7CisKKyAgICBzd2l0Y2ggKCBvcC0+Y21k
ICkKKyAgICB7CisgICAgY2FzZSBYRU5QRl9zZXRfcHJvY2Vzc29yX3BtaW5mbzoKKyAgICAgICAg
c3Bpbl9sb2NrKCZ4ZW5wZl9sb2NrKTsKKyAgICAgICAgc3dpdGNoICggb3AtPnUuc2V0X3BtaW5m
by50eXBlICkKKyAgICAgICAgeworICAgICAgICBjYXNlIFhFTl9QTV9QWDoKKyAgICAgICAgICAg
IHJldCA9IHNldF9weF9wbWluZm8ob3AtPnUuc2V0X3BtaW5mby5pZCwKKyAgICAgICAgICAgICAg
ICAgICAgJm9wLT51LnNldF9wbWluZm8ucGVyZik7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIFhFTl9QTV9DWDoKKyAgICAgICAgICAgIC8qIFBsYWNlIGhvbGRlciBmb3IgQ3gg
Ki8KKyAgICAgICAgICAgIHJldCA9IC1FTk9TWVM7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIHNwaW5fdW5sb2NrKCZ4ZW5wZl9sb2NrKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBwcmludGsoIlVua25vd24gcGxhdGZv
cm0gaHlwZXJjYWxsIG9wIDB4JXhcbiIsIG9wLT5jbWQpOworICAgICAgICByZXQgPSAtRU5PU1lT
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCisvKgorICog
TG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1zZXQtc3R5bGU6ICJCU0QiCisgKiBj
LWJhc2ljLW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBu
aWwKKyAqIEVuZDoKKyAqLworCg==

--_002_49582C73AC36CC4C8C6C42390304E81C08A6563B50pdsmsx502ccrc_
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

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

--_002_49582C73AC36CC4C8C6C42390304E81C08A6563B50pdsmsx502ccrc_--


From xen-ia64-devel-bounces@lists.xensource.com Wed Oct 01 07:12:21 2008
Return-path: <xen-ia64-devel-bounces@lists.xensource.com>
Envelope-to: www-data@lists.xensource.com
Delivery-date: Wed, 01 Oct 2008 07:12:21 -0700
Received: from localhost ([127.0.0.1] helo=lists.colo.xensource.com)
	by lists.xensource.com with esmtp (Exim 4.43)
	id 1Kl2RB-0008Ds-3n; Wed, 01 Oct 2008 07:12:21 -0700
Received: from spam.xensource.com ([70.42.241.90])
	by lists.xensource.com with esmtp (Exim 4.43) id 1Kl2Pp-0007Pm-NP
	for xen-ia64-devel@lists.xensource.com; Wed, 01 Oct 2008 07:10:57 -0700
X-ASG-Debug-ID: 1222870235-44eb00080000-zRdJ7k
X-Barracuda-URL: http://spam.xensource.com:8000/cgi-bin/mark.cgi
Received: from mga09.intel.com (localhost [127.0.0.1])
	by spam.xensource.com (Spam Firewall) with ESMTP
	id BCF51B34D0; Wed,  1 Oct 2008 07:10:35 -0700 (PDT)
Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by
	spam.xensource.com with ESMTP id 4gn5xrLoQcDZZ2Jq;
	Wed, 01 Oct 2008 07:10:35 -0700 (PDT)
Received: from orsmga001.jf.intel.com ([10.7.209.18])
	by orsmga102.jf.intel.com with ESMTP; 01 Oct 2008 07:06:24 -0700
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="4.33,344,1220252400"; d="scan'208";a="445743766"
Received: from fmsmsxpoc001.amr.corp.intel.com ([132.233.49.22])
	by orsmga001.jf.intel.com with ESMTP; 01 Oct 2008 07:09:36 -0700
Received: from fmsmsxTAP001.amr.corp.intel.com (10.19.9.33) by
	fmsmsxpoc001.amr.corp.intel.com (132.233.49.22) with Microsoft SMTP
	Server (TLS) id 8.1.291.1; Wed, 1 Oct 2008 07:10:31 -0700
Received: from pdsmsx601.ccr.corp.intel.com (172.16.12.94) by
	fmsmsxTAP001.amr.corp.intel.com (10.19.9.33) with Microsoft SMTP Server
	(TLS) id 8.1.278.0; Wed, 1 Oct 2008 07:10:31 -0700
Received: from pdsmsx502.ccr.corp.intel.com ([172.16.12.96]) by
	pdsmsx601.ccr.corp.intel.com ([172.16.12.94]) with mapi; Wed, 1 Oct 2008
	22:10:29 +0800
From: "Yu, Ke" <ke.yu@intel.com>
To: Isaku Yamahata <yamahata@valinux.co.jp>
Date: Wed, 1 Oct 2008 22:10:26 +0800
X-ASG-Orig-Subj: RE: [Xen-ia64-devel] [PATCH 3/3] IA64: add cpufreq support
Subject: RE: [Xen-ia64-devel] [PATCH 3/3] IA64: add cpufreq support
Thread-Topic: [Xen-ia64-devel] [PATCH 3/3] IA64: add cpufreq support
Thread-Index: Ackh5pQEQLqMEMklTDaoIBI7g83mUgB53+og
Message-ID: <49582C73AC36CC4C8C6C42390304E81C08A6563B51@pdsmsx502.ccr.corp.intel.com>
References: <49582C73AC36CC4C8C6C42390304E81C0887A9D797@pdsmsx502.ccr.corp.intel.com>
	<20080929035041.GF26025%yamahata@valinux.co.jp>
In-Reply-To: <20080929035041.GF26025%yamahata@valinux.co.jp>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator: 
acceptlanguage: en-US
Content-Type: multipart/mixed;
	boundary="_002_49582C73AC36CC4C8C6C42390304E81C08A6563B51pdsmsx502ccrc_"
MIME-Version: 1.0
X-Barracuda-Connect: mga09.intel.com[134.134.136.24]
X-Barracuda-Start-Time: 1222870235
X-Barracuda-Virus-Scanned: by Barracuda Spam Firewall at xensource.com
X-Barracuda-Spam-Score: 0.50
X-Barracuda-Spam-Status: No, SCORE=0.50 using per-user scores of TAG_LEVEL=3.5
	QUARANTINE_LEVEL=6.0 KILL_LEVEL=1000.0 tests=BSF_RULE7568M
X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.6982
	Rule breakdown below
	pts rule name              description
	---- ----------------------
	--------------------------------------------------
	0.50 BSF_RULE7568M          Custom Rule 7568M
Cc: "xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>,
	"xen-ia64-devel@lists.xensource.com" <xen-ia64-devel@lists.xensource.com>
X-BeenThere: xen-ia64-devel@lists.xensource.com
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: Discussion of the ia64 port of Xen
	<xen-ia64-devel.lists.xensource.com>
List-Unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-ia64-devel>, 
	<mailto:xen-ia64-devel-request@lists.xensource.com?subject=unsubscribe>
List-Post: <mailto:xen-ia64-devel@lists.xensource.com>
List-Help: <mailto:xen-ia64-devel-request@lists.xensource.com?subject=help>
List-Subscribe: <http://lists.xensource.com/mailman/listinfo/xen-ia64-devel>, 
	<mailto:xen-ia64-devel-request@lists.xensource.com?subject=subscribe>
Sender: xen-ia64-devel-bounces@lists.xensource.com
Errors-To: xen-ia64-devel-bounces@lists.xensource.com

--_002_49582C73AC36CC4C8C6C42390304E81C08A6563B51pdsmsx502ccrc_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Please see attached patch.

Two changes are made:
1. use platform hypercall instead of dom0 ops hyercall
2. fix the tab and space mixed issue.

BTW, for the drivers/acpi/Kconfig hunk, although it is common file, the cha=
nge is purly ia64 spefific. And without this hunk, the dom0 can not pass co=
mpilation, so I stil keep it in this patch.

Best Regards
Ke

Isaku Yamahata wrote:
> Hi.
>
> Two comments.
> - It seems that tabs and spaces are mixed. Please follow Linux style.
>   You also want to modify to use XENPF hypercall.
>
> - Since drivers/acpi/Kconfig is common file, the hunk should
>   go to xen-devel after the ia64 part is merged to xen-unstable.hg
>
> thanks,
>
> On Sat, Sep 27, 2008 at 10:13:14AM +0800, Yu, Ke wrote:
>> IA64: add ia64 cpufreq notify hypercall
>>
>> This patch adds ia64 notify hypercall to pass cpufreq ACPI
>> information to hypervisor, and get cpufreq statistic data from
>> hypervisor.
>>
>> Signed-off-by: Yu Ke <ke.yu@intel.com>
>>                Liu Jinsong <jinsong.liu@intel.com>
>
>> IA64: add ia64 cpufreq notify hypercall
>>
>> This patch adds ia64 notify hypercall to pass cpufreq ACPI
>> information to hypervisor, and get cpufreq statistic data from
>> hypervisor.
>>
>> Signed-off-by: Yu Ke <ke.yu@intel.com>
>>                Liu Jinsong <jinsong.liu@intel.com>
>>
>> diff -r 2f32c16d5370 arch/ia64/kernel/Makefile
>> --- a/arch/ia64/kernel/Makefile       Fri Sep 26 19:36:24 2008 +0800
>> +++ b/arch/ia64/kernel/Makefile       Fri Sep 26 19:38:21 2008 +0800
>> @@ -16,6 +16,9 @@
>>
>>  ifneq ($(CONFIG_ACPI_PROCESSOR),)
>>  obj-y                                +=3D acpi-processor.o
>> +ifneq ($(CONFIG_PROCESSOR_EXTERNAL_CONTROL),)
>> +obj-$(CONFIG_XEN)            +=3D processor_extcntl_xen.o +endif
>>  endif
>>
>>  obj-$(CONFIG_IA64_PALINFO)   +=3D palinfo.o
>> diff -r 2f32c16d5370 arch/ia64/kernel/processor_extcntl_xen.c
>> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
>> +++ b/arch/ia64/kernel/processor_extcntl_xen.c        Fri Sep 26
>> 19:38:21 2008 +0800 @@ -0,0 +1,154 @@ +/*
>> + * processor_extcntl_xen.c - interface to notify Xen + *
>> + *  Copyright (C) 2008, Intel corporation
>> + *
>> + *
>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=
~~
>> + * + *  This program is free software; you can redistribute it
>> and/or modify + *  it under the terms of the GNU General Public
>> License as published by + *  the Free Software Foundation; either
>> version 2 of the License, or (at + *  your option) any later
>> version. + * + *  This program is distributed in the hope that it
>> will be useful, but + *  WITHOUT ANY WARRANTY; without even the
>> implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR
>> PURPOSE.  See the GNU + *  General Public License for more details.
>> + *
>> + *  You should have received a copy of the GNU General Public
>> License along + *  with this program; if not, write to the Free
>> Software Foundation, Inc., + *  59 Temple Place, Suite 330, Boston,
>> MA 02111-1307 USA. + * + */
>> +
>> +#include <linux/kernel.h>
>> +#include <linux/init.h>
>> +#include <linux/types.h>
>> +#include <linux/acpi.h>
>> +#include <linux/pm.h>
>> +#include <linux/cpu.h>
>> +#include <linux/cpufreq.h>
>> +#include <acpi/processor.h>
>> +#include <asm/hypercall.h>
>> +#include <asm/xen/xencomm.h>
>> +
>> +static int xen_cx_notifier(struct acpi_processor *pr, int action) +{
>> +     printk(KERN_WARNING "Cx is not supported yet\n"); +
>> +    return -EINVAL;
>> +}
>> +
>> +static int xen_px_notifier(struct acpi_processor *pr, int action) +{
>> +     int ret =3D -EINVAL;
>> +    struct xenpf_set_processor_pminfo pminfo =3D {
>> +        .id   =3D pr->acpi_id,
>> +        .type =3D XEN_PM_PX,
>> +    };
>> +    struct xen_processor_performance *perf;
>> +    struct xen_processor_px *states =3D NULL;
>> +    struct acpi_processor_performance *px;
>> +    struct acpi_psd_package *pdomain;
>> +    struct xencomm_handle *desc,*states_desc;
>> +
>> +    if (!pr || !pr->performance)
>> +        return -EINVAL;
>> +
>> +    perf =3D &pminfo.perf;
>> +    px =3D pr->performance;
>> +    desc =3D xencomm_map_no_alloc(&pminfo, sizeof(pminfo)); +
>> +    switch(action) {
>> +
>> +        case PROCESSOR_PM_CHANGE:
>> +            /* ppc dynamic handle */
>> +            pminfo.perf.flags =3D XEN_PX_PPC;
>> +            pminfo.perf.platform_limit =3D
>> pr->performance_platform_limit; +            ret =3D
>> HYPERVISOR_set_pm_info(desc); +            break;
>> +
>> +        case PROCESSOR_PM_INIT:
>> +
>> +            /* px normal init */
>> +            perf->flags =3D XEN_PX_PPC |
>> +                XEN_PX_PCT |
>> +                XEN_PX_PSS |
>> +                XEN_PX_PSD;
>> +
>> +            /* ppc */
>> +            perf->platform_limit =3D pr->performance_platform_limit; +
>> +            /* pct */
>> +            xen_convert_pct_reg(&perf->control_register,
>> &px->control_register); +
>> xen_convert_pct_reg(&perf->status_register, &px->status_register); +
>> +            /* pss */ +            perf->state_count =3D
>> px->state_count; +            states =3D
>> kzalloc(px->state_count*sizeof(xen_processor_px_t),GFP_KERNEL); +
>> if (!states){ +                ret =3D -ENOMEM; +                break;
>> +            }
>> +            xen_convert_pss_states(states, px->states,
>> px->state_count); +            set_xen_guest_handle(perf->states,
>> states); +            states_desc =3D
>> xencomm_map_no_alloc(xen_guest_handle(perf->states), +
>> sizeof(*xen_guest_handle(perf->states))); +
>> set_xen_guest_handle(perf->states,
>> (xen_processor_px_t*)states_desc); + +            /* psd */ +
>> pdomain =3D &px->domain_info; +
>> xen_convert_psd_pack(&perf->domain_info, pdomain); +            if
>> (pdomain->coord_type =3D=3D DOMAIN_COORD_TYPE_SW_ALL) +
>> perf->shared_type =3D CPUFREQ_SHARED_TYPE_ALL; +            else if
>> (pdomain->coord_type =3D=3D DOMAIN_COORD_TYPE_SW_ANY) +
>> perf->shared_type =3D CPUFREQ_SHARED_TYPE_ANY; +            else if
>> (pdomain->coord_type =3D=3D DOMAIN_COORD_TYPE_HW_ALL) +
>> perf->shared_type =3D CPUFREQ_SHARED_TYPE_HW; +            else { +
>> ret =3D -ENODEV; +                kfree(states);
>> +                break;
>> +            }
>> +
>> +            ret =3D  HYPERVISOR_set_pm_info(desc);
>> +            kfree(states);
>> +            break;
>> +
>> +        default:
>> +            ret =3D -EINVAL;
>> +    }
>> +
>> +     return ret;
>> +}
>> +
>> +static int xen_tx_notifier(struct acpi_processor *pr, int action) +{
>> +     return -EINVAL;
>> +}
>> +static int xen_hotplug_notifier(struct acpi_processor *pr, int
>> event) +{ +     return -EINVAL;
>> +}
>> +
>> +static struct processor_extcntl_ops xen_extcntl_ops =3D {
>> +     .hotplug                =3D xen_hotplug_notifier, +};
>> +
>> +void arch_acpi_processor_init_extcntl(const struct
>> processor_extcntl_ops **ops) +{ +     unsigned int pmbits =3D
>> (xen_start_info->flags & SIF_PM_MASK) >> 8; + +    if (!pmbits)
>> +        return;
>> +
>> +     if (pmbits & XEN_PROCESSOR_PM_CX)
>> +             xen_extcntl_ops.pm_ops[PM_TYPE_IDLE] =3D xen_cx_notifier;
>> +     if (pmbits & XEN_PROCESSOR_PM_PX)
>> +             xen_extcntl_ops.pm_ops[PM_TYPE_PERF] =3D xen_px_notifier;
>> +     if (pmbits & XEN_PROCESSOR_PM_TX)
>> +             xen_extcntl_ops.pm_ops[PM_TYPE_THR] =3D xen_tx_notifier;
>> + +     *ops =3D &xen_extcntl_ops;
>> +}
>> +EXPORT_SYMBOL(arch_acpi_processor_init_extcntl);
>> diff -r 2f32c16d5370 arch/ia64/xen/xcom_privcmd.c
>> --- a/arch/ia64/xen/xcom_privcmd.c    Fri Sep 26 19:36:24 2008 +0800
>> +++ b/arch/ia64/xen/xcom_privcmd.c    Fri Sep 26 19:38:21 2008 +0800
>>               @@ -193,6 +193,33 @@
>>
>>               set_xen_guest_handle(kern_op.u.physinfo.cpu_to_node,
>> (void *)desc); break; +
>> +     case XEN_SYSCTL_get_pmstat:
>> +             if (kern_op.u.get_pmstat.type =3D=3D PMSTAT_get_pxstat) {
>> +                     desc =3D xencomm_map(
>> +
>> xen_guest_handle(kern_op.u.get_pmstat.u.getpx.trans_pt), +
>> kern_op.u.get_pmstat.u.getpx.total * +
>> kern_op.u.get_pmstat.u.getpx.total * +
>> sizeof(uint64_t)); +                     if
>> (xen_guest_handle(kern_op.u.get_pmstat.u.getpx.trans_pt) !=3D NULL +
>> && kern_op.u.get_pmstat.u.getpx.total > 0 && desc =3D=3D NULL) +
>> return -ENOMEM; +
>> +
>> set_xen_guest_handle(kern_op.u.get_pmstat.u.getpx.trans_pt, +
>> (void *)desc); + +                     desc1 =3D xencomm_map(
>> +
>> xen_guest_handle(kern_op.u.get_pmstat.u.getpx.pt), +
>> kern_op.u.get_pmstat.u.getpx.total * sizeof(pm_px_val_t)); +
>> if (xen_guest_handle(kern_op.u.get_pmstat.u.getpx.pt) !=3D NULL && +
>> kern_op.u.get_pmstat.u.getpx.total > 0 && desc1 =3D=3D NULL) +
>> return -ENOMEM; +
>> +
>> set_xen_guest_handle(kern_op.u.get_pmstat.u.getpx.pt, +
>> (void *)desc1); +             } +             break;
>> +
>>       default:
>>               printk("%s: unknown sysctl cmd %d\n", __func__,
>> kern_op.cmd);               return -ENOSYS; diff -r 2f32c16d5370
>> drivers/acpi/Kconfig --- a/drivers/acpi/Kconfig    Fri Sep 26
>> 19:36:24 2008 +0800 +++ b/drivers/acpi/Kconfig    Fri Sep 26
>> 19:38:21 2008 +0800 @@ -370,7 +370,7 @@
>>
>>  config PROCESSOR_EXTERNAL_CONTROL
>>       bool
>> -     depends on X86 && XEN
>> +     depends on (X86 || IA64) && XEN
>>       default y
>>  endif        # ACPI
>>
>> diff -r 2f32c16d5370 include/asm-ia64/hypercall.h
>> --- a/include/asm-ia64/hypercall.h    Fri Sep 26 19:36:24 2008 +0800
>> +++ b/include/asm-ia64/hypercall.h    Fri Sep 26 19:38:21 2008 +0800
>>  @@ -427,6 +427,13 @@ }
>>
>>  static inline int
>> +HYPERVISOR_set_pm_info(struct xencomm_handle *pminfo) +{
>> +    return _hypercall2(int, ia64_dom0vp_op,
>> IA64_DOM0VP_set_pm_info, +                    pminfo); +}
>> +
>> +static inline int
>>  xencomm_arch_hypercall_kexec_op(int cmd, struct xencomm_handle
>>       *arg)  { return _hypercall2(int, kexec_op, cmd, arg);
>> diff -r 2f32c16d5370 include/xen/interface/arch-ia64.h
>> --- a/include/xen/interface/arch-ia64.h       Fri Sep 26 19:36:24
>> 2008 +0800 +++ b/include/xen/interface/arch-ia64.h       Fri Sep 26
>>  19:38:21 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)


--_002_49582C73AC36CC4C8C6C42390304E81C08A6563B51pdsmsx502ccrc_
Content-Type: application/octet-stream;
	name="dom0_add_ia64_processor_extcntl.patch"
Content-Description: dom0_add_ia64_processor_extcntl.patch
Content-Disposition: attachment;
	filename="dom0_add_ia64_processor_extcntl.patch"; size=8777;
	creation-date="Wed, 01 Oct 2008 21:34:06 GMT";
	modification-date="Wed, 01 Oct 2008 21:34:06 GMT"
Content-Transfer-Encoding: base64

SUE2NDogYWRkIGlhNjQgY3B1ZnJlcSBub3RpZnkgaHlwZXJjYWxsCgpUaGlzIHBhdGNoIGFkZHMg
aWE2NCBub3RpZnkgaHlwZXJjYWxsIHRvIHBhc3MgY3B1ZnJlcSBBQ1BJIGluZm9ybWF0aW9uIHRv
IGh5cGVydmlzb3IsCmFuZCBnZXQgY3B1ZnJlcSBzdGF0aXN0aWMgZGF0YSBmcm9tIGh5cGVydmlz
b3IuCgpTaWduZWQtb2ZmLWJ5OiBZdSBLZSA8a2UueXVAaW50ZWwuY29tPgogICAgICAgICAgICAg
ICBMaXUgSmluc29uZyA8amluc29uZy5saXVAaW50ZWwuY29tPgoKZGlmZiAtciBhZTk1M2ZiYjAw
ZGEgYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQotLS0gYS9hcmNoL2lhNjQva2VybmVsL01ha2Vm
aWxlCVR1ZSBTZXAgMzAgMTk6MTE6MTAgMjAwOCArMDgwMAorKysgYi9hcmNoL2lhNjQva2VybmVs
L01ha2VmaWxlCVR1ZSBTZXAgMzAgMjM6MTY6MTMgMjAwOCArMDgwMApAQCAtMTYsNiArMTYsOSBA
QAogCiBpZm5lcSAoJChDT05GSUdfQUNQSV9QUk9DRVNTT1IpLCkKIG9iai15CQkJCSs9IGFjcGkt
cHJvY2Vzc29yLm8KK2lmbmVxICgkKENPTkZJR19QUk9DRVNTT1JfRVhURVJOQUxfQ09OVFJPTCks
KQorb2JqLSQoQ09ORklHX1hFTikJCSs9IHByb2Nlc3Nvcl9leHRjbnRsX3hlbi5vCitlbmRpZgog
ZW5kaWYKIAogb2JqLSQoQ09ORklHX0lBNjRfUEFMSU5GTykJKz0gcGFsaW5mby5vCmRpZmYgLXIg
YWU5NTNmYmIwMGRhIGFyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzc29yX2V4dGNudGxfeGVuLmMKLS0t
IC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvYXJjaC9pYTY0
L2tlcm5lbC9wcm9jZXNzb3JfZXh0Y250bF94ZW4uYwlUdWUgU2VwIDMwIDIzOjE2OjEzIDIwMDgg
KzA4MDAKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBwcm9jZXNzb3JfZXh0Y250bF94ZW4uYyAt
IGludGVyZmFjZSB0byBub3RpZnkgWGVuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCwgSW50
ZWwgY29ycG9yYXRpb24KKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqICBUaGlzIHBy
b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v
ZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiAgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNl
LCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCisgKgorICovCisKKyNpbmNs
dWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8
bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgv
cG0uaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+
CisjaW5jbHVkZSA8YWNwaS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vaHlwZXJjYWxsLmg+
CisjaW5jbHVkZSA8YXNtL3hlbi94ZW5jb21tLmg+CisjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9w
bGF0Zm9ybS5oPgorCitzdGF0aWMgaW50IHhlbl9jeF9ub3RpZmllcihzdHJ1Y3QgYWNwaV9wcm9j
ZXNzb3IgKnByLCBpbnQgYWN0aW9uKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIkN4IGlzIG5v
dCBzdXBwb3J0ZWQgeWV0XG4iKTsKKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50
IHhlbl9weF9ub3RpZmllcihzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLCBpbnQgYWN0aW9uKQor
eworCWludCByZXQgPSAtRUlOVkFMOworCXhlbl9wbGF0Zm9ybV9vcF90IG9wID0geworCQkuY21k
CQkJPSBYRU5QRl9zZXRfcHJvY2Vzc29yX3BtaW5mbywKKwkJLmludGVyZmFjZV92ZXJzaW9uCT0g
WEVOUEZfSU5URVJGQUNFX1ZFUlNJT04sCisJCS51LnNldF9wbWluZm8uaWQJPSBwci0+YWNwaV9p
ZCwKKwkJLnUuc2V0X3BtaW5mby50eXBlCT0gWEVOX1BNX1BYLAorCX07CisJc3RydWN0IHhlbl9w
cm9jZXNzb3JfcGVyZm9ybWFuY2UgKnBlcmY7CisJc3RydWN0IHhlbl9wcm9jZXNzb3JfcHggKnN0
YXRlcyA9IE5VTEw7CisJc3RydWN0IGFjcGlfcHJvY2Vzc29yX3BlcmZvcm1hbmNlICpweDsKKwlz
dHJ1Y3QgYWNwaV9wc2RfcGFja2FnZSAqcGRvbWFpbjsKKwlzdHJ1Y3QgeGVuY29tbV9oYW5kbGUg
KnN0YXRlc19kZXNjOworCisJaWYgKCFwciB8fCAhcHItPnBlcmZvcm1hbmNlKQorCQlyZXR1cm4g
LUVJTlZBTDsKKworCXBlcmYgPSAmb3AudS5zZXRfcG1pbmZvLnBlcmY7CisJcHggPSBwci0+cGVy
Zm9ybWFuY2U7CisKKwlzd2l0Y2goYWN0aW9uKSB7CisJCWNhc2UgUFJPQ0VTU09SX1BNX0NIQU5H
RToKKwkJCS8qIHBwYyBkeW5hbWljIGhhbmRsZSAqLworCQkJcGVyZi0+ZmxhZ3MgPSBYRU5fUFhf
UFBDOworCQkJcGVyZi0+cGxhdGZvcm1fbGltaXQgPSBwci0+cGVyZm9ybWFuY2VfcGxhdGZvcm1f
bGltaXQ7CisKKwkJCXJldCA9IEhZUEVSVklTT1JfcGxhdGZvcm1fb3AoJm9wKTsKKwkJCWJyZWFr
OworCisJCWNhc2UgUFJPQ0VTU09SX1BNX0lOSVQ6CisJCQkvKiBweCBub3JtYWwgaW5pdCAqLwor
CQkJcGVyZi0+ZmxhZ3MgPSBYRU5fUFhfUFBDIHwKKwkJCQlYRU5fUFhfUENUIHwKKwkJCQlYRU5f
UFhfUFNTIHwKKwkJCQlYRU5fUFhfUFNEOworCisJCQkvKiBwcGMgKi8KKwkJCXBlcmYtPnBsYXRm
b3JtX2xpbWl0ID0gcHItPnBlcmZvcm1hbmNlX3BsYXRmb3JtX2xpbWl0OworCisJCQkvKiBwY3Qg
Ki8KKwkJCXhlbl9jb252ZXJ0X3BjdF9yZWcoJnBlcmYtPmNvbnRyb2xfcmVnaXN0ZXIsICZweC0+
Y29udHJvbF9yZWdpc3Rlcik7CisJCQl4ZW5fY29udmVydF9wY3RfcmVnKCZwZXJmLT5zdGF0dXNf
cmVnaXN0ZXIsICZweC0+c3RhdHVzX3JlZ2lzdGVyKTsKKworCQkJLyogcHNzICovCisJCQlwZXJm
LT5zdGF0ZV9jb3VudCA9IHB4LT5zdGF0ZV9jb3VudDsKKwkJCXN0YXRlcyA9IGt6YWxsb2MocHgt
PnN0YXRlX2NvdW50KnNpemVvZih4ZW5fcHJvY2Vzc29yX3B4X3QpLEdGUF9LRVJORUwpOworCQkJ
aWYgKCFzdGF0ZXMpeworCQkJCXJldCA9IC1FTk9NRU07CisJCQkJYnJlYWs7CisJCQl9CisJCQl4
ZW5fY29udmVydF9wc3Nfc3RhdGVzKHN0YXRlcywgcHgtPnN0YXRlcywgcHgtPnN0YXRlX2NvdW50
KTsKKwkJCXNldF94ZW5fZ3Vlc3RfaGFuZGxlKHBlcmYtPnN0YXRlcywgc3RhdGVzKTsKKwkJCXN0
YXRlc19kZXNjID0geGVuY29tbV9tYXBfbm9fYWxsb2MoeGVuX2d1ZXN0X2hhbmRsZShwZXJmLT5z
dGF0ZXMpLAorCQkJCQlzaXplb2YoKnhlbl9ndWVzdF9oYW5kbGUocGVyZi0+c3RhdGVzKSkpOwor
CQkJc2V0X3hlbl9ndWVzdF9oYW5kbGUocGVyZi0+c3RhdGVzLCAoeGVuX3Byb2Nlc3Nvcl9weF90
KilzdGF0ZXNfZGVzYyk7CisKKwkJCS8qIHBzZCAqLworCQkJcGRvbWFpbiA9ICZweC0+ZG9tYWlu
X2luZm87CisJCQl4ZW5fY29udmVydF9wc2RfcGFjaygmcGVyZi0+ZG9tYWluX2luZm8sIHBkb21h
aW4pOworCQkJaWYgKHBkb21haW4tPmNvb3JkX3R5cGUgPT0gRE9NQUlOX0NPT1JEX1RZUEVfU1df
QUxMKQorCQkJCXBlcmYtPnNoYXJlZF90eXBlID0gQ1BVRlJFUV9TSEFSRURfVFlQRV9BTEw7CisJ
CQllbHNlIGlmIChwZG9tYWluLT5jb29yZF90eXBlID09IERPTUFJTl9DT09SRF9UWVBFX1NXX0FO
WSkKKwkJCQlwZXJmLT5zaGFyZWRfdHlwZSA9IENQVUZSRVFfU0hBUkVEX1RZUEVfQU5ZOworCQkJ
ZWxzZSBpZiAocGRvbWFpbi0+Y29vcmRfdHlwZSA9PSBET01BSU5fQ09PUkRfVFlQRV9IV19BTEwp
CisJCQkJcGVyZi0+c2hhcmVkX3R5cGUgPSBDUFVGUkVRX1NIQVJFRF9UWVBFX0hXOworCQkJZWxz
ZSB7CisJCQkJcmV0ID0gLUVOT0RFVjsKKwkJCQlrZnJlZShzdGF0ZXMpOworCQkJCWJyZWFrOwor
CQkJfQorCisJCQlyZXQgPSBIWVBFUlZJU09SX3BsYXRmb3JtX29wKCZvcCk7CisJCQlrZnJlZShz
dGF0ZXMpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXJldCA9IC1FSU5WQUw7CisJfQor
CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB4ZW5fdHhfbm90aWZpZXIoc3RydWN0IGFj
cGlfcHJvY2Vzc29yICpwciwgaW50IGFjdGlvbikKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KK3N0
YXRpYyBpbnQgeGVuX2hvdHBsdWdfbm90aWZpZXIoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciwg
aW50IGV2ZW50KQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgc3RydWN0IHByb2Nl
c3Nvcl9leHRjbnRsX29wcyB4ZW5fZXh0Y250bF9vcHMgPSB7CisJLmhvdHBsdWcJCT0geGVuX2hv
dHBsdWdfbm90aWZpZXIsCit9OworCit2b2lkIGFyY2hfYWNwaV9wcm9jZXNzb3JfaW5pdF9leHRj
bnRsKGNvbnN0IHN0cnVjdCBwcm9jZXNzb3JfZXh0Y250bF9vcHMgKipvcHMpCit7CisJdW5zaWdu
ZWQgaW50IHBtYml0cyA9ICh4ZW5fc3RhcnRfaW5mby0+ZmxhZ3MgJiBTSUZfUE1fTUFTSykgPj4g
ODsKKworCWlmICghcG1iaXRzKQorCQlyZXR1cm47CisKKwlpZiAocG1iaXRzICYgWEVOX1BST0NF
U1NPUl9QTV9DWCkKKwkJeGVuX2V4dGNudGxfb3BzLnBtX29wc1tQTV9UWVBFX0lETEVdID0geGVu
X2N4X25vdGlmaWVyOworCWlmIChwbWJpdHMgJiBYRU5fUFJPQ0VTU09SX1BNX1BYKQorCQl4ZW5f
ZXh0Y250bF9vcHMucG1fb3BzW1BNX1RZUEVfUEVSRl0gPSB4ZW5fcHhfbm90aWZpZXI7CisJaWYg
KHBtYml0cyAmIFhFTl9QUk9DRVNTT1JfUE1fVFgpCisJCXhlbl9leHRjbnRsX29wcy5wbV9vcHNb
UE1fVFlQRV9USFJdID0geGVuX3R4X25vdGlmaWVyOworCisJKm9wcyA9ICZ4ZW5fZXh0Y250bF9v
cHM7Cit9CitFWFBPUlRfU1lNQk9MKGFyY2hfYWNwaV9wcm9jZXNzb3JfaW5pdF9leHRjbnRsKTsK
ZGlmZiAtciBhZTk1M2ZiYjAwZGEgYXJjaC9pYTY0L3hlbi94Y29tX2hjYWxsLmMKLS0tIGEvYXJj
aC9pYTY0L3hlbi94Y29tX2hjYWxsLmMJVHVlIFNlcCAzMCAxOToxMToxMCAyMDA4ICswODAwCisr
KyBiL2FyY2gvaWE2NC94ZW4veGNvbV9oY2FsbC5jCVR1ZSBTZXAgMzAgMjM6MTY6MTMgMjAwOCAr
MDgwMApAQCAtMjg0LDYgKzI4NCwxNSBAQAogCXJldHVybiB4ZW5jb21tX2FyY2hfaHlwZXJjYWxs
X3NjaGVkX29wKGNtZCwgZGVzYyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh4ZW5jb21tX2h5cGVy
Y2FsbF9zY2hlZF9vcCk7CisKK2ludCB4ZW5jb21tX2h5cGVyY2FsbF9wbGF0Zm9ybV9vcChzdHJ1
Y3QgeGVuX3BsYXRmb3JtX29wICphcmcpCit7CisJcmV0dXJuIHhlbmNvbW1fYXJjaF9oeXBlcmNh
bGxfcGxhdGZvcm1fb3AoCisJCQl4ZW5jb21tX21hcF9ub19hbGxvYyhhcmcsCisJCQlzaXplb2Yo
c3RydWN0IHhlbl9wbGF0Zm9ybV9vcCkpCisJCQkpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVu
Y29tbV9oeXBlcmNhbGxfcGxhdGZvcm1fb3ApOwogCiBpbnQKIHhlbmNvbW1faHlwZXJjYWxsX211
bHRpY2FsbCh2b2lkICpjYWxsX2xpc3QsIGludCBucl9jYWxscykKZGlmZiAtciBhZTk1M2ZiYjAw
ZGEgYXJjaC9pYTY0L3hlbi94Y29tX3ByaXZjbWQuYwotLS0gYS9hcmNoL2lhNjQveGVuL3hjb21f
cHJpdmNtZC5jCVR1ZSBTZXAgMzAgMTk6MTE6MTAgMjAwOCArMDgwMAorKysgYi9hcmNoL2lhNjQv
eGVuL3hjb21fcHJpdmNtZC5jCVR1ZSBTZXAgMzAgMjM6MTY6MTMgMjAwOCArMDgwMApAQCAtMTkz
LDYgKzE5MywzMyBAQAogCQlzZXRfeGVuX2d1ZXN0X2hhbmRsZShrZXJuX29wLnUucGh5c2luZm8u
Y3B1X3RvX25vZGUsCiAJCSAgICAgICAgICAgICAgICAgICAgICh2b2lkICopZGVzYyk7CiAJCWJy
ZWFrOworCisJY2FzZSBYRU5fU1lTQ1RMX2dldF9wbXN0YXQ6CisJCWlmIChrZXJuX29wLnUuZ2V0
X3Btc3RhdC50eXBlID09IFBNU1RBVF9nZXRfcHhzdGF0KSB7CisJCQlkZXNjID0geGVuY29tbV9t
YXAoCisJCQkJeGVuX2d1ZXN0X2hhbmRsZShrZXJuX29wLnUuZ2V0X3Btc3RhdC51LmdldHB4LnRy
YW5zX3B0KSwKKwkJCQlrZXJuX29wLnUuZ2V0X3Btc3RhdC51LmdldHB4LnRvdGFsICogCisgICAg
ICAgIAkgICAgICAgICAgICAgICAga2Vybl9vcC51LmdldF9wbXN0YXQudS5nZXRweC50b3RhbCAq
CisJCQkJc2l6ZW9mKHVpbnQ2NF90KSk7CisJCQlpZiAoeGVuX2d1ZXN0X2hhbmRsZShrZXJuX29w
LnUuZ2V0X3Btc3RhdC51LmdldHB4LnRyYW5zX3B0KSAhPSBOVUxMCisgICAgICAgICAgICAgICAg
JiYga2Vybl9vcC51LmdldF9wbXN0YXQudS5nZXRweC50b3RhbCA+IDAgJiYgZGVzYyA9PSBOVUxM
KQorCQkJCXJldHVybiAtRU5PTUVNOworCisJCQlzZXRfeGVuX2d1ZXN0X2hhbmRsZShrZXJuX29w
LnUuZ2V0X3Btc3RhdC51LmdldHB4LnRyYW5zX3B0LAorCQkJICAgICAgICAgICAgICAgICAgICAg
KHZvaWQgKilkZXNjKTsKKworCQkJZGVzYzEgPSB4ZW5jb21tX21hcCgKKwkJCQl4ZW5fZ3Vlc3Rf
aGFuZGxlKGtlcm5fb3AudS5nZXRfcG1zdGF0LnUuZ2V0cHgucHQpLAorCQkJCWtlcm5fb3AudS5n
ZXRfcG1zdGF0LnUuZ2V0cHgudG90YWwgKiBzaXplb2YocG1fcHhfdmFsX3QpKTsKKwkJCWlmICh4
ZW5fZ3Vlc3RfaGFuZGxlKGtlcm5fb3AudS5nZXRfcG1zdGF0LnUuZ2V0cHgucHQpICE9IE5VTEwg
JiYKKwkJCSAgICBrZXJuX29wLnUuZ2V0X3Btc3RhdC51LmdldHB4LnRvdGFsID4gMCAmJiBkZXNj
MSA9PSBOVUxMKQorCQkJCXJldHVybiAtRU5PTUVNOworCisJCQlzZXRfeGVuX2d1ZXN0X2hhbmRs
ZShrZXJuX29wLnUuZ2V0X3Btc3RhdC51LmdldHB4LnB0LAorCQkJICAgICAgICAgICAgICAgICAg
ICAgKHZvaWQgKilkZXNjMSk7CisJCX0KKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlwcmludGso
IiVzOiB1bmtub3duIHN5c2N0bCBjbWQgJWRcbiIsIF9fZnVuY19fLCBrZXJuX29wLmNtZCk7CiAJ
CXJldHVybiAtRU5PU1lTOwpkaWZmIC1yIGFlOTUzZmJiMDBkYSBkcml2ZXJzL2FjcGkvS2NvbmZp
ZwotLS0gYS9kcml2ZXJzL2FjcGkvS2NvbmZpZwlUdWUgU2VwIDMwIDE5OjExOjEwIDIwMDggKzA4
MDAKKysrIGIvZHJpdmVycy9hY3BpL0tjb25maWcJVHVlIFNlcCAzMCAyMzoxNjoxMyAyMDA4ICsw
ODAwCkBAIC0zNzAsNyArMzcwLDcgQEAKIAogY29uZmlnIFBST0NFU1NPUl9FWFRFUk5BTF9DT05U
Uk9MCiAJYm9vbAotCWRlcGVuZHMgb24gWDg2ICYmIFhFTgorCWRlcGVuZHMgb24gKFg4NiB8fCBJ
QTY0KSAmJiBYRU4KIAlkZWZhdWx0IHkKIGVuZGlmCSMgQUNQSQogCmRpZmYgLXIgYWU5NTNmYmIw
MGRhIGluY2x1ZGUvYXNtLWlhNjQvaHlwZXJjYWxsLmgKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9o
eXBlcmNhbGwuaAlUdWUgU2VwIDMwIDE5OjExOjEwIDIwMDggKzA4MDAKKysrIGIvaW5jbHVkZS9h
c20taWE2NC9oeXBlcmNhbGwuaAlUdWUgU2VwIDMwIDIzOjE2OjEzIDIwMDggKzA4MDAKQEAgLTQz
Nyw2ICs0NDQsNyBAQAogCiAvKiBVc2UgeGVuY29tbSB0byBkbyBoeXBlcmNhbGxzLiAgKi8KICNk
ZWZpbmUgSFlQRVJWSVNPUl9zY2hlZF9vcCB4ZW5jb21tX2h5cGVyY2FsbF9zY2hlZF9vcAorI2Rl
ZmluZSBIWVBFUlZJU09SX3BsYXRmb3JtX29wIHhlbmNvbW1faHlwZXJjYWxsX3BsYXRmb3JtX29w
CiAjZGVmaW5lIEhZUEVSVklTT1JfZXZlbnRfY2hhbm5lbF9vcCB4ZW5jb21tX2h5cGVyY2FsbF9l
dmVudF9jaGFubmVsX29wCiAjZGVmaW5lIEhZUEVSVklTT1JfY2FsbGJhY2tfb3AgeGVuY29tbV9o
eXBlcmNhbGxfY2FsbGJhY2tfb3AKICNkZWZpbmUgSFlQRVJWSVNPUl9tdWx0aWNhbGwgeGVuY29t
bV9oeXBlcmNhbGxfbXVsdGljYWxsCmRpZmYgLXIgYWU5NTNmYmIwMGRhIGluY2x1ZGUvYXNtLWlh
NjQveGVuL3hjb21faGNhbGwuaAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3hlbi94Y29tX2hjYWxs
LmgJVHVlIFNlcCAzMCAxOToxMToxMCAyMDA4ICswODAwCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQv
eGVuL3hjb21faGNhbGwuaAlUdWUgU2VwIDMwIDIzOjE2OjEzIDIwMDggKzA4MDAKQEAgLTM2LDYg
KzM2LDggQEAKIAogZXh0ZXJuIGludCB4ZW5jb21tX2h5cGVyY2FsbF9zY2hlZF9vcChpbnQgY21k
LCB2b2lkICphcmcpOwogCitleHRlcm4gaW50IHhlbmNvbW1faHlwZXJjYWxsX3BsYXRmb3JtX29w
KHN0cnVjdCB4ZW5fcGxhdGZvcm1fb3AgKmFyZyk7CisKIGV4dGVybiBpbnQgeGVuY29tbV9oeXBl
cmNhbGxfbXVsdGljYWxsKHZvaWQgKmNhbGxfbGlzdCwgaW50IG5yX2NhbGxzKTsKIAogZXh0ZXJu
IGludCB4ZW5jb21tX2h5cGVyY2FsbF9jYWxsYmFja19vcChpbnQgY21kLCB2b2lkICphcmcpOwo=

--_002_49582C73AC36CC4C8C6C42390304E81C08A6563B51pdsmsx502ccrc_
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

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


From xen-ia64-devel-bounces@lists.xensource.com Thu Oct 02 01:18:13 2008
Return-path: <xen-ia64-devel-bounces@lists.xensource.com>
Envelope-to: www-data@lists.xensource.com
Delivery-date: Thu, 02 Oct 2008 01:18:13 -0700
Received: from localhost ([127.0.0.1] helo=lists.colo.xensource.com)
	by lists.xensource.com with esmtp (Exim 4.43)
	id 1KlJO1-0005pJ-Ev; Thu, 02 Oct 2008 01:18:13 -0700
Received: from spam.xensource.com ([70.42.241.90])
	by lists.xensource.com with esmtp (Exim 4.43) id 1KlJNy-0005og-HO
	for xen-ia64-devel@lists.xensource.com; Thu, 02 Oct 2008 01:18:10 -0700
X-ASG-Debug-ID: 1222935486-664000000000-zRdJ7k
X-Barracuda-URL: http://spam.xensource.com:8000/cgi-bin/mark.cgi
Received: from mail.valinux.co.jp (localhost [127.0.0.1])
	by spam.xensource.com (Spam Firewall) with ESMTP
	id DDB75B4186; Thu,  2 Oct 2008 01:18:07 -0700 (PDT)
Received: from mail.valinux.co.jp (fms-01.valinux.co.jp [210.128.90.1]) by
	spam.xensource.com with ESMTP id 1e2S9yoCXVrxTUzq;
	Thu, 02 Oct 2008 01:18:07 -0700 (PDT)
Received: from ls (vagw.valinux.co.jp [210.128.90.14])
	by mail.valinux.co.jp (Postfix) with SMTP id BEA572DC895;
	Thu,  2 Oct 2008 17:18:05 +0900 (JST)
Received: (nullmailer pid 12022 invoked by uid 20675);
	Thu, 02 Oct 2008 08:18:05 -0000
Date: Thu, 2 Oct 2008 17:18:05 +0900
From: Isaku Yamahata <yamahata@valinux.co.jp>
To: "Yu, Ke" <ke.yu@intel.com>
X-ASG-Orig-Subj: Re: [Xen-ia64-devel] [PATCH 0/3] IA64: add cpufreq support
Subject: Re: [Xen-ia64-devel] [PATCH 0/3] IA64: add cpufreq support
Message-ID: <20081002081805.GE10658%yamahata@valinux.co.jp>
References: <49582C73AC36CC4C8C6C42390304E81C0887A9D794@pdsmsx502.ccr.corp.intel.com>
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="4bRzO86E/ozDv8r1"
Content-Disposition: inline
In-Reply-To: <49582C73AC36CC4C8C6C42390304E81C0887A9D794@pdsmsx502.ccr.corp.intel.com>
User-Agent: Mutt/1.5.6i
X-Barracuda-Connect: fms-01.valinux.co.jp[210.128.90.1]
X-Barracuda-Start-Time: 1222935487
X-Barracuda-Virus-Scanned: by Barracuda Spam Firewall at xensource.com
X-Barracuda-Spam-Score: 0.00
X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=3.5
	QUARANTINE_LEVEL=6.0 KILL_LEVEL=1000.0 tests=
X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.7048
	Rule breakdown below
	pts rule name              description
	---- ----------------------
	--------------------------------------------------
Cc: "xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>,
	"xen-ia64-devel@lists.xensource.com" <xen-ia64-devel@lists.xensource.com>
X-BeenThere: xen-ia64-devel@lists.xensource.com
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: Discussion of the ia64 port of Xen
	<xen-ia64-devel.lists.xensource.com>
List-Unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-ia64-devel>, 
	<mailto:xen-ia64-devel-request@lists.xensource.com?subject=unsubscribe>
List-Post: <mailto:xen-ia64-devel@lists.xensource.com>
List-Help: <mailto:xen-ia64-devel-request@lists.xensource.com?subject=help>
List-Subscribe: <http://lists.xensource.com/mailman/listinfo/xen-ia64-devel>, 
	<mailto:xen-ia64-devel-request@lists.xensource.com?subject=subscribe>
Sender: xen-ia64-devel-bounces@lists.xensource.com
Errors-To: xen-ia64-devel-bounces@lists.xensource.com


--4bRzO86E/ozDv8r1
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Hi, Yu.
Thnaks for updating the patches while you're off.

I applied your patch with some style fixes and tried xenpm.
(I attached the fixed patch. Please confirm I didn't breake them.)
Then I got the followings. (NOTE: I added cpufreq=xen to xen boot option)
Doesn't xenpm work on ia64? Or is there another way to test them?

# xenpm 
Xen cpuidle is not enabled!
failed to get max P-state

thanks,

On Sat, Sep 27, 2008 at 10:11:29AM +0800, Yu, Ke wrote:
> This patchset add cpufreq support for ia64 platform. The logic is borrowed from linux kernel and ported to xen. The common cpufreq infrastructure is already in xen and works in x86 side, so this patchset reuse the common infrastructure and add ia64 specific driver and cpufreq notify hypercall.
> 
> Hypervisor side:
> 1. px-xen-ipf-driver: add cpufreq ia64 driver
> 2 .px-xen-ipf-hypercall: implement ia64 cpufreq notify hypercall
> 
> Dom0 side:
> 1. px-dom0-add-ia64-hypercall.patch: add ia64 cpufreq notify hypercall
> 
> Signed-off-by:  Liu Jinsong <jinsong.liu@intel.com>
>                 Yu Ke <ke.yu@intel.com>
> 
> BTW, this patchset depends on the xen-unstable tree (http://xenbits.xensource.com/staging/xen-unstable.hg) cset 18550, 18551, 18552, and linux xen tree (http://xenbits.xensource.com/linux-2.6.18-xen.hg) cset 681, which restructure the common cpufreq code for ia64. so ia64 tree need to sync before applying this patchset.
> 
> 
> _______________________________________________
> Xen-ia64-devel mailing list
> Xen-ia64-devel@lists.xensource.com
> http://lists.xensource.com/xen-ia64-devel
> 

-- 
yamahata

--4bRzO86E/ozDv8r1
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="px-xen-ipf-driver.patch"

[IA64] Add cpufreq ia64 driver

For IA64 Platform, add cpufreq driver for ia64 cpu, implementing
cpufreq_driver->init()/ exit()/ verify()/ target()/ get()

Signed-off-by: Yu, Ke <ke.yu@intel.com>
Signed-off-by: Liu, Jinsong <jinsong.liu@intel.com>

diff -r e82909f42732 xen/arch/ia64/xen/cpufreq/cpufreq.c
--- a/xen/arch/ia64/xen/cpufreq/cpufreq.c	Thu Oct 02 15:32:54 2008 +0900
+++ b/xen/arch/ia64/xen/cpufreq/cpufreq.c	Thu Oct 02 16:52:51 2008 +0900
@@ -1,8 +1,311 @@
+/*
+ * arch/ia64/kernel/cpufreq/acpi-cpufreq.c
+ * This file provides the ACPI based P-state support. This
+ * module works with generic cpufreq infrastructure. Most of
+ * the code is based on i386 version
+ * (arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c)
+ *
+ * Copyright (C) 2005 Intel Corp
+ *      Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
+ *
+ * Sep 2008 - Liu Jinsong <jinsong.liu@intel.com>
+ *      porting IPF acpi-cpufreq.c from Linux 2.6.23 to Xen hypervisor
+ */
 
+#include <xen/types.h>
 #include <xen/errno.h>
+#include <xen/delay.h>
+#include <xen/cpumask.h>
+#include <xen/sched.h>
+#include <xen/timer.h>
+#include <xen/xmalloc.h>
+#include <asm/bug.h>
+#include <asm/io.h>
+#include <asm/config.h>
+#include <asm/processor.h>
+#include <asm/percpu.h>
+#include <asm/pal.h>
 #include <acpi/acpi.h>
-#include <acpi/cpufreq/processor_perf.h>
-#include <public/platform.h>
+#include <acpi/cpufreq/cpufreq.h>
+
+static struct acpi_cpufreq_data *drv_data[NR_CPUS];
+
+static struct cpufreq_driver acpi_cpufreq_driver;
+
+static int
+processor_get_pstate (u32 *value)
+{
+	u64 pstate_index = 0;
+	s64 retval;
+
+	retval = ia64_pal_get_pstate(&pstate_index,
+			PAL_GET_PSTATE_TYPE_INSTANT);
+	*value = (u32) pstate_index;
+
+	if (retval)
+		printk("Failed to get current freq\n");
+
+	return (int)retval;
+}
+
+static unsigned int
+extract_clock (unsigned value)
+{
+	unsigned long i;
+	unsigned int cpu;
+	struct processor_performance *perf;
+
+	cpu = smp_processor_id();
+	perf = &processor_pminfo[cpu]->perf;
+
+	for (i = 0; i < perf->state_count; i++) {
+		if (value == perf->states[i].status)
+			return perf->states[i].core_frequency;
+	}
+	return perf->states[i-1].core_frequency;
+}
+
+static void
+processor_get_freq (void *data)
+{
+	unsigned int *freq = data;
+	int ret = 0;
+	u32 value = 0;
+	unsigned int clock_freq;
+
+	ret = processor_get_pstate(&value);
+	if (ret) {
+		*freq = 0;
+		return;
+	}
+
+	clock_freq = extract_clock(value);
+	*freq = (clock_freq*1000);
+	return;
+}
+
+static unsigned int
+acpi_cpufreq_get (unsigned int cpu)
+{
+	unsigned int freq;
+
+	if (!cpu_online(cpu))
+		return 0;
+
+	if (cpu == smp_processor_id())
+		processor_get_freq((void*)&freq);
+	else
+		smp_call_function_single(cpu, processor_get_freq,
+					 (void *)&freq, 0, 1);
+
+	return freq;
+}
+
+static void
+processor_set_pstate (void *data)
+{
+	u32 *value = data;
+	s64 retval;
+
+	retval = ia64_pal_set_pstate((u64)*value);
+
+	if (retval)
+		*value = 1;
+	else
+		*value = 0;
+}
+
+static int
+processor_set_freq (struct acpi_cpufreq_data *data,
+		struct cpufreq_policy *policy, int state)
+{
+	u32 value = 0;
+	unsigned int cpu = policy->cpu;
+
+	if (!cpu_online(cpu))
+		return -ENODEV;
+
+	if (state == data->acpi_data->state) {
+		if (unlikely(policy->resume)) {
+			printk(KERN_INFO
+			       "Called after resume, resetting to P%d\n",
+			       state);
+			policy->resume = 0;
+		} else {
+			printk(KERN_DEBUG"Already at target state (P%d)\n",
+			       state);
+			return 0;
+		}
+	}
+
+	value = (u32) data->acpi_data->states[state].control;
+
+	if (cpu == smp_processor_id())
+		processor_set_pstate((void *)&value);
+	else
+		smp_call_function_single(cpu, processor_set_pstate,
+				(void *)&value, 0, 1);
+
+	if (value) {
+		printk(KERN_WARNING "Transition failed\n");
+		return -ENODEV;
+	}
+
+	cpufreq_statistic_update(cpu, data->acpi_data->state, state);
+
+	data->acpi_data->state = state;
+
+	return 0;
+}
+
+static int
+acpi_cpufreq_target (struct cpufreq_policy *policy,
+		unsigned int target_freq, unsigned int relation)
+{
+	struct acpi_cpufreq_data *data = drv_data[policy->cpu];
+	unsigned int next_state = 0;
+	unsigned int result = 0;
+
+	result = cpufreq_frequency_table_target(policy,
+			data->freq_table, target_freq, relation, &next_state);
+	if (result)
+		return (result);
+
+	result = processor_set_freq(data, policy, next_state);
+
+	return (result);
+}
+
+static int
+acpi_cpufreq_verify (struct cpufreq_policy *policy)
+{
+	struct acpi_cpufreq_data *data = drv_data[policy->cpu];
+	struct processor_performance *perf =
+		&processor_pminfo[policy->cpu]->perf;
+
+	if (!policy || !data)
+		return -EINVAL;
+
+	cpufreq_verify_within_limits(policy, 0,
+			perf->states[perf->platform_limit].core_frequency * 1000);
+
+	return cpufreq_frequency_table_verify(policy, data->freq_table);
+}
+
+static int
+acpi_cpufreq_cpu_init (struct cpufreq_policy *policy)
+{
+	unsigned int i;
+	unsigned int cpu = policy->cpu;
+	unsigned int result = 0;
+	struct acpi_cpufreq_data *data;
+
+	data = xmalloc(struct acpi_cpufreq_data);
+	if (!data)
+		return -ENOMEM;
+	memset(data, 0, sizeof(struct acpi_cpufreq_data));
+
+	drv_data[cpu] = data;
+
+	data->acpi_data = &processor_pminfo[cpu]->perf;
+
+	/* capability check */
+	if (data->acpi_data->state_count <= 1) {
+		printk(KERN_WARNING "P-States\n");
+		result = -ENODEV;
+		goto err_unreg;
+	}
+
+	if ((data->acpi_data->control_register.space_id !=
+				ACPI_ADR_SPACE_FIXED_HARDWARE) ||
+			(data->acpi_data->status_register.space_id !=
+			 ACPI_ADR_SPACE_FIXED_HARDWARE)) {
+		result = -ENODEV;
+		goto err_unreg;
+	}
+
+	data->freq_table = xmalloc_array(struct cpufreq_frequency_table,
+			(data->acpi_data->state_count + 1));
+	if (!data->freq_table) {
+		result = -ENOMEM;
+		goto err_unreg;
+	}
+
+	/* detect transition latency */
+	policy->cpuinfo.transition_latency = 0;
+	for (i=0; i<data->acpi_data->state_count; i++) {
+		if ((data->acpi_data->states[i].transition_latency * 1000) >
+				policy->cpuinfo.transition_latency) {
+			policy->cpuinfo.transition_latency =
+				data->acpi_data->states[i].transition_latency * 1000;
+		}
+	}
+	policy->governor = CPUFREQ_DEFAULT_GOVERNOR;
+
+	policy->cur = acpi_cpufreq_get(policy->cpu);
+	printk(KERN_INFO "Current freq of CPU %u is %u\n", cpu, policy->cur);
+
+	/* table init */
+	for (i = 0; i <= data->acpi_data->state_count; i++) {
+		data->freq_table[i].index = i;
+		if (i < data->acpi_data->state_count) {
+			data->freq_table[i].frequency =
+				data->acpi_data->states[i].core_frequency * 1000;
+		} else {
+			data->freq_table[i].frequency = CPUFREQ_TABLE_END;
+		}
+	}
+
+	result = cpufreq_frequency_table_cpuinfo(policy, data->freq_table);
+	if (result)
+		goto err_freqfree;
+
+	data->acpi_data->state = 0;
+	policy->resume = 1;
+
+	return result;
+
+err_freqfree:
+	xfree(data->freq_table);
+err_unreg:
+	xfree(data);
+	drv_data[cpu] = NULL;
+
+	return result;
+}
+
+static int
+acpi_cpufreq_cpu_exit (struct cpufreq_policy *policy)
+{
+	struct acpi_cpufreq_data *data = drv_data[policy->cpu];
+
+	if (data) {
+		drv_data[policy->cpu] = NULL;
+		xfree(data->freq_table);
+		xfree(data);
+	}
+
+	return 0;
+}
+
+static struct cpufreq_driver acpi_cpufreq_driver = {
+	.verify     = acpi_cpufreq_verify,
+	.target     = acpi_cpufreq_target,
+	.get        = acpi_cpufreq_get,
+	.init       = acpi_cpufreq_cpu_init,
+	.exit       = acpi_cpufreq_cpu_exit,
+};
+
+static int __init cpufreq_driver_init(void)
+{
+	int ret = 0;
+
+	if (cpufreq_controller == FREQCTL_xen)
+		ret = cpufreq_register_driver(&acpi_cpufreq_driver);
+
+	return ret;
+}
+__initcall(cpufreq_driver_init);
 
 int get_cpu_id(u8 acpi_id)
 {

--4bRzO86E/ozDv8r1
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="px-xen-ipf-hypercall.patch"

[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@intel.com>
Signed-off-by: Liu Jinsong <jinsong.liu@intel.com>

diff -r 9db62718c197 xen/arch/ia64/linux-xen/acpi.c
--- a/xen/arch/ia64/linux-xen/acpi.c	Thu Oct 02 16:28:57 2008 +0900
+++ b/xen/arch/ia64/linux-xen/acpi.c	Thu Oct 02 16:29:23 2008 +0900
@@ -219,6 +219,32 @@
 	return 0;
 }
 
+#ifdef XEN
+
+#define MAX_LOCAL_SAPIC 255
+static u16 ia64_acpiid_to_sapicid[ MAX_LOCAL_SAPIC ] =
+		{[0 ... MAX_LOCAL_SAPIC - 1] = 0xffff };
+
+/* acpi id to cpu id */
+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;
+}
+#endif
+
 static int __init
 acpi_parse_lsapic(struct acpi_subtable_header * header, const unsigned long end)
 {
@@ -232,6 +258,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 9db62718c197 xen/arch/ia64/linux-xen/entry.S
--- a/xen/arch/ia64/linux-xen/entry.S	Thu Oct 02 16:28:57 2008 +0900
+++ b/xen/arch/ia64/linux-xen/entry.S	Thu Oct 02 16:29:23 2008 +0900
@@ -1524,7 +1524,7 @@
 	data8 do_ni_hypercall		/* do_set_callbacks */
 	data8 do_ni_hypercall		/* do_fpu_taskswitch *//*  5 */
 	data8 do_sched_op_compat
-	data8 do_ni_hypercall
+	data8 do_platform_op
 	data8 do_ni_hypercall		/* do_set_debugreg */
 	data8 do_ni_hypercall		/* do_get_debugreg */
 	data8 do_ni_hypercall		/* do_update_descriptor * 10 */
diff -r 9db62718c197 xen/arch/ia64/xen/Makefile
--- a/xen/arch/ia64/xen/Makefile	Thu Oct 02 16:28:57 2008 +0900
+++ b/xen/arch/ia64/xen/Makefile	Thu Oct 02 16:29:23 2008 +0900
@@ -15,6 +15,7 @@
 obj-y += fw_emul.o
 obj-y += hpsimserial.o
 obj-y += hypercall.o
+obj-y += platform_hypercall.o
 obj-y += hyperprivop.o
 obj-y += idle0_task.o
 obj-y += irq.o
diff -r 9db62718c197 xen/arch/ia64/xen/cpufreq/cpufreq.c
--- a/xen/arch/ia64/xen/cpufreq/cpufreq.c	Thu Oct 02 16:28:57 2008 +0900
+++ b/xen/arch/ia64/xen/cpufreq/cpufreq.c	Thu Oct 02 16:29:23 2008 +0900
@@ -305,20 +305,10 @@
 
 	return ret;
 }
+
 __initcall(cpufreq_driver_init);
-
-int get_cpu_id(u8 acpi_id)
-{
-    return -1;
-}
-
-int xenpf_copy_px_states(struct processor_performance *pxpt,
-                         struct xen_processor_performance *dom0_px_info)
-{
-    return -ENOSYS;
-}
 
 int cpufreq_cpu_init(unsigned int cpuid)
 {
-    return -ENOSYS;
+	return cpufreq_add_cpu(cpuid);
 }
diff -r 9db62718c197 xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c	Thu Oct 02 16:28:57 2008 +0900
+++ b/xen/arch/ia64/xen/domain.c	Thu Oct 02 16:29:23 2008 +0900
@@ -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);
 
diff -r 9db62718c197 xen/arch/ia64/xen/platform_hypercall.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/arch/ia64/xen/platform_hypercall.c	Thu Oct 02 16:29:23 2008 +0900
@@ -0,0 +1,87 @@
+/******************************************************************************
+ * platform_hypercall.c
+ * 
+ * Hardware platform operations. Intended for use by domain-0 kernel.
+ * 
+ * Copyright (c) 2002-2006, K Fraser
+ */
+
+#include <xen/config.h>
+#include <xen/types.h>
+#include <xen/lib.h>
+#include <xen/sched.h>
+#include <xen/guest_access.h>
+#include <xen/acpi.h>
+#include <public/platform.h>
+#include <acpi/cpufreq/processor_perf.h>
+
+DEFINE_SPINLOCK(xenpf_lock);
+
+extern int set_px_pminfo(uint32_t cpu, struct xen_processor_performance *perf);
+extern long set_cx_pminfo(uint32_t cpu, struct xen_processor_power *power);
+
+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 do_platform_op(XEN_GUEST_HANDLE(xen_platform_op_t) u_xenpf_op)
+{
+    long ret = 0;
+    struct xen_platform_op curop, *op = &curop;
+
+    if ( !IS_PRIV(current->domain) )
+        return -EPERM;
+
+    if ( copy_from_guest(op, u_xenpf_op, 1) )
+        return -EFAULT;
+
+    if ( op->interface_version != XENPF_INTERFACE_VERSION )
+        return -EACCES;
+
+    switch ( op->cmd )
+    {
+    case XENPF_set_processor_pminfo:
+        spin_lock(&xenpf_lock);
+        switch ( op->u.set_pminfo.type )
+        {
+        case XEN_PM_PX:
+            ret = set_px_pminfo(op->u.set_pminfo.id,
+                    &op->u.set_pminfo.perf);
+            break;
+
+        case XEN_PM_CX:
+            /* Place holder for Cx */
+            ret = -ENOSYS;
+            break;
+
+        default:
+            ret = -EINVAL;
+            break;
+        }
+        spin_unlock(&xenpf_lock);
+        break;
+
+    default:
+        printk("Unknown platform hypercall op 0x%x\n", op->cmd);
+        ret = -ENOSYS;
+        break;
+    }
+
+    return ret;
+}
+
+/*
+ * Local variables:
+ * mode: C
+ * c-set-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
+

--4bRzO86E/ozDv8r1
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="dom0_add_ia64_processor_extcntl.patch"

IA64: add ia64 cpufreq notify hypercall

This patch adds ia64 notify hypercall to pass cpufreq ACPI information to
hypervisor, and get cpufreq statistic data from hypervisor.

Signed-off-by: Yu Ke <ke.yu@intel.com>
Signed-off-by: Liu Jinsong <jinsong.liu@intel.com>

diff -r fc1b82ca1e6a arch/ia64/kernel/Makefile
--- a/arch/ia64/kernel/Makefile	Mon Sep 29 10:07:48 2008 +0100
+++ b/arch/ia64/kernel/Makefile	Thu Oct 02 16:43:42 2008 +0900
@@ -16,6 +16,9 @@
 
 ifneq ($(CONFIG_ACPI_PROCESSOR),)
 obj-y				+= acpi-processor.o
+ifneq ($(CONFIG_PROCESSOR_EXTERNAL_CONTROL),)
+obj-$(CONFIG_XEN)		+= processor_extcntl_xen.o
+endif
 endif
 
 obj-$(CONFIG_IA64_PALINFO)	+= palinfo.o
diff -r fc1b82ca1e6a arch/ia64/kernel/processor_extcntl_xen.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/arch/ia64/kernel/processor_extcntl_xen.c	Thu Oct 02 16:43:42 2008 +0900
@@ -0,0 +1,164 @@
+/*
+ * processor_extcntl_xen.c - interface to notify Xen
+ *
+ *  Copyright (C) 2008, Intel corporation
+ *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or (at
+ *  your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with this program; if not, write to the Free Software Foundation, Inc.,
+ *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ *
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/types.h>
+#include <linux/acpi.h>
+#include <linux/pm.h>
+#include <linux/cpu.h>
+#include <linux/cpufreq.h>
+#include <acpi/processor.h>
+#include <asm/hypercall.h>
+#include <asm/xen/xencomm.h>
+#include <xen/interface/platform.h>
+
+static int xen_cx_notifier(struct acpi_processor *pr, int action)
+{
+	printk(KERN_WARNING "Cx is not supported yet\n");
+
+	return -EINVAL;
+}
+
+static int xen_px_notifier(struct acpi_processor *pr, int action)
+{
+	int ret = -EINVAL;
+	xen_platform_op_t op = {
+		.cmd			= XENPF_set_processor_pminfo,
+		.interface_version	= XENPF_INTERFACE_VERSION,
+		.u.set_pminfo.id	= pr->acpi_id,
+		.u.set_pminfo.type	= XEN_PM_PX,
+	};
+	struct xen_processor_performance *perf;
+	struct xen_processor_px *states = NULL;
+	struct acpi_processor_performance *px;
+	struct acpi_psd_package *pdomain;
+	struct xencomm_handle *states_desc;
+
+	if (!pr || !pr->performance)
+		return -EINVAL;
+
+	perf = &op.u.set_pminfo.perf;
+	px = pr->performance;
+
+	switch(action) {
+		case PROCESSOR_PM_CHANGE:
+			/* ppc dynamic handle */
+			perf->flags = XEN_PX_PPC;
+			perf->platform_limit = pr->performance_platform_limit;
+
+			ret = HYPERVISOR_platform_op(&op);
+			break;
+
+		case PROCESSOR_PM_INIT:
+			/* px normal init */
+			perf->flags = XEN_PX_PPC |
+				XEN_PX_PCT |
+				XEN_PX_PSS |
+				XEN_PX_PSD;
+
+			/* ppc */
+			perf->platform_limit = pr->performance_platform_limit;
+
+			/* pct */
+			xen_convert_pct_reg(&perf->control_register,
+					    &px->control_register);
+			xen_convert_pct_reg(&perf->status_register,
+					    &px->status_register);
+
+			/* pss */
+			perf->state_count = px->state_count;
+			states = kzalloc(
+				px->state_count * sizeof(xen_processor_px_t),
+				GFP_KERNEL);
+			if (!states){
+				ret = -ENOMEM;
+				break;
+			}
+			xen_convert_pss_states(states, px->states,
+					       px->state_count);
+			set_xen_guest_handle(perf->states, states);
+			states_desc = xencomm_map_no_alloc(
+					xen_guest_handle(perf->states),
+					sizeof(*xen_guest_handle(perf->states)));
+			set_xen_guest_handle(perf->states,
+					     (xen_processor_px_t*)states_desc);
+
+			/* psd */
+			pdomain = &px->domain_info;
+			xen_convert_psd_pack(&perf->domain_info, pdomain);
+			if (pdomain->coord_type == DOMAIN_COORD_TYPE_SW_ALL)
+				perf->shared_type = CPUFREQ_SHARED_TYPE_ALL;
+			else if (pdomain->coord_type ==
+				 DOMAIN_COORD_TYPE_SW_ANY)
+				perf->shared_type = CPUFREQ_SHARED_TYPE_ANY;
+			else if (pdomain->coord_type ==
+				 DOMAIN_COORD_TYPE_HW_ALL)
+				perf->shared_type = CPUFREQ_SHARED_TYPE_HW;
+			else {
+				ret = -ENODEV;
+				kfree(states);
+				break;
+			}
+
+			ret = HYPERVISOR_platform_op(&op);
+			kfree(states);
+			break;
+
+		default:
+			ret = -EINVAL;
+	}
+
+	return ret;
+}
+
+static int xen_tx_notifier(struct acpi_processor *pr, int action)
+{
+	return -EINVAL;
+}
+static int xen_hotplug_notifier(struct acpi_processor *pr, int event)
+{
+	return -EINVAL;
+}
+
+static struct processor_extcntl_ops xen_extcntl_ops = {
+	.hotplug		= xen_hotplug_notifier,
+};
+
+void arch_acpi_processor_init_extcntl(const struct processor_extcntl_ops **ops)
+{
+	unsigned int pmbits = (xen_start_info->flags & SIF_PM_MASK) >> 8;
+
+	if (!pmbits)
+		return;
+
+	if (pmbits & XEN_PROCESSOR_PM_CX)
+		xen_extcntl_ops.pm_ops[PM_TYPE_IDLE] = xen_cx_notifier;
+	if (pmbits & XEN_PROCESSOR_PM_PX)
+		xen_extcntl_ops.pm_ops[PM_TYPE_PERF] = xen_px_notifier;
+	if (pmbits & XEN_PROCESSOR_PM_TX)
+		xen_extcntl_ops.pm_ops[PM_TYPE_THR] = xen_tx_notifier;
+
+	*ops = &xen_extcntl_ops;
+}
+EXPORT_SYMBOL(arch_acpi_processor_init_extcntl);
diff -r fc1b82ca1e6a arch/ia64/xen/xcom_hcall.c
--- a/arch/ia64/xen/xcom_hcall.c	Mon Sep 29 10:07:48 2008 +0100
+++ b/arch/ia64/xen/xcom_hcall.c	Thu Oct 02 16:43:42 2008 +0900
@@ -284,6 +284,15 @@
 	return xencomm_arch_hypercall_sched_op(cmd, desc);
 }
 EXPORT_SYMBOL_GPL(xencomm_hypercall_sched_op);
+
+int xencomm_hypercall_platform_op(struct xen_platform_op *arg)
+{
+	return xencomm_arch_hypercall_platform_op(
+			xencomm_map_no_alloc(arg,
+			sizeof(struct xen_platform_op))
+			);
+}
+EXPORT_SYMBOL_GPL(xencomm_hypercall_platform_op);
 
 int
 xencomm_hypercall_multicall(void *call_list, int nr_calls)
diff -r fc1b82ca1e6a arch/ia64/xen/xcom_privcmd.c
--- a/arch/ia64/xen/xcom_privcmd.c	Mon Sep 29 10:07:48 2008 +0100
+++ b/arch/ia64/xen/xcom_privcmd.c	Thu Oct 02 16:43:42 2008 +0900
@@ -193,6 +193,31 @@
 		set_xen_guest_handle(kern_op.u.physinfo.cpu_to_node,
 		                     (void *)desc);
 		break;
+
+	case XEN_SYSCTL_get_pmstat:
+		if (kern_op.u.get_pmstat.type == PMSTAT_get_pxstat) {
+			struct pm_px_stat *getpx =
+				&kern_op.u.get_pmstat.u.getpx;
+			desc = xencomm_map(
+				xen_guest_handle(getpx->trans_pt),
+				getpx->total * getpx->total *
+				sizeof(uint64_t));
+			if (xen_guest_handle(getpx->trans_pt) != NULL &&
+			    getpx->total > 0 && desc == NULL)
+				return -ENOMEM;
+
+			set_xen_guest_handle(getpx->trans_pt, (void *)desc);
+
+			desc1 = xencomm_map(xen_guest_handle(getpx->pt),
+				getpx->total * sizeof(pm_px_val_t));
+			if (xen_guest_handle(getpx->pt) != NULL &&
+			    getpx->total > 0 && desc1 == NULL)
+				return -ENOMEM;
+
+			set_xen_guest_handle(getpx->pt, (void *)desc1);
+		}
+		break;
+
 	default:
 		printk("%s: unknown sysctl cmd %d\n", __func__, kern_op.cmd);
 		return -ENOSYS;
diff -r fc1b82ca1e6a drivers/acpi/Kconfig
--- a/drivers/acpi/Kconfig	Mon Sep 29 10:07:48 2008 +0100
+++ b/drivers/acpi/Kconfig	Thu Oct 02 16:43:42 2008 +0900
@@ -370,7 +370,7 @@
 
 config PROCESSOR_EXTERNAL_CONTROL
 	bool
-	depends on X86 && XEN
+	depends on (X86 || IA64) && XEN
 	default y
 endif	# ACPI
 
diff -r fc1b82ca1e6a include/asm-ia64/hypercall.h
--- a/include/asm-ia64/hypercall.h	Mon Sep 29 10:07:48 2008 +0100
+++ b/include/asm-ia64/hypercall.h	Thu Oct 02 16:43:42 2008 +0900
@@ -437,6 +437,7 @@
 
 /* Use xencomm to do hypercalls.  */
 #define HYPERVISOR_sched_op xencomm_hypercall_sched_op
+#define HYPERVISOR_platform_op xencomm_hypercall_platform_op
 #define HYPERVISOR_event_channel_op xencomm_hypercall_event_channel_op
 #define HYPERVISOR_callback_op xencomm_hypercall_callback_op
 #define HYPERVISOR_multicall xencomm_hypercall_multicall
diff -r fc1b82ca1e6a include/asm-ia64/xen/xcom_hcall.h
--- a/include/asm-ia64/xen/xcom_hcall.h	Mon Sep 29 10:07:48 2008 +0100
+++ b/include/asm-ia64/xen/xcom_hcall.h	Thu Oct 02 16:43:42 2008 +0900
@@ -36,6 +36,8 @@
 
 extern int xencomm_hypercall_sched_op(int cmd, void *arg);
 
+extern int xencomm_hypercall_platform_op(struct xen_platform_op *arg);
+
 extern int xencomm_hypercall_multicall(void *call_list, int nr_calls);
 
 extern int xencomm_hypercall_callback_op(int cmd, void *arg);

--4bRzO86E/ozDv8r1
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@lists.xensource.com
http://lists.xensource.com/xen-ia64-devel
--4bRzO86E/ozDv8r1--


From xen-ia64-devel-bounces@lists.xensource.com Thu Oct 02 02:03:47 2008
Return-path: <xen-ia64-devel-bounces@lists.xensource.com>
Envelope-to: www-data@lists.xensource.com
Delivery-date: Thu, 02 Oct 2008 02:03:47 -0700
Received: from localhost ([127.0.0.1] helo=lists.colo.xensource.com)
	by lists.xensource.com with esmtp (Exim 4.43)
	id 1KlK67-0002JA-DH; Thu, 02 Oct 2008 02:03:47 -0700
Received: from spam.xensource.com ([70.42.241.90])
	by lists.xensource.com with esmtp (Exim 4.43) id 1KlK63-0002I4-UP
	for xen-ia64-devel@lists.xensource.com; Thu, 02 Oct 2008 02:03:43 -0700
X-ASG-Debug-ID: 1222938222-035300000000-zRdJ7k
X-Barracuda-URL: http://spam.xensource.com:8000/cgi-bin/mark.cgi
Received: from mail.valinux.co.jp (localhost [127.0.0.1])
	by spam.xensource.com (Spam Firewall) with ESMTP id CCE17B425E
	for <xen-ia64-devel@lists.xensource.com>;
	Thu,  2 Oct 2008 02:03:42 -0700 (PDT)
Received: from mail.valinux.co.jp (fms-01.valinux.co.jp [210.128.90.1]) by
	spam.xensource.com with ESMTP id iZfGvF5ov16cV77L for
	<xen-ia64-devel@lists.xensource.com>;
	Thu, 02 Oct 2008 02:03:42 -0700 (PDT)
Received: from nm.local.valinux.co.jp (vagw.valinux.co.jp [210.128.90.14])
	by mail.valinux.co.jp (Postfix) with ESMTP id 418F32DC886;
	Thu,  2 Oct 2008 18:03:41 +0900 (JST)
Received: from yamahata by nm.local.valinux.co.jp with local (Exim 4.69)
	(envelope-from <yamahata@valinux.co.jp>)
	id 1KlKAG-0001Yr-6N; Thu, 02 Oct 2008 18:08:04 +0900
Date: Thu, 2 Oct 2008 18:08:04 +0900
From: Isaku Yamahata <yamahata@valinux.co.jp>
To: xen-ia64-devel@lists.xensource.com
X-ASG-Orig-Subj: [PATCH 0/7] memory map info take 2
Message-ID: <20081002090804.GA5999@nm.localhost.valinux.co.jp>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.5.18 (2008-05-17)
X-Barracuda-Connect: fms-01.valinux.co.jp[210.128.90.1]
X-Barracuda-Start-Time: 1222938222
X-Barracuda-Virus-Scanned: by Barracuda Spam Firewall at xensource.com
X-Barracuda-Spam-Score: 0.50
X-Barracuda-Spam-Status: No, SCORE=0.50 using per-user scores of TAG_LEVEL=3.5
	QUARANTINE_LEVEL=6.0 KILL_LEVEL=1000.0 tests=BSF_RULE7568M
X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.7050
	Rule breakdown below
	pts rule name              description
	---- ----------------------
	--------------------------------------------------
	0.50 BSF_RULE7568M          Custom Rule 7568M
Cc: Isaku Yamahata <yamahata@valinux.co.jp>
Subject: [Xen-ia64-devel] [PATCH 0/7] memory map info take 2
X-BeenThere: xen-ia64-devel@lists.xensource.com
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: Discussion of the ia64 port of Xen
	<xen-ia64-devel.lists.xensource.com>
List-Unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-ia64-devel>, 
	<mailto:xen-ia64-devel-request@lists.xensource.com?subject=unsubscribe>
List-Post: <mailto:xen-ia64-devel@lists.xensource.com>
List-Help: <mailto:xen-ia64-devel-request@lists.xensource.com?subject=help>
List-Subscribe: <http://lists.xensource.com/mailman/listinfo/xen-ia64-devel>, 
	<mailto:xen-ia64-devel-request@lists.xensource.com?subject=subscribe>
Sender: xen-ia64-devel-bounces@lists.xensource.com
Errors-To: xen-ia64-devel-bounces@lists.xensource.com

Hi.

This patch serires take 2 is mainly for fixing HVM domain save/restore
which Zhang reported.
The patch 7, add IA64_dom0VP_add_memdesc hypercall, is not for commit yet
because pv_ops balloon driver isn't supported on ia64 yet.

Changes:
The previsous one used sequence lock which is in shared page in order
to avoid race.
This time, removed the sequence counter and introduced a new hypercall
to get memmap. Thus abi change in shared page is avoided.


The reason why HVM domain save/restore is broken is as follows.
Tools stack (save or dump-core) is aware of the region which
is populated as RAM.
However the patch, 'Use main memory for video memory', move pages
from main mamory to 0xc0000000. So save or dump-core fails to
dump those pages. Then HVM domain restore fails.
This patch series (more precisly Patch 5/7) makes XENMEMadd_to_physmap
hypercall with XENMAPSPACE_mfn update the memory map info of a given
domain.

[PATCH 1/7] fix XENMEM_add_to_physmap with XENMAPSPACE_mfn
[PATCH 2/7] introduce rcu_lock_target_domain_by_id() for later use
[PATCH 3/7] introduce get_memmap hypercall to avoid race
[PATCH 4/7] linux: update linux arch-ia64.h
[PATCH 5/7] linux, xencomm: support IA64_DOM0VP_get_memmap
[PATCH 6/7] libxc: make xc_ia64_copy_memmap() use get_memmap hypercall
[PATCH 7/7] introduce add_memdesc hypercall.

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

From xen-ia64-devel-bounces@lists.xensource.com Thu Oct 02 02:03:53 2008
Return-path: <xen-ia64-devel-bounces@lists.xensource.com>
Envelope-to: www-data@lists.xensource.com
Delivery-date: Thu, 02 Oct 2008 02:03:53 -0700
Received: from localhost ([127.0.0.1] helo=lists.colo.xensource.com)
	by lists.xensource.com with esmtp (Exim 4.43)
	id 1KlK6C-0002MI-FK; Thu, 02 Oct 2008 02:03:53 -0700
Received: from spam.xensource.com ([70.42.241.90])
	by lists.xensource.com with esmtp (Exim 4.43) id 1KlK64-0002I9-JF
	for xen-ia64-devel@lists.xensource.com; Thu, 02 Oct 2008 02:03:45 -0700
X-ASG-Debug-ID: 1222938222-035200000000-zRdJ7k
X-Barracuda-URL: http://spam.xensource.com:8000/cgi-bin/mark.cgi
Received: from mail.valinux.co.jp (localhost [127.0.0.1])
	by spam.xensource.com (Spam Firewall) with ESMTP id DF9D0B4260
	for <xen-ia64-devel@lists.xensource.com>;
	Thu,  2 Oct 2008 02:03:42 -0700 (PDT)
Received: from mail.valinux.co.jp (fms-01.valinux.co.jp [210.128.90.1]) by
	spam.xensource.com with ESMTP id xi2cEc9te1qbAKCG for
	<xen-ia64-devel@lists.xensource.com>;
	Thu, 02 Oct 2008 02:03:42 -0700 (PDT)
Received: from nm.local.valinux.co.jp (vagw.valinux.co.jp [210.128.90.14])
	by mail.valinux.co.jp (Postfix) with ESMTP id 63C1D2DC891;
	Thu,  2 Oct 2008 18:03:41 +0900 (JST)
Received: from yamahata by nm.local.valinux.co.jp with local (Exim 4.69)
	(envelope-from <yamahata@valinux.co.jp>)
	id 1KlKAG-0001ZB-B3; Thu, 02 Oct 2008 18:08:04 +0900
Date: Thu, 2 Oct 2008 18:08:04 +0900
From: Isaku Yamahata <yamahata@valinux.co.jp>
To: xen-ia64-devel@lists.xensource.com
X-ASG-Orig-Subj: [PATCH 2/7] introduce rcu_lock_target_domain_by_id() for
	later use
Message-ID: <20081002090804.GA6018@nm.localhost.valinux.co.jp>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="gKMricLos+KVdGMg"
Content-Disposition: inline
User-Agent: Mutt/1.5.18 (2008-05-17)
X-Barracuda-Connect: fms-01.valinux.co.jp[210.128.90.1]
X-Barracuda-Start-Time: 1222938222
X-Barracuda-Virus-Scanned: by Barracuda Spam Firewall at xensource.com
X-Barracuda-Spam-Score: 0.00
X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=3.5
	QUARANTINE_LEVEL=6.0 KILL_LEVEL=1000.0 tests=
X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.7050
	Rule breakdown below
	pts rule name              description
	---- ----------------------
	--------------------------------------------------
Cc: Isaku Yamahata <yamahata@valinux.co.jp>
Subject: [Xen-ia64-devel] [PATCH 2/7] introduce
	rcu_lock_target_domain_by_id() for later use
X-BeenThere: xen-ia64-devel@lists.xensource.com
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: Discussion of the ia64 port of Xen
	<xen-ia64-devel.lists.xensource.com>
List-Unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-ia64-devel>, 
	<mailto:xen-ia64-devel-request@lists.xensource.com?subject=unsubscribe>
List-Post: <mailto:xen-ia64-devel@lists.xensource.com>
List-Help: <mailto:xen-ia64-devel-request@lists.xensource.com?subject=help>
List-Subscribe: <http://lists.xensource.com/mailman/listinfo/xen-ia64-devel>, 
	<mailto:xen-ia64-devel-request@lists.xensource.com?subject=subscribe>
Sender: xen-ia64-devel-bounces@lists.xensource.com
Errors-To: xen-ia64-devel-bounces@lists.xensource.com


--gKMricLos+KVdGMg
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

[IA64] add helper function rcu_lock_target_domain_by_id()

Introduce helper function, rcu_lock_target_domain_by_id().

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>

diff -r 4a2b1b8dc9c2 xen/arch/ia64/xen/mm.c
--- a/xen/arch/ia64/xen/mm.c	Thu Oct 02 15:23:26 2008 +0900
+++ b/xen/arch/ia64/xen/mm.c	Thu Oct 02 15:24:17 2008 +0900
@@ -3134,6 +3134,23 @@
     return (efi_mem_type(p) == EFI_CONVENTIONAL_MEMORY);
 }
 
+int
+rcu_lock_target_domain_by_id(domid_t domid, struct domain **d)
+{
+    if (domid == DOMID_SELF)
+        *d = rcu_lock_current_domain();
+    else {
+        *d = rcu_lock_domain_by_id(domid);
+        if (d == NULL)
+            return -ESRCH;
+        if (!IS_PRIV_FOR(current->domain, *d)) {
+            rcu_lock_domain(*d);
+            return -EPERM;
+        }
+    }
+
+    return 0;
+}
 
 long
 arch_memory_op(int op, XEN_GUEST_HANDLE(void) arg)
diff -r 4a2b1b8dc9c2 xen/include/asm-ia64/domain.h
--- a/xen/include/asm-ia64/domain.h	Thu Oct 02 15:23:26 2008 +0900
+++ b/xen/include/asm-ia64/domain.h	Thu Oct 02 15:24:17 2008 +0900
@@ -316,6 +316,9 @@
            unsigned long iim, unsigned long itir, unsigned long arg5,
            unsigned long arg6, unsigned long arg7, unsigned long stack);
 
+int
+rcu_lock_target_domain_by_id(domid_t domid, struct domain **d);
+
 #endif /* __ASM_DOMAIN_H__ */
 
 /*

--gKMricLos+KVdGMg
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="rcu-get-target-domain-by-id.patch"

[IA64] add helper function rcu_lock_target_domain_by_id()

Introduce helper function, rcu_lock_target_domain_by_id().

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>

diff -r 4a2b1b8dc9c2 xen/arch/ia64/xen/mm.c
--- a/xen/arch/ia64/xen/mm.c	Thu Oct 02 15:23:26 2008 +0900
+++ b/xen/arch/ia64/xen/mm.c	Thu Oct 02 15:24:17 2008 +0900
@@ -3134,6 +3134,23 @@
     return (efi_mem_type(p) == EFI_CONVENTIONAL_MEMORY);
 }
 
+int
+rcu_lock_target_domain_by_id(domid_t domid, struct domain **d)
+{
+    if (domid == DOMID_SELF)
+        *d = rcu_lock_current_domain();
+    else {
+        *d = rcu_lock_domain_by_id(domid);
+        if (d == NULL)
+            return -ESRCH;
+        if (!IS_PRIV_FOR(current->domain, *d)) {
+            rcu_lock_domain(*d);
+            return -EPERM;
+        }
+    }
+
+    return 0;
+}
 
 long
 arch_memory_op(int op, XEN_GUEST_HANDLE(void) arg)
diff -r 4a2b1b8dc9c2 xen/include/asm-ia64/domain.h
--- a/xen/include/asm-ia64/domain.h	Thu Oct 02 15:23:26 2008 +0900
+++ b/xen/include/asm-ia64/domain.h	Thu Oct 02 15:24:17 2008 +0900
@@ -316,6 +316,9 @@
            unsigned long iim, unsigned long itir, unsigned long arg5,
            unsigned long arg6, unsigned long arg7, unsigned long stack);
 
+int
+rcu_lock_target_domain_by_id(domid_t domid, struct domain **d);
+
 #endif /* __ASM_DOMAIN_H__ */
 
 /*

--gKMricLos+KVdGMg
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@lists.xensource.com
http://lists.xensource.com/xen-ia64-devel
--gKMricLos+KVdGMg--


From xen-ia64-devel-bounces@lists.xensource.com Thu Oct 02 02:03:59 2008
Return-path: <xen-ia64-devel-bounces@lists.xensource.com>
Envelope-to: www-data@lists.xensource.com
Delivery-date: Thu, 02 Oct 2008 02:03:59 -0700
Received: from localhost ([127.0.0.1] helo=lists.colo.xensource.com)
	by lists.xensource.com with esmtp (Exim 4.43)
	id 1KlK6J-0002QW-95; Thu, 02 Oct 2008 02:03:59 -0700
Received: from spam.xensource.com ([70.42.241.90])
	by lists.xensource.com with esmtp (Exim 4.43) id 1KlK65-0002IE-5v
	for xen-ia64-devel@lists.xensource.com; Thu, 02 Oct 2008 02:03:45 -0700
X-ASG-Debug-ID: 1222938222-030600030000-zRdJ7k
X-Barracuda-URL: http://spam.xensource.com:8000/cgi-bin/mark.cgi
Received: from mail.valinux.co.jp (localhost [127.0.0.1])
	by spam.xensource.com (Spam Firewall) with ESMTP id F004FB4261
	for <xen-ia64-devel@lists.xensource.com>;
	Thu,  2 Oct 2008 02:03:42 -0700 (PDT)
Received: from mail.valinux.co.jp (fms-01.valinux.co.jp [210.128.90.1]) by
	spam.xensource.com with ESMTP id bFScGBiGkvAbjsOB for
	<xen-ia64-devel@lists.xensource.com>;
	Thu, 02 Oct 2008 02:03:42 -0700 (PDT)
Received: from nm.local.valinux.co.jp (vagw.valinux.co.jp [210.128.90.14])
	by mail.valinux.co.jp (Postfix) with ESMTP id 754292DC895;
	Thu,  2 Oct 2008 18:03:41 +0900 (JST)
Received: from yamahata by nm.local.valinux.co.jp with local (Exim 4.69)
	(envelope-from <yamahata@valinux.co.jp>)
	id 1KlKAG-0001ZL-DK; Thu, 02 Oct 2008 18:08:04 +0900
Date: Thu, 2 Oct 2008 18:08:04 +0900
From: Isaku Yamahata <yamahata@valinux.co.jp>
To: xen-ia64-devel@lists.xensource.com
X-ASG-Orig-Subj: [PATCH 3/7] introduce get_memmap hypercall to avoid race
Message-ID: <20081002090804.GA6028@nm.localhost.valinux.co.jp>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="gKMricLos+KVdGMg"
Content-Disposition: inline
User-Agent: Mutt/1.5.18 (2008-05-17)
X-Barracuda-Connect: fms-01.valinux.co.jp[210.128.90.1]
X-Barracuda-Start-Time: 1222938222
X-Barracuda-Virus-Scanned: by Barracuda Spam Firewall at xensource.com
X-Barracuda-Spam-Score: 0.50
X-Barracuda-Spam-Status: No, SCORE=0.50 using per-user scores of TAG_LEVEL=3.5
	QUARANTINE_LEVEL=6.0 KILL_LEVEL=1000.0 tests=BSF_RULE7568M
X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.7050
	Rule breakdown below
	pts rule name              description
	---- ----------------------
	--------------------------------------------------
	0.50 BSF_RULE7568M          Custom Rule 7568M
Cc: Isaku Yamahata <yamahata@valinux.co.jp>
Subject: [Xen-ia64-devel] [PATCH 3/7] introduce get_memmap hypercall to
	avoid race
X-BeenThere: xen-ia64-devel@lists.xensource.com
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: Discussion of the ia64 port of Xen
	<xen-ia64-devel.lists.xensource.com>
List-Unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-ia64-devel>, 
	<mailto:xen-ia64-devel-request@lists.xensource.com?subject=unsubscribe>
List-Post: <mailto:xen-ia64-devel@lists.xensource.com>
List-Help: <mailto:xen-ia64-devel-request@lists.xensource.com?subject=help>
List-Subscribe: <http://lists.xensource.com/mailman/listinfo/xen-ia64-devel>, 
	<mailto:xen-ia64-devel-request@lists.xensource.com?subject=subscribe>
Sender: xen-ia64-devel-bounces@lists.xensource.com
Errors-To: xen-ia64-devel-bounces@lists.xensource.com


--gKMricLos+KVdGMg
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

[IA64] introduce DOM0VP_get_memmap hypercall.

introduce new dom0vp hypercall, DOM0VP_get_memmap,
to get memmap of a given domain without race.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>

diff -r 088bc049f889 xen/arch/ia64/xen/dom0_ops.c
--- a/xen/arch/ia64/xen/dom0_ops.c	Thu Oct 02 15:24:18 2008 +0900
+++ b/xen/arch/ia64/xen/dom0_ops.c	Thu Oct 02 15:25:22 2008 +0900
@@ -607,6 +607,12 @@
     case IA64_DOM0VP_unexpose_foreign_p2m:
         ret = dom0vp_unexpose_foreign_p2m(d, arg0, arg1);
         break;
+    case IA64_DOM0VP_get_memmap: {
+        XEN_GUEST_HANDLE(char) hnd;
+        set_xen_guest_handle(hnd, (char*)arg1);
+        ret = dom0vp_get_memmap((domid_t)arg0, hnd);
+        break;
+    }
     default:
         ret = -1;
 		printk("unknown dom0_vp_op 0x%lx\n", cmd);
diff -r 088bc049f889 xen/arch/ia64/xen/mm.c
--- a/xen/arch/ia64/xen/mm.c	Thu Oct 02 15:24:18 2008 +0900
+++ b/xen/arch/ia64/xen/mm.c	Thu Oct 02 15:25:22 2008 +0900
@@ -2465,6 +2465,49 @@
         free_domheap_pages(page, order);
     return ret;
 }
+
+unsigned long
+dom0vp_get_memmap(domid_t domid, XEN_GUEST_HANDLE(char) buffer)
+{
+    unsigned long ret = 0;
+    struct domain *targ_d;
+
+    struct page_info *page = NULL;
+    unsigned long order;
+
+    struct xen_ia64_memmap_info *memmap_info;
+    unsigned long num_pages;
+    
+    ret = rcu_lock_target_domain_by_id(domid, &targ_d);
+    if (ret != 0)
+        return ret;
+
+    memmap_lock(targ_d);
+
+    ret = memmap_copy_from(targ_d, &page, &order);
+    if (ret != 0)
+        goto out;
+
+    memmap_info = page_to_virt(page);
+    num_pages = targ_d->shared_info->arch.memmap_info_num_pages;
+    if ((num_pages << PAGE_SHIFT) - sizeof(*memmap_info) <
+        memmap_info->efi_memmap_size) {
+        ret = -EFAULT;
+        goto out;
+    }
+    if (copy_to_guest(buffer, (char*)memmap_info, sizeof(*memmap_info)) ||
+        copy_to_guest_offset(buffer, sizeof(*memmap_info),
+                             (char*)memmap_info->memdesc,
+                             memmap_info->efi_memmap_size))
+        ret = -EFAULT;
+
+ out:
+    memmap_unlock(targ_d);
+    if (page != NULL)
+        free_domheap_pages(page, order);
+
+    return ret;
+}
 #endif
 
 // grant table host mapping
diff -r 088bc049f889 xen/include/asm-ia64/mm.h
--- a/xen/include/asm-ia64/mm.h	Thu Oct 02 15:24:18 2008 +0900
+++ b/xen/include/asm-ia64/mm.h	Thu Oct 02 15:25:22 2008 +0900
@@ -448,6 +448,7 @@
 extern void foreign_p2m_destroy(struct domain* d);
 extern unsigned long dom0vp_expose_foreign_p2m(struct domain* dest_dom, unsigned long dest_gpfn, domid_t domid, XEN_GUEST_HANDLE(char) buffer, unsigned long flags);
 extern unsigned long dom0vp_unexpose_foreign_p2m(struct domain* dest_dom, unsigned long dest_gpfn, domid_t domid);
+extern unsigned long dom0vp_get_memmap(domid_t domid, XEN_GUEST_HANDLE(char) buffer);
 #else
 #define expose_p2m_init()       do { } while (0)
 #define dom0vp_expose_p2m(d, conv_start_gpfn, assign_start_gpfn, expose_size, granule_pfn)	(-ENOSYS)
@@ -456,6 +457,7 @@
 #define dom0vp_expose_foreign_p2m(dest_dom, dest_gpfn, domid, buffer, flags)	(-ENOSYS)
 #define dom0vp_unexpose_foreign_p2m(dest_dom, dest_gpfn, domid)	(-ENOSYS)
 #define __dom0vp_add_memdesc(d, memmap_info, memdesc)	(-ENOSYS)
+#define dom0vp_get_memmap(domid, buffer)		(-ENOSYS)
 #endif
 
 extern volatile unsigned long *mpt_table;
diff -r 088bc049f889 xen/include/public/arch-ia64.h
--- a/xen/include/public/arch-ia64.h	Thu Oct 02 15:24:18 2008 +0900
+++ b/xen/include/public/arch-ia64.h	Thu Oct 02 15:25:22 2008 +0900
@@ -463,6 +463,11 @@
 /* unexpose the foreign domain's p2m table into privileged domain */
 #define IA64_DOM0VP_unexpose_foreign_p2m        13
 
+/* get memmap_info and memmap. It is possible to map the page directly
+   by foreign page mapping, but there is a race between writer.
+   This hypercall avoids such race. */
+#define IA64_DOM0VP_get_memmap          14
+
 // flags for page assignement to pseudo physical address space
 #define _ASSIGN_readonly                0
 #define ASSIGN_readonly                 (1UL << _ASSIGN_readonly)

--gKMricLos+KVdGMg
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="memmap-info-get-memmap-0.patch"

[IA64] introduce DOM0VP_get_memmap hypercall.

introduce new dom0vp hypercall, DOM0VP_get_memmap,
to get memmap of a given domain without race.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>

diff -r 088bc049f889 xen/arch/ia64/xen/dom0_ops.c
--- a/xen/arch/ia64/xen/dom0_ops.c	Thu Oct 02 15:24:18 2008 +0900
+++ b/xen/arch/ia64/xen/dom0_ops.c	Thu Oct 02 15:25:22 2008 +0900
@@ -607,6 +607,12 @@
     case IA64_DOM0VP_unexpose_foreign_p2m:
         ret = dom0vp_unexpose_foreign_p2m(d, arg0, arg1);
         break;
+    case IA64_DOM0VP_get_memmap: {
+        XEN_GUEST_HANDLE(char) hnd;
+        set_xen_guest_handle(hnd, (char*)arg1);
+        ret = dom0vp_get_memmap((domid_t)arg0, hnd);
+        break;
+    }
     default:
         ret = -1;
 		printk("unknown dom0_vp_op 0x%lx\n", cmd);
diff -r 088bc049f889 xen/arch/ia64/xen/mm.c
--- a/xen/arch/ia64/xen/mm.c	Thu Oct 02 15:24:18 2008 +0900
+++ b/xen/arch/ia64/xen/mm.c	Thu Oct 02 15:25:22 2008 +0900
@@ -2465,6 +2465,49 @@
         free_domheap_pages(page, order);
     return ret;
 }
+
+unsigned long
+dom0vp_get_memmap(domid_t domid, XEN_GUEST_HANDLE(char) buffer)
+{
+    unsigned long ret = 0;
+    struct domain *targ_d;
+
+    struct page_info *page = NULL;
+    unsigned long order;
+
+    struct xen_ia64_memmap_info *memmap_info;
+    unsigned long num_pages;
+    
+    ret = rcu_lock_target_domain_by_id(domid, &targ_d);
+    if (ret != 0)
+        return ret;
+
+    memmap_lock(targ_d);
+
+    ret = memmap_copy_from(targ_d, &page, &order);
+    if (ret != 0)
+        goto out;
+
+    memmap_info = page_to_virt(page);
+    num_pages = targ_d->shared_info->arch.memmap_info_num_pages;
+    if ((num_pages << PAGE_SHIFT) - sizeof(*memmap_info) <
+        memmap_info->efi_memmap_size) {
+        ret = -EFAULT;
+        goto out;
+    }
+    if (copy_to_guest(buffer, (char*)memmap_info, sizeof(*memmap_info)) ||
+        copy_to_guest_offset(buffer, sizeof(*memmap_info),
+                             (char*)memmap_info->memdesc,
+                             memmap_info->efi_memmap_size))
+        ret = -EFAULT;
+
+ out:
+    memmap_unlock(targ_d);
+    if (page != NULL)
+        free_domheap_pages(page, order);
+
+    return ret;
+}
 #endif
 
 // grant table host mapping
diff -r 088bc049f889 xen/include/asm-ia64/mm.h
--- a/xen/include/asm-ia64/mm.h	Thu Oct 02 15:24:18 2008 +0900
+++ b/xen/include/asm-ia64/mm.h	Thu Oct 02 15:25:22 2008 +0900
@@ -448,6 +448,7 @@
 extern void foreign_p2m_destroy(struct domain* d);
 extern unsigned long dom0vp_expose_foreign_p2m(struct domain* dest_dom, unsigned long dest_gpfn, domid_t domid, XEN_GUEST_HANDLE(char) buffer, unsigned long flags);
 extern unsigned long dom0vp_unexpose_foreign_p2m(struct domain* dest_dom, unsigned long dest_gpfn, domid_t domid);
+extern unsigned long dom0vp_get_memmap(domid_t domid, XEN_GUEST_HANDLE(char) buffer);
 #else
 #define expose_p2m_init()       do { } while (0)
 #define dom0vp_expose_p2m(d, conv_start_gpfn, assign_start_gpfn, expose_size, granule_pfn)	(-ENOSYS)
@@ -456,6 +457,7 @@
 #define dom0vp_expose_foreign_p2m(dest_dom, dest_gpfn, domid, buffer, flags)	(-ENOSYS)
 #define dom0vp_unexpose_foreign_p2m(dest_dom, dest_gpfn, domid)	(-ENOSYS)
 #define __dom0vp_add_memdesc(d, memmap_info, memdesc)	(-ENOSYS)
+#define dom0vp_get_memmap(domid, buffer)		(-ENOSYS)
 #endif
 
 extern volatile unsigned long *mpt_table;
diff -r 088bc049f889 xen/include/public/arch-ia64.h
--- a/xen/include/public/arch-ia64.h	Thu Oct 02 15:24:18 2008 +0900
+++ b/xen/include/public/arch-ia64.h	Thu Oct 02 15:25:22 2008 +0900
@@ -463,6 +463,11 @@
 /* unexpose the foreign domain's p2m table into privileged domain */
 #define IA64_DOM0VP_unexpose_foreign_p2m        13
 
+/* get memmap_info and memmap. It is possible to map the page directly
+   by foreign page mapping, but there is a race between writer.
+   This hypercall avoids such race. */
+#define IA64_DOM0VP_get_memmap          14
+
 // flags for page assignement to pseudo physical address space
 #define _ASSIGN_readonly                0
 #define ASSIGN_readonly                 (1UL << _ASSIGN_readonly)

--gKMricLos+KVdGMg
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@lists.xensource.com
http://lists.xensource.com/xen-ia64-devel
--gKMricLos+KVdGMg--


From xen-ia64-devel-bounces@lists.xensource.com Thu Oct 02 02:04:04 2008
Return-path: <xen-ia64-devel-bounces@lists.xensource.com>
Envelope-to: www-data@lists.xensource.com
Delivery-date: Thu, 02 Oct 2008 02:04:04 -0700
Received: from localhost ([127.0.0.1] helo=lists.colo.xensource.com)
	by lists.xensource.com with esmtp (Exim 4.43)
	