linux-acpi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] ACPI: Add _PDC object evaluate for VIA.
@ 2008-09-27  8:52 louisqi
  2008-09-27 16:05 ` Ingo Molnar
  0 siblings, 1 reply; 6+ messages in thread
From: louisqi @ 2008-09-27  8:52 UTC (permalink / raw)
  To: len.brown, venkatesh.pallipadi, linux-acpi

Dear Brown & Pallipadi:

Attached is a patch to support _PDC object evaluate for VIA CPUs.
The routine "arch_acpi_processor_init_pdc" which is at
"arch/x86/kernel/acpi/processor.c" currently only supports INTEL CPUs.

The patch has been tested on the "VIA VX800"chipset + "VIA C7-M1.8G" CPU.
It should work for other VIA chipset / BIOS that implements the _PDC object.

Thanks
Louis

--------------------------------------------------------------------------------

[PATCH] ACPI: Add _PDC object evaluate for VIA.

Frome: Louis Qi <louisqi@viatech.com.cn>

The current routine "arch_acpi_processor_init_pdc" only supports INTEL CPUs.
This patch add support for VIA CPUs.

Signed-off-by: Louis Qi <louisqi@viatech.com.cn>
---

--- 2.6.26.5/arch/x86/kernel/acpi/processor.c.orig	2008-09-27 15:46:14.000000000
+0800
+++ 2.6.26.5/arch/x86/kernel/acpi/processor.c	2008-09-27 15:46:14.000000000 +0800
@@ -66,6 +66,55 @@ static void init_intel_pdc(struct acpi_p
 	return;
 }

+static void init_via_pdc(struct acpi_processor *pr, struct cpuinfo_x86 *c)
+{
+	struct acpi_object_list *obj_list;
+	union acpi_object *obj;
+	u32 *buf;
+
+	/* allocate and initialize pdc. It will be used later. */
+	obj_list = kmalloc(sizeof(struct acpi_object_list), GFP_KERNEL);
+	if (!obj_list) {
+		printk(KERN_ERR "Memory allocation error\n");
+		return;
+	}
+
+	obj = kmalloc(sizeof(union acpi_object), GFP_KERNEL);
+	if (!obj) {
+		printk(KERN_ERR "Memory allocation error\n");
+		kfree(obj_list);
+		return;
+	}
+
+	buf = kmalloc(12, GFP_KERNEL);
+	if (!buf) {
+		printk(KERN_ERR "Memory allocation error\n");
+		kfree(obj);
+		kfree(obj_list);
+		return;
+	}
+
+	buf[0] = ACPI_PDC_REVISION_ID;
+	buf[1] = 1;
+	buf[2] = 0;
+
+	if (cpu_has(c, X86_FEATURE_EST))
+		buf[2] |= ACPI_PDC_P_FFH;
+
+	if (cpu_has(c, X86_FEATURE_ACPI))
+		buf[2] |= ACPI_PDC_T_FFH;
+
+	obj->type = ACPI_TYPE_BUFFER;
+	obj->buffer.length = 12;
+	obj->buffer.pointer = (u8 *) buf;
+	obj_list->count = 1;
+	obj_list->pointer = obj;
+	pr->pdc = obj_list;
+
+	return;
+}
+
+
 /* Initialize _PDC data based on the CPU vendor */
 void arch_acpi_processor_init_pdc(struct acpi_processor *pr)
 {
@@ -74,6 +123,8 @@ void arch_acpi_processor_init_pdc(struct
 	pr->pdc = NULL;
 	if (c->x86_vendor == X86_VENDOR_INTEL)
 		init_intel_pdc(pr, c);
+	else if (c->x86_vendor == X86_VENDOR_CENTAUR)
+		init_via_pdc(pr, c);

 	return;
 }
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] ACPI: Add _PDC object evaluate for VIA.
  2008-09-27  8:52 [PATCH] ACPI: Add _PDC object evaluate for VIA louisqi
@ 2008-09-27 16:05 ` Ingo Molnar
  2008-09-28  2:40   ` louisqi
  0 siblings, 1 reply; 6+ messages in thread
From: Ingo Molnar @ 2008-09-27 16:05 UTC (permalink / raw)
  To: louisqi; +Cc: len.brown, venkatesh.pallipadi, linux-acpi


just a few minor comments:

* louisqi <louisqi@viatech.com.cn> wrote:

> +static void init_via_pdc(struct acpi_processor *pr, struct cpuinfo_x86 *c)
> +{
> +	struct acpi_object_list *obj_list;
> +	union acpi_object *obj;
> +	u32 *buf;
> +
> +	/* allocate and initialize pdc. It will be used later. */
> +	obj_list = kmalloc(sizeof(struct acpi_object_list), GFP_KERNEL);
> +	if (!obj_list) {
> +		printk(KERN_ERR "Memory allocation error\n");
> +		return;
> +	}
> +
> +	obj = kmalloc(sizeof(union acpi_object), GFP_KERNEL);
> +	if (!obj) {
> +		printk(KERN_ERR "Memory allocation error\n");
> +		kfree(obj_list);
> +		return;
> +	}
> +
> +	buf = kmalloc(12, GFP_KERNEL);
> +	if (!buf) {
> +		printk(KERN_ERR "Memory allocation error\n");
> +		kfree(obj);
> +		kfree(obj_list);
> +		return;
> +	}

error condition cleanliness: it's cleaner to create a single off-line 
instance of freeing logic, at the end of the function:

...
	[ ... normal path ... ]
	return;

err_obj:
	kfree(obj);
err_obj_list:
	kfree(obj_list);
err:
	printk(KERN_ERR "init_via_pdc: memory allocation error\n");
}

and then after the allocation do:

	if (!obj_list)
		goto err;

etc.

(also note the different style of the printk)

> +
> +	buf[0] = ACPI_PDC_REVISION_ID;
> +	buf[1] = 1;
> +	buf[2] = 0;
> +
> +	if (cpu_has(c, X86_FEATURE_EST))
> +		buf[2] |= ACPI_PDC_P_FFH;
> +
> +	if (cpu_has(c, X86_FEATURE_ACPI))
> +		buf[2] |= ACPI_PDC_T_FFH;
> +
> +	obj->type = ACPI_TYPE_BUFFER;
> +	obj->buffer.length = 12;
> +	obj->buffer.pointer = (u8 *) buf;

style: no need to put a space between the '(u8 *)' and 'buf'.

> +	return;
> +}

style: no need to put 'return' at the end of a void function.

	Ingo

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] ACPI: Add _PDC object evaluate for VIA.
  2008-09-27 16:05 ` Ingo Molnar
@ 2008-09-28  2:40   ` louisqi
  2008-10-08  2:19     ` louisqi
  0 siblings, 1 reply; 6+ messages in thread
From: louisqi @ 2008-09-28  2:40 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: len.brown, venkatesh.pallipadi, linux-acpi


Thanks a lot, Ingo! Thanks for your kindly help.

I have revise my patch as following:


////////////////////////////////////////////////////////////////////////////////////
[PATCH] ACPI: Add _PDC object evaluate for VIA.

Frome: Louis Qi <louisqi@viatech.com.cn>

The current routine "arch_acpi_processor_init_pdc" only supports INTEL CPUs.
This patch add support for VIA CPUs.

Signed-off-by: Louis Qi <louisqi@viatech.com.cn>
---

--- 2.6.26.5/arch/x86/kernel/acpi/processor.c.orig	2008-09-28 10:18:11.000000000 
+0800
+++ 2.6.26.5/arch/x86/kernel/acpi/processor.c	2008-09-28 10:18:11.000000000 +0800
@@ -66,6 +66,53 @@ static void init_intel_pdc(struct acpi_p
  	return;
  }

+static void init_via_pdc(struct acpi_processor *pr, struct cpuinfo_x86 *c)
+{
+	struct acpi_object_list *obj_list;
+	union acpi_object *obj;
+	u32 *buf;
+
+	/* allocate and initialize pdc. It will be used later. */
+	obj_list = kmalloc(sizeof(struct acpi_object_list), GFP_KERNEL);
+	if (!obj_list)
+		goto err_obj_list;
+
+	obj = kmalloc(sizeof(union acpi_object), GFP_KERNEL);
+	if (!obj)
+		goto err_obj;
+
+	buf = kmalloc(12, GFP_KERNEL);
+	if (!buf)
+		goto err_buf;
+
+	buf[0] = ACPI_PDC_REVISION_ID;
+	buf[1] = 1;
+	buf[2] = 0;
+
+	if (cpu_has(c, X86_FEATURE_EST))
+		buf[2] |= ACPI_PDC_P_FFH;
+
+	if (cpu_has(c, X86_FEATURE_ACPI))
+		buf[2] |= ACPI_PDC_T_FFH;
+
+	obj->type = ACPI_TYPE_BUFFER;
+	obj->buffer.length = 12;
+	obj->buffer.pointer = (u8 *)buf;
+	obj_list->count = 1;
+	obj_list->pointer = obj;
+	pr->pdc = obj_list;
+
+	return;
+
+err_buf:
+	kfree(obj);
+err_obj:
+	kfree(obj_list);
+err_obj_list:
+	printk(KERN_ERR "init_via_pdc: memory allocation failed\n");
+}
+
+
  /* Initialize _PDC data based on the CPU vendor */
  void arch_acpi_processor_init_pdc(struct acpi_processor *pr)
  {
@@ -74,6 +121,8 @@ void arch_acpi_processor_init_pdc(struct
  	pr->pdc = NULL;
  	if (c->x86_vendor == X86_VENDOR_INTEL)
  		init_intel_pdc(pr, c);
+	else if (c->x86_vendor == X86_VENDOR_CENTAUR)
+		init_via_pdc(pr, c);

  	return;
  }
////////////////////////////////////////////////////////////////////////////////////

Ingo Molnar :
> just a few minor comments:
> 
> * louisqi <louisqi@viatech.com.cn> wrote:
> 
>> +static void init_via_pdc(struct acpi_processor *pr, struct cpuinfo_x86 *c)
>> +{
>> +	struct acpi_object_list *obj_list;
>> +	union acpi_object *obj;
>> +	u32 *buf;
>> +
>> +	/* allocate and initialize pdc. It will be used later. */
>> +	obj_list = kmalloc(sizeof(struct acpi_object_list), GFP_KERNEL);
>> +	if (!obj_list) {
>> +		printk(KERN_ERR "Memory allocation error\n");
>> +		return;
>> +	}
>> +
>> +	obj = kmalloc(sizeof(union acpi_object), GFP_KERNEL);
>> +	if (!obj) {
>> +		printk(KERN_ERR "Memory allocation error\n");
>> +		kfree(obj_list);
>> +		return;
>> +	}
>> +
>> +	buf = kmalloc(12, GFP_KERNEL);
>> +	if (!buf) {
>> +		printk(KERN_ERR "Memory allocation error\n");
>> +		kfree(obj);
>> +		kfree(obj_list);
>> +		return;
>> +	}
> 
> error condition cleanliness: it's cleaner to create a single off-line 
> instance of freeing logic, at the end of the function:
> 
> ...
> 	[ ... normal path ... ]
> 	return;
> 
> err_obj:
> 	kfree(obj);
> err_obj_list:
> 	kfree(obj_list);
> err:
> 	printk(KERN_ERR "init_via_pdc: memory allocation error\n");
> }
> 
> and then after the allocation do:
> 
> 	if (!obj_list)
> 		goto err;
> 
> etc.
> 
> (also note the different style of the printk)
> 
>> +
>> +	buf[0] = ACPI_PDC_REVISION_ID;
>> +	buf[1] = 1;
>> +	buf[2] = 0;
>> +
>> +	if (cpu_has(c, X86_FEATURE_EST))
>> +		buf[2] |= ACPI_PDC_P_FFH;
>> +
>> +	if (cpu_has(c, X86_FEATURE_ACPI))
>> +		buf[2] |= ACPI_PDC_T_FFH;
>> +
>> +	obj->type = ACPI_TYPE_BUFFER;
>> +	obj->buffer.length = 12;
>> +	obj->buffer.pointer = (u8 *) buf;
> 
> style: no need to put a space between the '(u8 *)' and 'buf'.
> 
>> +	return;
>> +}
> 
> style: no need to put 'return' at the end of a void function.
> 
> 	Ingo
> --
> To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] ACPI: Add _PDC object evaluate for VIA.
  2008-09-28  2:40   ` louisqi
@ 2008-10-08  2:19     ` louisqi
  2008-10-08 23:47       ` Pallipadi, Venkatesh
  0 siblings, 1 reply; 6+ messages in thread
From: louisqi @ 2008-10-08  2:19 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: len.brown, venkatesh.pallipadi, linux-acpi

Dear Brown & Pallipadi:

I want to know whether there are some problems about this patch.

If it does, please kindly help me to point out, I will revise it.

Waiting for your reply!

Thanks a lot!


Louis

2008.10.08

///////////////////////////////////////////////////////
louisqi have wrote:
> 
> Thanks a lot, Ingo! Thanks for your kindly help.
> 
> I have revise my patch as following:
> 
> 
> //////////////////////////////////////////////////////////////////////////////////// 
> 
> [PATCH] ACPI: Add _PDC object evaluate for VIA.
> 
> Frome: Louis Qi <louisqi@viatech.com.cn>
> 
> The current routine "arch_acpi_processor_init_pdc" only supports INTEL 
> CPUs.
> This patch add support for VIA CPUs.
> 
> Signed-off-by: Louis Qi <louisqi@viatech.com.cn>
> ---
> 
> --- 2.6.26.5/arch/x86/kernel/acpi/processor.c.orig    2008-09-28 
> 10:18:11.000000000 +0800
> +++ 2.6.26.5/arch/x86/kernel/acpi/processor.c    2008-09-28 
> 10:18:11.000000000 +0800
> @@ -66,6 +66,53 @@ static void init_intel_pdc(struct acpi_p
>      return;
>  }
> 
> +static void init_via_pdc(struct acpi_processor *pr, struct cpuinfo_x86 *c)
> +{
> +    struct acpi_object_list *obj_list;
> +    union acpi_object *obj;
> +    u32 *buf;
> +
> +    /* allocate and initialize pdc. It will be used later. */
> +    obj_list = kmalloc(sizeof(struct acpi_object_list), GFP_KERNEL);
> +    if (!obj_list)
> +        goto err_obj_list;
> +
> +    obj = kmalloc(sizeof(union acpi_object), GFP_KERNEL);
> +    if (!obj)
> +        goto err_obj;
> +
> +    buf = kmalloc(12, GFP_KERNEL);
> +    if (!buf)
> +        goto err_buf;
> +
> +    buf[0] = ACPI_PDC_REVISION_ID;
> +    buf[1] = 1;
> +    buf[2] = 0;
> +
> +    if (cpu_has(c, X86_FEATURE_EST))
> +        buf[2] |= ACPI_PDC_P_FFH;
> +
> +    if (cpu_has(c, X86_FEATURE_ACPI))
> +        buf[2] |= ACPI_PDC_T_FFH;
> +
> +    obj->type = ACPI_TYPE_BUFFER;
> +    obj->buffer.length = 12;
> +    obj->buffer.pointer = (u8 *)buf;
> +    obj_list->count = 1;
> +    obj_list->pointer = obj;
> +    pr->pdc = obj_list;
> +
> +    return;
> +
> +err_buf:
> +    kfree(obj);
> +err_obj:
> +    kfree(obj_list);
> +err_obj_list:
> +    printk(KERN_ERR "init_via_pdc: memory allocation failed\n");
> +}
> +
> +
>  /* Initialize _PDC data based on the CPU vendor */
>  void arch_acpi_processor_init_pdc(struct acpi_processor *pr)
>  {
> @@ -74,6 +121,8 @@ void arch_acpi_processor_init_pdc(struct
>      pr->pdc = NULL;
>      if (c->x86_vendor == X86_VENDOR_INTEL)
>          init_intel_pdc(pr, c);
> +    else if (c->x86_vendor == X86_VENDOR_CENTAUR)
> +        init_via_pdc(pr, c);
> 
>      return;
>  }
> //////////////////////////////////////////////////////////////////////////////////// 
> 
> 
> Ingo Molnar :
>> just a few minor comments:
>>
>> * louisqi <louisqi@viatech.com.cn> wrote:
>>
>>> +static void init_via_pdc(struct acpi_processor *pr, struct 
>>> cpuinfo_x86 *c)
>>> +{
>>> +    struct acpi_object_list *obj_list;
>>> +    union acpi_object *obj;
>>> +    u32 *buf;
>>> +
>>> +    /* allocate and initialize pdc. It will be used later. */
>>> +    obj_list = kmalloc(sizeof(struct acpi_object_list), GFP_KERNEL);
>>> +    if (!obj_list) {
>>> +        printk(KERN_ERR "Memory allocation error\n");
>>> +        return;
>>> +    }
>>> +
>>> +    obj = kmalloc(sizeof(union acpi_object), GFP_KERNEL);
>>> +    if (!obj) {
>>> +        printk(KERN_ERR "Memory allocation error\n");
>>> +        kfree(obj_list);
>>> +        return;
>>> +    }
>>> +
>>> +    buf = kmalloc(12, GFP_KERNEL);
>>> +    if (!buf) {
>>> +        printk(KERN_ERR "Memory allocation error\n");
>>> +        kfree(obj);
>>> +        kfree(obj_list);
>>> +        return;
>>> +    }
>>
>> error condition cleanliness: it's cleaner to create a single off-line 
>> instance of freeing logic, at the end of the function:
>>
>> ...
>>     [ ... normal path ... ]
>>     return;
>>
>> err_obj:
>>     kfree(obj);
>> err_obj_list:
>>     kfree(obj_list);
>> err:
>>     printk(KERN_ERR "init_via_pdc: memory allocation error\n");
>> }
>>
>> and then after the allocation do:
>>
>>     if (!obj_list)
>>         goto err;
>>
>> etc.
>>
>> (also note the different style of the printk)
>>
>>> +
>>> +    buf[0] = ACPI_PDC_REVISION_ID;
>>> +    buf[1] = 1;
>>> +    buf[2] = 0;
>>> +
>>> +    if (cpu_has(c, X86_FEATURE_EST))
>>> +        buf[2] |= ACPI_PDC_P_FFH;
>>> +
>>> +    if (cpu_has(c, X86_FEATURE_ACPI))
>>> +        buf[2] |= ACPI_PDC_T_FFH;
>>> +
>>> +    obj->type = ACPI_TYPE_BUFFER;
>>> +    obj->buffer.length = 12;
>>> +    obj->buffer.pointer = (u8 *) buf;
>>
>> style: no need to put a space between the '(u8 *)' and 'buf'.
>>
>>> +    return;
>>> +}
>>
>> style: no need to put 'return' at the end of a void function.
>>
>>     Ingo
>> -- 
>> To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
>>
> -- 
> To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 

^ permalink raw reply	[flat|nested] 6+ messages in thread

* RE: [PATCH] ACPI: Add _PDC object evaluate for VIA.
  2008-10-08  2:19     ` louisqi
@ 2008-10-08 23:47       ` Pallipadi, Venkatesh
  2008-10-09  0:46         ` Len Brown
  0 siblings, 1 reply; 6+ messages in thread
From: Pallipadi, Venkatesh @ 2008-10-08 23:47 UTC (permalink / raw)
  To: louisqi, Ingo Molnar; +Cc: Brown, Len, linux-acpi@vger.kernel.org


Patch looks good.
Question: Where are these PDC bits defined for via CPUs? I mean the bits that we use in intel_pdc are
defined in an Intel specific document. Just wondering whether the same bit definitions hold good for
via or we should have a different set of defines?

Thanks,
Venki

>-----Original Message-----
>From: louisqi [mailto:louisqi@viatech.com.cn]
>Sent: Tuesday, October 07, 2008 7:19 PM
>To: Ingo Molnar
>Cc: Brown, Len; Pallipadi, Venkatesh; linux-acpi@vger.kernel.org
>Subject: Re: [PATCH] ACPI: Add _PDC object evaluate for VIA.
>
>Dear Brown & Pallipadi:
>
>I want to know whether there are some problems about this patch.
>
>If it does, please kindly help me to point out, I will revise it.
>
>Waiting for your reply!
>
>Thanks a lot!
>
>
>Louis
>
>2008.10.08
>
>///////////////////////////////////////////////////////
>louisqi have wrote:
>>
>> Thanks a lot, Ingo! Thanks for your kindly help.
>>
>> I have revise my patch as following:
>>
>>
>>
>///////////////////////////////////////////////////////////////
>/////////////////////
>>
>> [PATCH] ACPI: Add _PDC object evaluate for VIA.
>>
>> Frome: Louis Qi <louisqi@viatech.com.cn>
>>
>> The current routine "arch_acpi_processor_init_pdc" only
>supports INTEL
>> CPUs.
>> This patch add support for VIA CPUs.
>>
>> Signed-off-by: Louis Qi <louisqi@viatech.com.cn>
>> ---
>>
>> --- 2.6.26.5/arch/x86/kernel/acpi/processor.c.orig    2008-09-28
>> 10:18:11.000000000 +0800
>> +++ 2.6.26.5/arch/x86/kernel/acpi/processor.c    2008-09-28
>> 10:18:11.000000000 +0800
>> @@ -66,6 +66,53 @@ static void init_intel_pdc(struct acpi_p
>>      return;
>>  }
>>
>> +static void init_via_pdc(struct acpi_processor *pr, struct
>cpuinfo_x86 *c)
>> +{
>> +    struct acpi_object_list *obj_list;
>> +    union acpi_object *obj;
>> +    u32 *buf;
>> +
>> +    /* allocate and initialize pdc. It will be used later. */
>> +    obj_list = kmalloc(sizeof(struct acpi_object_list), GFP_KERNEL);
>> +    if (!obj_list)
>> +        goto err_obj_list;
>> +
>> +    obj = kmalloc(sizeof(union acpi_object), GFP_KERNEL);
>> +    if (!obj)
>> +        goto err_obj;
>> +
>> +    buf = kmalloc(12, GFP_KERNEL);
>> +    if (!buf)
>> +        goto err_buf;
>> +
>> +    buf[0] = ACPI_PDC_REVISION_ID;
>> +    buf[1] = 1;
>> +    buf[2] = 0;
>> +
>> +    if (cpu_has(c, X86_FEATURE_EST))
>> +        buf[2] |= ACPI_PDC_P_FFH;
>> +
>> +    if (cpu_has(c, X86_FEATURE_ACPI))
>> +        buf[2] |= ACPI_PDC_T_FFH;
>> +
>> +    obj->type = ACPI_TYPE_BUFFER;
>> +    obj->buffer.length = 12;
>> +    obj->buffer.pointer = (u8 *)buf;
>> +    obj_list->count = 1;
>> +    obj_list->pointer = obj;
>> +    pr->pdc = obj_list;
>> +
>> +    return;
>> +
>> +err_buf:
>> +    kfree(obj);
>> +err_obj:
>> +    kfree(obj_list);
>> +err_obj_list:
>> +    printk(KERN_ERR "init_via_pdc: memory allocation failed\n");
>> +}
>> +
>> +
>>  /* Initialize _PDC data based on the CPU vendor */
>>  void arch_acpi_processor_init_pdc(struct acpi_processor *pr)
>>  {
>> @@ -74,6 +121,8 @@ void arch_acpi_processor_init_pdc(struct
>>      pr->pdc = NULL;
>>      if (c->x86_vendor == X86_VENDOR_INTEL)
>>          init_intel_pdc(pr, c);
>> +    else if (c->x86_vendor == X86_VENDOR_CENTAUR)
>> +        init_via_pdc(pr, c);
>>
>>      return;
>>  }
>>
>///////////////////////////////////////////////////////////////
>/////////////////////
>>
>>
>> Ingo Molnar :
>>> just a few minor comments:
>>>
>>> * louisqi <louisqi@viatech.com.cn> wrote:
>>>
>>>> +static void init_via_pdc(struct acpi_processor *pr, struct
>>>> cpuinfo_x86 *c)
>>>> +{
>>>> +    struct acpi_object_list *obj_list;
>>>> +    union acpi_object *obj;
>>>> +    u32 *buf;
>>>> +
>>>> +    /* allocate and initialize pdc. It will be used later. */
>>>> +    obj_list = kmalloc(sizeof(struct acpi_object_list),
>GFP_KERNEL);
>>>> +    if (!obj_list) {
>>>> +        printk(KERN_ERR "Memory allocation error\n");
>>>> +        return;
>>>> +    }
>>>> +
>>>> +    obj = kmalloc(sizeof(union acpi_object), GFP_KERNEL);
>>>> +    if (!obj) {
>>>> +        printk(KERN_ERR "Memory allocation error\n");
>>>> +        kfree(obj_list);
>>>> +        return;
>>>> +    }
>>>> +
>>>> +    buf = kmalloc(12, GFP_KERNEL);
>>>> +    if (!buf) {
>>>> +        printk(KERN_ERR "Memory allocation error\n");
>>>> +        kfree(obj);
>>>> +        kfree(obj_list);
>>>> +        return;
>>>> +    }
>>>
>>> error condition cleanliness: it's cleaner to create a
>single off-line
>>> instance of freeing logic, at the end of the function:
>>>
>>> ...
>>>     [ ... normal path ... ]
>>>     return;
>>>
>>> err_obj:
>>>     kfree(obj);
>>> err_obj_list:
>>>     kfree(obj_list);
>>> err:
>>>     printk(KERN_ERR "init_via_pdc: memory allocation error\n");
>>> }
>>>
>>> and then after the allocation do:
>>>
>>>     if (!obj_list)
>>>         goto err;
>>>
>>> etc.
>>>
>>> (also note the different style of the printk)
>>>
>>>> +
>>>> +    buf[0] = ACPI_PDC_REVISION_ID;
>>>> +    buf[1] = 1;
>>>> +    buf[2] = 0;
>>>> +
>>>> +    if (cpu_has(c, X86_FEATURE_EST))
>>>> +        buf[2] |= ACPI_PDC_P_FFH;
>>>> +
>>>> +    if (cpu_has(c, X86_FEATURE_ACPI))
>>>> +        buf[2] |= ACPI_PDC_T_FFH;
>>>> +
>>>> +    obj->type = ACPI_TYPE_BUFFER;
>>>> +    obj->buffer.length = 12;
>>>> +    obj->buffer.pointer = (u8 *) buf;
>>>
>>> style: no need to put a space between the '(u8 *)' and 'buf'.
>>>
>>>> +    return;
>>>> +}
>>>
>>> style: no need to put 'return' at the end of a void function.
>>>
>>>     Ingo
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe
>linux-acpi" in
>>> the body of a message to majordomo@vger.kernel.org
>>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>>
>>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe
>linux-acpi" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
>>
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* RE: [PATCH] ACPI: Add _PDC object evaluate for VIA.
  2008-10-08 23:47       ` Pallipadi, Venkatesh
@ 2008-10-09  0:46         ` Len Brown
  0 siblings, 0 replies; 6+ messages in thread
From: Len Brown @ 2008-10-09  0:46 UTC (permalink / raw)
  To: Pallipadi, Venkatesh; +Cc: louisqi, Ingo Molnar, linux-acpi@vger.kernel.org



> Question: Where are these PDC bits defined for via CPUs? I mean the bits that we use in intel_pdc are
> defined in an Intel specific document. Just wondering whether the same bit definitions hold good for
> via or we should have a different set of defines?

ditto.
init_intel_pdc() uses Intel vendor specific bits documented in 
ftp://download.intel.com/technology/IAPC/acpi/downloads/30222305.pdf
and coded into include/acpi/pdc_intel.h

If VIA is going to have any different bit definitions, then
we should really create a pdc_via.h.  But if VIA is going to re-use
the bits defined by Intel in a compatible way for the
forseeable future, then probably all we need to do is add a
comment saying that the bits VIA is using have the exact
same meaning as they do for Intel.

thanks,
-Len

ps. I'm delighted to receive a patch from VIA.
Sometimes we run into failures in undocumented VIA chipsets,
perhaps you can help us when we run into those?

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2008-10-09  0:47 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-09-27  8:52 [PATCH] ACPI: Add _PDC object evaluate for VIA louisqi
2008-09-27 16:05 ` Ingo Molnar
2008-09-28  2:40   ` louisqi
2008-10-08  2:19     ` louisqi
2008-10-08 23:47       ` Pallipadi, Venkatesh
2008-10-09  0:46         ` Len Brown

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).