public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
From: chrubis@suse.cz
To: Alexey Kodanev <alexey.kodanev@oracle.com>
Cc: vasily.isaenko@oracle.com, ltp-list@lists.sourceforge.net
Subject: Re: [LTP] [PATCH v4 2/2] device-drivers: acpi: fixes
Date: Wed, 27 Nov 2013 19:04:49 +0100	[thread overview]
Message-ID: <20131127180449.GA8163@rei> (raw)
In-Reply-To: <1384784307-28731-2-git-send-email-alexey.kodanev@oracle.com>

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=unknown-8bit, Size: 22940 bytes --]

Hi!
> Obsolete code updated to the actual kernel ACPI API.
> Changed test-cases handling from ioctl to sysfs.
> User-space program rewritten.
> User-space program loads/unloads kernel module.
> Added new test-cases: traverse ACPI devices and sysfs support
> for device description.
> 
> Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
> ---
>  testcases/kernel/device-drivers/acpi/.gitignore    |    8 +
>  testcases/kernel/device-drivers/acpi/Makefile      |   43 +-
>  testcases/kernel/device-drivers/acpi/ltp_acpi.c    |  166 ++++
>  testcases/kernel/device-drivers/acpi/ltp_acpi.h    |  123 +--
>  .../kernel/device-drivers/acpi/ltp_acpi_cmds.c     | 1000 ++++++++++----------
>  5 files changed, 714 insertions(+), 626 deletions(-)
>  create mode 100644 testcases/kernel/device-drivers/acpi/.gitignore
>  create mode 100644 testcases/kernel/device-drivers/acpi/ltp_acpi.c
> 
> diff --git a/testcases/kernel/device-drivers/acpi/.gitignore b/testcases/kernel/device-drivers/acpi/.gitignore
> new file mode 100644
> index 0000000..76fbdc8
> --- /dev/null
> +++ b/testcases/kernel/device-drivers/acpi/.gitignore
> @@ -0,0 +1,8 @@
> +/LtpAcpiCmds.ko

This is wrong and even if it wasn't the ltp_acpi_cmd.ko is covered by
the *.ko bellow.

> +/ltp_acpi
> +/*.mod.c
> +/modules.order
> +/.tmp_versions
> +/.*.ko
> +/.*.cmd
> +/Module.symvers

...

> diff --git a/testcases/kernel/device-drivers/acpi/ltp_acpi.c b/testcases/kernel/device-drivers/acpi/ltp_acpi.c
> new file mode 100644
> index 0000000..612c3d4
> --- /dev/null
> +++ b/testcases/kernel/device-drivers/acpi/ltp_acpi.c
> @@ -0,0 +1,166 @@
> +/*
> + * Copyright (c) 2013 Oracle and/or its affiliates. All Rights Reserved.
> + *
> + * 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 would 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 the Free Software Foundation,
> + * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
> + *
> + * Author: Alexey Kodanev <alexey.kodanev@oracle.com>
> + */
> +
> +#include <stdio.h>
> +#include <stdlib.h>
> +
> +#include "test.h"
> +#include "usctest.h"
> +#include "tst_module.h"
> +#include "safe_macros.h"
> +#include "safe_stdio.h"
> +
> +#include "ltp_acpi.h"
> +
> +char *TCID = "ltp_acpi";
> +int TST_TOTAL = ACPI_TC_NUM;
> +
> +static const char dev_result[]	= "/sys/devices/" ACPI_TEST_NAME "/result";
> +static const char dev_path[]	= "/sys/devices/" ACPI_TEST_NAME "/path";
> +static const char dev_str[]	= "/sys/devices/" ACPI_TEST_NAME "/str";
> +static const char dev_tcase[]	= "/sys/devices/" ACPI_TEST_NAME "/tcase";
> +static const char module_name[]	= "ltp_acpi_cmds.ko";
> +static int module_loaded;
> +
> +static void cleanup(void)
> +{
> +	if (module_loaded)
> +		tst_module_unload(NULL, module_name);
> +
> +	TEST_CLEANUP;
> +}
> +
> +static int read_sysfs_file(const char *name, char *buf, int size)
> +{
> +	FILE *f = SAFE_FOPEN(cleanup, name, "r");
> +	if (!fgets(buf, size, f)) {
> +		tst_resm(TFAIL, "failed to read sysfs file '%s'", name);
> +		return 1;
> +	}
> +	SAFE_FCLOSE(cleanup, f);
> +	return 0;
> +}
> +
> +static int next_acpi_str(void)
> +{
> +	char descr[4096], sysfs_path[4096];
> +
> +	/*
> +	 * if device has _STR object, we should get
> +	 * a valid string from 'str' sysfs file and then can
> +	 * find it in sysfs.
> +	 */
> +	if (read_sysfs_file(dev_str, descr, 4096))
> +		return 0;
> +	if (!strcmp(descr, "null")) {
> +		tst_resm(TCONF, "None of left devices has _STR");
> +		return 0;
> +	}
> +	tst_resm(TINFO, "read description %s", descr);
> +
> +	/* device's sysfs path */
> +	strcpy(sysfs_path, "/sys");
> +	if (read_sysfs_file(dev_path, sysfs_path + 4, 4092))
> +		return 0;
> +	if (!strcmp(sysfs_path + 4, "null")) {
> +		tst_resm(TCONF, "device doesn't have sysfs entry");
> +		/* continue, because others might have it */
> +		return 1;
> +	}
> +	strcat(sysfs_path, "/description");
> +
> +	/*
> +	 * Find device description in sysfs.
> +	 *
> +	 * New sysfs interface to export device description
> +	 * implemented since Linux 3.7
> +	 */
> +	if (tst_kvercmp(3, 7, 0) < 0) {
> +		tst_resm(TCONF,
> +			"sysfs description check required Linux 3.7+");
> +		return 1;
> +	}
> +
> +	if (access(sysfs_path, R_OK)) {
> +		tst_resm(TFAIL, "can't find description file '%s'", sysfs_path);
> +		return 1;
> +	}
> +	tst_resm(TPASS, "found description file '%s'", sysfs_path);

You should not call tst_resm() with TPASS here, this way the test will
report more passed cases than is the maximal number of tests.

> +	char sysfs_descr[4096];
> +	if (read_sysfs_file(sysfs_path, sysfs_descr, 4096))
> +		return 1;
> +
> +	/*
> +	 * Compare sysfs file and description from test driver
> +	 */
> +	int res = strncmp(descr, sysfs_descr, strlen(descr));
> +
> +	tst_resm((res) ? TFAIL : TPASS, "check sysfs file");
> +
> +	return 1;
> +}
> +
> +static void test_run(void)
> +{
> +	int i = 0, res;
> +	while (i < TST_TOTAL) {
> +
> +		SAFE_FILE_PRINTF(cleanup, dev_tcase, "%d", i);
> +		SAFE_FILE_SCANF(cleanup, dev_result, "%d", &res);
> +
> +		tst_resm(res, "Test-case '%d'", i);
> +
> +		/*
> +		 * trigger ACPI_TRAVERSE test-case while we can
> +		 * get valid next device description.
> +		 */
> +		if (i == ACPI_TRAVERSE && next_acpi_str())
> +			continue;

The same goes for the tst_resm() here.

I would write this part so that reading the sys_str file triggers
walking to next object with _STR argument, while writing to dev_tcase
will reset the walk to root and wrote a code as:

	SAFE_FILE_PRINTF(cleanup, dev_tcase, "%d", i);
	SAFE_FILE_SCANF(cleanup, dev_result, "%d", &res);

	if (i == ACPI_TRAVERSE)
		res = next_acpi_str();

	tst_resm(...);

And the next_acpi_str() would loop on reading the dev_str while "null"
is returned. Or even better make the read returns zero size at the end,
(should be mapped to EOF in case of FILE*).

Also I would be more carefull and rather sanitized the result value, i.e.

	tst_resm(ret ? TFAIL : TPASS, "...");

> +		++i;
> +	}
> +}
> +
> +int main(int argc, char *argv[])
> +{
> +	char *msg;
> +	msg = parse_opts(argc, argv, NULL, NULL);
> +	if (msg != NULL)
> +		tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
> +
> +	tst_require_root(NULL);
> +
> +	if (tst_kvercmp(2, 6, 0) < 0) {
> +		tst_brkm(TCONF, NULL,
> +			"Test must be run with kernel 2.6 or newer");
> +	}
> +
> +	tst_sig(FORK, DEF_HANDLER, cleanup);
> +
> +	tst_module_load(NULL, module_name, NULL);
> +	module_loaded = 1;
> +
> +	test_run();
> +
> +	cleanup();
> +
> +	tst_exit();
> +}

...

> diff --git a/testcases/kernel/device-drivers/acpi/ltp_acpi_cmds.c b/testcases/kernel/device-drivers/acpi/ltp_acpi_cmds.c
> index 26fcc15..ff89bc5 100644
> --- a/testcases/kernel/device-drivers/acpi/ltp_acpi_cmds.c
> +++ b/testcases/kernel/device-drivers/acpi/ltp_acpi_cmds.c
> @@ -1,20 +1,20 @@
>  /*
> + * Copyright (c) International Business Machines  Corp., 2001
> + * Copyright (c) 2013 Oracle and/or its affiliates. All Rights Reserved.
>   *
> - *   Copyright (c) International Business Machines  Corp., 2001
> + * 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 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.
>   *
> - *   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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
>   */
>  
>  /*
> @@ -27,7 +27,6 @@
>   *
>   *  01/03/2009 Márton Németh <nm127@freemail.hu>
>   *   - Updated for Linux kernel 2.6.28
> - *
>   */
>  
>  #include <linux/kernel.h>
> @@ -40,477 +39,443 @@
>  #include <linux/pm.h>
>  #include <linux/acpi.h>
>  #include <linux/genhd.h>
> -#include <asm/uaccess.h>
> -#include "LtpAcpi.h"
> -
> -#ifndef ACPI_EC_UDELAY_GLK
> -#define ACPI_EC_UDELAY_GLK	1000	/* Wait 1ms max. to get global lock */
> -#endif
> -
> -static int ltpdev_open(struct block_device *bdev, fmode_t mode);
> -static int ltpdev_release(struct gendisk *disk, fmode_t mode);
> -static int ltpdev_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,
> -			unsigned long arg);
> -
> -static u32 ltp_test_sleep_button_ev_handler(void *context);
> -static u32 ltp_test_power_button_ev_handler(void *context);
> -static u32 acpi_ec_gpe_handler(void *context);
> -
> -static void acpi_bus_notify(acpi_handle handle, u32 type, void *data);
> -static acpi_status ltp_get_dev_callback(acpi_handle obj, u32 depth,
> -					void *context, void **ret);
> -static acpi_status acpi_ec_io_ports(struct acpi_resource *resource,
> -				    void *context);
> -#if 0
> -static acpi_status acpi_ec_space_setup(acpi_handle region_handle,
> -				       u32 function,
> -				       void *handler_context,
> -				       void **return_context);
> -static acpi_status acpi_ec_space_handler(u32 function,
> -					 acpi_physical_address address,
> -					 u32 bit_width,
> -					 acpi_integer * value,
> -					 void *handler_context,
> -					 void *region_context);
> -#endif
> +#include <linux/dmi.h>
> +#include <linux/nls.h>
>  
> -static struct block_device_operations blkops = {
> -open:	ltpdev_open,
> -release:ltpdev_release,
> -ioctl:	ltpdev_ioctl,
> -};
> -
> -int ltp_acpi_major = LTPMAJOR;
> -int test_iteration = 0;
> -
> -static char genhd_flags = 0;
> -static struct gendisk *gd_ptr;
> -
> -struct acpi_ec {
> -	acpi_handle handle;
> -	unsigned long uid;
> -	unsigned long long gpe_bit;
> -	struct acpi_generic_address status_addr;
> -	struct acpi_generic_address command_addr;
> -	struct acpi_generic_address data_addr;
> -	unsigned long global_lock;
> -	spinlock_t lock;
> -};
> +#include "ltp_acpi.h"
>  
>  MODULE_AUTHOR("Martin Ridgeway <mridge@us.ibm.com>");
> -MODULE_DESCRIPTION(ACPI_LTP_TEST_DRIVER_NAME);
> +MODULE_AUTHOR("Alexey Kodanev <alexey.kodanev@oracle.com>");
> +MODULE_DESCRIPTION("ACPI LTP Test Driver");
>  MODULE_LICENSE("GPL");
> +ACPI_MODULE_NAME("LTP_ACPI")
>  
> -/*
> - * Device operations for the virtual ACPI devices
> - */
> -
> -extern struct acpi_device *acpi_root;
> +#define prk_err(fmt, ...) \
> +	pr_err(ACPI_TEST_NAME ": " fmt "\n", ##__VA_ARGS__)
> +#define prk_alert(fmt, ...) \
> +	pr_alert(ACPI_TEST_NAME ": " fmt "\n", ##__VA_ARGS__)
> +#define prk_info(fmt, ...) \
> +	pr_info(ACPI_TEST_NAME ": " fmt "\n", ##__VA_ARGS__)
>  
> -static int ltpdev_open(struct block_device *dev, fmode_t mode)
> +static int acpi_failure(acpi_status status, const char *name)
>  {
> -	printk(KERN_ALERT "ltpdev_open \n");
> +	if (ACPI_FAILURE(status)) {
> +		ACPI_EXCEPTION((AE_INFO, status, name));
> +		return 1;
> +	}
>  	return 0;
>  }
>  
> -static int ltpdev_release(struct gendisk *disk, fmode_t mode)
> -{
> -
> -	printk(KERN_ALERT "ltpdev_release \n");
> -	return 0;
> -}
> +/* points to the string of the last found object _STR */
> +static char *str_obj_result;
>  
> -static u32 ltp_test_power_button_ev_handler(void *context)
> -{
> -	printk(KERN_ALERT "ltp_test_power_button_ev_handler \n");
> -	return 1;
> -}
> +/* sysfs device path of the last found device */
> +static char *sysfs_path;
>  
> -static u32 ltp_test_sleep_button_ev_handler(void *context)
> -{
> -	printk(KERN_ALERT "ltp_test_sleep_button_ev_handler \n");
> -	return 1;
> -}
> +/* first found device with _CRS */
> +static acpi_handle res_handle;
>  
> -static int ltpdev_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,
> -			unsigned long arg)
> +static acpi_status get_str_object(acpi_handle handle)
>  {
> +	int res;
>  	acpi_status status;
> -//      acpi_handle        sys_bus_handle;
> -	acpi_handle start_handle = 0;
> -	acpi_handle parent_handle;
> -	acpi_handle child_handle;
> -	acpi_handle next_child_handle;
> -	acpi_status level;
> -	struct acpi_ec *ec;
> -	struct acpi_device *device;
> -	struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
> +	acpi_handle temp = 0;
> +	union acpi_object *str_obj;
> +	char *buf = NULL;
>  
> -#if 0
> -	acpi_handle tmp_handle;
> -	struct acpi_table_ecdt *ecdt_ptr;
> -	struct acpi_buffer dsdt = { ACPI_ALLOCATE_BUFFER, NULL };
> -	struct acpi_buffer batt_buffer = { ACPI_ALLOCATE_BUFFER, NULL };
> -	struct acpi_buffer format = { sizeof(ACPI_BATTERY_FORMAT_BIF),
> -		ACPI_BATTERY_FORMAT_BIF
> -	};
> -	struct acpi_buffer data = { 0, NULL };
> -	union acpi_object *package = NULL;
> -	u32 start_ticks, stop_ticks, total_ticks;
> -#endif
> +	struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
>  
> -	u32 i, bm_status;
> -	u8 type_a, type_b;
> -	u32 global_lock = 0;
> -	int state = 0;
> +	status = acpi_get_handle(handle, "_STR", &temp);
>  
> -    /*****************************************************************************/
> +	if (ACPI_SUCCESS(status) && !acpi_evaluate_object(handle,
> +		"_STR", NULL, &buffer)) {

I would write it as:

	if (ACPI_SUCCESS(status) &&
	    !acpi_evaluate_object(handle, "_STR", NULL, &buffer)) {

It's a bit easier to read when the function call is not wrapped in the
middle of the agruments, but that is very minor.

> -	printk(KERN_ALERT "ltpdev_ioctl \n");
> -	switch (cmd) {
> -	case LTPDEV_CMD:
> +		str_obj = buffer.pointer;
>  
> -		parent_handle = start_handle;
> -		child_handle = 0;
> -		level = 1;
> -		test_iteration++;
> +		buf = kmalloc(str_obj->buffer.length / 2, GFP_KERNEL);
> +		if (!buf) {
> +			kfree(str_obj);
> +			return AE_NO_MEMORY;
> +		}
>  
> -		printk(KERN_ALERT
> -		       "-- IOCTL called to start ACPI tests -- Iteration:%d\n",
> -		       test_iteration);
> +		res = utf16s_to_utf8s((wchar_t *)str_obj->buffer.pointer,
> +			str_obj->buffer.length, UTF16_LITTLE_ENDIAN, buf,
> +			str_obj->buffer.length / 2);
>  
> -		printk(KERN_ALERT "TEST -- acpi_get_handle \n");
> +		buf[res] = '\0';
>  
> -		status = acpi_get_handle(0, ACPI_NS_SYSTEM_BUS, &parent_handle);
> +		kfree(str_obj_result);
> +		str_obj_result = buf;
> +		kfree(str_obj);
> +	}
>  
> -		printk(KERN_ALERT "TEST -- acpi_get_object_info \n");
> +	return status;
> +}
>  
> -		status = acpi_get_object_info(parent_handle, &buffer);
> +static void get_crs_object(acpi_handle handle)
> +{
> +	acpi_status status;
> +	acpi_handle temp;
> +	if (!res_handle) {
> +		status = acpi_get_handle(handle, METHOD_NAME__CRS, &temp);
> +		if (ACPI_SUCCESS(status))
> +			res_handle = handle;
> +	}
> +}
>  
> -		printk(KERN_ALERT "TEST -- acpi_get_next_object \n");
> +static void get_sysfs_path(acpi_handle handle)
> +{
> +	acpi_status status;
> +	struct acpi_device *device;
> +	struct device *dev;
> +	struct kobject *kobj;
>  
> -		status = acpi_get_next_object(ACPI_TYPE_ANY, parent_handle,
> -					      child_handle, &next_child_handle);
> +	kfree(sysfs_path);
> +	sysfs_path = NULL;
>  
> -		printk(KERN_ALERT "TEST -- acpi_get_parent \n");
> +	status = acpi_bus_get_device(handle, &device);
> +	if (ACPI_SUCCESS(status)) {
> +		dev = &device->dev;
> +		kobj = &dev->kobj;
                ^ this seems to be set but not used

> +		sysfs_path = kobject_get_path(&device->dev.kobj, GFP_KERNEL);
> +	}
> +}
>  
> -		status = acpi_get_parent(parent_handle, &parent_handle);
> +/* acpi handle of the last visited device */
> +static acpi_handle start_parent;
>  
> -		printk(KERN_ALERT "TEST -- acpi_evaluate_object \n");
> +static int acpi_traverse(acpi_handle parent, acpi_handle child)
> +{
> +	static char indent[64];
> +	const char * const ind_end = indent + 63;
> +	static const char *ind = ind_end;
> +	acpi_status status;
> +	struct acpi_device_info *dev_info;
> +	acpi_handle new_child;
>  
> -		status = acpi_evaluate_object(parent_handle, "_ON", NULL, NULL);
> +	if (!indent[0])
> +		memset(indent, 0x20, 63);
>  
> -		printk(KERN_ALERT "TEST -- acpi_get_table \n");
> +	while (parent) {
> +		status = acpi_get_next_object(ACPI_TYPE_DEVICE,
> +			parent, child, &new_child);
>  
> -//        status = acpi_get_table(ACPI_TABLE_RSDP, 1, &dsdt);
> -//        status = acpi_get_table(ACPI_TABLE_DSDT, 1, &dsdt);
> -//        status = acpi_get_table(ACPI_TABLE_FADT, 1, &dsdt);
> -//        status = acpi_get_table(ACPI_TABLE_FACS, 1, &dsdt);
> -//        status = acpi_get_table(ACPI_TABLE_PSDT, 1, &dsdt);
> -//        status = acpi_get_table(ACPI_TABLE_SSDT, 1, &dsdt);
> -//        status = acpi_get_table(ACPI_TABLE_XSDT, 1, &dsdt);
> +		if (ACPI_FAILURE(status)) {
> +			ind += 4;
>  
> -#if 0
> -		printk(KERN_ALERT "TEST -- acpi_get_firmware_table \n");
> +			child = parent;
> +			status = acpi_get_parent(child, &parent);
>  
> -		status =
> -		    acpi_get_firmware_table("ECDT", 1, ACPI_LOGICAL_ADDRESSING,
> -					    (struct acpi_table_header **)&dsdt);
> -#endif
> +			/* no more devices */
> +			if (ACPI_FAILURE(status)) {
> +				start_parent = 0;
> +				kfree(str_obj_result);
> +				str_obj_result = NULL;
> +				break;
                                ^
                                Having return 0; here would make it a
				bit more readable.

> +			}
> +			continue;
> +		}
>  
> -		printk(KERN_ALERT "TEST -- acpi_install_notify_handler \n");
> -
> -		status =
> -		    acpi_install_notify_handler(ACPI_ROOT_OBJECT,
> -						ACPI_SYSTEM_NOTIFY,
> -						&acpi_bus_notify, NULL);
> -
> -		printk(KERN_ALERT "TEST -- acpi_remove_notify_handler \n");
> -
> -		status =
> -		    acpi_remove_notify_handler(ACPI_ROOT_OBJECT,
> -					       ACPI_SYSTEM_NOTIFY,
> -					       &acpi_bus_notify);
> -
> -		printk(KERN_ALERT
> -		       "TEST -- acpi_install_fixed_event_handler \n");
> -		status =
> -		    acpi_install_fixed_event_handler(ACPI_EVENT_POWER_BUTTON,
> -						     ltp_test_power_button_ev_handler,
> -						     NULL);
> -		if (status)
> -			printk(KERN_ALERT
> -			       "Failed installing fixed event handler \n");
> -
> -		printk(KERN_ALERT "TEST -- acpi_remove_fixed_event_handler \n");
> -		status =
> -		    acpi_remove_fixed_event_handler(ACPI_EVENT_POWER_BUTTON,
> -						    ltp_test_power_button_ev_handler);
> -		if (status)
> -			printk(KERN_ALERT
> -			       "Failed removing fixed event handler \n");
> -
> -		printk(KERN_ALERT
> -		       "TEST -- acpi_install_fixed_event_handler \n");
> -		status =
> -		    acpi_install_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON,
> -						     ltp_test_sleep_button_ev_handler,
> -						     NULL);
> -		if (status)
> -			printk(KERN_ALERT
> -			       "Failed installing fixed event handler \n");
> -
> -		printk(KERN_ALERT "TEST -- acpi_remove_fixed_event_handler \n");
> -		status =
> -		    acpi_remove_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON,
> -						    ltp_test_sleep_button_ev_handler);
> -		if (status)
> -			printk(KERN_ALERT
> -			       "Failed removing fixed event handler \n");
> -
> -		printk(KERN_ALERT "TEST -- acpi_acquire_global_lock \n");
> -		status =
> -		    acpi_acquire_global_lock(ACPI_EC_UDELAY_GLK, &global_lock);
> -
> -		printk(KERN_ALERT "TEST -- acpi_release_global_lock \n");
> -		status = acpi_release_global_lock(global_lock);
> -
> -		printk(KERN_ALERT "TEST -- acpi_bus_get_device \n");
> -
> -		status = acpi_bus_get_device(next_child_handle, &device);
> -
> -#if 0
> -		printk(KERN_ALERT "TEST -- acpi_bus_find_driver \n");
> -		status = acpi_bus_find_driver(device);
> -#endif
> +		status = acpi_get_object_info(new_child, &dev_info);
> +		if (acpi_failure(status, "acpi_object_info failed"))
> +			return 1;
> +
> +		get_sysfs_path(new_child);
> +
> +		get_crs_object(new_child);
> +
> +		if (ind < indent)
> +			ind = indent;
> +		else if (ind > ind_end)
> +			ind = ind_end;
> +
> +		/*
> +		 * if we find _STR object we will stop here
> +		 * and save last visited child
> +		 */
> +		if (ACPI_SUCCESS(get_str_object(new_child))) {
> +			prk_info("%s%4.4s: has '_STR' '%s' path '%s'",
> +				ind, (char *)&dev_info->name, str_obj_result,
> +				(sysfs_path) ? sysfs_path : "no path");
> +			ind -= 4;
> +			start_parent = new_child;
> +			kfree(dev_info);
> +			break;
                        ^
                        Here as well

> +		}
> +		prk_info("%s%4.4s: path '%s'", ind, (char *)&dev_info->name,
> +			(sysfs_path) ? sysfs_path : "no path");
>  
> -		printk(KERN_ALERT "TEST -- acpi_bus_get_power \n");
> -		status = acpi_bus_get_power(next_child_handle, &state);
> -		if (status)
> -			printk(KERN_ALERT "Error reading power state \n");
> +		ind -= 4;
> +		parent = new_child;
> +		child = 0;
> +		kfree(dev_info);
> +	}
>  
> -		printk(KERN_ALERT "TEST -- acpi_driver_data \n");
> +	return 0;
> +}
>  

There is also wrong line with:

 *  FILE        : LtpAcpiCmds.c

left in the ltp_acpi_cmds.c. Please remove it as well.


The rest looks very good to me.

(Don't forget to send a patch to add it to build and runtest file with
 next version.)

-- 
Cyril Hrubis
chrubis@suse.cz


[-- Attachment #2: Type: text/plain, Size: 455 bytes --]

------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk

[-- Attachment #3: Type: text/plain, Size: 155 bytes --]

_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

  reply	other threads:[~2013-11-27 18:05 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-18 14:18 [LTP] [PATCH 1/2] device-drivers: acpi: fix file names Alexey Kodanev
2013-11-18 14:18 ` [LTP] [PATCH v4 2/2] device-drivers: acpi: fixes Alexey Kodanev
2013-11-27 18:04   ` chrubis [this message]
     [not found]     ` <529725F3.6040002@oracle.com>
2013-11-28 11:39       ` chrubis
     [not found]         ` <52972F1C.3020504@oracle.com>
2013-11-28 12:09           ` chrubis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20131127180449.GA8163@rei \
    --to=chrubis@suse.cz \
    --cc=alexey.kodanev@oracle.com \
    --cc=ltp-list@lists.sourceforge.net \
    --cc=vasily.isaenko@oracle.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox