Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b9783dce authored by Jean Delvare's avatar Jean Delvare
Browse files

hwmon: (pc87360) Fix device resource declaration



It's not OK to call platform_device_add_resources() multiple times
in a row. Despite its name, this functions sets the resources, it
doesn't add them. So we have to prepare an array with all the
resources, and then call platform_device_add_resources() once.

Before this fix, only the last I/O resource would be actually
registered. The other I/O resources were leaked.

Signed-off-by: default avatarJean Delvare <khali@linux-fr.org>
Cc: Jim Cromie <jim.cromie@gmail.com>
Cc: stable@kernel.org
parent df149d02
Loading
Loading
Loading
Loading
+17 −14
Original line number Diff line number Diff line
@@ -1610,11 +1610,8 @@ static struct pc87360_data *pc87360_update_device(struct device *dev)

static int __init pc87360_device_add(unsigned short address)
{
	struct resource res = {
		.name	= "pc87360",
		.flags	= IORESOURCE_IO,
	};
	int err, i;
	struct resource res[3];
	int err, i, res_count;

	pdev = platform_device_alloc("pc87360", address);
	if (!pdev) {
@@ -1623,23 +1620,29 @@ static int __init pc87360_device_add(unsigned short address)
		goto exit;
	}

	memset(res, 0, 3 * sizeof(struct resource));
	res_count = 0;
	for (i = 0; i < 3; i++) {
		if (!extra_isa[i])
			continue;
		res.start = extra_isa[i];
		res.end = extra_isa[i] + PC87360_EXTENT - 1;
		res[res_count].start = extra_isa[i];
		res[res_count].end = extra_isa[i] + PC87360_EXTENT - 1;
		res[res_count].name = "pc87360",
		res[res_count].flags = IORESOURCE_IO,

		err = acpi_check_resource_conflict(&res);
		err = acpi_check_resource_conflict(&res[res_count]);
		if (err)
			goto exit_device_put;

		err = platform_device_add_resources(pdev, &res, 1);
		res_count++;
	}

	err = platform_device_add_resources(pdev, res, res_count);
	if (err) {
			printk(KERN_ERR "pc87360: Device resource[%d] "
			       "addition failed (%d)\n", i, err);
		printk(KERN_ERR "pc87360: Device resources addition failed "
		       "(%d)\n", err);
		goto exit_device_put;
	}
	}

	err = platform_device_add(pdev);
	if (err) {