From: Daniel Vetter <daniel@ffwll.ch> To: Thomas Zimmermann <tzimmermann@suse.de> Cc: "Daniel Vetter" <daniel.vetter@ffwll.ch>, "DRI Development" <dri-devel@lists.freedesktop.org>, "Intel Graphics Development" <intel-gfx@lists.freedesktop.org>, LKML <linux-kernel@vger.kernel.org>, "Daniel Vetter" <daniel.vetter@intel.com>, "Bartlomiej Zolnierkiewicz" <b.zolnierkie@samsung.com>, "Hans de Goede" <hdegoede@redhat.com>, "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>, "Noralf Trønnes" <noralf@tronnes.org>, "Yisheng Xie" <ysxie@foxmail.com>, "Peter Rosin" <peda@axentia.se>, "Michał Mirosław" <mirq-linux@rere.qmqm.pl>, "Mikulas Patocka" <mpatocka@redhat.com>, linux-fbdev@vger.kernel.org Subject: Re: [PATCH 10/33] fbcon: call fbcon_fb_(un)registered directly Date: Tue, 21 May 2019 17:09:39 +0200 [thread overview] Message-ID: <20190521150939.GQ21222@phenom.ffwll.local> (raw) In-Reply-To: <8aecc0d8-83a3-8144-a266-441a5c1d5db5@suse.de> On Mon, May 20, 2019 at 10:37:53AM +0200, Thomas Zimmermann wrote: > Hi > > Am 20.05.19 um 10:33 schrieb Thomas Zimmermann: > > Hi > > > > Am 20.05.19 um 10:21 schrieb Daniel Vetter: > > ... > >> diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c > >> index fc3d34a8ea5b..ae2db31eeba7 100644 > >> --- a/drivers/video/fbdev/core/fbmem.c > >> +++ b/drivers/video/fbdev/core/fbmem.c > >> @@ -1660,7 +1660,6 @@ MODULE_PARM_DESC(lockless_register_fb, > >> static int do_register_framebuffer(struct fb_info *fb_info) > >> { > >> int i, ret; > >> - struct fb_event event; > >> struct fb_videomode mode; > >> > >> if (fb_check_foreignness(fb_info)) > >> @@ -1723,7 +1722,6 @@ static int do_register_framebuffer(struct fb_info *fb_info) > >> fb_add_videomode(&mode, &fb_info->modelist); > >> registered_fb[i] = fb_info; > >> > >> - event.info = fb_info; > >> if (!lockless_register_fb) > >> console_lock(); > >> else > >> @@ -1732,9 +1730,8 @@ static int do_register_framebuffer(struct fb_info *fb_info) > >> ret = -ENODEV; > >> goto unlock_console; > >> } > >> - ret = 0; > >> > >> - fb_notifier_call_chain(FB_EVENT_FB_REGISTERED, &event); > >> + ret = fbcon_fb_registered(fb_info); > > > > What about backlight drivers? [1] Apparently these also use the > > notifiers. [2] From my understanding, backlight drivers would stop > > working with this change. > > I just saw that backlight drivers only care about blanking and > unblanking. Never mind then. I did screw this up for one event for the mode changes. But should be fixed in the next series. I also added a patch to simplify the backlight/lcd notifier, since it doesn't need to filter events anymore after this series - the only events left are the ones backlight cares about. Cheers, Daniel > > Best regards > Thomas > > > > > Best regards > > Thomas > > > > [1] > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/video/backlight > > [2] > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/video/backlight/backlight.c#n40 > > > >> unlock_fb_info(fb_info); > >> unlock_console: > >> if (!lockless_register_fb) > >> @@ -1771,7 +1768,6 @@ static int __unlink_framebuffer(struct fb_info *fb_info); > >> > >> static int do_unregister_framebuffer(struct fb_info *fb_info) > >> { > >> - struct fb_event event; > >> int ret; > >> > >> ret = unbind_console(fb_info); > >> @@ -1789,9 +1785,8 @@ static int do_unregister_framebuffer(struct fb_info *fb_info) > >> registered_fb[fb_info->node] = NULL; > >> num_registered_fb--; > >> fb_cleanup_device(fb_info); > >> - event.info = fb_info; > >> console_lock(); > >> - fb_notifier_call_chain(FB_EVENT_FB_UNREGISTERED, &event); > >> + fbcon_fb_unregistered(fb_info); > >> console_unlock(); > >> > >> /* this may free fb info */ > >> diff --git a/include/linux/fb.h b/include/linux/fb.h > >> index f52ef0ad6781..701abaf79c87 100644 > >> --- a/include/linux/fb.h > >> +++ b/include/linux/fb.h > >> @@ -136,10 +136,6 @@ struct fb_cursor_user { > >> #define FB_EVENT_RESUME 0x03 > >> /* An entry from the modelist was removed */ > >> #define FB_EVENT_MODE_DELETE 0x04 > >> -/* A driver registered itself */ > >> -#define FB_EVENT_FB_REGISTERED 0x05 > >> -/* A driver unregistered itself */ > >> -#define FB_EVENT_FB_UNREGISTERED 0x06 > >> /* CONSOLE-SPECIFIC: get console to framebuffer mapping */ > >> #define FB_EVENT_GET_CONSOLE_MAP 0x07 > >> /* CONSOLE-SPECIFIC: set console to framebuffer mapping */ > >> diff --git a/include/linux/fbcon.h b/include/linux/fbcon.h > >> index f68a7db14165..94a71e9e1257 100644 > >> --- a/include/linux/fbcon.h > >> +++ b/include/linux/fbcon.h > >> @@ -4,9 +4,13 @@ > >> #ifdef CONFIG_FRAMEBUFFER_CONSOLE > >> void __init fb_console_init(void); > >> void __exit fb_console_exit(void); > >> +int fbcon_fb_registered(struct fb_info *info); > >> +void fbcon_fb_unregistered(struct fb_info *info); > >> #else > >> static inline void fb_console_init(void) {} > >> static inline void fb_console_exit(void) {} > >> +static inline int fbcon_fb_registered(struct fb_info *info) { return 0; } > >> +static inline void fbcon_fb_unregistered(struct fb_info *info) {} > >> #endif > >> > >> #endif /* _LINUX_FBCON_H */ > >> > > > > -- > Thomas Zimmermann > Graphics Driver Developer > SUSE Linux GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany > GF: Felix Imendörffer, Mary Higgins, Sri Rasiah > HRB 21284 (AG Nürnberg) > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch
WARNING: multiple messages have this Message-ID (diff)
From: Daniel Vetter <daniel@ffwll.ch> To: Thomas Zimmermann <tzimmermann@suse.de> Cc: "Daniel Vetter" <daniel.vetter@ffwll.ch>, "DRI Development" <dri-devel@lists.freedesktop.org>, "Intel Graphics Development" <intel-gfx@lists.freedesktop.org>, LKML <linux-kernel@vger.kernel.org>, "Daniel Vetter" <daniel.vetter@intel.com>, "Bartlomiej Zolnierkiewicz" <b.zolnierkie@samsung.com>, "Hans de Goede" <hdegoede@redhat.com>, "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>, "Noralf Trønnes" <noralf@tronnes.org>, "Yisheng Xie" <ysxie@foxmail.com>, "Peter Rosin" <peda@axentia.se>, "Michał Mirosław" <mirq-linux@rere.qmqm.pl>, "Mikulas Patocka" <mpatocka@redhat.com>, linux-fbdev@vger.kernel.org Subject: Re: [PATCH 10/33] fbcon: call fbcon_fb_(un)registered directly Date: Tue, 21 May 2019 15:09:39 +0000 [thread overview] Message-ID: <20190521150939.GQ21222@phenom.ffwll.local> (raw) In-Reply-To: <8aecc0d8-83a3-8144-a266-441a5c1d5db5@suse.de> On Mon, May 20, 2019 at 10:37:53AM +0200, Thomas Zimmermann wrote: > Hi > > Am 20.05.19 um 10:33 schrieb Thomas Zimmermann: > > Hi > > > > Am 20.05.19 um 10:21 schrieb Daniel Vetter: > > ... > >> diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c > >> index fc3d34a8ea5b..ae2db31eeba7 100644 > >> --- a/drivers/video/fbdev/core/fbmem.c > >> +++ b/drivers/video/fbdev/core/fbmem.c > >> @@ -1660,7 +1660,6 @@ MODULE_PARM_DESC(lockless_register_fb, > >> static int do_register_framebuffer(struct fb_info *fb_info) > >> { > >> int i, ret; > >> - struct fb_event event; > >> struct fb_videomode mode; > >> > >> if (fb_check_foreignness(fb_info)) > >> @@ -1723,7 +1722,6 @@ static int do_register_framebuffer(struct fb_info *fb_info) > >> fb_add_videomode(&mode, &fb_info->modelist); > >> registered_fb[i] = fb_info; > >> > >> - event.info = fb_info; > >> if (!lockless_register_fb) > >> console_lock(); > >> else > >> @@ -1732,9 +1730,8 @@ static int do_register_framebuffer(struct fb_info *fb_info) > >> ret = -ENODEV; > >> goto unlock_console; > >> } > >> - ret = 0; > >> > >> - fb_notifier_call_chain(FB_EVENT_FB_REGISTERED, &event); > >> + ret = fbcon_fb_registered(fb_info); > > > > What about backlight drivers? [1] Apparently these also use the > > notifiers. [2] From my understanding, backlight drivers would stop > > working with this change. > > I just saw that backlight drivers only care about blanking and > unblanking. Never mind then. I did screw this up for one event for the mode changes. But should be fixed in the next series. I also added a patch to simplify the backlight/lcd notifier, since it doesn't need to filter events anymore after this series - the only events left are the ones backlight cares about. Cheers, Daniel > > Best regards > Thomas > > > > > Best regards > > Thomas > > > > [1] > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/video/backlight > > [2] > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/video/backlight/backlight.c#n40 > > > >> unlock_fb_info(fb_info); > >> unlock_console: > >> if (!lockless_register_fb) > >> @@ -1771,7 +1768,6 @@ static int __unlink_framebuffer(struct fb_info *fb_info); > >> > >> static int do_unregister_framebuffer(struct fb_info *fb_info) > >> { > >> - struct fb_event event; > >> int ret; > >> > >> ret = unbind_console(fb_info); > >> @@ -1789,9 +1785,8 @@ static int do_unregister_framebuffer(struct fb_info *fb_info) > >> registered_fb[fb_info->node] = NULL; > >> num_registered_fb--; > >> fb_cleanup_device(fb_info); > >> - event.info = fb_info; > >> console_lock(); > >> - fb_notifier_call_chain(FB_EVENT_FB_UNREGISTERED, &event); > >> + fbcon_fb_unregistered(fb_info); > >> console_unlock(); > >> > >> /* this may free fb info */ > >> diff --git a/include/linux/fb.h b/include/linux/fb.h > >> index f52ef0ad6781..701abaf79c87 100644 > >> --- a/include/linux/fb.h > >> +++ b/include/linux/fb.h > >> @@ -136,10 +136,6 @@ struct fb_cursor_user { > >> #define FB_EVENT_RESUME 0x03 > >> /* An entry from the modelist was removed */ > >> #define FB_EVENT_MODE_DELETE 0x04 > >> -/* A driver registered itself */ > >> -#define FB_EVENT_FB_REGISTERED 0x05 > >> -/* A driver unregistered itself */ > >> -#define FB_EVENT_FB_UNREGISTERED 0x06 > >> /* CONSOLE-SPECIFIC: get console to framebuffer mapping */ > >> #define FB_EVENT_GET_CONSOLE_MAP 0x07 > >> /* CONSOLE-SPECIFIC: set console to framebuffer mapping */ > >> diff --git a/include/linux/fbcon.h b/include/linux/fbcon.h > >> index f68a7db14165..94a71e9e1257 100644 > >> --- a/include/linux/fbcon.h > >> +++ b/include/linux/fbcon.h > >> @@ -4,9 +4,13 @@ > >> #ifdef CONFIG_FRAMEBUFFER_CONSOLE > >> void __init fb_console_init(void); > >> void __exit fb_console_exit(void); > >> +int fbcon_fb_registered(struct fb_info *info); > >> +void fbcon_fb_unregistered(struct fb_info *info); > >> #else > >> static inline void fb_console_init(void) {} > >> static inline void fb_console_exit(void) {} > >> +static inline int fbcon_fb_registered(struct fb_info *info) { return 0; } > >> +static inline void fbcon_fb_unregistered(struct fb_info *info) {} > >> #endif > >> > >> #endif /* _LINUX_FBCON_H */ > >> > > > > -- > Thomas Zimmermann > Graphics Driver Developer > SUSE Linux GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany > GF: Felix Imendörffer, Mary Higgins, Sri Rasiah > HRB 21284 (AG Nürnberg) > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch
next prev parent reply other threads:[~2019-05-21 15:09 UTC|newest] Thread overview: 120+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-05-20 8:21 [PATCH 00/33] fbcon notifier begone! Daniel Vetter 2019-05-20 8:21 ` [PATCH 01/33] dummycon: Sprinkle locking checks Daniel Vetter 2019-05-20 8:21 ` [PATCH 02/33] fbdev: locking check for fb_set_suspend Daniel Vetter 2019-05-20 8:21 ` [PATCH 03/33] vt: might_sleep() annotation for do_blank_screen Daniel Vetter 2019-05-20 8:21 ` [PATCH 04/33] vt: More locking checks Daniel Vetter 2019-05-20 8:21 ` Daniel Vetter 2019-05-20 8:21 ` [PATCH 05/33] fbdev/sa1100fb: Remove dead code Daniel Vetter 2019-05-20 8:21 ` Daniel Vetter 2019-05-20 8:21 ` [PATCH 06/33] fbdev/cyber2000: Remove struct display Daniel Vetter 2019-05-20 8:21 ` Daniel Vetter 2019-05-20 8:21 ` [PATCH 07/33] fbdev/aty128fb: Remove dead code Daniel Vetter 2019-05-20 8:21 ` Daniel Vetter 2019-05-20 8:21 ` [PATCH 08/33] fbcon: s/struct display/struct fbcon_display/ Daniel Vetter 2019-05-20 8:21 ` Daniel Vetter 2019-05-20 8:21 ` [PATCH 09/33] fbcon: Remove fbcon_has_exited Daniel Vetter 2019-05-20 8:21 ` Daniel Vetter 2019-05-21 14:23 ` [PATCH] " Daniel Vetter 2019-05-22 10:04 ` Bartlomiej Zolnierkiewicz 2019-05-22 10:04 ` Bartlomiej Zolnierkiewicz 2019-05-22 10:38 ` Daniel Vetter 2019-05-20 8:21 ` [PATCH 10/33] fbcon: call fbcon_fb_(un)registered directly Daniel Vetter 2019-05-20 8:21 ` Daniel Vetter 2019-05-20 8:33 ` Thomas Zimmermann 2019-05-20 8:33 ` Thomas Zimmermann 2019-05-20 8:37 ` Thomas Zimmermann 2019-05-20 8:37 ` Thomas Zimmermann 2019-05-21 15:09 ` Daniel Vetter [this message] 2019-05-21 15:09 ` Daniel Vetter 2019-05-20 17:08 ` Sam Ravnborg 2019-05-20 17:08 ` Sam Ravnborg 2019-05-20 17:08 ` Sam Ravnborg 2019-05-20 17:25 ` Daniel Vetter 2019-05-20 17:25 ` Daniel Vetter 2019-05-20 8:21 ` [PATCH 11/33] fbdev/sh_mobile: remove sh_mobile_lcdc_display_notify Daniel Vetter 2019-05-20 8:21 ` Daniel Vetter 2019-05-20 9:04 ` Geert Uytterhoeven 2019-05-20 8:21 ` [PATCH 12/33] fbdev/omap: sysfs files can't disappear before the device is gone Daniel Vetter 2019-05-20 8:21 ` [PATCH 13/33] fbdev: " Daniel Vetter 2019-05-20 8:21 ` Daniel Vetter 2019-05-20 8:21 ` [PATCH 14/33] staging/olpc: lock_fb_info can't fail Daniel Vetter 2019-05-20 8:21 ` Daniel Vetter 2019-05-20 8:21 ` [PATCH 15/33] fbdev/atyfb: " Daniel Vetter 2019-05-20 8:21 ` Daniel Vetter 2019-05-20 8:21 ` [PATCH 16/33] fbdev: lock_fb_info cannot fail Daniel Vetter 2019-05-20 8:21 ` Daniel Vetter 2019-05-20 8:22 ` [PATCH 17/33] fbcon: call fbcon_fb_bind directly Daniel Vetter 2019-05-20 8:22 ` Daniel Vetter 2019-05-20 8:22 ` Daniel Vetter 2019-05-20 8:22 ` [PATCH 18/33] fbdev: make unregister/unlink functions not fail Daniel Vetter 2019-05-20 8:22 ` Daniel Vetter 2019-05-20 8:22 ` Daniel Vetter 2019-05-20 19:08 ` [Intel-gfx] " kbuild test robot 2019-05-20 19:08 ` kbuild test robot 2019-05-20 19:08 ` kbuild test robot 2019-05-20 19:25 ` kbuild test robot 2019-05-20 19:25 ` kbuild test robot 2019-05-20 19:25 ` [Intel-gfx] " kbuild test robot 2019-05-20 21:45 ` kbuild test robot 2019-05-20 21:45 ` kbuild test robot 2019-05-20 21:45 ` kbuild test robot 2019-05-20 8:22 ` [PATCH 19/33] fbdev: unify unlink_framebufer paths Daniel Vetter 2019-05-21 10:52 ` Maarten Lankhorst 2019-05-20 8:22 ` [PATCH 20/33] fbdev/sh_mob: Remove fb notifier callback Daniel Vetter 2019-05-20 9:05 ` Geert Uytterhoeven 2019-05-20 9:19 ` Daniel Vetter 2019-05-20 8:22 ` [PATCH 21/33] fbdev: directly call fbcon_suspended/resumed Daniel Vetter 2019-05-20 8:22 ` Daniel Vetter 2019-05-20 19:24 ` kbuild test robot 2019-05-20 19:24 ` kbuild test robot 2019-05-20 19:24 ` kbuild test robot 2019-05-20 8:22 ` [PATCH 22/33] fbcon: Call fbcon_mode_deleted/new_modelist directly Daniel Vetter 2019-05-20 8:22 ` Daniel Vetter 2019-05-20 8:22 ` [PATCH 23/33] fbdev: Call fbcon_get_requirement directly Daniel Vetter 2019-05-20 8:22 ` Daniel Vetter 2019-05-20 8:22 ` [PATCH 24/33] Revert "backlight/fbcon: Add FB_EVENT_CONBLANK" Daniel Vetter 2019-05-20 8:22 ` Daniel Vetter 2019-05-20 8:22 ` [PATCH 25/33] fbcon: directly call fbcon_fb_blanked Daniel Vetter 2019-05-20 8:22 ` [PATCH 26/33] fbmem: pull fbcon_fb_blanked out of fb_blank Daniel Vetter 2019-05-20 8:22 ` [PATCH 27/33] fbdev: remove FBINFO_MISC_USEREVENT around fb_blank Daniel Vetter 2019-05-20 17:20 ` Sam Ravnborg 2019-05-20 17:20 ` Sam Ravnborg 2019-05-20 17:29 ` Daniel Vetter 2019-05-20 17:29 ` Daniel Vetter 2019-05-20 17:53 ` Sam Ravnborg 2019-05-20 8:22 ` [PATCH 28/33] fb: Flatten control flow in fb_set_var Daniel Vetter 2019-05-20 8:22 ` [PATCH 29/33] fbcon: replace FB_EVENT_MODE_CHANGE/_ALL with direct calls Daniel Vetter 2019-05-20 8:22 ` Daniel Vetter 2019-05-21 10:56 ` Maarten Lankhorst 2019-05-21 10:56 ` Maarten Lankhorst 2019-05-21 12:42 ` Daniel Vetter 2019-05-21 12:42 ` Daniel Vetter 2019-05-21 12:42 ` Daniel Vetter 2019-05-20 8:22 ` [PATCH 30/33] vgaswitcheroo: call fbcon_remap_all directly Daniel Vetter 2019-05-20 8:22 ` Daniel Vetter 2019-05-20 8:37 ` Lukas Wunner 2019-05-20 8:37 ` Lukas Wunner 2019-05-20 8:22 ` [PATCH 31/33] fbcon: Call con2fb_map functions directly Daniel Vetter 2019-05-20 19:28 ` [Intel-gfx] " kbuild test robot 2019-05-20 19:28 ` kbuild test robot 2019-05-20 19:34 ` [Intel-gfx] " kbuild test robot 2019-05-20 19:34 ` kbuild test robot 2019-05-20 8:22 ` [PATCH 32/33] fbcon: Document what I learned about fbcon locking Daniel Vetter 2019-05-21 11:13 ` Maarten Lankhorst 2019-05-20 8:22 ` [PATCH 33/33] staging/olpc_dcon: Add drm conversion to TODO Daniel Vetter 2019-05-20 8:30 ` ✗ Fi.CI.CHECKPATCH: warning for fbcon notifier begone! Patchwork 2019-05-20 8:41 ` ✗ Fi.CI.BAT: failure " Patchwork 2019-05-20 8:44 ` ✗ Fi.CI.SPARSE: warning " Patchwork 2019-05-21 17:08 ` ✗ Fi.CI.CHECKPATCH: warning for fbcon notifier begone! (rev2) Patchwork 2019-05-21 17:22 ` ✗ Fi.CI.SPARSE: " Patchwork 2019-05-21 17:29 ` ✗ Fi.CI.BAT: failure " Patchwork 2019-05-22 8:15 ` ✓ Fi.CI.BAT: success " Patchwork 2019-05-22 18:43 ` ✓ Fi.CI.IGT: " Patchwork 2019-05-24 8:53 [PATCH 00/33] fbcon notifier begone! Daniel Vetter 2019-05-24 8:53 ` [PATCH 10/33] fbcon: call fbcon_fb_(un)registered directly Daniel Vetter 2019-05-24 8:53 ` Daniel Vetter 2019-05-24 8:53 ` Daniel Vetter 2019-05-24 8:53 ` Daniel Vetter 2019-05-28 9:02 [PATCH 00/33] fbcon notifier begone v3! Daniel Vetter 2019-05-28 9:02 ` [PATCH 10/33] fbcon: call fbcon_fb_(un)registered directly Daniel Vetter 2019-05-28 9:02 ` Daniel Vetter 2019-05-28 9:02 ` Daniel Vetter 2019-05-28 9:02 ` Daniel Vetter
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=20190521150939.GQ21222@phenom.ffwll.local \ --to=daniel@ffwll.ch \ --cc=b.zolnierkie@samsung.com \ --cc=daniel.vetter@ffwll.ch \ --cc=daniel.vetter@intel.com \ --cc=dri-devel@lists.freedesktop.org \ --cc=gregkh@linuxfoundation.org \ --cc=hdegoede@redhat.com \ --cc=intel-gfx@lists.freedesktop.org \ --cc=linux-fbdev@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mirq-linux@rere.qmqm.pl \ --cc=mpatocka@redhat.com \ --cc=noralf@tronnes.org \ --cc=peda@axentia.se \ --cc=tzimmermann@suse.de \ --cc=ysxie@foxmail.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: linkBe 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.