From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
patches@lists.linux.dev,
Janis Schoetterl-Glausch <scgl@linux.ibm.com>,
Janosch Frank <frankja@linux.ibm.com>,
Claudio Imbrenda <imbrenda@linux.ibm.com>,
Sasha Levin <sashal@kernel.org>
Subject: [PATCH 5.15 33/80] KVM: s390: gaccess: Refactor access address range check
Date: Mon, 28 Oct 2024 07:25:13 +0100 [thread overview]
Message-ID: <20241028062253.544636416@linuxfoundation.org> (raw)
In-Reply-To: <20241028062252.611837461@linuxfoundation.org>
5.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Janis Schoetterl-Glausch <scgl@linux.ibm.com>
[ Upstream commit 7faa543df19bf62d4583a64d3902705747f2ad29 ]
Do not round down the first address to the page boundary, just translate
it normally, which gives the value we care about in the first place.
Given this, translating a single address is just the special case of
translating a range spanning a single page.
Make the output optional, so the function can be used to just check a
range.
Signed-off-by: Janis Schoetterl-Glausch <scgl@linux.ibm.com>
Reviewed-by: Janosch Frank <frankja@linux.ibm.com>
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Message-Id: <20211126164549.7046-3-scgl@linux.ibm.com>
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Stable-dep-of: e8061f06185b ("KVM: s390: gaccess: Check if guest address is in memslot")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
arch/s390/kvm/gaccess.c | 122 +++++++++++++++++++++++-----------------
1 file changed, 69 insertions(+), 53 deletions(-)
diff --git a/arch/s390/kvm/gaccess.c b/arch/s390/kvm/gaccess.c
index 45966fbba1820..ca7f22a9e0c57 100644
--- a/arch/s390/kvm/gaccess.c
+++ b/arch/s390/kvm/gaccess.c
@@ -794,35 +794,74 @@ static int low_address_protection_enabled(struct kvm_vcpu *vcpu,
return 1;
}
-static int guest_page_range(struct kvm_vcpu *vcpu, unsigned long ga, u8 ar,
- unsigned long *pages, unsigned long nr_pages,
- const union asce asce, enum gacc_mode mode)
+/**
+ * guest_range_to_gpas() - Calculate guest physical addresses of page fragments
+ * covering a logical range
+ * @vcpu: virtual cpu
+ * @ga: guest address, start of range
+ * @ar: access register
+ * @gpas: output argument, may be NULL
+ * @len: length of range in bytes
+ * @asce: address-space-control element to use for translation
+ * @mode: access mode
+ *
+ * Translate a logical range to a series of guest absolute addresses,
+ * such that the concatenation of page fragments starting at each gpa make up
+ * the whole range.
+ * The translation is performed as if done by the cpu for the given @asce, @ar,
+ * @mode and state of the @vcpu.
+ * If the translation causes an exception, its program interruption code is
+ * returned and the &struct kvm_s390_pgm_info pgm member of @vcpu is modified
+ * such that a subsequent call to kvm_s390_inject_prog_vcpu() will inject
+ * a correct exception into the guest.
+ * The resulting gpas are stored into @gpas, unless it is NULL.
+ *
+ * Note: All fragments except the first one start at the beginning of a page.
+ * When deriving the boundaries of a fragment from a gpa, all but the last
+ * fragment end at the end of the page.
+ *
+ * Return:
+ * * 0 - success
+ * * <0 - translation could not be performed, for example if guest
+ * memory could not be accessed
+ * * >0 - an access exception occurred. In this case the returned value
+ * is the program interruption code and the contents of pgm may
+ * be used to inject an exception into the guest.
+ */
+static int guest_range_to_gpas(struct kvm_vcpu *vcpu, unsigned long ga, u8 ar,
+ unsigned long *gpas, unsigned long len,
+ const union asce asce, enum gacc_mode mode)
{
psw_t *psw = &vcpu->arch.sie_block->gpsw;
+ unsigned int offset = offset_in_page(ga);
+ unsigned int fragment_len;
int lap_enabled, rc = 0;
enum prot_type prot;
+ unsigned long gpa;
lap_enabled = low_address_protection_enabled(vcpu, asce);
- while (nr_pages) {
+ while (min(PAGE_SIZE - offset, len) > 0) {
+ fragment_len = min(PAGE_SIZE - offset, len);
ga = kvm_s390_logical_to_effective(vcpu, ga);
if (mode == GACC_STORE && lap_enabled && is_low_address(ga))
return trans_exc(vcpu, PGM_PROTECTION, ga, ar, mode,
PROT_TYPE_LA);
- ga &= PAGE_MASK;
if (psw_bits(*psw).dat) {
- rc = guest_translate(vcpu, ga, pages, asce, mode, &prot);
+ rc = guest_translate(vcpu, ga, &gpa, asce, mode, &prot);
if (rc < 0)
return rc;
} else {
- *pages = kvm_s390_real_to_abs(vcpu, ga);
- if (kvm_is_error_gpa(vcpu->kvm, *pages))
+ gpa = kvm_s390_real_to_abs(vcpu, ga);
+ if (kvm_is_error_gpa(vcpu->kvm, gpa))
rc = PGM_ADDRESSING;
}
if (rc)
return trans_exc(vcpu, rc, ga, ar, mode, prot);
- ga += PAGE_SIZE;
- pages++;
- nr_pages--;
+ if (gpas)
+ *gpas++ = gpa;
+ offset = 0;
+ ga += fragment_len;
+ len -= fragment_len;
}
return 0;
}
@@ -831,10 +870,10 @@ int access_guest(struct kvm_vcpu *vcpu, unsigned long ga, u8 ar, void *data,
unsigned long len, enum gacc_mode mode)
{
psw_t *psw = &vcpu->arch.sie_block->gpsw;
- unsigned long nr_pages, gpa, idx;
- unsigned long pages_array[2];
+ unsigned long nr_pages, idx;
+ unsigned long gpa_array[2];
unsigned int fragment_len;
- unsigned long *pages;
+ unsigned long *gpas;
int need_ipte_lock;
union asce asce;
int rc;
@@ -846,30 +885,28 @@ int access_guest(struct kvm_vcpu *vcpu, unsigned long ga, u8 ar, void *data,
if (rc)
return rc;
nr_pages = (((ga & ~PAGE_MASK) + len - 1) >> PAGE_SHIFT) + 1;
- pages = pages_array;
- if (nr_pages > ARRAY_SIZE(pages_array))
- pages = vmalloc(array_size(nr_pages, sizeof(unsigned long)));
- if (!pages)
+ gpas = gpa_array;
+ if (nr_pages > ARRAY_SIZE(gpa_array))
+ gpas = vmalloc(array_size(nr_pages, sizeof(unsigned long)));
+ if (!gpas)
return -ENOMEM;
need_ipte_lock = psw_bits(*psw).dat && !asce.r;
if (need_ipte_lock)
ipte_lock(vcpu);
- rc = guest_page_range(vcpu, ga, ar, pages, nr_pages, asce, mode);
+ rc = guest_range_to_gpas(vcpu, ga, ar, gpas, len, asce, mode);
for (idx = 0; idx < nr_pages && !rc; idx++) {
- gpa = pages[idx] + offset_in_page(ga);
- fragment_len = min(PAGE_SIZE - offset_in_page(gpa), len);
+ fragment_len = min(PAGE_SIZE - offset_in_page(gpas[idx]), len);
if (mode == GACC_STORE)
- rc = kvm_write_guest(vcpu->kvm, gpa, data, fragment_len);
+ rc = kvm_write_guest(vcpu->kvm, gpas[idx], data, fragment_len);
else
- rc = kvm_read_guest(vcpu->kvm, gpa, data, fragment_len);
+ rc = kvm_read_guest(vcpu->kvm, gpas[idx], data, fragment_len);
len -= fragment_len;
- ga += fragment_len;
data += fragment_len;
}
if (need_ipte_lock)
ipte_unlock(vcpu);
- if (nr_pages > ARRAY_SIZE(pages_array))
- vfree(pages);
+ if (nr_pages > ARRAY_SIZE(gpa_array))
+ vfree(gpas);
return rc;
}
@@ -911,8 +948,6 @@ int access_guest_real(struct kvm_vcpu *vcpu, unsigned long gra,
int guest_translate_address(struct kvm_vcpu *vcpu, unsigned long gva, u8 ar,
unsigned long *gpa, enum gacc_mode mode)
{
- psw_t *psw = &vcpu->arch.sie_block->gpsw;
- enum prot_type prot;
union asce asce;
int rc;
@@ -920,23 +955,7 @@ int guest_translate_address(struct kvm_vcpu *vcpu, unsigned long gva, u8 ar,
rc = get_vcpu_asce(vcpu, &asce, gva, ar, mode);
if (rc)
return rc;
- if (is_low_address(gva) && low_address_protection_enabled(vcpu, asce)) {
- if (mode == GACC_STORE)
- return trans_exc(vcpu, PGM_PROTECTION, gva, 0,
- mode, PROT_TYPE_LA);
- }
-
- if (psw_bits(*psw).dat && !asce.r) { /* Use DAT? */
- rc = guest_translate(vcpu, gva, gpa, asce, mode, &prot);
- if (rc > 0)
- return trans_exc(vcpu, rc, gva, 0, mode, prot);
- } else {
- *gpa = kvm_s390_real_to_abs(vcpu, gva);
- if (kvm_is_error_gpa(vcpu->kvm, *gpa))
- return trans_exc(vcpu, rc, gva, PGM_ADDRESSING, mode, 0);
- }
-
- return rc;
+ return guest_range_to_gpas(vcpu, gva, ar, gpa, 1, asce, mode);
}
/**
@@ -950,17 +969,14 @@ int guest_translate_address(struct kvm_vcpu *vcpu, unsigned long gva, u8 ar,
int check_gva_range(struct kvm_vcpu *vcpu, unsigned long gva, u8 ar,
unsigned long length, enum gacc_mode mode)
{
- unsigned long gpa;
- unsigned long currlen;
+ union asce asce;
int rc = 0;
+ rc = get_vcpu_asce(vcpu, &asce, gva, ar, mode);
+ if (rc)
+ return rc;
ipte_lock(vcpu);
- while (length > 0 && !rc) {
- currlen = min(length, PAGE_SIZE - (gva % PAGE_SIZE));
- rc = guest_translate_address(vcpu, gva, ar, &gpa, mode);
- gva += currlen;
- length -= currlen;
- }
+ rc = guest_range_to_gpas(vcpu, gva, ar, NULL, length, asce, mode);
ipte_unlock(vcpu);
return rc;
--
2.43.0
next prev parent reply other threads:[~2024-10-28 6:28 UTC|newest]
Thread overview: 89+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-28 6:24 [PATCH 5.15 00/80] 5.15.170-rc1 review Greg Kroah-Hartman
2024-10-28 6:24 ` [PATCH 5.15 01/80] bpf: Make sure internal and UAPI bpf_redirect flags dont overlap Greg Kroah-Hartman
2024-10-28 6:24 ` [PATCH 5.15 02/80] bpf: devmap: provide rxq after redirect Greg Kroah-Hartman
2024-10-28 6:24 ` [PATCH 5.15 03/80] RDMA/bnxt_re: Fix incorrect AVID type in WQE structure Greg Kroah-Hartman
2024-10-28 6:24 ` [PATCH 5.15 04/80] RDMA/bnxt_re: Add a check for memory allocation Greg Kroah-Hartman
2024-10-28 6:24 ` [PATCH 5.15 05/80] x86/resctrl: Avoid overflow in MB settings in bw_validate() Greg Kroah-Hartman
2024-10-28 6:24 ` [PATCH 5.15 06/80] ARM: dts: bcm2837-rpi-cm3-io3: Fix HDMI hpd-gpio pin Greg Kroah-Hartman
2024-10-28 6:24 ` [PATCH 5.15 07/80] ALSA: hda/cs8409: Fix possible NULL dereference Greg Kroah-Hartman
2024-10-28 6:24 ` [PATCH 5.15 08/80] RDMA/cxgb4: Fix RDMA_CM_EVENT_UNREACHABLE error for iWARP Greg Kroah-Hartman
2024-10-28 6:24 ` [PATCH 5.15 09/80] RDMA/irdma: Fix misspelling of "accept*" Greg Kroah-Hartman
2024-10-28 6:24 ` [PATCH 5.15 10/80] ipv4: give an IPv4 dev to blackhole_netdev Greg Kroah-Hartman
2024-10-28 6:24 ` [PATCH 5.15 11/80] RDMA/bnxt_re: Return more meaningful error Greg Kroah-Hartman
2024-10-28 6:24 ` [PATCH 5.15 12/80] RDMA/bnxt_re: Fix a bug while setting up Level-2 PBL pages Greg Kroah-Hartman
2024-10-28 6:24 ` [PATCH 5.15 13/80] drm/msm/dsi: fix 32-bit signed integer extension in pclk_rate calculation Greg Kroah-Hartman
2024-10-28 6:24 ` [PATCH 5.15 14/80] drm/msm: Avoid NULL dereference in msm_disp_state_print_regs() Greg Kroah-Hartman
2024-10-28 6:24 ` [PATCH 5.15 15/80] drm/msm: Allocate memory for disp snapshot with kvzalloc() Greg Kroah-Hartman
2024-10-28 6:24 ` [PATCH 5.15 16/80] net: usb: usbnet: fix race in probe failure Greg Kroah-Hartman
2024-10-28 6:24 ` [PATCH 5.15 17/80] octeontx2-af: Fix potential integer overflows on integer shifts Greg Kroah-Hartman
2024-10-28 6:24 ` [PATCH 5.15 18/80] macsec: dont increment counters for an unrelated SA Greg Kroah-Hartman
2024-10-28 6:24 ` [PATCH 5.15 19/80] net: ethernet: aeroflex: fix potential memory leak in greth_start_xmit_gbit() Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 20/80] net/smc: Fix searching in list of known pnetids in smc_pnet_add_pnetid Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 21/80] net: xilinx: axienet: fix potential memory leak in axienet_start_xmit() Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 22/80] net: systemport: fix potential memory leak in bcm_sysport_xmit() Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 23/80] tcp/dccp: Dont use timer_pending() in reqsk_queue_unlink() Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 24/80] genetlink: hold RCU in genlmsg_mcast() Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 25/80] scsi: target: core: Fix null-ptr-deref in target_alloc_device() Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 26/80] smb: client: fix OOBs when building SMB2_IOCTL request Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 27/80] usb: typec: altmode should keep reference to parent Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 28/80] s390: Initialize psw mask in perf_arch_fetch_caller_regs() Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 29/80] Bluetooth: bnep: fix wild-memory-access in proto_unregister Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 30/80] arm64:uprobe fix the uprobe SWBP_INSN in big-endian Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 31/80] arm64: probes: Fix uprobes for big-endian kernels Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 32/80] KVM: s390: gaccess: Refactor gpa and length calculation Greg Kroah-Hartman
2024-10-28 6:25 ` Greg Kroah-Hartman [this message]
2024-10-28 6:25 ` [PATCH 5.15 34/80] KVM: s390: gaccess: Cleanup access to guest pages Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 35/80] KVM: s390: gaccess: Check if guest address is in memslot Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 36/80] usb: gadget: Add function wakeup support Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 37/80] XHCI: Separate PORT and CAPs macros into dedicated file Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 38/80] usb: dwc3: core: Fix system suspend on TI AM62 platforms Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 39/80] block, bfq: fix procress reference leakage for bfqq in merge chain Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 40/80] exec: dont WARN for racy path_noexec check Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 41/80] drm/vboxvideo: Replace fake VLA at end of vbva_mouse_pointer_shape with real VLA Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 42/80] ASoC: codecs: lpass-rx-macro: add missing CDC_RX_BCL_VBAT_RF_PROC2 to default regs values Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 43/80] ASoC: fsl_sai: Enable FIFO continue on error FCONT bit Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 44/80] arm64: Force position-independent veneers Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 45/80] udf: fix uninit-value use in udf_get_fileshortad Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 46/80] platform/x86: dell-wmi: Ignore suspend notifications Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 47/80] arm64/uprobes: change the uprobe_opcode_t typedef to fix the sparse warning Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 48/80] ASoC: qcom: sm8250: add qrb4210-rb2-sndcard compatible string Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 49/80] platform/x86: dell-sysman: add support for alienware products Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 50/80] jfs: Fix sanity check in dbMount Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 51/80] tracing: Consider the NULL character when validating the event length Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 52/80] xfrm: extract dst lookup parameters into a struct Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 53/80] xfrm: respect ip protocols rules criteria when performing dst lookups Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 54/80] net/sun3_82586: fix potential memory leak in sun3_82586_send_packet() Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 55/80] be2net: fix potential memory leak in be_xmit() Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 56/80] net: plip: fix break; causing plip to never transmit Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 57/80] net: dsa: mv88e6xxx: Fix error when setting port policy on mv88e6393x Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 58/80] netfilter: xtables: fix typo causing some targets not to load on IPv6 Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 59/80] net: wwan: fix global oob in wwan_rtnl_policy Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 60/80] net: usb: usbnet: fix name regression Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 61/80] net: sched: fix use-after-free in taprio_change() Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 62/80] r8169: avoid unsolicited interrupts Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 63/80] posix-clock: posix-clock: Fix unbalanced locking in pc_clock_settime() Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 64/80] bpf,perf: Fix perf_event_detach_bpf_prog error handling Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 65/80] ALSA: firewire-lib: Avoid division by zero in apply_constraint_to_size() Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 66/80] ALSA: hda/realtek: Update default depop procedure Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 67/80] btrfs: zoned: fix zone unusable accounting for freed reserved extent Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 68/80] drm/amd: Guard against bad data for ATIF ACPI method Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 69/80] ACPI: resource: Add LG 16T90SP to irq1_level_low_skip_override[] Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 70/80] ACPI: button: Add DMI quirk for Samsung Galaxy Book2 to fix initial lid detection issue Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 71/80] nilfs2: fix kernel bug due to missing clearing of buffer delay flag Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 72/80] openat2: explicitly return -E2BIG for (usize > PAGE_SIZE) Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 73/80] KVM: nSVM: Ignore nCR3[4:0] when loading PDPTEs from memory Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 74/80] ALSA: hda/realtek: Add subwoofer quirk for Acer Predator G9-593 Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 75/80] xfrm: fix one more kernel-infoleak in algo dumping Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 76/80] hv_netvsc: Fix VF namespace also in synthetic NIC NETDEV_REGISTER event Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 77/80] selinux: improve error checking in sel_write_load() Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 78/80] serial: protect uart_port_dtr_rts() in uart_shutdown() too Greg Kroah-Hartman
2024-10-28 6:25 ` [PATCH 5.15 79/80] net: phy: dp83822: Fix reset pin definitions Greg Kroah-Hartman
2024-10-28 6:26 ` [PATCH 5.15 80/80] ASoC: qcom: Fix NULL Dereference in asoc_qcom_lpass_cpu_platform_probe() Greg Kroah-Hartman
2024-10-28 14:21 ` [PATCH 5.15 00/80] 5.15.170-rc1 review Mark Brown
2024-10-28 17:49 ` SeongJae Park
2024-10-28 19:08 ` Florian Fainelli
2024-10-29 2:07 ` [PATCH 5.15] " Hardik Garg
2024-10-29 5:05 ` [PATCH 5.15 00/80] " Harshit Mogalapalli
2024-10-29 7:34 ` Naresh Kamboju
2024-10-29 13:49 ` Muhammad Usama Anjum
2024-10-30 1:46 ` Ron Economos
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=20241028062253.544636416@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=frankja@linux.ibm.com \
--cc=imbrenda@linux.ibm.com \
--cc=patches@lists.linux.dev \
--cc=sashal@kernel.org \
--cc=scgl@linux.ibm.com \
--cc=stable@vger.kernel.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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.