From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Thomas Hellstrom <thellstrom@vmware.com>,
Deepak Rawat <drawat@vmware.com>
Subject: [PATCH 4.19 79/90] drm/vmwgfx: Use the backdoor port if the HB port is not available
Date: Mon, 24 Jun 2019 17:57:09 +0800 [thread overview]
Message-ID: <20190624092319.123052565@linuxfoundation.org> (raw)
In-Reply-To: <20190624092313.788773607@linuxfoundation.org>
From: Thomas Hellstrom <thellstrom@vmware.com>
commit cc0ba0d8624f210995924bb57a8b181ce8976606 upstream.
The HB port may not be available for various reasons. Either it has been
disabled by a config option or by the hypervisor for other reasons.
In that case, make sure we have a backup plan and use the backdoor port
instead with a performance penalty.
Cc: stable@vger.kernel.org
Fixes: 89da76fde68d ("drm/vmwgfx: Add VMWare host messaging capability")
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Reviewed-by: Deepak Rawat <drawat@vmware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/vmwgfx/vmwgfx_msg.c | 146 ++++++++++++++++++++++++++++--------
1 file changed, 117 insertions(+), 29 deletions(-)
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c
@@ -136,6 +136,114 @@ static int vmw_close_channel(struct rpc_
return 0;
}
+/**
+ * vmw_port_hb_out - Send the message payload either through the
+ * high-bandwidth port if available, or through the backdoor otherwise.
+ * @channel: The rpc channel.
+ * @msg: NULL-terminated message.
+ * @hb: Whether the high-bandwidth port is available.
+ *
+ * Return: The port status.
+ */
+static unsigned long vmw_port_hb_out(struct rpc_channel *channel,
+ const char *msg, bool hb)
+{
+ unsigned long si, di, eax, ebx, ecx, edx;
+ unsigned long msg_len = strlen(msg);
+
+ if (hb) {
+ unsigned long bp = channel->cookie_high;
+
+ si = (uintptr_t) msg;
+ di = channel->cookie_low;
+
+ VMW_PORT_HB_OUT(
+ (MESSAGE_STATUS_SUCCESS << 16) | VMW_PORT_CMD_HB_MSG,
+ msg_len, si, di,
+ VMW_HYPERVISOR_HB_PORT | (channel->channel_id << 16),
+ VMW_HYPERVISOR_MAGIC, bp,
+ eax, ebx, ecx, edx, si, di);
+
+ return ebx;
+ }
+
+ /* HB port not available. Send the message 4 bytes at a time. */
+ ecx = MESSAGE_STATUS_SUCCESS << 16;
+ while (msg_len && (HIGH_WORD(ecx) & MESSAGE_STATUS_SUCCESS)) {
+ unsigned int bytes = min_t(size_t, msg_len, 4);
+ unsigned long word = 0;
+
+ memcpy(&word, msg, bytes);
+ msg_len -= bytes;
+ msg += bytes;
+ si = channel->cookie_high;
+ di = channel->cookie_low;
+
+ VMW_PORT(VMW_PORT_CMD_MSG | (MSG_TYPE_SENDPAYLOAD << 16),
+ word, si, di,
+ VMW_HYPERVISOR_PORT | (channel->channel_id << 16),
+ VMW_HYPERVISOR_MAGIC,
+ eax, ebx, ecx, edx, si, di);
+ }
+
+ return ecx;
+}
+
+/**
+ * vmw_port_hb_in - Receive the message payload either through the
+ * high-bandwidth port if available, or through the backdoor otherwise.
+ * @channel: The rpc channel.
+ * @reply: Pointer to buffer holding reply.
+ * @reply_len: Length of the reply.
+ * @hb: Whether the high-bandwidth port is available.
+ *
+ * Return: The port status.
+ */
+static unsigned long vmw_port_hb_in(struct rpc_channel *channel, char *reply,
+ unsigned long reply_len, bool hb)
+{
+ unsigned long si, di, eax, ebx, ecx, edx;
+
+ if (hb) {
+ unsigned long bp = channel->cookie_low;
+
+ si = channel->cookie_high;
+ di = (uintptr_t) reply;
+
+ VMW_PORT_HB_IN(
+ (MESSAGE_STATUS_SUCCESS << 16) | VMW_PORT_CMD_HB_MSG,
+ reply_len, si, di,
+ VMW_HYPERVISOR_HB_PORT | (channel->channel_id << 16),
+ VMW_HYPERVISOR_MAGIC, bp,
+ eax, ebx, ecx, edx, si, di);
+
+ return ebx;
+ }
+
+ /* HB port not available. Retrieve the message 4 bytes at a time. */
+ ecx = MESSAGE_STATUS_SUCCESS << 16;
+ while (reply_len) {
+ unsigned int bytes = min_t(unsigned long, reply_len, 4);
+
+ si = channel->cookie_high;
+ di = channel->cookie_low;
+
+ VMW_PORT(VMW_PORT_CMD_MSG | (MSG_TYPE_RECVPAYLOAD << 16),
+ MESSAGE_STATUS_SUCCESS, si, di,
+ VMW_HYPERVISOR_PORT | (channel->channel_id << 16),
+ VMW_HYPERVISOR_MAGIC,
+ eax, ebx, ecx, edx, si, di);
+
+ if ((HIGH_WORD(ecx) & MESSAGE_STATUS_SUCCESS) == 0)
+ break;
+
+ memcpy(reply, &ebx, bytes);
+ reply_len -= bytes;
+ reply += bytes;
+ }
+
+ return ecx;
+}
/**
@@ -148,11 +256,10 @@ static int vmw_close_channel(struct rpc_
*/
static int vmw_send_msg(struct rpc_channel *channel, const char *msg)
{
- unsigned long eax, ebx, ecx, edx, si, di, bp;
+ unsigned long eax, ebx, ecx, edx, si, di;
size_t msg_len = strlen(msg);
int retries = 0;
-
while (retries < RETRIES) {
retries++;
@@ -166,23 +273,14 @@ static int vmw_send_msg(struct rpc_chann
VMW_HYPERVISOR_MAGIC,
eax, ebx, ecx, edx, si, di);
- if ((HIGH_WORD(ecx) & MESSAGE_STATUS_SUCCESS) == 0 ||
- (HIGH_WORD(ecx) & MESSAGE_STATUS_HB) == 0) {
- /* Expected success + high-bandwidth. Give up. */
+ if ((HIGH_WORD(ecx) & MESSAGE_STATUS_SUCCESS) == 0) {
+ /* Expected success. Give up. */
return -EINVAL;
}
/* Send msg */
- si = (uintptr_t) msg;
- di = channel->cookie_low;
- bp = channel->cookie_high;
-
- VMW_PORT_HB_OUT(
- (MESSAGE_STATUS_SUCCESS << 16) | VMW_PORT_CMD_HB_MSG,
- msg_len, si, di,
- VMW_HYPERVISOR_HB_PORT | (channel->channel_id << 16),
- VMW_HYPERVISOR_MAGIC, bp,
- eax, ebx, ecx, edx, si, di);
+ ebx = vmw_port_hb_out(channel, msg,
+ !!(HIGH_WORD(ecx) & MESSAGE_STATUS_HB));
if ((HIGH_WORD(ebx) & MESSAGE_STATUS_SUCCESS) != 0) {
return 0;
@@ -211,7 +309,7 @@ STACK_FRAME_NON_STANDARD(vmw_send_msg);
static int vmw_recv_msg(struct rpc_channel *channel, void **msg,
size_t *msg_len)
{
- unsigned long eax, ebx, ecx, edx, si, di, bp;
+ unsigned long eax, ebx, ecx, edx, si, di;
char *reply;
size_t reply_len;
int retries = 0;
@@ -233,8 +331,7 @@ static int vmw_recv_msg(struct rpc_chann
VMW_HYPERVISOR_MAGIC,
eax, ebx, ecx, edx, si, di);
- if ((HIGH_WORD(ecx) & MESSAGE_STATUS_SUCCESS) == 0 ||
- (HIGH_WORD(ecx) & MESSAGE_STATUS_HB) == 0) {
+ if ((HIGH_WORD(ecx) & MESSAGE_STATUS_SUCCESS) == 0) {
DRM_ERROR("Failed to get reply size for host message.\n");
return -EINVAL;
}
@@ -252,17 +349,8 @@ static int vmw_recv_msg(struct rpc_chann
/* Receive buffer */
- si = channel->cookie_high;
- di = (uintptr_t) reply;
- bp = channel->cookie_low;
-
- VMW_PORT_HB_IN(
- (MESSAGE_STATUS_SUCCESS << 16) | VMW_PORT_CMD_HB_MSG,
- reply_len, si, di,
- VMW_HYPERVISOR_HB_PORT | (channel->channel_id << 16),
- VMW_HYPERVISOR_MAGIC, bp,
- eax, ebx, ecx, edx, si, di);
-
+ ebx = vmw_port_hb_in(channel, reply, reply_len,
+ !!(HIGH_WORD(ecx) & MESSAGE_STATUS_HB));
if ((HIGH_WORD(ebx) & MESSAGE_STATUS_SUCCESS) == 0) {
kfree(reply);
next prev parent reply other threads:[~2019-06-24 10:06 UTC|newest]
Thread overview: 97+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-24 9:55 [PATCH 4.19 00/90] 4.19.56-stable review Greg Kroah-Hartman
2019-06-24 9:55 ` [PATCH 4.19 01/90] tracing: Silence GCC 9 array bounds warning Greg Kroah-Hartman
2019-06-24 9:55 ` [PATCH 4.19 02/90] objtool: Support per-function rodata sections Greg Kroah-Hartman
2019-06-24 9:55 ` [PATCH 4.19 03/90] gcc-9: silence address-of-packed-member warning Greg Kroah-Hartman
2019-06-24 9:55 ` [PATCH 4.19 04/90] ovl: support the FS_IOC_FS[SG]ETXATTR ioctls Greg Kroah-Hartman
2019-06-24 9:55 ` [PATCH 4.19 05/90] ovl: fix wrong flags check in " Greg Kroah-Hartman
2019-06-24 9:55 ` [PATCH 4.19 06/90] ovl: make i_ino consistent with st_ino in more cases Greg Kroah-Hartman
2019-06-24 9:55 ` [PATCH 4.19 07/90] ovl: detect overlapping layers Greg Kroah-Hartman
2019-06-24 9:55 ` [PATCH 4.19 08/90] ovl: dont fail with disconnected lower NFS Greg Kroah-Hartman
2019-06-24 9:55 ` [PATCH 4.19 09/90] ovl: fix bogus -Wmaybe-unitialized warning Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 10/90] s390/jump_label: Use "jdd" constraint on gcc9 Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 11/90] s390/ap: rework assembler functions to use unions for in/out register variables Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 12/90] mmc: sdhci: sdhci-pci-o2micro: Correctly set bus width when tuning Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 13/90] mmc: core: API to temporarily disable retuning for SDIO CRC errors Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 14/90] mmc: core: Add sdio_retune_hold_now() and sdio_retune_release() Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 15/90] mmc: core: Prevent processing SDIO IRQs when the card is suspended Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 16/90] scsi: ufs: Avoid runtime suspend possibly being blocked forever Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 17/90] usb: chipidea: udc: workaround for endpoint conflict issue Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 18/90] xhci: detect USB 3.2 capable host controllers correctly Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 19/90] usb: xhci: Dont try to recover an endpoint if port is in error state Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 20/90] IB/hfi1: Validate fault injection opcode user input Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 21/90] IB/hfi1: Silence txreq allocation warnings Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 22/90] iio: temperature: mlx90632 Relax the compatibility check Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 23/90] Input: synaptics - enable SMBus on ThinkPad E480 and E580 Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 24/90] Input: uinput - add compat ioctl number translation for UI_*_FF_UPLOAD Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 25/90] Input: silead - add MSSL0017 to acpi_device_id Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 26/90] apparmor: fix PROFILE_MEDIATES for untrusted input Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 27/90] apparmor: enforce nullbyte at end of tag string Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 28/90] brcmfmac: sdio: Disable auto-tuning around commands expected to fail Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 29/90] brcmfmac: sdio: Dont tune while the card is off Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 30/90] ARC: fix build warnings Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 31/90] dmaengine: dw-axi-dmac: fix null dereference when pointer first is null Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 32/90] dmaengine: sprd: Fix block length overflow Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 33/90] ARC: [plat-hsdk]: Add missing multicast filter bins number to GMAC node Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 34/90] ARC: [plat-hsdk]: Add missing FIFO size entry in " Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 35/90] fpga: dfl: afu: Pass the correct device to dma_mapping_error() Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 36/90] fpga: dfl: Add lockdep classes for pdata->lock Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 37/90] parport: Fix mem leak in parport_register_dev_model Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 38/90] parisc: Fix compiler warnings in float emulation code Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 39/90] IB/rdmavt: Fix alloc_qpn() WARN_ON() Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 40/90] IB/hfi1: Insure freeze_work work_struct is canceled on shutdown Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 41/90] IB/{qib, hfi1, rdmavt}: Correct ibv_devinfo max_mr value Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 42/90] IB/hfi1: Validate page aligned for a given virtual address Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 43/90] MIPS: uprobes: remove set but not used variable epc Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 44/90] xtensa: Fix section mismatch between memblock_reserve and mem_reserve Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 45/90] kselftest/cgroup: fix unexpected testing failure on test_memcontrol Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 46/90] kselftest/cgroup: fix unexpected testing failure on test_core Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 47/90] kselftest/cgroup: fix incorrect test_core skip Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 48/90] selftests: vm: install test_vmalloc.sh for run_vmtests Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 49/90] net: dsa: mv88e6xxx: avoid error message on remove from VLAN 0 Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 50/90] net: hns: Fix loopback test failed at copper ports Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 51/90] mdesc: fix a missing-check bug in get_vdev_port_node_info() Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 52/90] sparc: perf: fix updated event period in response to PERF_EVENT_IOC_PERIOD Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 53/90] net: ethernet: mediatek: Use hw_feature to judge if HWLRO is supported Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 54/90] net: ethernet: mediatek: Use NET_IP_ALIGN to judge if HW RX_2BYTE_OFFSET is enabled Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 55/90] drm/arm/mali-dp: Add a loop around the second set CVAL and try 5 times Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 56/90] drm/arm/hdlcd: Actually validate CRTC modes Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 57/90] drm/arm/hdlcd: Allow a bit of clock tolerance Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 58/90] nvmet: fix data_len to 0 for bdev-backed write_zeroes Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 59/90] scripts/checkstack.pl: Fix arm64 wrong or unknown architecture Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 60/90] scsi: ufs: Check that space was properly alloced in copy_query_response Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 61/90] scsi: smartpqi: unlock on error in pqi_submit_raid_request_synchronous() Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 62/90] net: ipvlan: Fix ipvlan device tso disabled while NETIF_F_IP_CSUM is set Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 63/90] s390/qeth: fix VLAN attribute in bridge_hostnotify udev event Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 64/90] hwmon: (core) add thermal sensors only if dev->of_node is present Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 65/90] hwmon: (pmbus/core) Treat parameters as paged if on multiple pages Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 66/90] arm64: Silence gcc warnings about arch ABI drift Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 67/90] nvme: Fix u32 overflow in the number of namespace list calculation Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 68/90] btrfs: start readahead also in seed devices Greg Kroah-Hartman
2019-06-24 9:56 ` [PATCH 4.19 69/90] can: xilinx_can: use correct bittiming_const for CAN FD core Greg Kroah-Hartman
2019-06-24 9:57 ` [PATCH 4.19 70/90] can: flexcan: fix timeout when set small bitrate Greg Kroah-Hartman
2019-06-24 9:57 ` [PATCH 4.19 71/90] can: purge socket error queue on sock destruct Greg Kroah-Hartman
2019-06-24 9:57 ` [PATCH 4.19 72/90] riscv: mm: synchronize MMU after pte change Greg Kroah-Hartman
2019-06-24 9:57 ` [PATCH 4.19 73/90] powerpc/bpf: use unsigned division instruction for 64-bit operations Greg Kroah-Hartman
2019-06-24 9:57 ` [PATCH 4.19 74/90] ARM: imx: cpuidle-imx6sx: Restrict the SW2ISO increase to i.MX6SX Greg Kroah-Hartman
2019-06-24 9:57 ` [PATCH 4.19 75/90] ARM: dts: dra76x: Update MMC2_HS200_MANUAL1 iodelay values Greg Kroah-Hartman
2019-06-24 9:57 ` [PATCH 4.19 76/90] ARM: dts: am57xx-idk: Remove support for voltage switching for SD card Greg Kroah-Hartman
2019-06-24 9:57 ` [PATCH 4.19 77/90] arm64/sve: <uapi/asm/ptrace.h> should not depend on <uapi/linux/prctl.h> Greg Kroah-Hartman
2019-06-24 9:57 ` [PATCH 4.19 78/90] arm64: ssbd: explicitly depend on <linux/prctl.h> Greg Kroah-Hartman
2019-06-24 9:57 ` Greg Kroah-Hartman [this message]
2019-06-24 9:57 ` [PATCH 4.19 80/90] staging: erofs: add requirements field in superblock Greg Kroah-Hartman
2019-06-24 9:57 ` [PATCH 4.19 81/90] Bluetooth: Align minimum encryption key size for LE and BR/EDR connections Greg Kroah-Hartman
2019-06-24 9:57 ` [PATCH 4.19 82/90] Bluetooth: Fix regression with minimum encryption key size alignment Greg Kroah-Hartman
2019-06-24 9:57 ` [PATCH 4.19 83/90] SMB3: retry on STATUS_INSUFFICIENT_RESOURCES instead of failing write Greg Kroah-Hartman
2019-06-24 9:57 ` [PATCH 4.19 84/90] cfg80211: fix memory leak of wiphy device name Greg Kroah-Hartman
2019-06-25 21:51 ` Pavel Machek
2019-06-25 22:33 ` Eric Biggers
2019-06-24 9:57 ` [PATCH 4.19 85/90] mac80211: drop robust management frames from unknown TA Greg Kroah-Hartman
2019-06-24 9:57 ` [PATCH 4.19 86/90] {nl,mac}80211: allow 4addr AP operation on crypto controlled devices Greg Kroah-Hartman
2019-06-24 9:57 ` [PATCH 4.19 87/90] mac80211: handle deauthentication/disassociation from TDLS peer Greg Kroah-Hartman
2019-06-24 9:57 ` [PATCH 4.19 88/90] nl80211: fix station_info pertid memory leak Greg Kroah-Hartman
2019-06-24 9:57 ` [PATCH 4.19 89/90] mac80211: Do not use stack memory with scatterlist for GMAC Greg Kroah-Hartman
2019-06-24 9:57 ` [PATCH 4.19 90/90] x86/resctrl: Dont stop walking closids when a locksetup group is found Greg Kroah-Hartman
2019-06-24 15:11 ` [PATCH 4.19 00/90] 4.19.56-stable review kernelci.org bot
2019-06-25 0:14 ` Guenter Roeck
2019-06-25 0:43 ` Naresh Kamboju
2019-06-25 10:00 ` Jon Hunter
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=20190624092319.123052565@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=drawat@vmware.com \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=thellstrom@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).