From: Len Brown <lenb@kernel.org>
To: akpm@linux-foundation.org
Cc: linux-acpi@vger.kernel.org, pavel@suse.cz, hare@suse.de
Subject: Re: [patch 4/5] acpi: catch calls of acpi_driver_data on pointer of wrong type
Date: Fri, 10 Oct 2008 12:52:44 -0400 (EDT) [thread overview]
Message-ID: <alpine.LFD.1.10.0810101235050.7059@localhost.localdomain> (raw)
In-Reply-To: <200809222137.m8MLbYdP031014@imap1.linux-foundation.org>
I do like the inline better than the cpp, thanks.
But manually expanding all the lvalue cases,
in addition to conflicting with every patch in the universe:-(
means that we do no type checing on the lvalue cases,
which is exactly where we started for those --
and we'd not catch fat-fingers such as this one:
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -384,7 +384,7 @@ static int acpi_device_remove(struct device * dev)
acpi_drv->ops.remove(acpi_dev,
acpi_dev->removal_type);
}
acpi_dev->driver = NULL;
- acpi_driver_data(dev) = NULL;
+ acpi_driver_data(acpi_dev) = NULL;
I think that acpi_device.driver_data was was an unfortuate name choice,
easily fat finger confused with device.driver_data.
Perhaps if we rename it acpi_device.acpi_driver_data
then at least
dev->acpi_driver_data =
and
acpi_dev->driver_data =
would not compile?
-Len
Maybe we should re-name
On Mon, 22 Sep 2008, akpm@linux-foundation.org wrote:
> From: Pavel Machek <pavel@suse.cz>
>
> Catch attempts to use of acpi_driver_data on pointers of wrong type.
>
> akpm: rewritten to use proper C typechecking and remove the
> "function"-used-as-lvalue thing.
>
> Signed-off-by: Pavel Machek <pavel@suse.cz>
> Cc: Hannes Reinecke <hare@suse.de>
> Cc: Len Brown <lenb@kernel.org>
> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
> ---
>
> drivers/acpi/ac.c | 2 +-
> drivers/acpi/acpi_memhotplug.c | 2 +-
> drivers/acpi/asus_acpi.c | 2 +-
> drivers/acpi/battery.c | 2 +-
> drivers/acpi/button.c | 2 +-
> drivers/acpi/container.c | 2 +-
> drivers/acpi/ec.c | 4 ++--
> drivers/acpi/fan.c | 2 +-
> drivers/acpi/pcc_acpi.c | 2 +-
> drivers/acpi/pci_link.c | 2 +-
> drivers/acpi/pci_root.c | 2 +-
> drivers/acpi/power.c | 4 ++--
> drivers/acpi/processor_core.c | 2 +-
> drivers/acpi/sbs.c | 2 +-
> drivers/acpi/sbshc.c | 4 ++--
> drivers/acpi/scan.c | 4 ++--
> drivers/acpi/thermal.c | 2 +-
> drivers/acpi/video.c | 6 +++---
> drivers/misc/asus-laptop.c | 2 +-
> drivers/misc/fujitsu-laptop.c | 4 ++--
> drivers/misc/intel_menlow.c | 2 +-
> drivers/misc/thinkpad_acpi.c | 2 +-
> include/acpi/acpi_bus.h | 6 +++++-
> 23 files changed, 34 insertions(+), 30 deletions(-)
>
> diff -puN drivers/acpi/ac.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type drivers/acpi/ac.c
> --- a/drivers/acpi/ac.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/drivers/acpi/ac.c
> @@ -269,7 +269,7 @@ static int acpi_ac_add(struct acpi_devic
> ac->device = device;
> strcpy(acpi_device_name(device), ACPI_AC_DEVICE_NAME);
> strcpy(acpi_device_class(device), ACPI_AC_CLASS);
> - acpi_driver_data(device) = ac;
> + device->driver_data = ac;
>
> result = acpi_ac_get_state(ac);
> if (result)
> diff -puN drivers/acpi/acpi_memhotplug.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type drivers/acpi/acpi_memhotplug.c
> --- a/drivers/acpi/acpi_memhotplug.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/drivers/acpi/acpi_memhotplug.c
> @@ -403,7 +403,7 @@ static int acpi_memory_device_add(struct
> mem_device->device = device;
> sprintf(acpi_device_name(device), "%s", ACPI_MEMORY_DEVICE_NAME);
> sprintf(acpi_device_class(device), "%s", ACPI_MEMORY_DEVICE_CLASS);
> - acpi_driver_data(device) = mem_device;
> + device->driver_data = mem_device;
>
> /* Get the range from the _CRS */
> result = acpi_memory_get_device_resources(mem_device);
> diff -puN drivers/acpi/asus_acpi.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type drivers/acpi/asus_acpi.c
> --- a/drivers/acpi/asus_acpi.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/drivers/acpi/asus_acpi.c
> @@ -1321,7 +1321,7 @@ static int asus_hotk_add(struct acpi_dev
> hotk->handle = device->handle;
> strcpy(acpi_device_name(device), ACPI_HOTK_DEVICE_NAME);
> strcpy(acpi_device_class(device), ACPI_HOTK_CLASS);
> - acpi_driver_data(device) = hotk;
> + device->driver_data = hotk;
> hotk->device = device;
>
> result = asus_hotk_check();
> diff -puN drivers/acpi/battery.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type drivers/acpi/battery.c
> --- a/drivers/acpi/battery.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/drivers/acpi/battery.c
> @@ -804,7 +804,7 @@ static int acpi_battery_add(struct acpi_
> battery->device = device;
> strcpy(acpi_device_name(device), ACPI_BATTERY_DEVICE_NAME);
> strcpy(acpi_device_class(device), ACPI_BATTERY_CLASS);
> - acpi_driver_data(device) = battery;
> + device->driver_data = battery;
> mutex_init(&battery->lock);
> acpi_battery_update(battery);
> #ifdef CONFIG_ACPI_PROCFS_POWER
> diff -puN drivers/acpi/button.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type drivers/acpi/button.c
> --- a/drivers/acpi/button.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/drivers/acpi/button.c
> @@ -384,7 +384,7 @@ static int acpi_button_add(struct acpi_d
> return -ENOMEM;
>
> button->device = device;
> - acpi_driver_data(device) = button;
> + device->driver_data = button;
>
> button->input = input = input_allocate_device();
> if (!input) {
> diff -puN drivers/acpi/container.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type drivers/acpi/container.c
> --- a/drivers/acpi/container.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/drivers/acpi/container.c
> @@ -108,7 +108,7 @@ static int acpi_container_add(struct acp
> container->handle = device->handle;
> strcpy(acpi_device_name(device), ACPI_CONTAINER_DEVICE_NAME);
> strcpy(acpi_device_class(device), ACPI_CONTAINER_CLASS);
> - acpi_driver_data(device) = container;
> + device->driver_data = container;
>
> ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device <%s> bid <%s>\n",
> acpi_device_name(device), acpi_device_bid(device)));
> diff -puN drivers/acpi/ec.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type drivers/acpi/ec.c
> --- a/drivers/acpi/ec.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/drivers/acpi/ec.c
> @@ -792,7 +792,7 @@ static int acpi_ec_add(struct acpi_devic
>
> if (!first_ec)
> first_ec = ec;
> - acpi_driver_data(device) = ec;
> + device->driver_data = ec;
> acpi_ec_add_fs(device);
> pr_info(PREFIX "GPE = 0x%lx, I/O: command/status = 0x%lx, data = 0x%lx\n",
> ec->gpe, ec->command_addr, ec->data_addr);
> @@ -817,7 +817,7 @@ static int acpi_ec_remove(struct acpi_de
> }
> mutex_unlock(&ec->lock);
> acpi_ec_remove_fs(device);
> - acpi_driver_data(device) = NULL;
> + device->driver_data = NULL;
> if (ec == first_ec)
> first_ec = NULL;
> kfree(ec);
> diff -puN drivers/acpi/fan.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type drivers/acpi/fan.c
> --- a/drivers/acpi/fan.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/drivers/acpi/fan.c
> @@ -265,7 +265,7 @@ static int acpi_fan_add(struct acpi_devi
>
> dev_info(&device->dev, "registered as cooling_device%d\n", cdev->id);
>
> - acpi_driver_data(device) = cdev;
> + device->driver_data = cdev;
> result = sysfs_create_link(&device->dev.kobj,
> &cdev->device.kobj,
> "thermal_cooling");
> diff -puN drivers/acpi/pcc_acpi.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type drivers/acpi/pcc_acpi.c
> --- a/drivers/acpi/pcc_acpi.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/drivers/acpi/pcc_acpi.c
> @@ -657,7 +657,7 @@ static int acpi_pcc_hotkey_add(struct ac
> pcc->device = device;
> pcc->handle = device->handle;
> pcc->num_sifr = num_sifr;
> - acpi_driver_data(device) = pcc;
> + device->driver_data = pcc;
> strcpy(acpi_device_name(device), ACPI_PCC_DEVICE_NAME);
> strcpy(acpi_device_class(device), ACPI_PCC_CLASS);
>
> diff -puN drivers/acpi/pci_link.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type drivers/acpi/pci_link.c
> --- a/drivers/acpi/pci_link.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/drivers/acpi/pci_link.c
> @@ -737,7 +737,7 @@ static int acpi_pci_link_add(struct acpi
> link->device = device;
> strcpy(acpi_device_name(device), ACPI_PCI_LINK_DEVICE_NAME);
> strcpy(acpi_device_class(device), ACPI_PCI_LINK_CLASS);
> - acpi_driver_data(device) = link;
> + device->driver_data = link;
>
> mutex_lock(&acpi_link_lock);
> result = acpi_pci_link_get_possible(link);
> diff -puN drivers/acpi/pci_root.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type drivers/acpi/pci_root.c
> --- a/drivers/acpi/pci_root.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/drivers/acpi/pci_root.c
> @@ -206,7 +206,7 @@ static int __devinit acpi_pci_root_add(s
> root->device = device;
> strcpy(acpi_device_name(device), ACPI_PCI_ROOT_DEVICE_NAME);
> strcpy(acpi_device_class(device), ACPI_PCI_ROOT_CLASS);
> - acpi_driver_data(device) = root;
> + device->driver_data = root;
>
> device->ops.bind = acpi_pci_bind;
>
> diff -puN drivers/acpi/power.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type drivers/acpi/power.c
> --- a/drivers/acpi/power.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/drivers/acpi/power.c
> @@ -679,7 +679,7 @@ static int acpi_power_add(struct acpi_de
> strcpy(resource->name, device->pnp.bus_id);
> strcpy(acpi_device_name(device), ACPI_POWER_DEVICE_NAME);
> strcpy(acpi_device_class(device), ACPI_POWER_CLASS);
> - acpi_driver_data(device) = resource;
> + device->driver_data = resource;
>
> /* Evalute the object to get the system level and resource order. */
> status = acpi_evaluate_object(device->handle, NULL, NULL, &buffer);
> @@ -755,7 +755,7 @@ static int acpi_power_resume(struct acpi
> if (!device || !acpi_driver_data(device))
> return -EINVAL;
>
> - resource = (struct acpi_power_resource *)acpi_driver_data(device);
> + resource = acpi_driver_data(device);
>
> result = acpi_power_get_state(device->handle, &state);
> if (result)
> diff -puN drivers/acpi/processor_core.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type drivers/acpi/processor_core.c
> --- a/drivers/acpi/processor_core.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/drivers/acpi/processor_core.c
> @@ -818,7 +818,7 @@ static int acpi_processor_add(struct acp
> pr->handle = device->handle;
> strcpy(acpi_device_name(device), ACPI_PROCESSOR_DEVICE_NAME);
> strcpy(acpi_device_class(device), ACPI_PROCESSOR_CLASS);
> - acpi_driver_data(device) = pr;
> + device->driver_data = pr;
>
> return 0;
> }
> diff -puN drivers/acpi/sbs.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type drivers/acpi/sbs.c
> --- a/drivers/acpi/sbs.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/drivers/acpi/sbs.c
> @@ -931,7 +931,7 @@ static int acpi_sbs_add(struct acpi_devi
> sbs->device = device;
> strcpy(acpi_device_name(device), ACPI_SBS_DEVICE_NAME);
> strcpy(acpi_device_class(device), ACPI_SBS_CLASS);
> - acpi_driver_data(device) = sbs;
> + device->driver_data = sbs;
>
> result = acpi_charger_add(sbs);
> if (result)
> diff -puN drivers/acpi/sbshc.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type drivers/acpi/sbshc.c
> --- a/drivers/acpi/sbshc.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/drivers/acpi/sbshc.c
> @@ -282,7 +282,7 @@ static int acpi_smbus_hc_add(struct acpi
> hc->ec = acpi_driver_data(device->parent);
> hc->offset = (val >> 8) & 0xff;
> hc->query_bit = val & 0xff;
> - acpi_driver_data(device) = hc;
> + device->driver_data = hc;
>
> acpi_ec_add_query_handler(hc->ec, hc->query_bit, NULL, smbus_alarm, hc);
> printk(KERN_INFO PREFIX "SBS HC: EC = 0x%p, offset = 0x%0x, query_bit = 0x%0x\n",
> @@ -303,7 +303,7 @@ static int acpi_smbus_hc_remove(struct a
> hc = acpi_driver_data(device);
> acpi_ec_remove_query_handler(hc->ec, hc->query_bit);
> kfree(hc);
> - acpi_driver_data(device) = NULL;
> + device->driver_data = NULL;
> return 0;
> }
>
> diff -puN drivers/acpi/scan.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type drivers/acpi/scan.c
> --- a/drivers/acpi/scan.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/drivers/acpi/scan.c
> @@ -391,7 +391,7 @@ static int acpi_device_remove(struct dev
> acpi_drv->ops.remove(acpi_dev, acpi_dev->removal_type);
> }
> acpi_dev->driver = NULL;
> - acpi_driver_data(acpi_dev) = NULL;
> + acpi_dev->driver_data = NULL;
>
> put_device(dev);
> return 0;
> @@ -545,7 +545,7 @@ acpi_bus_driver_init(struct acpi_device
> result = driver->ops.add(device);
> if (result) {
> device->driver = NULL;
> - acpi_driver_data(device) = NULL;
> + device->driver_data = NULL;
> return result;
> }
>
> diff -puN drivers/acpi/thermal.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type drivers/acpi/thermal.c
> --- a/drivers/acpi/thermal.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/drivers/acpi/thermal.c
> @@ -1647,7 +1647,7 @@ static int acpi_thermal_add(struct acpi_
> strcpy(tz->name, device->pnp.bus_id);
> strcpy(acpi_device_name(device), ACPI_THERMAL_DEVICE_NAME);
> strcpy(acpi_device_class(device), ACPI_THERMAL_CLASS);
> - acpi_driver_data(device) = tz;
> + device->driver_data = tz;
> mutex_init(&tz->lock);
>
>
> diff -puN drivers/acpi/video.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type drivers/acpi/video.c
> --- a/drivers/acpi/video.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/drivers/acpi/video.c
> @@ -1500,7 +1500,7 @@ acpi_video_bus_get_one_device(struct acp
>
> strcpy(acpi_device_name(device), ACPI_VIDEO_DEVICE_NAME);
> strcpy(acpi_device_class(device), ACPI_VIDEO_CLASS);
> - acpi_driver_data(device) = data;
> + device->driver_data = data;
>
> data->device_id = device_id;
> data->video = video;
> @@ -1990,7 +1990,7 @@ static int acpi_video_bus_add(struct acp
> video->device = device;
> strcpy(acpi_device_name(device), ACPI_VIDEO_BUS_NAME);
> strcpy(acpi_device_class(device), ACPI_VIDEO_CLASS);
> - acpi_driver_data(device) = video;
> + device->driver_data = video;
>
> acpi_video_bus_find_cap(video);
> error = acpi_video_bus_check(video);
> @@ -2066,7 +2066,7 @@ static int acpi_video_bus_add(struct acp
> acpi_video_bus_remove_fs(device);
> err_free_video:
> kfree(video);
> - acpi_driver_data(device) = NULL;
> + device->driver_data = NULL;
>
> return error;
> }
> diff -puN drivers/misc/asus-laptop.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type drivers/misc/asus-laptop.c
> --- a/drivers/misc/asus-laptop.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/drivers/misc/asus-laptop.c
> @@ -996,7 +996,7 @@ static int asus_hotk_add(struct acpi_dev
> hotk->handle = device->handle;
> strcpy(acpi_device_name(device), ASUS_HOTK_DEVICE_NAME);
> strcpy(acpi_device_class(device), ASUS_HOTK_CLASS);
> - acpi_driver_data(device) = hotk;
> + device->driver_data = hotk;
> hotk->device = device;
>
> result = asus_hotk_check();
> diff -puN drivers/misc/fujitsu-laptop.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type drivers/misc/fujitsu-laptop.c
> --- a/drivers/misc/fujitsu-laptop.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/drivers/misc/fujitsu-laptop.c
> @@ -490,7 +490,7 @@ static int acpi_fujitsu_add(struct acpi_
> fujitsu->acpi_handle = device->handle;
> sprintf(acpi_device_name(device), "%s", ACPI_FUJITSU_DEVICE_NAME);
> sprintf(acpi_device_class(device), "%s", ACPI_FUJITSU_CLASS);
> - acpi_driver_data(device) = fujitsu;
> + device->driver_data = fujitsu;
>
> status = acpi_install_notify_handler(device->handle,
> ACPI_DEVICE_NOTIFY,
> @@ -703,7 +703,7 @@ static int acpi_fujitsu_hotkey_add(struc
> sprintf(acpi_device_name(device), "%s",
> ACPI_FUJITSU_HOTKEY_DEVICE_NAME);
> sprintf(acpi_device_class(device), "%s", ACPI_FUJITSU_CLASS);
> - acpi_driver_data(device) = fujitsu_hotkey;
> + device->driver_data = fujitsu_hotkey;
>
> status = acpi_install_notify_handler(device->handle,
> ACPI_DEVICE_NOTIFY,
> diff -puN drivers/misc/intel_menlow.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type drivers/misc/intel_menlow.c
> --- a/drivers/misc/intel_menlow.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/drivers/misc/intel_menlow.c
> @@ -175,7 +175,7 @@ static int intel_menlow_memory_add(struc
> goto end;
> }
>
> - acpi_driver_data(device) = cdev;
> + device->driver_data = cdev;
> result = sysfs_create_link(&device->dev.kobj,
> &cdev->device.kobj, "thermal_cooling");
> if (result)
> diff -puN drivers/misc/thinkpad_acpi.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type drivers/misc/thinkpad_acpi.c
> --- a/drivers/misc/thinkpad_acpi.c~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/drivers/misc/thinkpad_acpi.c
> @@ -543,7 +543,7 @@ static int __init setup_acpi_notify(stru
> return -ENODEV;
> }
>
> - acpi_driver_data(ibm->acpi->device) = ibm;
> + ibm->acpi->device->driver_data = ibm;
> sprintf(acpi_device_class(ibm->acpi->device), "%s/%s",
> TPACPI_ACPI_EVENT_PREFIX,
> ibm->name);
> diff -puN include/acpi/acpi_bus.h~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type include/acpi/acpi_bus.h
> --- a/include/acpi/acpi_bus.h~acpi-catch-calls-of-acpi_driver_data-on-pointer-of-wrong-type
> +++ a/include/acpi/acpi_bus.h
> @@ -300,7 +300,11 @@ struct acpi_device {
> enum acpi_bus_removal_type removal_type; /* indicate for different removal type */
> };
>
> -#define acpi_driver_data(d) ((d)->driver_data)
> +static inline void *acpi_driver_data(struct acpi_device *d)
> +{
> + return d->driver_data;
> +}
> +
> #define to_acpi_device(d) container_of(d, struct acpi_device, dev)
> #define to_acpi_driver(d) container_of(d, struct acpi_driver, drv)
>
> _
>
next prev parent reply other threads:[~2008-10-10 16:52 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-09-22 21:37 [patch 4/5] acpi: catch calls of acpi_driver_data on pointer of wrong type akpm
2008-10-10 3:50 ` Andrew Morton
2008-10-10 16:52 ` Len Brown [this message]
2008-10-10 17:29 ` Len Brown
2008-10-10 18:06 ` Andrew Morton
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=alpine.LFD.1.10.0810101235050.7059@localhost.localdomain \
--to=lenb@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=hare@suse.de \
--cc=linux-acpi@vger.kernel.org \
--cc=pavel@suse.cz \
/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