From: Len Brown <lenb@kernel.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Cedric Le Goater <clg@fr.ibm.com>,
linux-kernel@vger.kernel.org, Shaohua Li <shaohua.li@intel.com>
Subject: Re: 2.6.23-rc1-mm1
Date: Wed, 25 Jul 2007 19:26:44 -0400 [thread overview]
Message-ID: <200707251926.44656.lenb@kernel.org> (raw)
In-Reply-To: <20070725115804.5b8efe83.akpm@linux-foundation.org>
On Wednesday 25 July 2007 14:58, Andrew Morton wrote:
> On Wed, 25 Jul 2007 13:23:04 -0400
> Len Brown <lenb@kernel.org> wrote:
>
> > Andrew, you want to re-pull the acpi tree, or do you want me to send
> > you some patches on top of the current mm?
>
> I'd appreciate a fix for this one, please - I'll drop it int he hot-fixes
> directory as quite a few people seem to be hitting this.
Maybe simpler for mm1 to go backwards in time rather than forwards.
This should fix the problem at hand.
cheers,
-Len
commit 106994f83cdd97c77bfe1b333ca369560b6d0649
Author: Len Brown <len.brown@intel.com>
Date: Wed Jul 25 19:17:38 2007 -0400
ACPI: revert d-states branch from Jun-17 to Jun-19 for 2.6.23-rc1-mm1
Signed-off-by: Len Brown <len.brown@intel.com>
---
drivers/acpi/sleep/main.c | 75 ---------------------------------
drivers/pci/pci-acpi.c | 28 +-----------
drivers/pci/pci.c | 8 +--
drivers/pci/pci.h | 2
drivers/pnp/driver.c | 5 --
drivers/pnp/pnpacpi/core.c | 14 ------
include/acpi/acpi_bus.h | 2
include/linux/pnp.h | 4 -
8 files changed, 9 insertions(+), 129 deletions(-)
diff --git a/drivers/acpi/sleep/main.c b/drivers/acpi/sleep/main.c
index 34abe8e..ada2a6e 100644
--- a/drivers/acpi/sleep/main.c
+++ b/drivers/acpi/sleep/main.c
@@ -261,81 +261,6 @@ static struct platform_hibernation_ops acpi_hibernation_ops = {
};
#endif /* CONFIG_SOFTWARE_SUSPEND */
-/**
- * acpi_pm_device_sleep_state - return preferred power state of ACPI device
- * in the system sleep state given by %acpi_target_sleep_state
- * @dev: device to examine
- * @wake: if set, the device should be able to wake up the system
- * @d_min_p: used to store the upper limit of allowed states range
- * Return value: preferred power state of the device on success, -ENODEV on
- * failure (ie. if there's no 'struct acpi_device' for @dev)
- *
- * Find the lowest power (highest number) ACPI device power state that
- * device @dev can be in while the system is in the sleep state represented
- * by %acpi_target_sleep_state. If @wake is nonzero, the device should be
- * able to wake up the system from this sleep state. If @d_min_p is set,
- * the highest power (lowest number) device power state of @dev allowed
- * in this system sleep state is stored at the location pointed to by it.
- *
- * The caller must ensure that @dev is valid before using this function.
- * The caller is also responsible for figuring out if the device is
- * supposed to be able to wake up the system and passing this information
- * via @wake.
- */
-
-int acpi_pm_device_sleep_state(struct device *dev, int wake, int *d_min_p)
-{
- acpi_handle handle = DEVICE_ACPI_HANDLE(dev);
- struct acpi_device *adev;
- char acpi_method[] = "_SxD";
- unsigned long d_min, d_max;
-
- if (!handle || ACPI_FAILURE(acpi_bus_get_device(handle, &adev))) {
- printk(KERN_ERR "ACPI handle has no context!\n");
- return -ENODEV;
- }
-
- acpi_method[2] = '0' + acpi_target_sleep_state;
- /*
- * If the sleep state is S0, we will return D3, but if the device has
- * _S0W, we will use the value from _S0W
- */
- d_min = ACPI_STATE_D0;
- d_max = ACPI_STATE_D3;
-
- /*
- * If present, _SxD methods return the minimum D-state (highest power
- * state) we can use for the corresponding S-states. Otherwise, the
- * minimum D-state is D0 (ACPI 3.x).
- *
- * NOTE: We rely on acpi_evaluate_integer() not clobbering the integer
- * provided -- that's our fault recovery, we ignore retval.
- */
- if (acpi_target_sleep_state > ACPI_STATE_S0)
- acpi_evaluate_integer(handle, acpi_method, NULL, &d_min);
-
- /*
- * If _PRW says we can wake up the system from the target sleep state,
- * the D-state returned by _SxD is sufficient for that (we assume a
- * wakeup-aware driver if wake is set). Still, if _SxW exists
- * (ACPI 3.x), it should return the maximum (lowest power) D-state that
- * can wake the system. _S0W may be valid, too.
- */
- if (acpi_target_sleep_state == ACPI_STATE_S0 ||
- (wake && adev->wakeup.state.enabled &&
- adev->wakeup.sleep_state <= acpi_target_sleep_state)) {
- acpi_method[3] = 'W';
- acpi_evaluate_integer(handle, acpi_method, NULL, &d_max);
- /* Sanity check */
- if (d_max < d_min)
- d_min = d_max;
- }
-
- if (d_min_p)
- *d_min_p = d_min;
- return d_max;
-}
-
/*
* Toshiba fails to preserve interrupts over S1, reinitialization
* of 8259 is needed after S1 resume.
diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
index 67c63d1..c806249 100644
--- a/drivers/pci/pci-acpi.c
+++ b/drivers/pci/pci-acpi.c
@@ -245,33 +245,16 @@ EXPORT_SYMBOL(pci_osc_control_set);
* currently we simply return _SxD, if present.
*/
-static pci_power_t acpi_pci_choose_state(struct pci_dev *pdev,
- pm_message_t state)
+static int acpi_pci_choose_state(struct pci_dev *pdev, pm_message_t state)
{
- int acpi_state;
-
- acpi_state = acpi_pm_device_sleep_state(&pdev->dev,
- device_may_wakeup(&pdev->dev), NULL);
- if (acpi_state < 0)
- return PCI_POWER_ERROR;
-
- switch (acpi_state) {
- case ACPI_STATE_D0:
- return PCI_D0;
- case ACPI_STATE_D1:
- return PCI_D1;
- case ACPI_STATE_D2:
- return PCI_D2;
- case ACPI_STATE_D3:
- return PCI_D3hot;
- }
- return PCI_POWER_ERROR;
+ /* TBD */
+
+ return -ENODEV;
}
static int acpi_pci_set_power_state(struct pci_dev *dev, pci_power_t state)
{
acpi_handle handle = DEVICE_ACPI_HANDLE(&dev->dev);
- acpi_handle tmp;
static int state_conv[] = {
[0] = 0,
[1] = 1,
@@ -283,9 +266,6 @@ static int acpi_pci_set_power_state(struct pci_dev *dev, pci_power_t state)
if (!handle)
return -ENODEV;
- /* If the ACPI device has _EJ0, ignore the device */
- if (ACPI_SUCCESS(acpi_get_handle(handle, "_EJ0", &tmp)))
- return 0;
return acpi_bus_set_power(handle, acpi_state);
}
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index b731cd1..15632b2 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -499,7 +499,7 @@ pci_set_power_state(struct pci_dev *dev, pci_power_t state)
return 0;
}
-pci_power_t (*platform_pci_choose_state)(struct pci_dev *dev, pm_message_t state);
+int (*platform_pci_choose_state)(struct pci_dev *dev, pm_message_t state);
/**
* pci_choose_state - Choose the power state of a PCI device
@@ -513,15 +513,15 @@ pci_power_t (*platform_pci_choose_state)(struct pci_dev *dev, pm_message_t state
pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state)
{
- pci_power_t ret;
+ int ret;
if (!pci_find_capability(dev, PCI_CAP_ID_PM))
return PCI_D0;
if (platform_pci_choose_state) {
ret = platform_pci_choose_state(dev, state);
- if (ret != PCI_POWER_ERROR)
- return ret;
+ if (ret >= 0)
+ state.event = ret;
}
switch (state.event) {
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index 3bdfc3e..5692c3f 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -7,7 +7,7 @@ extern void pci_remove_sysfs_dev_files(struct pci_dev *pdev);
extern void pci_cleanup_rom(struct pci_dev *dev);
/* Firmware callbacks */
-extern pci_power_t (*platform_pci_choose_state)(struct pci_dev *dev, pm_message_t state);
+extern int (*platform_pci_choose_state)(struct pci_dev *dev, pm_message_t state);
extern int (*platform_pci_set_power_state)(struct pci_dev *dev, pci_power_t state);
extern int pci_user_read_config_byte(struct pci_dev *dev, int where, u8 *val);
diff --git a/drivers/pnp/driver.c b/drivers/pnp/driver.c
index 1432806..e161423 100644
--- a/drivers/pnp/driver.c
+++ b/drivers/pnp/driver.c
@@ -167,8 +167,6 @@ static int pnp_bus_suspend(struct device *dev, pm_message_t state)
return error;
}
- if (pnp_dev->protocol && pnp_dev->protocol->suspend)
- pnp_dev->protocol->suspend(pnp_dev, state);
return 0;
}
@@ -181,9 +179,6 @@ static int pnp_bus_resume(struct device *dev)
if (!pnp_drv)
return 0;
- if (pnp_dev->protocol && pnp_dev->protocol->resume)
- pnp_dev->protocol->resume(pnp_dev);
-
if (!(pnp_drv->flags & PNP_DRIVER_RES_DO_NOT_CHANGE)) {
error = pnp_start_dev(pnp_dev);
if (error)
diff --git a/drivers/pnp/pnpacpi/core.c b/drivers/pnp/pnpacpi/core.c
index c37a558..a005487 100644
--- a/drivers/pnp/pnpacpi/core.c
+++ b/drivers/pnp/pnpacpi/core.c
@@ -119,25 +119,11 @@ static int pnpacpi_disable_resources(struct pnp_dev *dev)
return ACPI_FAILURE(status) ? -ENODEV : 0;
}
-static int pnpacpi_suspend(struct pnp_dev *dev, pm_message_t state)
-{
- return acpi_bus_set_power((acpi_handle)dev->data,
- acpi_pm_device_sleep_state(&dev->dev,
- device_may_wakeup(&dev->dev), NULL));
-}
-
-static int pnpacpi_resume(struct pnp_dev *dev)
-{
- return acpi_bus_set_power((acpi_handle)dev->data, ACPI_STATE_D0);
-}
-
static struct pnp_protocol pnpacpi_protocol = {
.name = "Plug and Play ACPI",
.get = pnpacpi_get_resources,
.set = pnpacpi_set_resources,
.disable = pnpacpi_disable_resources,
- .suspend = pnpacpi_suspend,
- .resume = pnpacpi_resume,
};
static int __init pnpacpi_add_device(struct acpi_device *device)
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
index a9f73ef..5e3dcf3 100644
--- a/include/acpi/acpi_bus.h
+++ b/include/acpi/acpi_bus.h
@@ -365,8 +365,6 @@ acpi_handle acpi_get_child(acpi_handle, acpi_integer);
acpi_handle acpi_get_pci_rootbridge_handle(unsigned int, unsigned int);
#define DEVICE_ACPI_HANDLE(dev) ((acpi_handle)((dev)->archdata.acpi_handle))
-int acpi_pm_device_sleep_state(struct device *, int, int *);
-
#endif /* CONFIG_ACPI */
#endif /*__ACPI_BUS_H__*/
diff --git a/include/linux/pnp.h b/include/linux/pnp.h
index 66edb22..2a1897e 100644
--- a/include/linux/pnp.h
+++ b/include/linux/pnp.h
@@ -335,10 +335,6 @@ struct pnp_protocol {
int (*set)(struct pnp_dev *dev, struct pnp_resource_table *res);
int (*disable)(struct pnp_dev *dev);
- /* protocol specific suspend/resume */
- int (*suspend)(struct pnp_dev *dev, pm_message_t state);
- int (*resume)(struct pnp_dev *dev);
-
/* used by pnp layer only (look but don't touch) */
unsigned char number; /* protocol number*/
struct device dev; /* link to driver model */
next prev parent reply other threads:[~2007-07-25 23:27 UTC|newest]
Thread overview: 138+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-25 11:03 2.6.23-rc1-mm1 Andrew Morton
2007-07-25 12:25 ` 2.6.23-rc1-mm1 Cedric Le Goater
2007-07-25 17:23 ` 2.6.23-rc1-mm1 Len Brown
2007-07-25 18:58 ` 2.6.23-rc1-mm1 Andrew Morton
2007-07-25 19:13 ` 2.6.23-rc1-mm1 Torsten Kaiser
2007-07-25 20:22 ` 2.6.23-rc1-mm1 Torsten Kaiser
2007-07-25 20:36 ` 2.6.23-rc1-mm1 Andrew Morton
2007-07-25 20:36 ` 2.6.23-rc1-mm1 Andrew Morton
2007-07-25 21:52 ` 2.6.23-rc1-mm1 Torsten Kaiser
2007-07-25 21:52 ` 2.6.23-rc1-mm1 Torsten Kaiser
2007-07-26 7:25 ` 2.6.23-rc1-mm1 Andrew Morton
2007-07-26 7:25 ` 2.6.23-rc1-mm1 Andrew Morton
2007-07-26 17:54 ` 2.6.23-rc1-mm1 Torsten Kaiser
2007-07-26 17:54 ` 2.6.23-rc1-mm1 Torsten Kaiser
2007-07-28 14:03 ` 2.6.23-rc1-mm1 Torsten Kaiser
2007-07-28 14:03 ` 2.6.23-rc1-mm1 Torsten Kaiser
2007-07-25 23:26 ` Len Brown [this message]
2007-07-26 9:41 ` 2.6.23-rc1-mm1 Mel Gorman
2007-07-26 13:53 ` 2.6.23-rc1-mm1 Cedric Le Goater
2007-07-25 12:40 ` 2.6.23-rc1-mm1 Cedric Le Goater
2007-07-25 20:05 ` 2.6.23-rc1-mm1 Andrew Morton
2007-07-25 12:55 ` 2.6.23-rc1-mm1 Cedric Le Goater
2007-07-25 13:48 ` 2.6.23-rc1-mm1: chipsfb_pci_suspend problem Rafael J. Wysocki
2007-07-25 20:22 ` Andrew Morton
2007-07-25 22:45 ` Pavel Machek
2007-07-25 13:36 ` [-mm patch] one e1000 driver should be enough for everyone Adrian Bunk
2007-07-25 13:48 ` Jeff Garzik
2007-07-25 14:46 ` Adrian Bunk
2007-07-25 15:05 ` Jeff Garzik
2007-07-25 15:21 ` Kok, Auke
2007-07-25 15:23 ` Jeff Garzik
2007-07-25 20:50 ` Andrew Morton
2007-07-25 16:32 ` 2.6.23-rc1-mm1 Michal Piotrowski
2007-07-25 21:56 ` 2.6.23-rc1-mm1 Andrew Morton
2007-07-25 16:36 ` 2.6.23-rc1-mm1 -- mostly fails to build Andy Whitcroft
2007-07-25 17:04 ` Sam Ravnborg
2007-07-25 18:06 ` 2.6.23-rc1-mm1: SCSI_SRP_ATTRS compile error Adrian Bunk
2007-07-26 10:49 ` FUJITA Tomonori
2007-07-25 22:41 ` 2.6.23-rc1-mm1 -- mostly fails to build Andy Whitcroft
2007-07-26 5:56 ` Andrew Morton
2007-07-26 17:53 ` Yinghai Lu
2007-07-25 18:15 ` 2.6.23-rc1-mm1: net/ipv4/fib_trie.c compile error Adrian Bunk
2007-07-25 18:22 ` 2.6.23-rc1-mm1: reiser4 <-> lzo " Adrian Bunk
2007-07-25 18:44 ` Edward Shishkin
2007-07-27 12:35 ` Edward Shishkin
2007-07-27 15:11 ` Richard Purdie
2007-07-25 18:48 ` 2.6.23-rc1-mm1 Michal Piotrowski
2007-07-25 18:53 ` 2.6.23-rc1-mm1 Sam Ravnborg
2007-07-25 19:18 ` 2.6.23-rc1-mm1 H. Peter Anvin
2007-07-25 19:21 ` 2.6.23-rc1-mm1 Sam Ravnborg
2007-07-25 20:58 ` 2.6.23-rc1-mm1 Gabriel C
2007-07-25 21:05 ` 2.6.23-rc1-mm1 Gabriel C
2007-07-25 21:11 ` 2.6.23-rc1-mm1 H. Peter Anvin
2007-07-25 21:13 ` 2.6.23-rc1-mm1 Gabriel C
2007-07-25 21:18 ` 2.6.23-rc1-mm1 H. Peter Anvin
2007-07-25 21:26 ` 2.6.23-rc1-mm1 Gabriel C
2007-07-26 0:07 ` 2.6.23-rc1-mm1 Greg KH
2007-07-26 0:28 ` 2.6.23-rc1-mm1 Andrew Morton
2007-07-26 1:55 ` 2.6.23-rc1-mm1 Dave Young
2007-07-26 2:23 ` 2.6.23-rc1-mm1 Andrew Morton
2007-07-26 20:18 ` 2.6.23-rc1-mm1 Dave Hansen
2007-07-25 20:42 ` 2.6.23-rc1-mm1 - drivers/char/nozomi.c overflow in implicit constant conversion , warnings Gabriel C
2007-07-26 5:42 ` Greg KH
2007-07-25 21:01 ` 2.6.23-rc1-mm1: m32r is_init() compile error Adrian Bunk
2007-07-25 21:42 ` sukadev
2007-07-25 21:17 ` 2.6.23-rc1-mm1: git-kgdb breaks sh compilation Adrian Bunk
2007-07-26 1:45 ` Paul Mundt
2007-07-25 22:03 ` 2.6.23-rc1-mm1 - seems OK on Dell Latitude D820, except for tpm_tis Valdis.Kletnieks
2007-07-26 3:37 ` Andrew Morton
2007-07-27 4:00 ` Valdis.Kletnieks
2007-07-27 13:28 ` Valdis.Kletnieks
2007-07-27 18:07 ` Andrew Morton
2007-07-27 19:44 ` Valdis.Kletnieks
2007-07-27 22:43 ` Bjorn Helgaas
2007-07-30 18:09 ` Bjorn Helgaas
2007-07-30 23:53 ` Valdis.Kletnieks
2007-07-31 18:48 ` Valdis.Kletnieks
2007-07-31 20:01 ` Bjorn Helgaas
2007-07-31 21:31 ` Valdis.Kletnieks
2007-07-31 23:05 ` Bjorn Helgaas
2007-07-26 5:26 ` [-mm patch] DMA engine kconfig improvements Adrian Bunk
2007-08-04 2:15 ` Dan Williams
2007-08-10 0:43 ` Adrian Bunk
2007-08-15 23:36 ` Nelson, Shannon
2007-07-26 12:11 ` [PATCH] sparsemem: ensure we initialise the node mapping for SPARSEMEM_STATIC Andy Whitcroft
2007-07-26 12:58 ` 2.6.23-rc1-mm1 sparsemem_vmemamp fix KAMEZAWA Hiroyuki
2007-07-26 14:39 ` Andy Whitcroft
2007-07-26 14:44 ` Andy Whitcroft
2007-07-27 13:28 ` [-mm patch] xtensa console.c: remove duplicate #include Frederik Deweerdt
2007-07-28 15:44 ` NETPOLL=y , NETDEVICES=n compile error ( Re: 2.6.23-rc1-mm1 ) Gabriel C
2007-07-28 17:26 ` Andrew Morton
2007-07-28 18:42 ` Gabriel C
2007-07-31 8:32 ` Jarek Poplawski
2007-07-31 10:14 ` Gabriel C
2007-07-31 11:44 ` Jason Wessel
2007-07-31 12:47 ` Jarek Poplawski
2007-07-31 12:17 ` Jarek Poplawski
2007-07-31 15:05 ` Gabriel C
2007-08-01 9:59 ` Jarek Poplawski
2007-08-02 2:02 ` Matt Mackall
2007-08-02 9:00 ` Jarek Poplawski
2007-08-02 15:59 ` Matt Mackall
2007-08-03 7:30 ` Jarek Poplawski
2007-08-02 9:36 ` Sam Ravnborg
2007-08-02 10:32 ` Satyam Sharma
2007-08-02 11:40 ` Satyam Sharma
2007-08-02 11:40 ` Jarek Poplawski
2007-08-02 11:56 ` Satyam Sharma
2007-08-02 12:52 ` Jarek Poplawski
2007-08-06 11:51 ` [PATCH] docs: note about select in kconfig-language.txt Jarek Poplawski
2007-07-28 16:36 ` DCA=n , INTEL_IOATDMA=y compile error ( Re: 2.6.23-rc1-mm1 ) Gabriel C
2007-07-28 16:47 ` sound/pci/ac97/ac97_patch.h - declared 'static' but never defined warnings " Gabriel C
2007-07-28 17:07 ` mm/sparse.c compile error " Gabriel C
2007-07-28 17:30 ` Andrew Morton
2007-07-30 12:16 ` Andy Whitcroft
2007-07-28 19:32 ` [PATCH -mm] Fix libata warnings with CONFIG_PM=n Gabriel C
2007-07-29 14:57 ` [-mm patch] make hugetlbfs_read() static Adrian Bunk
2007-07-29 14:57 ` [-mm patch] fs/ecryptfs/: make code static Adrian Bunk
2007-07-29 14:58 ` [-mm patch] make struct sdio_dev_attrs[] static Adrian Bunk
2007-07-29 19:29 ` Pierre Ossman
2007-07-29 14:58 ` [-mm patch] MTD onenand_sim.c: make struct info static Adrian Bunk
2007-07-29 14:58 ` Adrian Bunk
2007-07-29 14:58 ` [-mm patch] make scsi_host_link_pm_policy() static Adrian Bunk
2007-07-29 14:58 ` [-mm patch] USB: make dev_attr_authorized_default static Adrian Bunk
2007-07-31 19:13 ` Inaky Perez-Gonzalez
2007-07-29 14:59 ` [-mm patch] kernel/printk.c: make 2 variables static Adrian Bunk
2007-07-29 16:51 ` Randy Dunlap
2007-07-29 14:59 ` [-mm patch] export v4l2_int_device_{,un}register Adrian Bunk
2007-07-29 14:59 ` [-mm patch] kernel/pid.c: remove unused exports Adrian Bunk
2007-07-29 15:00 ` [-mm patch] security/ cleanups Adrian Bunk
2007-07-30 11:47 ` James Morris
2007-07-29 15:49 ` 2.6.23-rc1-mm1 Grant Wilson
2007-07-30 9:58 ` 2.6.23-rc1-mm1 Dave Young
2007-07-30 18:27 ` 2.6.23-rc1-mm1 Andrew Morton
2007-07-30 18:42 ` 2.6.23-rc1-mm1 Christoph Hellwig
2007-07-30 22:18 ` 2.6.23-rc1-mm1 Satyam Sharma
2007-07-31 1:21 ` 2.6.23-rc1-mm1 Dave Young
2007-08-01 15:24 ` 2.6.23-rc1-mm1 - loopback mount of files fails loop-use-unlocked_ioctl.patch Valdis.Kletnieks
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=200707251926.44656.lenb@kernel.org \
--to=lenb@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=clg@fr.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=shaohua.li@intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.