stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev,
	"Maaz Mombasawala" <mombasawalam@vmware.com>,
	"Thomas Hellström" <thomas.hellstrom@linux.intel.com>,
	"Zack Rusin" <zackr@vmware.com>,
	"Sasha Levin" <sashal@kernel.org>
Subject: [PATCH 6.1 144/183] drm/vmwgfx: Refactor resource validation hashtable to use linux/hashtable implementation.
Date: Mon, 16 Jan 2023 16:51:07 +0100	[thread overview]
Message-ID: <20230116154809.429362934@linuxfoundation.org> (raw)
In-Reply-To: <20230116154803.321528435@linuxfoundation.org>

From: Maaz Mombasawala <mombasawalam@vmware.com>

[ Upstream commit 9e931f2e09701e25744f3d186a4ba13b5342b136 ]

Vmwgfx's hashtab implementation needs to be replaced with linux/hashtable
to reduce maintenence burden.
As part of this effort, refactor the res_ht hashtable used for resource
validation during execbuf execution to use linux/hashtable implementation.
This also refactors vmw_validation_context to use vmw_sw_context as the
container for the hashtable, whereas before it used a vmwgfx_open_hash
directly. This makes vmw_validation_context less generic, but there is
no functional change since res_ht is the only instance where validation
context used a hashtable in vmwgfx driver.

Signed-off-by: Maaz Mombasawala <mombasawalam@vmware.com>
Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Signed-off-by: Zack Rusin <zackr@vmware.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20221022040236.616490-6-zack@kde.org
Stable-dep-of: a309c7194e8a ("drm/vmwgfx: Remove rcu locks from user resources")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/gpu/drm/vmwgfx/vmwgfx_drv.c        | 24 ++++++++--
 drivers/gpu/drm/vmwgfx/vmwgfx_drv.h        |  5 +-
 drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c    | 14 ++----
 drivers/gpu/drm/vmwgfx/vmwgfx_validation.c | 55 +++++++++++-----------
 drivers/gpu/drm/vmwgfx/vmwgfx_validation.h | 26 +++-------
 5 files changed, 58 insertions(+), 66 deletions(-)

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
index 13b90273eb77..8d77e79bd904 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
@@ -830,6 +830,22 @@ static void vmw_write_driver_id(struct vmw_private *dev)
 	}
 }
 
+static void vmw_sw_context_init(struct vmw_private *dev_priv)
+{
+	struct vmw_sw_context *sw_context = &dev_priv->ctx;
+
+	hash_init(sw_context->res_ht);
+}
+
+static void vmw_sw_context_fini(struct vmw_private *dev_priv)
+{
+	struct vmw_sw_context *sw_context = &dev_priv->ctx;
+
+	vfree(sw_context->cmd_bounce);
+	if (sw_context->staged_bindings)
+		vmw_binding_state_free(sw_context->staged_bindings);
+}
+
 static int vmw_driver_load(struct vmw_private *dev_priv, u32 pci_id)
 {
 	int ret;
@@ -839,6 +855,8 @@ static int vmw_driver_load(struct vmw_private *dev_priv, u32 pci_id)
 
 	dev_priv->drm.dev_private = dev_priv;
 
+	vmw_sw_context_init(dev_priv);
+
 	mutex_init(&dev_priv->cmdbuf_mutex);
 	mutex_init(&dev_priv->binding_mutex);
 	spin_lock_init(&dev_priv->resource_lock);
@@ -1168,9 +1186,7 @@ static void vmw_driver_unload(struct drm_device *dev)
 
 	unregister_pm_notifier(&dev_priv->pm_nb);
 
-	if (dev_priv->ctx.res_ht_initialized)
-		vmwgfx_ht_remove(&dev_priv->ctx.res_ht);
-	vfree(dev_priv->ctx.cmd_bounce);
+	vmw_sw_context_fini(dev_priv);
 	if (dev_priv->enable_fb) {
 		vmw_fb_off(dev_priv);
 		vmw_fb_close(dev_priv);
@@ -1198,8 +1214,6 @@ static void vmw_driver_unload(struct drm_device *dev)
 		vmw_irq_uninstall(&dev_priv->drm);
 
 	ttm_object_device_release(&dev_priv->tdev);
-	if (dev_priv->ctx.staged_bindings)
-		vmw_binding_state_free(dev_priv->ctx.staged_bindings);
 
 	for (i = vmw_res_context; i < vmw_res_max; ++i)
 		idr_destroy(&dev_priv->res_idr[i]);
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
index 09e2d738aa87..d87aeedb78d0 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
@@ -30,6 +30,7 @@
 
 #include <linux/suspend.h>
 #include <linux/sync_file.h>
+#include <linux/hashtable.h>
 
 #include <drm/drm_auth.h>
 #include <drm/drm_device.h>
@@ -93,6 +94,7 @@
 #define VMW_RES_STREAM ttm_driver_type2
 #define VMW_RES_FENCE ttm_driver_type3
 #define VMW_RES_SHADER ttm_driver_type4
+#define VMW_RES_HT_ORDER 12
 
 #define MKSSTAT_CAPACITY_LOG2 5U
 #define MKSSTAT_CAPACITY (1U << MKSSTAT_CAPACITY_LOG2)
@@ -425,8 +427,7 @@ struct vmw_ctx_validation_info;
  * @ctx: The validation context
  */
 struct vmw_sw_context{
-	struct vmwgfx_open_hash res_ht;
-	bool res_ht_initialized;
+	DECLARE_HASHTABLE(res_ht, VMW_RES_HT_ORDER);
 	bool kernel;
 	struct vmw_fpriv *fp;
 	struct drm_file *filp;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
index f085dbd4736d..c943ab801ca7 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0 OR MIT
 /**************************************************************************
  *
- * Copyright 2009 - 2015 VMware, Inc., Palo Alto, CA., USA
+ * Copyright 2009 - 2022 VMware, Inc., Palo Alto, CA., USA
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the
@@ -25,6 +25,7 @@
  *
  **************************************************************************/
 #include <linux/sync_file.h>
+#include <linux/hashtable.h>
 
 #include "vmwgfx_drv.h"
 #include "vmwgfx_reg.h"
@@ -34,7 +35,6 @@
 #include "vmwgfx_binding.h"
 #include "vmwgfx_mksstat.h"
 
-#define VMW_RES_HT_ORDER 12
 
 /*
  * Helper macro to get dx_ctx_node if available otherwise print an error
@@ -4101,7 +4101,7 @@ int vmw_execbuf_process(struct drm_file *file_priv,
 	int ret;
 	int32_t out_fence_fd = -1;
 	struct sync_file *sync_file = NULL;
-	DECLARE_VAL_CONTEXT(val_ctx, &sw_context->res_ht, 1);
+	DECLARE_VAL_CONTEXT(val_ctx, sw_context, 1);
 
 	if (flags & DRM_VMW_EXECBUF_FLAG_EXPORT_FENCE_FD) {
 		out_fence_fd = get_unused_fd_flags(O_CLOEXEC);
@@ -4164,14 +4164,6 @@ int vmw_execbuf_process(struct drm_file *file_priv,
 	if (sw_context->staged_bindings)
 		vmw_binding_state_reset(sw_context->staged_bindings);
 
-	if (!sw_context->res_ht_initialized) {
-		ret = vmwgfx_ht_create(&sw_context->res_ht, VMW_RES_HT_ORDER);
-		if (unlikely(ret != 0))
-			goto out_unlock;
-
-		sw_context->res_ht_initialized = true;
-	}
-
 	INIT_LIST_HEAD(&sw_context->staged_cmd_res);
 	sw_context->ctx = &val_ctx;
 	ret = vmw_execbuf_tie_context(dev_priv, sw_context, dx_context_handle);
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c b/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c
index f46891012be3..f5c4a40fb16d 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0 OR MIT
 /**************************************************************************
  *
- * Copyright © 2018 VMware, Inc., Palo Alto, CA., USA
+ * Copyright © 2018 - 2022 VMware, Inc., Palo Alto, CA., USA
  * All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
@@ -180,11 +180,16 @@ vmw_validation_find_bo_dup(struct vmw_validation_context *ctx,
 	if (!ctx->merge_dups)
 		return NULL;
 
-	if (ctx->ht) {
+	if (ctx->sw_context) {
 		struct vmwgfx_hash_item *hash;
+		unsigned long key = (unsigned long) vbo;
 
-		if (!vmwgfx_ht_find_item(ctx->ht, (unsigned long) vbo, &hash))
-			bo_node = container_of(hash, typeof(*bo_node), hash);
+		hash_for_each_possible_rcu(ctx->sw_context->res_ht, hash, head, key) {
+			if (hash->key == key) {
+				bo_node = container_of(hash, typeof(*bo_node), hash);
+				break;
+			}
+		}
 	} else {
 		struct  vmw_validation_bo_node *entry;
 
@@ -217,11 +222,16 @@ vmw_validation_find_res_dup(struct vmw_validation_context *ctx,
 	if (!ctx->merge_dups)
 		return NULL;
 
-	if (ctx->ht) {
+	if (ctx->sw_context) {
 		struct vmwgfx_hash_item *hash;
+		unsigned long key = (unsigned long) res;
 
-		if (!vmwgfx_ht_find_item(ctx->ht, (unsigned long) res, &hash))
-			res_node = container_of(hash, typeof(*res_node), hash);
+		hash_for_each_possible_rcu(ctx->sw_context->res_ht, hash, head, key) {
+			if (hash->key == key) {
+				res_node = container_of(hash, typeof(*res_node), hash);
+				break;
+			}
+		}
 	} else {
 		struct  vmw_validation_res_node *entry;
 
@@ -269,20 +279,15 @@ int vmw_validation_add_bo(struct vmw_validation_context *ctx,
 		}
 	} else {
 		struct ttm_validate_buffer *val_buf;
-		int ret;
 
 		bo_node = vmw_validation_mem_alloc(ctx, sizeof(*bo_node));
 		if (!bo_node)
 			return -ENOMEM;
 
-		if (ctx->ht) {
+		if (ctx->sw_context) {
 			bo_node->hash.key = (unsigned long) vbo;
-			ret = vmwgfx_ht_insert_item(ctx->ht, &bo_node->hash);
-			if (ret) {
-				DRM_ERROR("Failed to initialize a buffer "
-					  "validation entry.\n");
-				return ret;
-			}
+			hash_add_rcu(ctx->sw_context->res_ht, &bo_node->hash.head,
+				bo_node->hash.key);
 		}
 		val_buf = &bo_node->base;
 		val_buf->bo = ttm_bo_get_unless_zero(&vbo->base);
@@ -316,7 +321,6 @@ int vmw_validation_add_resource(struct vmw_validation_context *ctx,
 				bool *first_usage)
 {
 	struct vmw_validation_res_node *node;
-	int ret;
 
 	node = vmw_validation_find_res_dup(ctx, res);
 	if (node) {
@@ -330,14 +334,9 @@ int vmw_validation_add_resource(struct vmw_validation_context *ctx,
 		return -ENOMEM;
 	}
 
-	if (ctx->ht) {
+	if (ctx->sw_context) {
 		node->hash.key = (unsigned long) res;
-		ret = vmwgfx_ht_insert_item(ctx->ht, &node->hash);
-		if (ret) {
-			DRM_ERROR("Failed to initialize a resource validation "
-				  "entry.\n");
-			return ret;
-		}
+		hash_add_rcu(ctx->sw_context->res_ht, &node->hash.head, node->hash.key);
 	}
 	node->res = vmw_resource_reference_unless_doomed(res);
 	if (!node->res)
@@ -681,19 +680,19 @@ void vmw_validation_drop_ht(struct vmw_validation_context *ctx)
 	struct vmw_validation_bo_node *entry;
 	struct vmw_validation_res_node *val;
 
-	if (!ctx->ht)
+	if (!ctx->sw_context)
 		return;
 
 	list_for_each_entry(entry, &ctx->bo_list, base.head)
-		(void) vmwgfx_ht_remove_item(ctx->ht, &entry->hash);
+		hash_del_rcu(&entry->hash.head);
 
 	list_for_each_entry(val, &ctx->resource_list, head)
-		(void) vmwgfx_ht_remove_item(ctx->ht, &val->hash);
+		hash_del_rcu(&val->hash.head);
 
 	list_for_each_entry(val, &ctx->resource_ctx_list, head)
-		(void) vmwgfx_ht_remove_item(ctx->ht, &val->hash);
+		hash_del_rcu(&entry->hash.head);
 
-	ctx->ht = NULL;
+	ctx->sw_context = NULL;
 }
 
 /**
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_validation.h b/drivers/gpu/drm/vmwgfx/vmwgfx_validation.h
index f21df053882b..ab9ec226f433 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_validation.h
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_validation.h
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: GPL-2.0 OR MIT */
 /**************************************************************************
  *
- * Copyright © 2018 VMware, Inc., Palo Alto, CA., USA
+ * Copyright © 2018 - 2022 VMware, Inc., Palo Alto, CA., USA
  * All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
@@ -29,12 +29,11 @@
 #define _VMWGFX_VALIDATION_H_
 
 #include <linux/list.h>
+#include <linux/hashtable.h>
 #include <linux/ww_mutex.h>
 
 #include <drm/ttm/ttm_execbuf_util.h>
 
-#include "vmwgfx_hashtab.h"
-
 #define VMW_RES_DIRTY_NONE 0
 #define VMW_RES_DIRTY_SET BIT(0)
 #define VMW_RES_DIRTY_CLEAR BIT(1)
@@ -59,7 +58,7 @@
  * @total_mem: Amount of reserved memory.
  */
 struct vmw_validation_context {
-	struct vmwgfx_open_hash *ht;
+	struct vmw_sw_context *sw_context;
 	struct list_head resource_list;
 	struct list_head resource_ctx_list;
 	struct list_head bo_list;
@@ -82,16 +81,16 @@ struct vmw_fence_obj;
 /**
  * DECLARE_VAL_CONTEXT - Declare a validation context with initialization
  * @_name: The name of the variable
- * @_ht: The hash table used to find dups or NULL if none
+ * @_sw_context: Contains the hash table used to find dups or NULL if none
  * @_merge_dups: Whether to merge duplicate buffer object- or resource
  * entries. If set to true, ideally a hash table pointer should be supplied
  * as well unless the number of resources and buffer objects per validation
  * is known to be very small
  */
 #endif
-#define DECLARE_VAL_CONTEXT(_name, _ht, _merge_dups)			\
+#define DECLARE_VAL_CONTEXT(_name, _sw_context, _merge_dups)		\
 	struct vmw_validation_context _name =				\
-	{ .ht = _ht,							\
+	{ .sw_context = _sw_context,					\
 	  .resource_list = LIST_HEAD_INIT((_name).resource_list),	\
 	  .resource_ctx_list = LIST_HEAD_INIT((_name).resource_ctx_list), \
 	  .bo_list = LIST_HEAD_INIT((_name).bo_list),			\
@@ -114,19 +113,6 @@ vmw_validation_has_bos(struct vmw_validation_context *ctx)
 	return !list_empty(&ctx->bo_list);
 }
 
-/**
- * vmw_validation_set_ht - Register a hash table for duplicate finding
- * @ctx: The validation context
- * @ht: Pointer to a hash table to use for duplicate finding
- * This function is intended to be used if the hash table wasn't
- * available at validation context declaration time
- */
-static inline void vmw_validation_set_ht(struct vmw_validation_context *ctx,
-					 struct vmwgfx_open_hash *ht)
-{
-	ctx->ht = ht;
-}
-
 /**
  * vmw_validation_bo_reserve - Reserve buffer objects registered with a
  * validation context
-- 
2.35.1




  parent reply	other threads:[~2023-01-16 16:00 UTC|newest]

Thread overview: 198+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-16 15:48 [PATCH 6.1 000/183] 6.1.7-rc1 review Greg Kroah-Hartman
2023-01-16 15:48 ` [PATCH 6.1 001/183] netfilter: nft_payload: incorrect arithmetics when fetching VLAN header bits Greg Kroah-Hartman
2023-01-16 15:48 ` [PATCH 6.1 002/183] Revert "ALSA: usb-audio: Drop superfluous interface setup at parsing" Greg Kroah-Hartman
2023-01-16 15:48 ` [PATCH 6.1 003/183] ALSA: control-led: use strscpy in set_led_id() Greg Kroah-Hartman
2023-01-16 15:48 ` [PATCH 6.1 004/183] ALSA: usb-audio: Always initialize fixed_rate in snd_usb_find_implicit_fb_sync_format() Greg Kroah-Hartman
2023-01-16 15:48 ` [PATCH 6.1 005/183] ALSA: hda/realtek - Turn on power early Greg Kroah-Hartman
2023-01-16 15:48 ` [PATCH 6.1 006/183] ALSA: hda/realtek: Enable mute/micmute LEDs on HP Spectre x360 13-aw0xxx Greg Kroah-Hartman
2023-01-16 15:48 ` [PATCH 6.1 007/183] KVM: x86: Do not return host topology information from KVM_GET_SUPPORTED_CPUID Greg Kroah-Hartman
2023-01-16 15:48 ` [PATCH 6.1 008/183] KVM: arm64: Fix S1PTW handling on RO memslots Greg Kroah-Hartman
2023-01-16 15:48 ` [PATCH 6.1 009/183] efi: fix userspace infinite retry read efivars after EFI runtime services page fault Greg Kroah-Hartman
2023-01-16 15:48 ` [PATCH 6.1 010/183] efi: tpm: Avoid READ_ONCE() for accessing the event log Greg Kroah-Hartman
2023-01-16 15:48 ` [PATCH 6.1 011/183] docs: Fix the docs build with Sphinx 6.0 Greg Kroah-Hartman
2023-01-16 15:48 ` [PATCH 6.1 012/183] io_uring/poll: add hash if ready poll request cant complete inline Greg Kroah-Hartman
2023-01-16 15:48 ` [PATCH 6.1 013/183] arm64: mte: Fix double-freeing of the temporary tag storage during coredump Greg Kroah-Hartman
2023-01-16 15:48 ` [PATCH 6.1 014/183] arm64: mte: Avoid the racy walk of the vma list during core dump Greg Kroah-Hartman
2023-01-16 15:48 ` [PATCH 6.1 015/183] arm64: cmpxchg_double*: hazard against entire exchange variable Greg Kroah-Hartman
2023-01-16 15:48 ` [PATCH 6.1 016/183] ACPI: Fix selecting wrong ACPI fwnode for the iGPU on some Dell laptops Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 017/183] net: stmmac: add aux timestamps fifo clearance wait Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 018/183] perf auxtrace: Fix address filter duplicate symbol selection Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 019/183] s390/kexec: fix ipl report address for kdump Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 020/183] brcmfmac: Prefer DT board type over DMI board type Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 021/183] ASoC: qcom: lpass-cpu: Fix fallback SD line index handling Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 022/183] elfcore: Add a cprm parameter to elf_core_extra_{phdrs,data_size} Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 023/183] cpufreq: amd-pstate: fix kernel hang issue while amd-pstate unregistering Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 024/183] s390/cpum_sf: add READ_ONCE() semantics to compare and swap loops Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 025/183] s390/percpu: add READ_ONCE() to arch_this_cpu_to_op_simple() Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 026/183] drm/virtio: Fix GEM handle creation UAF Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 027/183] drm/amd/pm/smu13: BACO is supported when its in BACO state Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 028/183] drm: Optimize drm buddy top-down allocation method Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 029/183] drm/i915/gt: Reset twice Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 030/183] drm/i915: Reserve enough fence slot for i915_vma_unbind_async Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 031/183] drm/i915: Fix potential context UAFs Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 032/183] drm/amd: Delay removal of the firmware framebuffer Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 033/183] drm/amdgpu: Fixed bug on error when unloading amdgpu Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 034/183] drm/amd/pm: correct the reference clock for fan speed(rpm) calculation Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 035/183] drm/amd/pm: add the missing mapping for PPT feature on SMU13.0.0 and 13.0.7 Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 036/183] drm/amd/display: move remaining FPU code to dml folder Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 037/183] Revert "drm/amdgpu: Revert "drm/amdgpu: getting fan speed pwm for vega10 properly"" Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 038/183] cifs: Fix uninitialized memory read for smb311 posix symlink create Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 039/183] cifs: fix file info setting in cifs_query_path_info() Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 040/183] cifs: fix file info setting in cifs_open_file() Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 041/183] cifs: do not query ifaces on smb1 mounts Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 042/183] cifs: fix double free on failed kerberos auth Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 043/183] io_uring/fdinfo: include locked hash table in fdinfo output Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 044/183] ASoC: rt9120: Make dev PM runtime bind AsoC component PM Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 045/183] ACPI: video: Allow selecting NVidia-WMI-EC or Apple GMUX backlight from the cmdline Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 046/183] platform/x86: dell-privacy: Only register SW_CAMERA_LENS_COVER if present Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 047/183] platform/surface: aggregator: Ignore command messages not intended for us Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 048/183] platform/x86: int3472/discrete: Ensure the clk/power enable pins are in output mode Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 049/183] platform/x86: thinkpad_acpi: Fix profile mode display in AMT mode Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 050/183] platform/x86: asus-wmi: Dont load fan curves without fan Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 051/183] platform/x86: dell-privacy: Fix SW_CAMERA_LENS_COVER reporting Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 052/183] dt-bindings: msm: dsi-controller-main: Fix operating-points-v2 constraint Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 053/183] drm/msm: another fix for the headless Adreno GPU Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 054/183] firmware/psci: Fix MEM_PROTECT_RANGE function numbers Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 055/183] firmware/psci: Dont register with debugfs if PSCI isnt available Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 056/183] drm/msm/adreno: Make adreno quirks not overwrite each other Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 057/183] arm64/signal: Always allocate SVE signal frames on SME only systems Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 058/183] dt-bindings: msm: dsi-controller-main: Fix power-domain constraint Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 059/183] dt-bindings: msm: dsi-controller-main: Fix description of core clock Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 060/183] arm64/signal: Always accept SVE signal frames on SME only systems Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 061/183] arm64/mm: add pud_user_exec() check in pud_user_accessible_page() Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 062/183] dt-bindings: msm: dsi-phy-28nm: Add missing qcom, dsi-phy-regulator-ldo-mode Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 063/183] arm64: ptrace: Use ARM64_SME to guard the SME register enumerations Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 064/183] arm64/mm: fix incorrect file_map_count for invalid pmd Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 065/183] platform/x86: ideapad-laptop: Add Legion 5 15ARH05 DMI id to set_fn_lock_led_list[] Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 066/183] drm/msm/dp: do not complete dp_aux_cmd_fifo_tx() if irq is not for aux transfer Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 067/183] dt-bindings: msm/dsi: Dont require vdds-supply on 10nm PHY Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 068/183] dt-bindings: msm/dsi: Dont require vcca-supply on 14nm PHY Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 069/183] platform/x86: sony-laptop: Dont turn off 0x153 keyboard backlight during probe Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 070/183] ixgbe: fix pci device refcount leak Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 071/183] ipv6: raw: Deduct extension header length in rawv6_push_pending_frames Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 072/183] iavf/iavf_main: actually log ->src mask when talking about it Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 073/183] drm/i915/gt: Cleanup partial engine discovery failures Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 074/183] usb: ulpi: defer ulpi_register on ulpi_read_id timeout Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 075/183] drm/amd/pm: enable mode1 reset on smu_v13_0_10 Greg Kroah-Hartman
2023-01-16 15:49 ` [PATCH 6.1 076/183] drm/amd/pm: Enable bad memory page/channel recording support for smu v13_0_0 Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 077/183] drm/amd/pm: enable GPO dynamic control support for SMU13.0.0 Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 078/183] drm/amd/pm: enable GPO dynamic control support for SMU13.0.7 Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 079/183] drm/amdgpu: add soc21 common ip block support for GC 11.0.4 Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 080/183] drm/amdgpu: Enable pg/cg flags on GC11_0_4 for VCN Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 081/183] drm/amdgpu: enable VCN DPG for GC IP v11.0.4 Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 082/183] mm: Always release pages to the buddy allocator in memblock_free_late() Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 083/183] iommu/iova: Fix alloc iova overflows issue Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 084/183] iommu/arm-smmu-v3: Dont unregister on shutdown Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 085/183] iommu/mediatek-v1: Fix an error handling path in mtk_iommu_v1_probe() Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 086/183] iommu/arm-smmu: Dont unregister on shutdown Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 087/183] iommu/arm-smmu: Report IOMMU_CAP_CACHE_COHERENCY even betterer Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 088/183] sched/core: Fix use-after-free bug in dup_user_cpus_ptr() Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 089/183] netfilter: ipset: Fix overflow before widen in the bitmap_ip_create() function Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 090/183] selftests: netfilter: fix transaction test script timeout handling Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 091/183] powerpc/imc-pmu: Fix use of mutex in IRQs disabled section Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 092/183] x86/boot: Avoid using Intel mnemonics in AT&T syntax asm Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 093/183] EDAC/device: Fix period calculation in edac_device_reset_delay_period() Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 094/183] x86/pat: Fix pat_x_mtrr_type() for MTRR disabled case Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 095/183] x86/resctrl: Fix task CLOSID/RMID update race Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 096/183] x86/resctrl: Fix event counts regression in reused RMIDs Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 097/183] regulator: da9211: Use irq handler when ready Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 098/183] scsi: storvsc: Fix swiotlb bounce buffer leak in confidential VM Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 099/183] scsi: mpi3mr: Refer CONFIG_SCSI_MPI3MR in Makefile Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 100/183] scsi: ufs: core: WLUN suspend SSU/enter hibern8 fail recovery Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 101/183] ASoC: Intel: fix sof-nau8825 link failure Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 102/183] ASoC: Intel: sof_nau8825: support rt1015p speaker amplifier Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 103/183] ASoC: Intel: sof-nau8825: fix module alias overflow Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 104/183] drm/msm/dpu: Fix some kernel-doc comments Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 105/183] drm/msm/dpu: Fix memory leak in msm_mdss_parse_data_bus_icc_path Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 106/183] ASoC: wm8904: fix wrong outputs volume after power reactivation Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 107/183] mtd: parsers: scpart: fix __udivdi3 undefined on mips Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 108/183] mtd: cfi: allow building spi-intel standalone Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 109/183] ALSA: usb-audio: Make sure to stop endpoints before closing EPs Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 110/183] ALSA: usb-audio: Relax hw constraints for implicit fb sync Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 111/183] stmmac: dwmac-mediatek: remove the dwmac_fix_mac_speed Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 112/183] tipc: fix unexpected link reset due to discovery messages Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 113/183] NFSD: Pass the target nfsd_file to nfsd_commit() Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 114/183] NFSD: Revert "NFSD: NFSv4 CLOSE should release an nfsd_file immediately" Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 115/183] NFSD: Add an NFSD_FILE_GC flag to enable nfsd_file garbage collection Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 116/183] nfsd: remove the pages_flushed statistic from filecache Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 117/183] nfsd: reorganize filecache.c Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 118/183] NFSD: Add an nfsd_file_fsync tracepoint Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 119/183] nfsd: rework refcounting in filecache Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 120/183] nfsd: fix handling of cached open files in nfsd4_open codepath Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 121/183] octeontx2-af: Fix LMAC config in cgx_lmac_rx_tx_enable Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 122/183] sched/core: Fix arch_scale_freq_tick() on tickless systems Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 123/183] blk-mq: move the srcu_struct used for quiescing to the tagset Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 124/183] blk-crypto: pass a gendisk to blk_crypto_sysfs_{,un}register Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 125/183] block: factor out a blk_debugfs_remove helper Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 126/183] block: fix error unwinding in blk_register_queue Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 127/183] block: untangle request_queue refcounting from sysfs Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 128/183] block: mark blk_put_queue as potentially blocking Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 129/183] block: Drop spurious might_sleep() from blk_put_queue() Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 130/183] hvc/xen: lock console list traversal Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 131/183] nfc: pn533: Wait for out_urbs completion in pn533_usb_send_frame() Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 132/183] gro: avoid checking for a failed search Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 133/183] gro: take care of DODGY packets Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 134/183] af_unix: selftest: Fix the size of the parameter to connect() Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 135/183] ASoC: qcom: Fix building APQ8016 machine driver without SOUNDWIRE Greg Kroah-Hartman
2023-01-16 15:50 ` [PATCH 6.1 136/183] tools/nolibc: restore mips branch ordering in the _start block Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 137/183] tools/nolibc: fix the O_* fcntl/open macro definitions for riscv Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 138/183] drm/amdgpu: Fix potential NULL dereference Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 139/183] ice: Fix potential memory leak in ice_gnss_tty_write() Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 140/183] ice: Add check for kzalloc Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 141/183] drm/vmwgfx: Write the driver id registers Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 142/183] drm/vmwgfx: Refactor resource managers hashtable to use linux/hashtable implementation Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 143/183] drm/vmwgfx: Remove ttm object hashtable Greg Kroah-Hartman
2023-01-16 15:51 ` Greg Kroah-Hartman [this message]
2023-01-16 15:51 ` [PATCH 6.1 145/183] drm/vmwgfx: Refactor ttm reference object hashtable to use linux/hashtable Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 146/183] drm/vmwgfx: Remove vmwgfx_hashtab Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 147/183] drm/vmwgfx: Remove rcu locks from user resources Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 148/183] net/sched: act_mpls: Fix warning during failed attribute validation Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 149/183] Revert "r8169: disable detection of chip version 36" Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 150/183] net/mlx5: check attr pointer validity before dereferencing it Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 151/183] net/mlx5e: TC, Keep mod hdr actions after mod hdr alloc Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 152/183] net/mlx5: Fix command stats access after free Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 153/183] net/mlx5e: Verify dev is present for fix features ndo Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 154/183] net/mlx5e: IPoIB, Block queue count configuration when sub interfaces are present Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 155/183] net/mlx5e: IPoIB, Block PKEY interfaces with less rx queues than parent Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 156/183] net/mlx5e: IPoIB, Fix child PKEY interface stats on rx path Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 157/183] net/mlx5: Fix ptp max frequency adjustment range Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 158/183] net/mlx5e: Dont support encap rules with gbp option Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 159/183] net/mlx5e: Fix macsec ssci attribute handling in offload path Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 160/183] net/mlx5e: Fix macsec possible null dereference when updating MAC security entity (SecY) Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 161/183] selftests/net: l2_tos_ttl_inherit.sh: Set IPv6 addresses with "nodad" Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 162/183] selftests/net: l2_tos_ttl_inherit.sh: Run tests in their own netns Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 163/183] selftests/net: l2_tos_ttl_inherit.sh: Ensure environment cleanup on failure Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 164/183] octeontx2-pf: Fix resource leakage in VF driver unbind Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 165/183] perf build: Properly guard libbpf includes Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 166/183] perf kmem: Support legacy tracepoints Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 167/183] perf kmem: Support field "node" in evsel__process_alloc_event() coping with recent tracepoint restructuring Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 168/183] igc: Fix PPS delta between two synchronized end-points Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 169/183] net: lan966x: check for ptp to be enabled in lan966x_ptp_deinit() Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 170/183] net: hns3: fix wrong use of rss size during VF rss config Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 171/183] bnxt: make sure we return pages to the pool Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 172/183] platform/surface: aggregator: Add missing call to ssam_request_sync_free() Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 173/183] platform/x86/amd: Fix refcount leak in amd_pmc_probe Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 174/183] ALSA: usb-audio: Fix possible NULL pointer dereference in snd_usb_pcm_has_fixed_rate() Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 175/183] efi: fix NULL-deref in init error path Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 176/183] io_uring: lock overflowing for IOPOLL Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 177/183] io_uring/poll: attempt request issue after racy poll wakeup Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 178/183] drm/i915: Fix CFI violations in gt_sysfs Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 179/183] io_uring/io-wq: free worker if task_work creation is canceled Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 180/183] io_uring/io-wq: only free worker if it was allocated for creation Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 181/183] block: handle bio_split_to_limits() NULL return Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 182/183] Revert "usb: ulpi: defer ulpi_register on ulpi_read_id timeout" Greg Kroah-Hartman
2023-01-16 15:51 ` [PATCH 6.1 183/183] pinctrl: amd: Add dynamic debugging for active GPIOs Greg Kroah-Hartman
2023-01-16 22:38 ` [PATCH 6.1 000/183] 6.1.7-rc1 review Conor Dooley
2023-01-16 23:55 ` Shuah Khan
2023-01-17  2:05 ` Justin Forbes
2023-01-17  4:14 ` ogasawara takeshi
2023-01-17  7:11 ` Wang Yugui
2023-01-17  9:17   ` Greg Kroah-Hartman
2023-01-18  2:14     ` Wang Yugui
2023-01-18  6:08       ` Greg Kroah-Hartman
2023-01-17  8:40 ` Rudi Heitbaum
2023-01-17  9:01 ` Bagas Sanjaya
2023-01-17  9:32 ` Ron Economos
2023-01-17 10:05 ` Naresh Kamboju
2023-01-17 12:43 ` Sudip Mukherjee
2023-01-17 13:21 ` Allen Pais

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=20230116154809.429362934@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=mombasawalam@vmware.com \
    --cc=patches@lists.linux.dev \
    --cc=sashal@kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=thomas.hellstrom@linux.intel.com \
    --cc=zackr@vmware.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).