patches for DPDK stable branches
 help / color / mirror / Atom feed
From: Kevin Traynor <ktraynor@redhat.com>
To: Ferruh Yigit <ferruh.yigit@intel.com>
Cc: Andrew Rybchenko <arybchenko@solarflare.com>,
	dpdk stable <stable@dpdk.org>
Subject: [dpdk-stable] patch 'ethdev: eliminate interim variable' has been queued to stable release 18.08.1
Date: Thu, 29 Nov 2018 13:21:28 +0000	[thread overview]
Message-ID: <20181129132128.7609-88-ktraynor@redhat.com> (raw)
In-Reply-To: <20181129132128.7609-1-ktraynor@redhat.com>

Hi,

FYI, your patch has been queued to stable release 18.08.1

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/08/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Kevin Traynor

---
>From e2e9e2f24918125b531f81a8d9782fa3b289057f Mon Sep 17 00:00:00 2001
From: Ferruh Yigit <ferruh.yigit@intel.com>
Date: Tue, 13 Nov 2018 11:12:38 +0000
Subject: [PATCH] ethdev: eliminate interim variable

[ upstream commit 68b931bff2872044258ffa16030ac83eb9fbd6b0 ]

`local_conf` variable was needed for offload conversions but no more
required. No functional difference, only interim variable eliminated.

Fixes: ab3ce1e0c193 ("ethdev: remove old offload API")

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
Reviewed-by: Andrew Rybchenko <arybchenko@solarflare.com>
---
 lib/librte_ethdev/rte_ethdev.c | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
index 196b27c95..84e868c31 100644
--- a/lib/librte_ethdev/rte_ethdev.c
+++ b/lib/librte_ethdev/rte_ethdev.c
@@ -1021,5 +1021,4 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
 	struct rte_eth_dev_info dev_info;
 	struct rte_eth_conf orig_conf;
-	struct rte_eth_conf local_conf = *dev_conf;
 	int diag;
 	int ret;
@@ -1046,5 +1045,5 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
 	 * rte_eth_dev_info_get() requires dev_conf, copy it before dev_info get
 	 */
-	memcpy(&dev->data->dev_conf, &local_conf, sizeof(dev->data->dev_conf));
+	memcpy(&dev->data->dev_conf, dev_conf, sizeof(dev->data->dev_conf));
 
 	rte_eth_dev_info_get(port_id, &dev_info);
@@ -1120,5 +1119,5 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
 	 * length is supported by the configured device.
 	 */
-	if (local_conf.rxmode.offloads & DEV_RX_OFFLOAD_JUMBO_FRAME) {
+	if (dev_conf->rxmode.offloads & DEV_RX_OFFLOAD_JUMBO_FRAME) {
 		if (dev_conf->rxmode.max_rx_pkt_len > dev_info.max_rx_pktlen) {
 			RTE_ETHDEV_LOG(ERR,
@@ -1145,10 +1144,10 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
 
 	/* Any requested offloading must be within its device capabilities */
-	if ((local_conf.rxmode.offloads & dev_info.rx_offload_capa) !=
-	     local_conf.rxmode.offloads) {
+	if ((dev_conf->rxmode.offloads & dev_info.rx_offload_capa) !=
+	     dev_conf->rxmode.offloads) {
 		RTE_ETHDEV_LOG(ERR,
 			"Ethdev port_id=%u requested Rx offloads 0x%"PRIx64" doesn't match Rx offloads "
 			"capabilities 0x%"PRIx64" in %s()\n",
-			port_id, local_conf.rxmode.offloads,
+			port_id, dev_conf->rxmode.offloads,
 			dev_info.rx_offload_capa,
 			__func__);
@@ -1156,10 +1155,10 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
 		goto rollback;
 	}
-	if ((local_conf.txmode.offloads & dev_info.tx_offload_capa) !=
-	     local_conf.txmode.offloads) {
+	if ((dev_conf->txmode.offloads & dev_info.tx_offload_capa) !=
+	     dev_conf->txmode.offloads) {
 		RTE_ETHDEV_LOG(ERR,
 			"Ethdev port_id=%u requested Tx offloads 0x%"PRIx64" doesn't match Tx offloads "
 			"capabilities 0x%"PRIx64" in %s()\n",
-			port_id, local_conf.txmode.offloads,
+			port_id, dev_conf->txmode.offloads,
 			dev_info.tx_offload_capa,
 			__func__);
@@ -1168,6 +1167,6 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
 	}
 
-	if ((local_conf.rxmode.offloads & DEV_RX_OFFLOAD_CRC_STRIP) &&
-			(local_conf.rxmode.offloads & DEV_RX_OFFLOAD_KEEP_CRC)) {
+	if ((dev_conf->rxmode.offloads & DEV_RX_OFFLOAD_CRC_STRIP) &&
+			(dev_conf->rxmode.offloads & DEV_RX_OFFLOAD_KEEP_CRC)) {
 		RTE_ETHDEV_LOG(ERR,
 			"Port id=%u not allowed to set both CRC STRIP and KEEP CRC offload flags\n",
-- 
2.19.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-29 13:11:37.216273129 +0000
+++ 0087-ethdev-eliminate-interim-variable.patch	2018-11-29 13:11:35.000000000 +0000
@@ -1,45 +1,46 @@
-From 68b931bff2872044258ffa16030ac83eb9fbd6b0 Mon Sep 17 00:00:00 2001
+From e2e9e2f24918125b531f81a8d9782fa3b289057f Mon Sep 17 00:00:00 2001
 From: Ferruh Yigit <ferruh.yigit@intel.com>
 Date: Tue, 13 Nov 2018 11:12:38 +0000
 Subject: [PATCH] ethdev: eliminate interim variable
 
+[ upstream commit 68b931bff2872044258ffa16030ac83eb9fbd6b0 ]
+
 `local_conf` variable was needed for offload conversions but no more
 required. No functional difference, only interim variable eliminated.
 
 Fixes: ab3ce1e0c193 ("ethdev: remove old offload API")
-Cc: stable@dpdk.org
 
 Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
 Reviewed-by: Andrew Rybchenko <arybchenko@solarflare.com>
 ---
- lib/librte_ethdev/rte_ethdev.c | 17 ++++++++---------
- 1 file changed, 8 insertions(+), 9 deletions(-)
+ lib/librte_ethdev/rte_ethdev.c | 21 ++++++++++-----------
+ 1 file changed, 10 insertions(+), 11 deletions(-)
 
 diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
-index 0f01138ea..5f858174b 100644
+index 196b27c95..84e868c31 100644
 --- a/lib/librte_ethdev/rte_ethdev.c
 +++ b/lib/librte_ethdev/rte_ethdev.c
-@@ -1094,5 +1094,4 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
+@@ -1021,5 +1021,4 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
  	struct rte_eth_dev_info dev_info;
  	struct rte_eth_conf orig_conf;
 -	struct rte_eth_conf local_conf = *dev_conf;
  	int diag;
  	int ret;
-@@ -1119,5 +1118,5 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
+@@ -1046,5 +1045,5 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
  	 * rte_eth_dev_info_get() requires dev_conf, copy it before dev_info get
  	 */
 -	memcpy(&dev->data->dev_conf, &local_conf, sizeof(dev->data->dev_conf));
 +	memcpy(&dev->data->dev_conf, dev_conf, sizeof(dev->data->dev_conf));
  
  	rte_eth_dev_info_get(port_id, &dev_info);
-@@ -1193,5 +1192,5 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
+@@ -1120,5 +1119,5 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
  	 * length is supported by the configured device.
  	 */
 -	if (local_conf.rxmode.offloads & DEV_RX_OFFLOAD_JUMBO_FRAME) {
 +	if (dev_conf->rxmode.offloads & DEV_RX_OFFLOAD_JUMBO_FRAME) {
  		if (dev_conf->rxmode.max_rx_pkt_len > dev_info.max_rx_pktlen) {
  			RTE_ETHDEV_LOG(ERR,
-@@ -1218,10 +1217,10 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
+@@ -1145,10 +1144,10 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
  
  	/* Any requested offloading must be within its device capabilities */
 -	if ((local_conf.rxmode.offloads & dev_info.rx_offload_capa) !=
@@ -53,7 +54,7 @@
 +			port_id, dev_conf->rxmode.offloads,
  			dev_info.rx_offload_capa,
  			__func__);
-@@ -1229,10 +1228,10 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
+@@ -1156,10 +1155,10 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
  		goto rollback;
  	}
 -	if ((local_conf.txmode.offloads & dev_info.tx_offload_capa) !=
@@ -67,6 +68,15 @@
 +			port_id, dev_conf->txmode.offloads,
  			dev_info.tx_offload_capa,
  			__func__);
+@@ -1168,6 +1167,6 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
+ 	}
+ 
+-	if ((local_conf.rxmode.offloads & DEV_RX_OFFLOAD_CRC_STRIP) &&
+-			(local_conf.rxmode.offloads & DEV_RX_OFFLOAD_KEEP_CRC)) {
++	if ((dev_conf->rxmode.offloads & DEV_RX_OFFLOAD_CRC_STRIP) &&
++			(dev_conf->rxmode.offloads & DEV_RX_OFFLOAD_KEEP_CRC)) {
+ 		RTE_ETHDEV_LOG(ERR,
+ 			"Port id=%u not allowed to set both CRC STRIP and KEEP CRC offload flags\n",
 -- 
 2.19.0
 

      parent reply	other threads:[~2018-11-29 13:24 UTC|newest]

Thread overview: 92+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-29 13:20 [dpdk-stable] patch 'app/testpmd: fix port status for new bonded devices' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/i40e: fix Rx instability with vector mode' " Kevin Traynor
2018-11-29 13:30   ` Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/vmxnet3: fix hot-unplug' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/e1000/base: fix uninitialized variable' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/ixgbe: stop link setup alarm handler before start' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/cxgbevf: add PCI uninitialization for VF' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/cxgbe: check Rx config before doing VLAN strip offload' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/cxgbe: fix check for redefined match items' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/cxgbe: increase completion wait time for flow operations' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/cxgbe: fix wrong ingress port value set in filter spec' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/thunderx: fix Tx desc corruption in scatter-gather mode' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'vhost: fix IOVA access for packed ring' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/virtio-user: fix typo in error message' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'vhost/crypto: fix packet copy in chaining mode' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/virtio: fix unchecked return value' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'vhost: remove unneeded null pointer check' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/bnx2x: fix dynamic logging' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/bnx2x: fix VF link state update' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/bonding: fix crash when stopping mode 4 port' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/mlx5: fallback quietly if pkg-config is unavailable' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/qede: fix crash when configure fails' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'app/testpmd: fix L4 length for UDP checksum' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/octeontx: fix mbuf corruption with large private sizes' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/qede: fix Tx tunnel offload support mask' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'ethdev: fix invalid configuration after failure' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'ethdev: fix device info getting' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/sfc/base: fix field order in filter spec struct' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/enic: fix size check in Tx prepare handler' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/ixgbevf: fix link state' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'app/testpmd: fix memory leak for TM object' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'app/testpmd: fix memory allocation for DSCP table' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'crypto/ccp: fix resource leak' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'crypto/aesni_mb: fix queue pair free' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'examples/l3fwd-power: fix power library fallback' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'test/power: fix ACPI cpufreq module miss " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'test/kni: fix " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'test/reorder: fix out of bound access' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'malloc: fix adjacency check to also include segment list' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'build: set -mfpu=neon flag for armv7-a with meson' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'efd: fix write unlock during ring creation' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/i40e: fix X710 Rx after reading some registers' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/ixgbe: fix maximum wait time in comment' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/mlx4: fix minor typo' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/mlx5: fix minor typos' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/mlx4: fix initialization of struct members' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/mlx5: " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/mlx4: optimize Tx external memory registration' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/mlx5: " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/mlx5: optimize Tx doorbell write' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/mlx5: optimize Rx buffer replenishment threshold' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/mlx5: fix packet type for MPLS in UDP' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/ena: fix cleaning HW IO rings configuration' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/octeontx: fix failures when available ports > queues' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/avf: fix Tx offload mask' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/bonding: fix possible silent failure in configuration' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'app/testpmd: fix memory leak for DSCP table' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'app/pdump: fix port id storage size' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'examples/ipv4_multicast: fix leak of cloned packets' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'test: fix interrupt check' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'test/power: skip KVM autotest if cannot run' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'test: release ring resources after PMD perf test' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'devtools: fix regex in symbol addition check' " Kevin Traynor
2018-11-30 13:55   ` Neil Horman
2018-11-30 20:36     ` Kevin Traynor
2018-12-01 19:13       ` Neil Horman
2018-11-29 13:21 ` [dpdk-stable] patch 'usertools: check for lspci dependency' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'doc: fix DESTDIR variable name in meson guide' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'doc: fix NUMA library name in Linux " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'doc: add cross-compilation in sample apps " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'doc: fix formatting in IP reassembly app " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'doc: fix function name in flow filtering " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'ipc: fix access after async request failure' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'eal: fix build with -O1' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'kni: fix possible uninitialized variable' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'net/mlx4: " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'eventdev: fix unlock in Rx adapter' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'config: enable more than 128 cores for arm64' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'net/i40e/base: fix comment referencing internal data' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'net/ena: fix out of order completion' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'net/qede: fix Tx offload mask' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'net/ixgbe: fix TDH register write' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'vhost: fix packed ring constants declaration' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'doc: remove old options from pdump guide' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'eal/bsd: fix possible IOPL fd leak' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'net/virtio: avoid annoying IOPL error log' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'bus/pci: fix allocation of device path' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'vfio: do not needlessly setup device in secondary process' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'mem: fix division by zero in no-NUMA mode' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'fix indentation in symbol maps' " Kevin Traynor
2018-11-29 13:21 ` [dpdk-stable] patch 'fix dpdk.org URLs' " Kevin Traynor
2018-11-29 13:21 ` Kevin Traynor [this message]

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=20181129132128.7609-88-ktraynor@redhat.com \
    --to=ktraynor@redhat.com \
    --cc=arybchenko@solarflare.com \
    --cc=ferruh.yigit@intel.com \
    --cc=stable@dpdk.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).