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 Petazzoni <thomas.petazzoni@free-electrons.com>,
Gregory CLEMENT <gregory.clement@free-electrons.com>
Subject: [PATCH 4.0 088/105] Revert "bus: mvebu-mbus: make sure SDRAM CS for DMA dont overlap the MBus bridge window"
Date: Fri, 19 Jun 2015 13:36:18 -0700 [thread overview]
Message-ID: <20150619203600.762752021@linuxfoundation.org> (raw)
In-Reply-To: <20150619203558.187802739@linuxfoundation.org>
4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
commit 885dbd154b2f2ee305cec6fd0a162e1a77ae2b06 upstream.
This reverts commit 1737cac69369 ("bus: mvebu-mbus: make sure SDRAM CS
for DMA don't overlap the MBus bridge window"), because it breaks DMA
on platforms having more than 2 GB of RAM.
This commit changed the information reported to DMA masters device
drivers through the mv_mbus_dram_info() function so that the returned
DRAM ranges do not overlap with I/O windows.
This was necessary as a preparation to support the new CESA Crypto
Engine driver, which will use DMA for cryptographic operations. But
since it does DMA with the SRAM which is mapped as an I/O window,
having DRAM ranges overlapping with I/O windows was problematic.
To solve this, the above mentioned commit changed the mvebu-mbus to
adjust the DRAM ranges so that they don't overlap with the I/O
windows. However, by doing this, we re-adjust the DRAM ranges in a way
that makes them have a size that is no longer a power of two. While
this is perfectly fine for the Crypto Engine, which supports DRAM
ranges with a granularity of 64 KB, it breaks basically all other DMA
masters, which expect power of two sizes for the DRAM ranges.
Due to this, if the installed system memory is 4 GB, in two
chip-selects of 2 GB, the second DRAM range will be reduced from 2 GB
to a little bit less than 2 GB to not overlap with the I/O windows, in
a way that results in a DRAM range that doesn't have a power of two
size. This means that whenever you do a DMA transfer with an address
located in the [ 2 GB ; 4 GB ] area, it will freeze the system. Any
serious DMA activity like simply running:
for i in $(seq 1 64) ; do dd if=/dev/urandom of=file$i bs=1M count=16 ; done
in an ext3 partition mounted over a SATA drive will freeze the system.
Since the new CESA crypto driver that uses DMA has not been merged
yet, the easiest fix is to simply revert this commit. A follow-up
commit will introduce a different solution for the CESA crypto driver.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Fixes: 1737cac69369 ("bus: mvebu-mbus: make sure SDRAM CS for DMA don't overlap the MBus bridge window")
Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/bus/mvebu-mbus.c | 107 +++++++----------------------------------------
1 file changed, 17 insertions(+), 90 deletions(-)
--- a/drivers/bus/mvebu-mbus.c
+++ b/drivers/bus/mvebu-mbus.c
@@ -58,7 +58,6 @@
#include <linux/debugfs.h>
#include <linux/log2.h>
#include <linux/syscore_ops.h>
-#include <linux/memblock.h>
/*
* DDR target is the same on all platforms.
@@ -103,9 +102,7 @@
/* Relative to mbusbridge_base */
#define MBUS_BRIDGE_CTRL_OFF 0x0
-#define MBUS_BRIDGE_SIZE_MASK 0xffff0000
#define MBUS_BRIDGE_BASE_OFF 0x4
-#define MBUS_BRIDGE_BASE_MASK 0xffff0000
/* Maximum number of windows, for all known platforms */
#define MBUS_WINS_MAX 20
@@ -579,106 +576,36 @@ static unsigned int armada_xp_mbus_win_r
return MVEBU_MBUS_NO_REMAP;
}
-/*
- * Use the memblock information to find the MBus bridge hole in the
- * physical address space.
- */
-static void __init
-mvebu_mbus_find_bridge_hole(uint64_t *start, uint64_t *end)
-{
- struct memblock_region *r;
- uint64_t s = 0;
-
- for_each_memblock(memory, r) {
- /*
- * This part of the memory is above 4 GB, so we don't
- * care for the MBus bridge hole.
- */
- if (r->base >= 0x100000000)
- continue;
-
- /*
- * The MBus bridge hole is at the end of the RAM under
- * the 4 GB limit.
- */
- if (r->base + r->size > s)
- s = r->base + r->size;
- }
-
- *start = s;
- *end = 0x100000000;
-}
-
static void __init
mvebu_mbus_default_setup_cpu_target(struct mvebu_mbus_state *mbus)
{
int i;
int cs;
- uint64_t mbus_bridge_base, mbus_bridge_end;
mvebu_mbus_dram_info.mbus_dram_target_id = TARGET_DDR;
- mvebu_mbus_find_bridge_hole(&mbus_bridge_base, &mbus_bridge_end);
-
for (i = 0, cs = 0; i < 4; i++) {
- u64 base = readl(mbus->sdramwins_base + DDR_BASE_CS_OFF(i));
- u64 size = readl(mbus->sdramwins_base + DDR_SIZE_CS_OFF(i));
- u64 end;
- struct mbus_dram_window *w;
-
- /* Ignore entries that are not enabled */
- if (!(size & DDR_SIZE_ENABLED))
- continue;
-
- /*
- * Ignore entries whose base address is above 2^32,
- * since devices cannot DMA to such high addresses
- */
- if (base & DDR_BASE_CS_HIGH_MASK)
- continue;
-
- base = base & DDR_BASE_CS_LOW_MASK;
- size = (size | ~DDR_SIZE_MASK) + 1;
- end = base + size;
-
- /*
- * Adjust base/size of the current CS to make sure it
- * doesn't overlap with the MBus bridge hole. This is
- * particularly important for devices that do DMA from
- * DRAM to a SRAM mapped in a MBus window, such as the
- * CESA cryptographic engine.
- */
+ u32 base = readl(mbus->sdramwins_base + DDR_BASE_CS_OFF(i));
+ u32 size = readl(mbus->sdramwins_base + DDR_SIZE_CS_OFF(i));
/*
- * The CS is fully enclosed inside the MBus bridge
- * area, so ignore it.
+ * We only take care of entries for which the chip
+ * select is enabled, and that don't have high base
+ * address bits set (devices can only access the first
+ * 32 bits of the memory).
*/
- if (base >= mbus_bridge_base && end <= mbus_bridge_end)
- continue;
-
- /*
- * Beginning of CS overlaps with end of MBus, raise CS
- * base address, and shrink its size.
- */
- if (base >= mbus_bridge_base && end > mbus_bridge_end) {
- size -= mbus_bridge_end - base;
- base = mbus_bridge_end;
+ if ((size & DDR_SIZE_ENABLED) &&
+ !(base & DDR_BASE_CS_HIGH_MASK)) {
+ struct mbus_dram_window *w;
+
+ w = &mvebu_mbus_dram_info.cs[cs++];
+ w->cs_index = i;
+ w->mbus_attr = 0xf & ~(1 << i);
+ if (mbus->hw_io_coherency)
+ w->mbus_attr |= ATTR_HW_COHERENCY;
+ w->base = base & DDR_BASE_CS_LOW_MASK;
+ w->size = (size | ~DDR_SIZE_MASK) + 1;
}
-
- /*
- * End of CS overlaps with beginning of MBus, shrink
- * CS size.
- */
- if (base < mbus_bridge_base && end > mbus_bridge_base)
- size -= end - mbus_bridge_base;
-
- w = &mvebu_mbus_dram_info.cs[cs++];
- w->cs_index = i;
- w->mbus_attr = 0xf & ~(1 << i);
- if (mbus->hw_io_coherency)
- w->mbus_attr |= ATTR_HW_COHERENCY;
- w->base = base;
- w->size = size;
}
mvebu_mbus_dram_info.num_cs = cs;
}
--
To unsubscribe from this list: send the line "unsubscribe stable" in
next prev parent reply other threads:[~2015-06-19 21:06 UTC|newest]
Thread overview: 117+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-19 20:34 [PATCH 4.0 000/105] 4.0.6-stable review Greg Kroah-Hartman
2015-06-19 20:34 ` [PATCH 4.0 001/105] crush: ensuring at most num-rep osds are selected Greg Kroah-Hartman
2015-06-19 20:34 ` [PATCH 4.0 002/105] aio: fix serial draining in exit_aio() Greg Kroah-Hartman
2015-06-19 20:34 ` [PATCH 4.0 003/105] net: core: Correct an over-stringent device loop detection Greg Kroah-Hartman
2015-06-19 20:34 ` [PATCH 4.0 004/105] x86: bpf_jit: fix FROM_BE16 and FROM_LE16/32 instructions Greg Kroah-Hartman
2015-06-19 20:34 ` [PATCH 4.0 005/105] x86: bpf_jit: fix compilation of large bpf programs Greg Kroah-Hartman
2015-06-19 20:34 ` [PATCH 4.0 006/105] net: phy: Allow EEE for all RGMII variants Greg Kroah-Hartman
2015-06-19 20:34 ` [PATCH 4.0 007/105] netlink: Reset portid after netlink_insert failure Greg Kroah-Hartman
2015-06-19 20:34 ` [PATCH 4.0 008/105] rtnl/bond: dont send rtnl msg for unregistered iface Greg Kroah-Hartman
2015-06-19 20:34 ` [PATCH 4.0 009/105] tcp/ipv6: fix flow label setting in TIME_WAIT state Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 010/105] net/ipv6/udp: Fix ipv6 multicast socket filter regression Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 011/105] net: sched: fix call_rcu() race on classifier module unloads Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 012/105] ipv4: Avoid crashing in ip_error Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 014/105] bridge: fix parsing of MLDv2 reports Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 015/105] net: dp83640: fix broken calibration routine Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 016/105] net: dp83640: reinforce locking rules Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 017/105] net: dp83640: fix improper double spin locking Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 018/105] unix/caif: sk_socket can disappear when state is unlocked Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 019/105] xen/netback: Properly initialize credit_bytes Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 020/105] net_sched: invoke ->attach() after setting dev->qdisc Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 021/105] sctp: Fix mangled IPv4 addresses on a IPv6 listening socket Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 023/105] udp: fix behavior of wrong checksums Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 024/105] tcp: fix child sockets to use system default congestion control if not set Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 025/105] xen: netback: read hotplug script once at start of day Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 026/105] ipv4/udp: Verify multicast group is ours in upd_v4_early_demux() Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 027/105] be2net: Replace dma/pci_alloc_coherent() calls with dma_zalloc_coherent() Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 028/105] bridge: disable softirqs around br_fdb_update to avoid lockup Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 029/105] netlink: Disable insertions/removals during rehash Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 030/105] iio: adc: twl6030-gpadc: Fix modalias Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 031/105] iio: adis16400: Report pressure channel scale Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 032/105] iio: adis16400: Use != channel indices for the two voltage channels Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 033/105] iio: adis16400: Compute the scan mask from channel indices Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 034/105] iio: adis16400: Fix burst mode Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 035/105] iio: adis16400: Fix burst transfer for adis16448 Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 036/105] drivers/base: cacheinfo: handle absence of caches Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 038/105] iommu/vt-d: Allow RMRR on graphics devices too Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 039/105] iommu/vt-d: Fix passthrough mode with translation-disabled devices Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 040/105] ALSA: hda/realtek - Add a fixup for another Acer Aspire 9420 Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 041/105] ALSA: usb-audio: Add mic volume fix quirk for Logitech Quickcam Fusion Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 042/105] ALSA: usb-audio: dont try to get Outlaw RR2150 sample rate Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 043/105] ALSA: usb-audio: add MAYA44 USB+ mixer control names Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 044/105] ALSA: usb-audio: fix missing input volume controls in MAYA44 USB(+) Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 045/105] ALSA: usb-audio: add native DSD support for JLsounds I2SoverUSB Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 046/105] dmaengine: pl330: Fix hang on dmaengine_terminate_all on certain boards Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 047/105] dmaengine: Fix choppy sound because of unimplemented resume Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 048/105] dmaengine: at_xdmac: rework slave configuration part Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 049/105] dmaengine: at_xdmac: lock fixes Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 050/105] i2c: hix5hd2: Fix modalias to make module auto-loading work Greg Kroah-Hartman
2015-06-22 14:23 ` Paul Bolle
2015-06-22 15:43 ` Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 051/105] i2c: s3c2410: fix oops in suspend callback for non-dt platforms Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 052/105] Input: alps - do not reduce trackpoint speed by half Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 053/105] Input: synaptics - add min/max quirk for Lenovo S540 Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 055/105] Input: elantech - add new icbody type Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 056/105] block: fix ext_dev_lock lockdep report Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 057/105] block: discard bdi_unregister() in favour of bdi_destroy() Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 058/105] USB: cp210x: add ID for HubZ dual ZigBee and Z-Wave dongle Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 059/105] USB: serial: ftdi_sio: Add support for a Motion Tracker Development Board Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 060/105] usb: dwc3: gadget: Fix incorrect DEPCMD and DGCMD status macros Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 061/105] usb: host: xhci: add mutex for non-thread-safe data Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 062/105] usb: make module xhci_hcd removable Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 063/105] x86/asm/irq: Stop relying on magic JMP behavior for early_idt_handlers Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 064/105] ring-buffer-benchmark: Fix the wrong sched_priority of producer Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 065/105] MIPS: ralink: Fix clearing the illegal access interrupt Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 066/105] MIPS: Fix enabling of DEBUG_STACKOVERFLOW Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 067/105] MIPS: KVM: Do not sign extend on unsigned MMIO load Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 068/105] ozwpan: Use proper check to prevent heap overflow Greg Kroah-Hartman
2015-06-19 20:35 ` [PATCH 4.0 069/105] ozwpan: Use unsigned ints " Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 070/105] ozwpan: divide-by-zero leading to panic Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 071/105] ozwpan: unchecked signed subtraction leads to DoS Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 072/105] pata_octeon_cf: fix broken build Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 073/105] ARM: dts: am335x-boneblack: disable RTC-only sleep to avoid hardware damage Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 074/105] drm/amdkfd: fix topology bug with capability attr Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 075/105] drm/radeon: use proper ACR regisiter for DCE3.2 Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 076/105] drm/i915/hsw: Fix workaround for server AUX channel clock divisor Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 080/105] Revert "drm/radeon: dont share plls if monitors differ in audio support" Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 081/105] Revert "drm/radeon: adjust pll when audio is not enabled" Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 083/105] serial: imx: Fix DMA handling for IDLE condition aborts Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 084/105] of/dynamic: Fix test for PPC_PSERIES Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 085/105] virtio_pci: Clear stale cpumask when setting irq affinity Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 086/105] ata: ahci_mvebu: Fix wrongly set base address for the MBus window setting Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 087/105] bus: mvebu-mbus: do not set WIN_CTRL_SYNCBARRIER on non io-coherent platforms Greg Kroah-Hartman
2015-06-19 20:36 ` Greg Kroah-Hartman [this message]
2015-06-19 20:36 ` [PATCH 4.0 089/105] arm64: dts: mt8173-evb: fix model name Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 090/105] mm/memory_hotplug.c: set zone->wait_table to null after freeing it Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 091/105] md: Close race when setting action to idle Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 092/105] md: dont return 0 from array_state_store Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 093/105] sched, numa: do not hint for NUMA balancing on VM_MIXEDMAP mappings Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 094/105] blk-mq: free hctx->ctxs in queues release handler Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 095/105] cfg80211: wext: clear sinfo struct before calling driver Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 096/105] irqchip: sunxi-nmi: Fix off-by-one error in irq iterator Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 097/105] x86/vdso: Fix the x86 vdso2c tool includes Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 098/105] x86/vdso: Fix make bzImage on older distros Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 099/105] Btrfs: send, add missing check for dead clone root Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 100/105] Btrfs: send, dont leave without decrementing clone roots send_progress Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 101/105] btrfs: incorrect handling for fiemap_fill_next_extent return Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 102/105] btrfs: cleanup orphans while looking up default subvolume Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 103/105] Btrfs: fix range cloning when same inode used as source and destination Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 104/105] Btrfs: fix uninit variable in clone ioctl Greg Kroah-Hartman
2015-06-19 20:36 ` [PATCH 4.0 105/105] Btrfs: fix regression in raid level conversion Greg Kroah-Hartman
2015-06-20 1:12 ` [PATCH 4.0 000/105] 4.0.6-stable review Shuah Khan
2015-06-22 15:41 ` Greg Kroah-Hartman
2015-06-20 1:27 ` Guenter Roeck
2015-06-22 15:42 ` Greg Kroah-Hartman
2015-06-20 7:48 ` Sudip Mukherjee
2015-06-22 15:42 ` Greg Kroah-Hartman
2015-06-22 16:07 ` Sudip Mukherjee
2015-06-22 16:13 ` Greg Kroah-Hartman
2015-06-20 7:58 ` Heinz Diehl
2015-06-20 14:43 ` Greg Kroah-Hartman
2015-06-20 17:18 ` Heinz Diehl
2015-06-20 19:16 ` Greg Kroah-Hartman
[not found] ` <20150619203600.449494173@linuxfoundation.org>
2015-06-23 7:29 ` [PATCH 4.0 077/105] drm/i915: Dont skip request retirement if the active list is empty Jani Nikula
2015-06-24 14:58 ` Greg Kroah-Hartman
2015-06-25 7:34 ` Jani Nikula
2015-06-25 14:48 ` Greg Kroah-Hartman
2015-06-25 15:22 ` Jani Nikula
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=20150619203600.762752021@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=gregory.clement@free-electrons.com \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=thomas.petazzoni@free-electrons.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).