linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Luis Henriques <luis.henriques@canonical.com>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org,
	kernel-team@lists.ubuntu.com
Cc: Ben Hutchings <bhutchings@solarflare.com>,
	Luis Henriques <luis.henriques@canonical.com>
Subject: [PATCH 133/150] sfc: Properly sync RX DMA buffer when it is not the last in the page
Date: Tue, 26 Mar 2013 15:20:32 +0000	[thread overview]
Message-ID: <1364311249-14454-134-git-send-email-luis.henriques@canonical.com> (raw)
In-Reply-To: <1364311249-14454-1-git-send-email-luis.henriques@canonical.com>

3.5.7.9 -stable review patch.  If anyone has any objections, please let me know.

------------------

From: Ben Hutchings <bhutchings@solarflare.com>

commit 3a68f19d7afb80f548d016effbc6ed52643a8085 upstream.

We may currently allocate two RX DMA buffers to a page, and only unmap
the page when the second is completed.  We do not sync the first RX
buffer to be completed; this can result in packet loss or corruption
if the last RX buffer completed in a NAPI poll is the first in a page
and is not DMA-coherent.  (In the middle of a NAPI poll, we will
handle the following RX completion and unmap the page *before* looking
at the content of the first buffer.)

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
---
 drivers/net/ethernet/sfc/rx.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/sfc/rx.c b/drivers/net/ethernet/sfc/rx.c
index 243e91f..622b0d7 100644
--- a/drivers/net/ethernet/sfc/rx.c
+++ b/drivers/net/ethernet/sfc/rx.c
@@ -240,7 +240,8 @@ static int efx_init_rx_buffers_page(struct efx_rx_queue *rx_queue)
 }
 
 static void efx_unmap_rx_buffer(struct efx_nic *efx,
-				struct efx_rx_buffer *rx_buf)
+				struct efx_rx_buffer *rx_buf,
+				unsigned int used_len)
 {
 	if ((rx_buf->flags & EFX_RX_BUF_PAGE) && rx_buf->u.page) {
 		struct efx_rx_page_state *state;
@@ -251,6 +252,10 @@ static void efx_unmap_rx_buffer(struct efx_nic *efx,
 				       state->dma_addr,
 				       efx_rx_buf_size(efx),
 				       PCI_DMA_FROMDEVICE);
+		} else if (used_len) {
+			dma_sync_single_for_cpu(&efx->pci_dev->dev,
+						rx_buf->dma_addr, used_len,
+						DMA_FROM_DEVICE);
 		}
 	} else if (!(rx_buf->flags & EFX_RX_BUF_PAGE) && rx_buf->u.skb) {
 		pci_unmap_single(efx->pci_dev, rx_buf->dma_addr,
@@ -273,7 +278,7 @@ static void efx_free_rx_buffer(struct efx_nic *efx,
 static void efx_fini_rx_buffer(struct efx_rx_queue *rx_queue,
 			       struct efx_rx_buffer *rx_buf)
 {
-	efx_unmap_rx_buffer(rx_queue->efx, rx_buf);
+	efx_unmap_rx_buffer(rx_queue->efx, rx_buf, 0);
 	efx_free_rx_buffer(rx_queue->efx, rx_buf);
 }
 
@@ -538,10 +543,10 @@ void efx_rx_packet(struct efx_rx_queue *rx_queue, unsigned int index,
 		goto out;
 	}
 
-	/* Release card resources - assumes all RX buffers consumed in-order
-	 * per RX queue
+	/* Release and/or sync DMA mapping - assumes all RX buffers
+	 * consumed in-order per RX queue
 	 */
-	efx_unmap_rx_buffer(efx, rx_buf);
+	efx_unmap_rx_buffer(efx, rx_buf, len);
 
 	/* Prefetch nice and early so data will (hopefully) be in cache by
 	 * the time we look at it.
-- 
1.8.1.2


  parent reply	other threads:[~2013-03-26 15:31 UTC|newest]

Thread overview: 157+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-26 15:18 [ 3.5.y.z extended stable ] Linux 3.5.7.9 stable review Luis Henriques
2013-03-26 15:18 ` [PATCH 001/150] USB: option: add Huawei E5331 Luis Henriques
2013-03-26 15:18 ` [PATCH 002/150] USB: storage: fix Huawei mode switching regression Luis Henriques
2013-03-26 15:18 ` [PATCH 003/150] USB: added support for Cinterion's products AH6 and PLS8 Luis Henriques
2013-03-26 15:18 ` [PATCH 004/150] ALSA: seq: Fix missing error handling in snd_seq_timer_open() Luis Henriques
2013-03-26 15:18 ` [PATCH 005/150] usb: cp210x new Vendor/Device IDs Luis Henriques
2013-03-26 15:18 ` [PATCH 006/150] staging: vt6656: Fix oops on resume from suspend Luis Henriques
2013-03-26 15:18 ` [PATCH 007/150] qcaux: add Franklin U600 Luis Henriques
2013-03-26 15:18 ` [PATCH 008/150] ext3: Fix format string issues Luis Henriques
2013-03-26 15:18 ` [PATCH 009/150] tty/serial: Add support for Altera serial port Luis Henriques
2013-03-26 15:18 ` [PATCH 010/150] Fix 4 port and add support for 8 port 'Unknown' PCI serial port cards Luis Henriques
2013-03-26 15:18 ` [PATCH 011/150] serial: 8250_pci: add support for another kind of NetMos Technology PCI 9835 Multi-I/O Controller Luis Henriques
2013-03-26 15:18 ` [PATCH 012/150] tty: serial: fix typo "ARCH_S5P6450" Luis Henriques
2013-03-26 15:18 ` [PATCH 013/150] usb: serial: Add Rigblaster Advantage to device table Luis Henriques
2013-03-26 15:18 ` [PATCH 014/150] w1: fix oops when w1_search is called from netlink connector Luis Henriques
2013-03-26 15:18 ` [PATCH 015/150] USB: cdc-wdm: fix buffer overflow Luis Henriques
2013-03-26 15:18 ` [PATCH 016/150] signal: always clear sa_restorer on execve Luis Henriques
2013-03-26 15:18 ` [PATCH 017/150] hwmon: (lineage-pem) Add missing terminating entry for pem_[input|fan]_attributes Luis Henriques
2013-03-26 15:18 ` [PATCH 018/150] hwmon: (pmbus/ltc2978) Fix temperature reporting Luis Henriques
2013-03-26 15:18 ` [PATCH 019/150] btrfs: use rcu_barrier() to wait for bdev puts at unmount Luis Henriques
2013-03-26 15:18 ` [PATCH 020/150] hwmon: (sht15) Fix memory leak if regulator_enable() fails Luis Henriques
2013-03-26 15:18 ` [PATCH 021/150] TTY: do not reset master's packet mode Luis Henriques
2013-03-26 15:18 ` [PATCH 022/150] virtio: rng: disallow multiple device registrations, fixes crashes Luis Henriques
2013-03-26 15:18 ` [PATCH 023/150] mm/hotplug: correctly add new zone to all other nodes' zone lists Luis Henriques
2013-03-26 15:18 ` [PATCH 024/150] block: use i_size_write() in bd_set_size() Luis Henriques
2013-03-26 15:18 ` [PATCH 025/150] loopdev: fix a deadlock Luis Henriques
2013-03-26 15:18 ` [PATCH 026/150] loopdev: remove an user triggerable oops Luis Henriques
2013-03-26 15:18 ` [PATCH 027/150] proc connector: reject unprivileged listener bumps Luis Henriques
2013-03-26 15:18 ` [PATCH 028/150] s390: critical section cleanup vs. machine checks Luis Henriques
2013-03-26 15:18 ` [PATCH 029/150] s390/mm: fix flush_tlb_kernel_range() Luis Henriques
2013-03-26 15:18 ` [PATCH 030/150] powerpc: Fix STAB initialization Luis Henriques
2013-03-26 15:18 ` [PATCH 031/150] powerpc: Fix cputable entry for 970MP rev 1.0 Luis Henriques
2013-03-26 15:18 ` [PATCH 032/150] atmel_lcdfb: fix 16-bpp modes on older SOCs Luis Henriques
2013-03-26 15:18 ` [PATCH 033/150] selinux: use GFP_ATOMIC under spin_lock Luis Henriques
2013-03-26 15:18 ` [PATCH 034/150] perf,x86: fix kernel crash with PEBS/BTS after suspend/resume Luis Henriques
2013-03-26 15:18 ` [PATCH 035/150] perf,x86: fix link failure for non-Intel configs Luis Henriques
2013-03-26 15:18 ` [PATCH 036/150] perf,x86: fix wrmsr_on_cpu() warning on suspend/resume Luis Henriques
2013-03-26 15:18 ` [PATCH 037/150] l2tp: Restore socket refcount when sendmsg succeeds Luis Henriques
2013-03-26 15:18 ` [PATCH 038/150] rds: limit the size allocated by rds_message_alloc() Luis Henriques
2013-03-26 15:18 ` [PATCH 039/150] net: ipv6: Don't purge default router if accept_ra=2 Luis Henriques
2013-03-26 15:18 ` [PATCH 040/150] tcp: fix double-counted receiver RTT when leaving receiver fast path Luis Henriques
2013-03-26 15:19 ` [PATCH 041/150] tun: add a missing nf_reset() in tun_net_xmit() Luis Henriques
2013-03-26 15:19 ` [PATCH 042/150] macvlan: Set IFF_UNICAST_FLT flag to prevent unnecessary promisc mode Luis Henriques
2013-03-26 15:19 ` [PATCH 043/150] netlabel: correctly list all the static label mappings Luis Henriques
2013-03-26 15:19 ` [PATCH 044/150] netlabel: fix build problems when CONFIG_IPV6=n Luis Henriques
2013-03-26 15:19 ` [PATCH 045/150] bridging: fix rx_handlers return code Luis Henriques
2013-03-26 15:19 ` [PATCH 046/150] ipv6: stop multicast forwarding to process interface scoped addresses Luis Henriques
2013-03-26 15:19 ` [PATCH 047/150] rtnl: fix info leak on RTM_GETLINK request for VF devices Luis Henriques
2013-03-26 15:19 ` [PATCH 048/150] dcbnl: fix various netlink info leaks Luis Henriques
2013-03-26 15:19 ` [PATCH 049/150] 6lowpan: Fix endianness issue in is_addr_link_local() Luis Henriques
2013-03-26 15:19 ` [PATCH 050/150] ahci: Add Device IDs for Intel Lynx Point-LP PCH Luis Henriques
2013-03-26 15:19 ` [PATCH 051/150] ahci: AHCI-mode SATA patch for Intel Avoton DeviceIDs Luis Henriques
2013-03-26 15:19 ` [PATCH 052/150] ahci: Add Device IDs for Intel Wellsburg PCH Luis Henriques
2013-03-26 15:19 ` [PATCH 053/150] HID: add support for Sony RF receiver with USB product id 0x0374 Luis Henriques
2013-03-26 15:19 ` [PATCH 054/150] HID: clean up quirk for Sony RF receivers Luis Henriques
2013-03-26 15:19 ` [PATCH 055/150] rt2x00: error in configurations with mesh support disabled Luis Henriques
2013-03-26 15:19 ` [PATCH 056/150] mwifiex: fix potential out-of-boundary access to ibss rate table Luis Henriques
2013-03-26 15:19 ` [PATCH 057/150] rtlwifi: rtl8192cu: Fix schedule while atomic bug splat Luis Henriques
2013-03-26 15:19 ` [PATCH 058/150] rtlwifi: rtl8192cu: Fix problem that prevents reassociation Luis Henriques
2013-03-26 15:19 ` [PATCH 059/150] vhost/net: fix heads usage of ubuf_info Luis Henriques
2013-03-26 15:19 ` [PATCH 060/150] tools: hv: Netlink source address validation allows DoS Luis Henriques
2013-03-26 15:19 ` [PATCH 061/150] udf: avoid info leak on export Luis Henriques
2013-03-26 15:19 ` [PATCH 062/150] isofs: " Luis Henriques
2013-03-26 15:19 ` [PATCH 063/150] key: Fix resource leak Luis Henriques
2013-03-26 15:19 ` [PATCH 064/150] ext4: fix the wrong number of the allocated blocks in ext4_split_extent() Luis Henriques
2013-03-26 15:19 ` [PATCH 065/150] jbd2: fix use after free in jbd2_journal_dirty_metadata() Luis Henriques
2013-03-26 15:19 ` [PATCH 066/150] ext4: use atomic64_t for the per-flexbg free_clusters count Luis Henriques
2013-03-26 15:19 ` [PATCH 067/150] tracing: Fix race in snapshot swapping Luis Henriques
2013-03-26 15:19 ` [PATCH 068/150] cifs: delay super block destruction until all cifsFileInfo objects are gone Luis Henriques
2013-03-26 15:19 ` [PATCH 069/150] drm/i915: restrict kernel address leak in debugfs Luis Henriques
2013-03-26 15:19 ` [PATCH 070/150] drm/i915: bounds check execbuffer relocation count Luis Henriques
2013-03-26 15:19 ` [PATCH 071/150] tracing: Fix free of probe entry by calling call_rcu_sched() Luis Henriques
2013-03-26 15:19 ` [PATCH 072/150] tracing: Keep overwrite in sync between regular and snapshot buffers Luis Henriques
2013-03-26 15:19 ` [PATCH 073/150] USB: xhci: correctly enable interrupts Luis Henriques
2013-03-26 15:19 ` [PATCH 074/150] usb-storage: add unusual_devs entry for Samsung YP-Z3 mp3 player Luis Henriques
2013-03-26 15:19 ` [PATCH 075/150] drm/radeon: fix backend map setup on 1 RB trinity boards Luis Henriques
2013-03-26 15:19 ` [PATCH 076/150] drm/radeon/benchmark: make sure bo blit copy exists before using it Luis Henriques
2013-03-26 15:19 ` [PATCH 077/150] drm/radeon: add support for Richland APUs Luis Henriques
2013-03-26 15:19 ` [PATCH 078/150] drm/radeon: add Richland pci ids Luis Henriques
2013-03-26 15:19 ` [PATCH 079/150] ALSA: hda/cirrus - Fix the digital beep registration Luis Henriques
2013-03-26 15:19 ` [PATCH 080/150] USB: xhci - fix bit definitions for IMAN register Luis Henriques
2013-03-26 15:19 ` [PATCH 081/150] x86-64: Fix the failure case in copy_user_handle_tail() Luis Henriques
2013-03-26 15:19 ` [PATCH 082/150] target/iscsi: Fix mutual CHAP auth on big-endian arches Luis Henriques
2013-03-26 15:19 ` [PATCH 083/150] target/file: Bump FD_MAX_SECTORS to 2048 to handle 1M sized I/Os Luis Henriques
2013-03-26 15:19 ` [PATCH 084/150] ALSA: snd-usb: mixer: propagate errors up the call chain Luis Henriques
2013-03-26 15:19 ` [PATCH 085/150] ALSA: snd-usb: mixer: ignore -EINVAL in snd_usb_mixer_controls() Luis Henriques
2013-03-26 15:19 ` [PATCH 086/150] ext4: fix data=journal fast mount/umount hang Luis Henriques
2013-03-26 15:19 ` [PATCH 087/150] ALSA: hda - Fix typo in checking IEC958 emphasis bit Luis Henriques
2013-03-26 15:19 ` [PATCH 088/150] usb: gadget: udc-core: fix a regression during gadget driver unbinding Luis Henriques
2013-03-26 15:19 ` [PATCH 089/150] usb: gadget: ffs: fix enable multiple instances Luis Henriques
2013-03-26 15:19 ` [PATCH 090/150] dm thin: fix discard corruption Luis Henriques
2013-03-26 15:19 ` [PATCH 091/150] dm verity: avoid deadlock Luis Henriques
2013-03-26 15:19 ` [PATCH 092/150] drm/mgag200: Bug fix: Modified pll algorithm for EH project Luis Henriques
2013-03-26 15:19 ` [PATCH 093/150] cifs: ignore everything in SPNEGO blob after mechTypes Luis Henriques
2013-03-26 15:19 ` [PATCH 094/150] USB: cdc-acm: fix device unregistration Luis Henriques
2013-03-26 15:19 ` [PATCH 095/150] USB: garmin_gps: fix memory leak on disconnect Luis Henriques
2013-03-26 15:19 ` [PATCH 096/150] USB: io_ti: fix get_icount for two port adapters Luis Henriques
2013-03-26 15:19 ` [PATCH 097/150] USB: serial: fix interface refcounting Luis Henriques
2013-03-26 15:19 ` [PATCH 098/150] USB: serial: add modem-status-change wait queue Luis Henriques
2013-03-26 15:31   ` Johan Hovold
2013-03-27  9:35     ` Luis Henriques
2013-03-26 15:19 ` [PATCH 099/150] USB: ark3116: fix use-after-free in TIOCMIWAIT Luis Henriques
2013-03-26 15:19 ` [PATCH 100/150] USB: ch341: " Luis Henriques
2013-03-26 15:20 ` [PATCH 101/150] USB: cypress_m8: " Luis Henriques
2013-03-26 15:20 ` [PATCH 102/150] USB: f81232: " Luis Henriques
2013-03-26 15:20 ` [PATCH 103/150] USB: ftdi_sio: " Luis Henriques
2013-03-26 15:20 ` [PATCH 104/150] USB: io_edgeport: " Luis Henriques
2013-03-26 15:20 ` [PATCH 105/150] USB: io_ti: " Luis Henriques
2013-03-26 15:20 ` [PATCH 106/150] USB: mct_u232: " Luis Henriques
2013-03-26 15:20 ` [PATCH 107/150] USB: mos7840: fix broken TIOCMIWAIT Luis Henriques
2013-03-26 15:20 ` [PATCH 108/150] USB: mos7840: fix use-after-free in TIOCMIWAIT Luis Henriques
2013-03-26 15:20 ` [PATCH 109/150] USB: oti6858: " Luis Henriques
2013-03-26 15:20 ` [PATCH 110/150] USB: pl2303: " Luis Henriques
2013-03-26 15:20 ` [PATCH 111/150] USB: quatech2: " Luis Henriques
2013-03-26 15:20 ` [PATCH 112/150] USB: spcp8x5: " Luis Henriques
2013-03-26 15:20 ` [PATCH 113/150] USB: ssu100: " Luis Henriques
2013-03-26 15:20 ` [PATCH 114/150] USB: ti_usb_3410_5052: " Luis Henriques
2013-03-26 15:20 ` [PATCH 115/150] i2c: tegra: check the clk_prepare_enable() return value Luis Henriques
2013-03-26 15:20 ` [PATCH 116/150] vfs,proc: guarantee unique inodes in /proc Luis Henriques
2013-03-27  5:40   ` Ben Hutchings
2013-03-27 10:14     ` Luis Henriques
2013-03-26 15:20 ` [PATCH 117/150] mm/hugetlb: fix total hugetlbfs pages count when using memory overcommit accouting Luis Henriques
2013-03-26 15:20 ` [PATCH 118/150] drivers/rtc/rtc-at91rm9200.c: use a variable for storing IMR Luis Henriques
2013-03-26 15:20 ` [PATCH 119/150] KMS: fix EDID detailed timing vsync parsing Luis Henriques
2013-03-26 15:20 ` [PATCH 120/150] KMS: fix EDID detailed timing frame rate Luis Henriques
2013-03-26 15:20 ` [PATCH 121/150] tg3: 5715 does not link up when autoneg off Luis Henriques
2013-03-26 15:20 ` [PATCH 122/150] sunsu: Fix panic in case of nonexistent port at "console=ttySY" cmdline option Luis Henriques
2013-03-26 15:20 ` [PATCH 123/150] sfc: Disable VF queues during register self-test Luis Henriques
2013-03-26 15:20 ` [PATCH 124/150] sfc: Really disable flow control while flushing Luis Henriques
2013-03-26 15:20 ` [PATCH 125/150] sfc: Convert firmware subtypes to native byte order in efx_mcdi_get_board_cfg() Luis Henriques
2013-03-26 15:20 ` [PATCH 126/150] sfc: Add parentheses around use of bitfield macro arguments Luis Henriques
2013-03-26 15:20 ` [PATCH 127/150] sfc: Fix MCDI structure field lookup Luis Henriques
2013-03-26 15:20 ` [PATCH 128/150] sfc: Avoid generating over-length MC_CMD_FLUSH_RX_QUEUES request Luis Henriques
2013-03-26 15:20 ` [PATCH 129/150] sfc: Work-around flush timeout when flushes have completed Luis Henriques
2013-03-26 15:20 ` [PATCH 130/150] sfc: lock TX queues when calling netif_device_detach() Luis Henriques
2013-03-26 15:20 ` [PATCH 131/150] sfc: Correctly initialise reset_method in siena_test_chip() Luis Henriques
2013-03-26 15:20 ` [PATCH 132/150] sfc: Fix timekeeping in efx_mcdi_poll() Luis Henriques
2013-03-26 15:20 ` Luis Henriques [this message]
2013-03-26 15:20 ` [PATCH 134/150] sfc: Fix efx_rx_buf_offset() in the presence of swiotlb Luis Henriques
2013-03-26 15:20 ` [PATCH 135/150] sfc: Correct efx_rx_buffer::page_offset when EFX_PAGE_IP_ALIGN != 0 Luis Henriques
2013-03-26 15:20 ` [PATCH 136/150] sfc: Detach net device when stopping queues for reconfiguration Luis Henriques
2013-03-26 15:20 ` [PATCH 137/150] sfc: Only use TX push if a single descriptor is to be written Luis Henriques
2013-03-26 15:20 ` [PATCH 138/150] sfc: Disable soft interrupt handling during efx_device_detach_sync() Luis Henriques
2013-03-27  0:34   ` Ben Hutchings
2013-03-27  9:36     ` Luis Henriques
2013-03-26 15:20 ` [PATCH 139/150] sctp: don't break the loop while meeting the active_path so as to find the matched transport Luis Henriques
2013-03-26 15:20 ` [PATCH 140/150] netconsole: don't call __netpoll_cleanup() while atomic Luis Henriques
2013-03-26 15:20 ` [PATCH 141/150] net/ipv4: Ensure that location of timestamp option is stored Luis Henriques
2013-03-26 15:20 ` [PATCH 142/150] bonding: don't call update_speed_duplex() under spinlocks Luis Henriques
2013-03-26 15:20 ` [PATCH 143/150] sctp: Use correct sideffect command in duplicate cookie handling Luis Henriques
2013-03-26 15:20 ` [PATCH 144/150] ipv4: fix definition of FIB_TABLE_HASHSZ Luis Henriques
2013-03-26 15:20 ` [PATCH 145/150] rtnetlink: Mask the rta_type when range checking Luis Henriques
2013-03-26 15:20 ` [PATCH 146/150] tcp: fix skb_availroom() Luis Henriques
2013-03-26 15:20 ` [PATCH 147/150] inet: limit length of fragment queue hash table bucket lists Luis Henriques
2013-03-26 15:20 ` [PATCH 148/150] bnx2x: fix occasional statistics off-by-4GB error Luis Henriques
2013-03-26 15:20 ` [PATCH 149/150] signal: Define __ARCH_HAS_SA_RESTORER so we know whether to clear sa_restorer Luis Henriques
2013-03-26 15:20 ` [PATCH 150/150] kernel/signal.c: use __ARCH_HAS_SA_RESTORER instead of SA_RESTORER Luis Henriques

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=1364311249-14454-134-git-send-email-luis.henriques@canonical.com \
    --to=luis.henriques@canonical.com \
    --cc=bhutchings@solarflare.com \
    --cc=kernel-team@lists.ubuntu.com \
    --cc=linux-kernel@vger.kernel.org \
    --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 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).