From: Mauro Carvalho Chehab <mchehab@osg.samsung.com> To: Linux Media Mailing List <linux-media@vger.kernel.org> Cc: Mauro Carvalho Chehab <mchehab@osg.samsung.com>, Mauro Carvalho Chehab <mchehab@infradead.org>, Laurent Pinchart <laurent.pinchart@ideasonboard.com>, linux-sh@vger.kernel.org Subject: [PATCH v7 01/44] [media] media: create a macro to get entity ID Date: Sun, 23 Aug 2015 20:17:18 +0000 [thread overview] Message-ID: <06dfd1776c9dea1b0574a743953344ab8d316b0f.1440359643.git.mchehab@osg.samsung.com> (raw) In-Reply-To: <cover.1440359643.git.mchehab@osg.samsung.com> Instead of accessing directly entity.id, let's create a macro, as this field will be moved into a common struct later on. Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com> Acked-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com> diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c index c55ab5029323..e429605ca2c3 100644 --- a/drivers/media/media-device.c +++ b/drivers/media/media-device.c @@ -77,8 +77,8 @@ static struct media_entity *find_entity(struct media_device *mdev, u32 id) spin_lock(&mdev->lock); media_device_for_each_entity(entity, mdev) { - if ((entity->id = id && !next) || - (entity->id > id && next)) { + if (((media_entity_id(entity) = id) && !next) || + ((media_entity_id(entity) > id) && next)) { spin_unlock(&mdev->lock); return entity; } @@ -104,7 +104,7 @@ static long media_device_enum_entities(struct media_device *mdev, if (ent = NULL) return -EINVAL; - u_ent.id = ent->id; + u_ent.id = media_entity_id(ent); if (ent->name) strlcpy(u_ent.name, ent->name, sizeof(u_ent.name)); u_ent.type = ent->type; @@ -122,7 +122,7 @@ static long media_device_enum_entities(struct media_device *mdev, static void media_device_kpad_to_upad(const struct media_pad *kpad, struct media_pad_desc *upad) { - upad->entity = kpad->entity->id; + upad->entity = media_entity_id(kpad->entity); upad->index = kpad->index; upad->flags = kpad->flags; } diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c index 949e5f92cbdc..cb0ac4e0dfa5 100644 --- a/drivers/media/media-entity.c +++ b/drivers/media/media-entity.c @@ -140,10 +140,10 @@ void media_entity_graph_walk_start(struct media_entity_graph *graph, graph->stack[graph->top].entity = NULL; bitmap_zero(graph->entities, MEDIA_ENTITY_ENUM_MAX_ID); - if (WARN_ON(entity->id >= MEDIA_ENTITY_ENUM_MAX_ID)) + if (WARN_ON(media_entity_id(entity) >= MEDIA_ENTITY_ENUM_MAX_ID)) return; - __set_bit(entity->id, graph->entities); + __set_bit(media_entity_id(entity), graph->entities); stack_push(graph, entity); } EXPORT_SYMBOL_GPL(media_entity_graph_walk_start); @@ -184,11 +184,11 @@ media_entity_graph_walk_next(struct media_entity_graph *graph) /* Get the entity in the other end of the link . */ next = media_entity_other(entity, link); - if (WARN_ON(next->id >= MEDIA_ENTITY_ENUM_MAX_ID)) + if (WARN_ON(media_entity_id(next) >= MEDIA_ENTITY_ENUM_MAX_ID)) return NULL; /* Has the entity already been visited? */ - if (__test_and_set_bit(next->id, graph->entities)) { + if (__test_and_set_bit(media_entity_id(next), graph->entities)) { link_top(graph)++; continue; } diff --git a/drivers/media/platform/vsp1/vsp1_video.c b/drivers/media/platform/vsp1/vsp1_video.c index 17f08973f835..debe4e539df6 100644 --- a/drivers/media/platform/vsp1/vsp1_video.c +++ b/drivers/media/platform/vsp1/vsp1_video.c @@ -352,10 +352,10 @@ static int vsp1_pipeline_validate_branch(struct vsp1_pipeline *pipe, break; /* Ensure the branch has no loop. */ - if (entities & (1 << entity->subdev.entity.id)) + if (entities & (1 << media_entity_id(&entity->subdev.entity))) return -EPIPE; - entities |= 1 << entity->subdev.entity.id; + entities |= 1 << media_entity_id(&entity->subdev.entity); /* UDS can't be chained. */ if (entity->type = VSP1_ENTITY_UDS) { diff --git a/include/media/media-entity.h b/include/media/media-entity.h index 8b21a4d920d9..0a66fc225559 100644 --- a/include/media/media-entity.h +++ b/include/media/media-entity.h @@ -113,6 +113,11 @@ static inline u32 media_entity_subtype(struct media_entity *entity) return entity->type & MEDIA_ENT_SUBTYPE_MASK; } +static inline u32 media_entity_id(struct media_entity *entity) +{ + return entity->id; +} + #define MEDIA_ENTITY_ENUM_MAX_DEPTH 16 #define MEDIA_ENTITY_ENUM_MAX_ID 64 -- 2.4.3
WARNING: multiple messages have this Message-ID (diff)
From: Mauro Carvalho Chehab <mchehab@osg.samsung.com> To: Linux Media Mailing List <linux-media@vger.kernel.org> Cc: Mauro Carvalho Chehab <mchehab@osg.samsung.com>, Mauro Carvalho Chehab <mchehab@infradead.org>, Laurent Pinchart <laurent.pinchart@ideasonboard.com>, linux-sh@vger.kernel.org Subject: [PATCH v7 01/44] [media] media: create a macro to get entity ID Date: Sun, 23 Aug 2015 17:17:18 -0300 [thread overview] Message-ID: <06dfd1776c9dea1b0574a743953344ab8d316b0f.1440359643.git.mchehab@osg.samsung.com> (raw) In-Reply-To: <cover.1440359643.git.mchehab@osg.samsung.com> In-Reply-To: <cover.1440359643.git.mchehab@osg.samsung.com> Instead of accessing directly entity.id, let's create a macro, as this field will be moved into a common struct later on. Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com> Acked-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com> diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c index c55ab5029323..e429605ca2c3 100644 --- a/drivers/media/media-device.c +++ b/drivers/media/media-device.c @@ -77,8 +77,8 @@ static struct media_entity *find_entity(struct media_device *mdev, u32 id) spin_lock(&mdev->lock); media_device_for_each_entity(entity, mdev) { - if ((entity->id == id && !next) || - (entity->id > id && next)) { + if (((media_entity_id(entity) == id) && !next) || + ((media_entity_id(entity) > id) && next)) { spin_unlock(&mdev->lock); return entity; } @@ -104,7 +104,7 @@ static long media_device_enum_entities(struct media_device *mdev, if (ent == NULL) return -EINVAL; - u_ent.id = ent->id; + u_ent.id = media_entity_id(ent); if (ent->name) strlcpy(u_ent.name, ent->name, sizeof(u_ent.name)); u_ent.type = ent->type; @@ -122,7 +122,7 @@ static long media_device_enum_entities(struct media_device *mdev, static void media_device_kpad_to_upad(const struct media_pad *kpad, struct media_pad_desc *upad) { - upad->entity = kpad->entity->id; + upad->entity = media_entity_id(kpad->entity); upad->index = kpad->index; upad->flags = kpad->flags; } diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c index 949e5f92cbdc..cb0ac4e0dfa5 100644 --- a/drivers/media/media-entity.c +++ b/drivers/media/media-entity.c @@ -140,10 +140,10 @@ void media_entity_graph_walk_start(struct media_entity_graph *graph, graph->stack[graph->top].entity = NULL; bitmap_zero(graph->entities, MEDIA_ENTITY_ENUM_MAX_ID); - if (WARN_ON(entity->id >= MEDIA_ENTITY_ENUM_MAX_ID)) + if (WARN_ON(media_entity_id(entity) >= MEDIA_ENTITY_ENUM_MAX_ID)) return; - __set_bit(entity->id, graph->entities); + __set_bit(media_entity_id(entity), graph->entities); stack_push(graph, entity); } EXPORT_SYMBOL_GPL(media_entity_graph_walk_start); @@ -184,11 +184,11 @@ media_entity_graph_walk_next(struct media_entity_graph *graph) /* Get the entity in the other end of the link . */ next = media_entity_other(entity, link); - if (WARN_ON(next->id >= MEDIA_ENTITY_ENUM_MAX_ID)) + if (WARN_ON(media_entity_id(next) >= MEDIA_ENTITY_ENUM_MAX_ID)) return NULL; /* Has the entity already been visited? */ - if (__test_and_set_bit(next->id, graph->entities)) { + if (__test_and_set_bit(media_entity_id(next), graph->entities)) { link_top(graph)++; continue; } diff --git a/drivers/media/platform/vsp1/vsp1_video.c b/drivers/media/platform/vsp1/vsp1_video.c index 17f08973f835..debe4e539df6 100644 --- a/drivers/media/platform/vsp1/vsp1_video.c +++ b/drivers/media/platform/vsp1/vsp1_video.c @@ -352,10 +352,10 @@ static int vsp1_pipeline_validate_branch(struct vsp1_pipeline *pipe, break; /* Ensure the branch has no loop. */ - if (entities & (1 << entity->subdev.entity.id)) + if (entities & (1 << media_entity_id(&entity->subdev.entity))) return -EPIPE; - entities |= 1 << entity->subdev.entity.id; + entities |= 1 << media_entity_id(&entity->subdev.entity); /* UDS can't be chained. */ if (entity->type == VSP1_ENTITY_UDS) { diff --git a/include/media/media-entity.h b/include/media/media-entity.h index 8b21a4d920d9..0a66fc225559 100644 --- a/include/media/media-entity.h +++ b/include/media/media-entity.h @@ -113,6 +113,11 @@ static inline u32 media_entity_subtype(struct media_entity *entity) return entity->type & MEDIA_ENT_SUBTYPE_MASK; } +static inline u32 media_entity_id(struct media_entity *entity) +{ + return entity->id; +} + #define MEDIA_ENTITY_ENUM_MAX_DEPTH 16 #define MEDIA_ENTITY_ENUM_MAX_ID 64 -- 2.4.3
next prev parent reply other threads:[~2015-08-23 20:17 UTC|newest] Thread overview: 156+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-08-23 20:17 [PATCH v7 00/44] MC next generation patches Mauro Carvalho Chehab 2015-08-23 20:17 ` Mauro Carvalho Chehab [this message] 2015-08-23 20:17 ` [PATCH v7 01/44] [media] media: create a macro to get entity ID Mauro Carvalho Chehab 2015-08-24 17:24 ` Shuah Khan 2015-08-24 17:24 ` Shuah Khan 2015-08-24 18:00 ` Mauro Carvalho Chehab 2015-08-24 18:00 ` Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 02/44] [media] staging: omap4iss: get entity ID using media_entity_id() Mauro Carvalho Chehab 2015-08-24 17:53 ` Shuah Khan 2015-08-25 6:34 ` Hans Verkuil 2015-08-23 20:17 ` [PATCH v7 03/44] [media] omap3isp: " Mauro Carvalho Chehab 2015-08-24 18:14 ` Shuah Khan 2015-08-24 18:34 ` Javier Martinez Canillas 2015-08-25 6:35 ` Hans Verkuil 2015-08-23 20:17 ` [PATCH v7 04/44] [media] media: add a common struct to be embed on media graph objects Mauro Carvalho Chehab 2015-08-24 20:07 ` Shuah Khan 2015-08-28 13:01 ` Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 05/44] [media] media: use media_gobj inside entities Mauro Carvalho Chehab 2015-08-24 22:13 ` Shuah Khan 2015-08-28 13:02 ` Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 06/44] [media] media: use media_gobj inside pads Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 07/44] [media] media: use media_gobj inside links Mauro Carvalho Chehab 2015-08-25 0:13 ` Shuah Khan 2015-08-28 12:54 ` Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 08/44] [media] media: add messages when media device gets (un)registered Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 09/44] [media] media: add a debug message to warn about gobj creation/removal Mauro Carvalho Chehab 2015-08-25 17:51 ` Shuah Khan 2015-08-26 14:51 ` Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 10/44] [media] media: rename the function that create pad links Mauro Carvalho Chehab 2015-08-23 20:17 ` Mauro Carvalho Chehab 2015-08-23 20:17 ` Mauro Carvalho Chehab 2015-08-23 20:17 ` Mauro Carvalho Chehab 2015-08-25 18:55 ` Shuah Khan 2015-08-25 18:55 ` Shuah Khan 2015-08-25 18:55 ` Shuah Khan 2015-08-25 18:55 ` Shuah Khan 2015-08-26 14:54 ` Mauro Carvalho Chehab 2015-08-26 14:54 ` Mauro Carvalho Chehab 2015-08-26 14:54 ` Mauro Carvalho Chehab 2015-08-26 14:54 ` Mauro Carvalho Chehab 2015-08-28 13:08 ` Mauro Carvalho Chehab 2015-08-28 13:08 ` Mauro Carvalho Chehab 2015-08-28 13:08 ` Mauro Carvalho Chehab 2015-08-28 13:08 ` Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 11/44] [media] media: use entity.graph_obj.mdev instead of .parent Mauro Carvalho Chehab 2015-08-23 20:17 ` Mauro Carvalho Chehab 2015-08-23 20:17 ` Mauro Carvalho Chehab 2015-08-25 6:36 ` Hans Verkuil 2015-08-25 6:36 ` Hans Verkuil 2015-08-25 6:36 ` Hans Verkuil 2015-08-25 19:25 ` Shuah Khan 2015-08-25 19:25 ` Shuah Khan 2015-08-25 19:25 ` Shuah Khan 2015-08-26 14:59 ` Mauro Carvalho Chehab 2015-08-26 14:59 ` Mauro Carvalho Chehab 2015-08-26 14:59 ` Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 12/44] [media] media: remove media entity .parent field Mauro Carvalho Chehab 2015-08-25 6:37 ` Hans Verkuil 2015-08-23 20:17 ` [PATCH v7 13/44] [media] uapi/media.h: Declare interface types Mauro Carvalho Chehab 2015-08-23 20:17 ` Mauro Carvalho Chehab 2015-08-25 6:46 ` Hans Verkuil 2015-08-25 20:34 ` Shuah Khan 2015-08-25 20:34 ` Shuah Khan 2015-08-26 14:59 ` Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 14/44] [media] media: add functions to allow creating interfaces Mauro Carvalho Chehab 2015-08-25 7:09 ` Hans Verkuil 2015-08-25 9:26 ` Mauro Carvalho Chehab 2015-08-25 13:41 ` Hans Verkuil 2015-08-25 7:42 ` Hans Verkuil 2015-08-25 9:57 ` Mauro Carvalho Chehab 2015-08-25 10:00 ` Mauro Carvalho Chehab 2015-08-25 8:29 ` Hans Verkuil 2015-08-25 10:16 ` Mauro Carvalho Chehab 2015-08-25 21:44 ` Shuah Khan 2015-08-23 20:17 ` [PATCH v7 15/44] [media] media: get rid of an unused code Mauro Carvalho Chehab 2015-08-25 7:10 ` Hans Verkuil 2015-08-25 10:10 ` Mauro Carvalho Chehab 2015-08-25 22:32 ` Shuah Khan 2015-08-26 15:17 ` Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 16/44] [media] media: convert links from array to list Mauro Carvalho Chehab 2015-08-25 22:48 ` Shuah Khan 2015-08-26 15:28 ` Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 17/44] [media] media: make add link more generic Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 18/44] [media] media: make media_link more generic to handle interace links Mauro Carvalho Chehab 2015-08-25 7:28 ` Hans Verkuil 2015-08-25 9:41 ` Mauro Carvalho Chehab 2015-08-25 7:38 ` Hans Verkuil 2015-08-25 9:53 ` Mauro Carvalho Chehab 2015-08-25 13:30 ` Hans Verkuil 2015-08-23 20:17 ` [PATCH v7 19/44] [media] media: make link debug printk more generic Mauro Carvalho Chehab 2015-08-25 7:33 ` Hans Verkuil 2015-08-25 9:45 ` Mauro Carvalho Chehab 2015-08-25 9:48 ` Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 20/44] [media] media: add support to link interfaces and entities Mauro Carvalho Chehab 2015-08-25 7:44 ` Hans Verkuil 2015-08-25 10:01 ` Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 21/44] [media] dvbdev: add support for interfaces Mauro Carvalho Chehab 2015-08-25 7:50 ` Hans Verkuil 2015-08-25 10:04 ` Mauro Carvalho Chehab 2015-08-25 13:44 ` Hans Verkuil 2015-08-23 20:17 ` [PATCH v7 22/44] [media] media: add a linked list to track interfaces by mdev Mauro Carvalho Chehab 2015-08-25 7:54 ` Hans Verkuil 2015-08-25 10:12 ` Mauro Carvalho Chehab 2015-08-25 13:48 ` Hans Verkuil 2015-08-23 20:17 ` [PATCH v7 23/44] [media] dvbdev: add support for indirect interface links Mauro Carvalho Chehab 2015-08-25 8:39 ` Hans Verkuil 2015-08-25 10:17 ` Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 24/44] [media] uapi/media.h: Fix entity namespace Mauro Carvalho Chehab 2015-08-23 20:17 ` Mauro Carvalho Chehab 2015-08-25 8:58 ` Hans Verkuil 2015-08-25 8:58 ` Hans Verkuil 2015-08-25 11:25 ` Mauro Carvalho Chehab 2015-08-25 11:25 ` Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 25/44] [media] replace all occurrences of MEDIA_ENT_T_DEVNODE_V4L Mauro Carvalho Chehab 2015-08-23 20:17 ` Mauro Carvalho Chehab 2015-08-25 9:23 ` Hans Verkuil 2015-08-25 9:23 ` Hans Verkuil 2015-08-25 11:32 ` Mauro Carvalho Chehab 2015-08-25 11:32 ` Mauro Carvalho Chehab 2015-08-25 13:54 ` Hans Verkuil 2015-08-25 13:54 ` Hans Verkuil 2015-08-25 15:12 ` Mauro Carvalho Chehab 2015-08-25 15:12 ` Mauro Carvalho Chehab 2015-08-25 15:22 ` Hans Verkuil 2015-08-25 15:22 ` Hans Verkuil 2015-08-23 20:17 ` [PATCH v7 26/44] [media] replace all occurrences of MEDIA_ENT_T_DEVNODE_DVB Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 27/44] [media] media: add macros to check if subdev or V4L2 DMA Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 28/44] [media] media: use macros to check for V4L2 subdev entities Mauro Carvalho Chehab 2015-08-23 20:17 ` Mauro Carvalho Chehab 2015-08-23 20:17 ` Mauro Carvalho Chehab 2015-08-23 20:17 ` Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 29/44] [media] omap3/omap4/davinci: get rid of MEDIA_ENT_T_V4L2_SUBDEV abuse Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 30/44] [media] s5c73m3: fix subdev type Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 31/44] [media] s5k5baf: " Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 32/44] [media] davinci_vbpe: stop MEDIA_ENT_T_V4L2_SUBDEV abuse Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 33/44] [media] omap4iss: " Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 34/44] [media] v4l2-subdev: use MEDIA_ENT_T_UNKNOWN for new subdevs Mauro Carvalho Chehab 2015-08-23 20:17 ` Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 35/44] [media] media controller: get rid of entity subtype on Kernel Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 36/44] [media] DocBook: update descriptions for the media controller entities Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 37/44] [media] dvb: modify core to implement interfaces/entities at MC new gen Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 38/44] [media] media: report if a pad is sink or source at debug msg Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 39/44] [media] uapi/media.h: Add MEDIA_IOC_G_TOPOLOGY ioctl Mauro Carvalho Chehab 2015-08-25 9:33 ` Hans Verkuil 2015-08-25 11:36 ` Mauro Carvalho Chehab 2015-08-25 11:36 ` Mauro Carvalho Chehab 2015-08-23 20:17 ` [PATCH v7 40/44] [media] media: Use a macro to interate between all interfaces Mauro Carvalho Chehab 2015-08-25 9:26 ` Hans Verkuil 2015-08-23 20:17 ` [PATCH v7 41/44] [media] media: move mdev list init to gobj Mauro Carvalho Chehab 2015-08-25 9:28 ` Hans Verkuil 2015-08-23 20:17 ` [PATCH v7 42/44] [media] media-device: add pads and links to media_device Mauro Carvalho Chehab 2015-08-25 9:29 ` Hans Verkuil 2015-08-23 20:18 ` [PATCH v7 43/44] [media] media_device: add a topology version field Mauro Carvalho Chehab 2015-08-23 20:18 ` [PATCH v7 44/44] [media] media-device: add support for MEDIA_IOC_G_TOPOLOGY ioctl Mauro Carvalho Chehab 2015-08-25 19:11 ` [PATCH v7 00/44] MC next generation patches Shuah Khan 2015-08-25 20:02 ` Mauro Carvalho Chehab
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=06dfd1776c9dea1b0574a743953344ab8d316b0f.1440359643.git.mchehab@osg.samsung.com \ --to=mchehab@osg.samsung.com \ --cc=laurent.pinchart@ideasonboard.com \ --cc=linux-media@vger.kernel.org \ --cc=linux-sh@vger.kernel.org \ --cc=mchehab@infradead.org \ /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.