* [PATCH net-next 07/13] net: ena: use napi_schedule_irqoff when possible
@ 2017-06-08 22:01 netanel
2017-06-08 22:01 ` [PATCH net-next 08/13] net: ena: separate skb allocation to dedicated function netanel
` (5 more replies)
0 siblings, 6 replies; 10+ messages in thread
From: netanel @ 2017-06-08 22:01 UTC (permalink / raw)
To: davem, netdev
Cc: Netanel Belgazal, dwmw, zorik, matua, saeedb, msw, aliguori,
nafea, evgenys
From: Netanel Belgazal <netanel@amazon.com>
Signed-off-by: Netanel Belgazal <netanel@amazon.com>
---
drivers/net/ethernet/amazon/ena/ena_netdev.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c
index 04aade8..424b4d7 100644
--- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
+++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
@@ -1264,7 +1264,7 @@ static irqreturn_t ena_intr_msix_io(int irq, void *data)
{
struct ena_napi *ena_napi = data;
- napi_schedule(&ena_napi->napi);
+ napi_schedule_irqoff(&ena_napi->napi);
return IRQ_HANDLED;
}
--
2.7.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH net-next 08/13] net: ena: separate skb allocation to dedicated function
2017-06-08 22:01 [PATCH net-next 07/13] net: ena: use napi_schedule_irqoff when possible netanel
@ 2017-06-08 22:01 ` netanel
2017-06-08 22:01 ` [PATCH net-next 09/13] net: ena: adding missing cast in ena_com_mem_addr_set() netanel
` (4 subsequent siblings)
5 siblings, 0 replies; 10+ messages in thread
From: netanel @ 2017-06-08 22:01 UTC (permalink / raw)
To: davem, netdev
Cc: Netanel Belgazal, dwmw, zorik, matua, saeedb, msw, aliguori,
nafea, evgenys
From: Netanel Belgazal <netanel@amazon.com>
Signed-off-by: Netanel Belgazal <netanel@amazon.com>
---
drivers/net/ethernet/amazon/ena/ena_netdev.c | 44 +++++++++++++++++-----------
1 file changed, 27 insertions(+), 17 deletions(-)
diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c
index 424b4d7..7dee448 100644
--- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
+++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
@@ -825,6 +825,28 @@ static int ena_clean_tx_irq(struct ena_ring *tx_ring, u32 budget)
return tx_pkts;
}
+static struct sk_buff *ena_alloc_skb(struct ena_ring *rx_ring, bool frags)
+{
+ struct sk_buff *skb;
+
+ if (frags)
+ skb = napi_get_frags(rx_ring->napi);
+ else
+ skb = netdev_alloc_skb_ip_align(rx_ring->netdev,
+ rx_ring->rx_copybreak);
+
+ if (unlikely(!skb)) {
+ u64_stats_update_begin(&rx_ring->syncp);
+ rx_ring->rx_stats.skb_alloc_fail++;
+ u64_stats_update_end(&rx_ring->syncp);
+ netif_dbg(rx_ring->adapter, rx_err, rx_ring->netdev,
+ "Failed to allocate skb. frags: %d\n", frags);
+ return NULL;
+ }
+
+ return skb;
+}
+
static struct sk_buff *ena_rx_skb(struct ena_ring *rx_ring,
struct ena_com_rx_buf_info *ena_bufs,
u32 descs,
@@ -854,16 +876,9 @@ static struct sk_buff *ena_rx_skb(struct ena_ring *rx_ring,
prefetch(va + NET_IP_ALIGN);
if (len <= rx_ring->rx_copybreak) {
- skb = netdev_alloc_skb_ip_align(rx_ring->netdev,
- rx_ring->rx_copybreak);
- if (unlikely(!skb)) {
- u64_stats_update_begin(&rx_ring->syncp);
- rx_ring->rx_stats.skb_alloc_fail++;
- u64_stats_update_end(&rx_ring->syncp);
- netif_err(rx_ring->adapter, rx_err, rx_ring->netdev,
- "Failed to allocate skb\n");
+ skb = ena_alloc_skb(rx_ring, false);
+ if (unlikely(!skb))
return NULL;
- }
netif_dbg(rx_ring->adapter, rx_status, rx_ring->netdev,
"rx allocated small packet. len %d. data_len %d\n",
@@ -882,20 +897,15 @@ static struct sk_buff *ena_rx_skb(struct ena_ring *rx_ring,
skb_put(skb, len);
skb->protocol = eth_type_trans(skb, rx_ring->netdev);
+ rx_ring->free_rx_ids[*next_to_clean] = req_id;
*next_to_clean = ENA_RX_RING_IDX_ADD(*next_to_clean, descs,
rx_ring->ring_size);
return skb;
}
- skb = napi_get_frags(rx_ring->napi);
- if (unlikely(!skb)) {
- netif_dbg(rx_ring->adapter, rx_status, rx_ring->netdev,
- "Failed allocating skb\n");
- u64_stats_update_begin(&rx_ring->syncp);
- rx_ring->rx_stats.skb_alloc_fail++;
- u64_stats_update_end(&rx_ring->syncp);
+ skb = ena_alloc_skb(rx_ring, true);
+ if (unlikely(!skb))
return NULL;
- }
do {
dma_unmap_page(rx_ring->dev,
--
2.7.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH net-next 09/13] net: ena: adding missing cast in ena_com_mem_addr_set()
2017-06-08 22:01 [PATCH net-next 07/13] net: ena: use napi_schedule_irqoff when possible netanel
2017-06-08 22:01 ` [PATCH net-next 08/13] net: ena: separate skb allocation to dedicated function netanel
@ 2017-06-08 22:01 ` netanel
2017-06-08 22:01 ` [PATCH net-next 10/13] net: ena: add mtu limitation in ena_change_mtu() netanel
` (3 subsequent siblings)
5 siblings, 0 replies; 10+ messages in thread
From: netanel @ 2017-06-08 22:01 UTC (permalink / raw)
To: davem, netdev
Cc: Netanel Belgazal, dwmw, zorik, matua, saeedb, msw, aliguori,
nafea, evgenys
From: Netanel Belgazal <netanel@amazon.com>
Signed-off-by: Netanel Belgazal <netanel@amazon.com>
---
drivers/net/ethernet/amazon/ena/ena_com.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/amazon/ena/ena_com.c b/drivers/net/ethernet/amazon/ena/ena_com.c
index f6e1d30..8efb85e 100644
--- a/drivers/net/ethernet/amazon/ena/ena_com.c
+++ b/drivers/net/ethernet/amazon/ena/ena_com.c
@@ -100,7 +100,7 @@ static inline int ena_com_mem_addr_set(struct ena_com_dev *ena_dev,
}
ena_addr->mem_addr_low = (u32)addr;
- ena_addr->mem_addr_high = (u64)addr >> 32;
+ ena_addr->mem_addr_high = (u16)((u64)addr >> 32);
return 0;
}
--
2.7.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH net-next 10/13] net: ena: add mtu limitation in ena_change_mtu()
2017-06-08 22:01 [PATCH net-next 07/13] net: ena: use napi_schedule_irqoff when possible netanel
2017-06-08 22:01 ` [PATCH net-next 08/13] net: ena: separate skb allocation to dedicated function netanel
2017-06-08 22:01 ` [PATCH net-next 09/13] net: ena: adding missing cast in ena_com_mem_addr_set() netanel
@ 2017-06-08 22:01 ` netanel
2017-06-08 22:01 ` [PATCH net-next 11/13] net: ena: update driver's rx drop statistics netanel
` (2 subsequent siblings)
5 siblings, 0 replies; 10+ messages in thread
From: netanel @ 2017-06-08 22:01 UTC (permalink / raw)
To: davem, netdev
Cc: Netanel Belgazal, dwmw, zorik, matua, saeedb, msw, aliguori,
nafea, evgenys
From: Netanel Belgazal <netanel@amazon.com>
Signed-off-by: Netanel Belgazal <netanel@amazon.com>
---
drivers/net/ethernet/amazon/ena/ena_netdev.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c
index 7dee448..7f31f4c 100644
--- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
+++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
@@ -108,6 +108,13 @@ static int ena_change_mtu(struct net_device *dev, int new_mtu)
struct ena_adapter *adapter = netdev_priv(dev);
int ret;
+ if ((new_mtu > adapter->max_mtu) || (new_mtu < ENA_MIN_MTU)) {
+ netif_err(adapter, drv, dev,
+ "Invalid MTU setting. new_mtu: %d max mtu: %d min mtu: %d\n",
+ new_mtu, adapter->max_mtu, ENA_MIN_MTU);
+ return -EINVAL;
+ }
+
ret = ena_com_set_dev_mtu(adapter->ena_dev, new_mtu);
if (!ret) {
netif_dbg(adapter, drv, dev, "set MTU to %d\n", new_mtu);
@@ -3008,8 +3015,6 @@ static void ena_set_conf_feat_params(struct ena_adapter *adapter,
ena_set_dev_offloads(feat, netdev);
adapter->max_mtu = feat->dev_attr.max_mtu;
- netdev->max_mtu = adapter->max_mtu;
- netdev->min_mtu = ENA_MIN_MTU;
}
static int ena_rss_init_default(struct ena_adapter *adapter)
--
2.7.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH net-next 11/13] net: ena: update driver's rx drop statistics
2017-06-08 22:01 [PATCH net-next 07/13] net: ena: use napi_schedule_irqoff when possible netanel
` (2 preceding siblings ...)
2017-06-08 22:01 ` [PATCH net-next 10/13] net: ena: add mtu limitation in ena_change_mtu() netanel
@ 2017-06-08 22:01 ` netanel
2017-06-08 22:01 ` [PATCH net-next 12/13] net: ena: change validate_tx_req_id() to be inline function netanel
2017-06-08 22:01 ` [PATCH net-next 13/13] net: ena: update ena driver to version 1.2.0 netanel
5 siblings, 0 replies; 10+ messages in thread
From: netanel @ 2017-06-08 22:01 UTC (permalink / raw)
To: davem, netdev
Cc: Netanel Belgazal, dwmw, zorik, matua, saeedb, msw, aliguori,
nafea, evgenys
From: Netanel Belgazal <netanel@amazon.com>
rx drop counter is reported by the device in the keep-alive
event.
update the driver's counter with the device counter.
Signed-off-by: Netanel Belgazal <netanel@amazon.com>
---
drivers/net/ethernet/amazon/ena/ena_netdev.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c
index 7f31f4c..4540cd3 100644
--- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
+++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
@@ -3483,8 +3483,17 @@ static void ena_keep_alive_wd(void *adapter_data,
struct ena_admin_aenq_entry *aenq_e)
{
struct ena_adapter *adapter = (struct ena_adapter *)adapter_data;
+ struct ena_admin_aenq_keep_alive_desc *desc;
+ u64 rx_drops;
+ desc = (struct ena_admin_aenq_keep_alive_desc *)aenq_e;
adapter->last_keep_alive_jiffies = jiffies;
+
+ rx_drops = ((u64)desc->rx_drops_high << 32) | desc->rx_drops_low;
+
+ u64_stats_update_begin(&adapter->syncp);
+ adapter->dev_stats.rx_drops = rx_drops;
+ u64_stats_update_end(&adapter->syncp);
}
static void ena_notification(void *adapter_data,
--
2.7.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH net-next 12/13] net: ena: change validate_tx_req_id() to be inline function
2017-06-08 22:01 [PATCH net-next 07/13] net: ena: use napi_schedule_irqoff when possible netanel
` (3 preceding siblings ...)
2017-06-08 22:01 ` [PATCH net-next 11/13] net: ena: update driver's rx drop statistics netanel
@ 2017-06-08 22:01 ` netanel
2017-06-08 22:01 ` [PATCH net-next 13/13] net: ena: update ena driver to version 1.2.0 netanel
5 siblings, 0 replies; 10+ messages in thread
From: netanel @ 2017-06-08 22:01 UTC (permalink / raw)
To: davem, netdev
Cc: Netanel Belgazal, dwmw, zorik, matua, saeedb, msw, aliguori,
nafea, evgenys
From: Netanel Belgazal <netanel@amazon.com>
for optimization purpose, change validate_tx_req_id() to be
inline function.
Signed-off-by: Netanel Belgazal <netanel@amazon.com>
---
drivers/net/ethernet/amazon/ena/ena_netdev.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c
index 4540cd3..da14b78 100644
--- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
+++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
@@ -698,7 +698,7 @@ static void ena_destroy_all_io_queues(struct ena_adapter *adapter)
ena_destroy_all_rx_queues(adapter);
}
-static int validate_tx_req_id(struct ena_ring *tx_ring, u16 req_id)
+static inline int validate_tx_req_id(struct ena_ring *tx_ring, u16 req_id)
{
struct ena_tx_buffer *tx_info = NULL;
--
2.7.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH net-next 13/13] net: ena: update ena driver to version 1.2.0
2017-06-08 22:01 [PATCH net-next 07/13] net: ena: use napi_schedule_irqoff when possible netanel
` (4 preceding siblings ...)
2017-06-08 22:01 ` [PATCH net-next 12/13] net: ena: change validate_tx_req_id() to be inline function netanel
@ 2017-06-08 22:01 ` netanel
5 siblings, 0 replies; 10+ messages in thread
From: netanel @ 2017-06-08 22:01 UTC (permalink / raw)
To: davem, netdev
Cc: Netanel Belgazal, dwmw, zorik, matua, saeedb, msw, aliguori,
nafea, evgenys
From: Netanel Belgazal <netanel@amazon.com>
Signed-off-by: Netanel Belgazal <netanel@amazon.com>
---
drivers/net/ethernet/amazon/ena/ena_netdev.h | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.h b/drivers/net/ethernet/amazon/ena/ena_netdev.h
index 4518a9d..f309a58 100644
--- a/drivers/net/ethernet/amazon/ena/ena_netdev.h
+++ b/drivers/net/ethernet/amazon/ena/ena_netdev.h
@@ -44,15 +44,16 @@
#include "ena_eth_com.h"
#define DRV_MODULE_VER_MAJOR 1
-#define DRV_MODULE_VER_MINOR 1
-#define DRV_MODULE_VER_SUBMINOR 2
+#define DRV_MODULE_VER_MINOR 2
+#define DRV_MODULE_VER_SUBMINOR 0
#define DRV_MODULE_NAME "ena"
#ifndef DRV_MODULE_VERSION
#define DRV_MODULE_VERSION \
__stringify(DRV_MODULE_VER_MAJOR) "." \
__stringify(DRV_MODULE_VER_MINOR) "." \
- __stringify(DRV_MODULE_VER_SUBMINOR)
+ __stringify(DRV_MODULE_VER_SUBMINOR) \
+ "k"
#endif
#define DEVICE_NAME "Elastic Network Adapter (ENA)"
--
2.7.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH net-next 10/13] net: ena: add mtu limitation in ena_change_mtu()
2017-06-18 11:28 [PATCH net-next 00/13] update ena ethernet " netanel
@ 2017-06-18 11:28 ` netanel
2017-06-18 16:21 ` David Miller
0 siblings, 1 reply; 10+ messages in thread
From: netanel @ 2017-06-18 11:28 UTC (permalink / raw)
To: davem, netdev
Cc: Netanel Belgazal, dwmw, zorik, matua, saeedb, msw, aliguori,
nafea, evgenys
From: Netanel Belgazal <netanel@amazon.com>
Signed-off-by: Netanel Belgazal <netanel@amazon.com>
---
drivers/net/ethernet/amazon/ena/ena_netdev.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c
index 7dee448157bb..7f31f4ce7b8e 100644
--- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
+++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
@@ -108,6 +108,13 @@ static int ena_change_mtu(struct net_device *dev, int new_mtu)
struct ena_adapter *adapter = netdev_priv(dev);
int ret;
+ if ((new_mtu > adapter->max_mtu) || (new_mtu < ENA_MIN_MTU)) {
+ netif_err(adapter, drv, dev,
+ "Invalid MTU setting. new_mtu: %d max mtu: %d min mtu: %d\n",
+ new_mtu, adapter->max_mtu, ENA_MIN_MTU);
+ return -EINVAL;
+ }
+
ret = ena_com_set_dev_mtu(adapter->ena_dev, new_mtu);
if (!ret) {
netif_dbg(adapter, drv, dev, "set MTU to %d\n", new_mtu);
@@ -3008,8 +3015,6 @@ static void ena_set_conf_feat_params(struct ena_adapter *adapter,
ena_set_dev_offloads(feat, netdev);
adapter->max_mtu = feat->dev_attr.max_mtu;
- netdev->max_mtu = adapter->max_mtu;
- netdev->min_mtu = ENA_MIN_MTU;
}
static int ena_rss_init_default(struct ena_adapter *adapter)
--
2.7.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH net-next 10/13] net: ena: add mtu limitation in ena_change_mtu()
2017-06-18 11:28 ` [PATCH net-next 10/13] net: ena: add mtu limitation in ena_change_mtu() netanel
@ 2017-06-18 16:21 ` David Miller
2017-06-19 12:26 ` Belgazal, Netanel
0 siblings, 1 reply; 10+ messages in thread
From: David Miller @ 2017-06-18 16:21 UTC (permalink / raw)
To: netanel; +Cc: netdev, dwmw, zorik, matua, saeedb, msw, aliguori, nafea, evgenys
From: <netanel@amazon.com>
Date: Sun, 18 Jun 2017 14:28:15 +0300
> From: Netanel Belgazal <netanel@amazon.com>
>
> Signed-off-by: Netanel Belgazal <netanel@amazon.com>
I don't understand this at all.
This whole reason we have those:
> @@ -3008,8 +3015,6 @@ static void ena_set_conf_feat_params(struct ena_adapter *adapter,
> ena_set_dev_offloads(feat, netdev);
>
> adapter->max_mtu = feat->dev_attr.max_mtu;
> - netdev->max_mtu = adapter->max_mtu;
> - netdev->min_mtu = ENA_MIN_MTU;
> }
>
assignments you are removing is so that the core networking can
validate the request and therefore individual drivers don't have to.
If it's just to get that silly driver message out when the MTU asked
for is too large, that's not a good reason to bypass the
infrastructure for MTU changes that we've provided for drivers in the
core.
I don't like this change at all.
You could have helped things a lot by actually writing a commit log
message explaining what you are really doing, and why you are doing
it. Empty commit log messages are never a good idea.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH net-next 10/13] net: ena: add mtu limitation in ena_change_mtu()
2017-06-18 16:21 ` David Miller
@ 2017-06-19 12:26 ` Belgazal, Netanel
0 siblings, 0 replies; 10+ messages in thread
From: Belgazal, Netanel @ 2017-06-19 12:26 UTC (permalink / raw)
To: David Miller
Cc: netdev@vger.kernel.org, Woodhouse, David, Machulsky, Zorik,
Matushevsky, Alexander, BSHARA, Said, Wilson, Matt,
Liguori, Anthony, Bshara, Nafea, Schmeilin, Evgeny
I'll discard this patch.
________________________________________
From: David Miller <davem@davemloft.net>
Sent: Sunday, June 18, 2017 7:21 PM
To: Belgazal, Netanel
Cc: netdev@vger.kernel.org; Woodhouse, David; Machulsky, Zorik; Matushevsky, Alexander; BSHARA, Said; Wilson, Matt; Liguori, Anthony; Bshara, Nafea; Schmeilin, Evgeny
Subject: Re: [PATCH net-next 10/13] net: ena: add mtu limitation in ena_change_mtu()
From: <netanel@amazon.com>
Date: Sun, 18 Jun 2017 14:28:15 +0300
> From: Netanel Belgazal <netanel@amazon.com>
>
> Signed-off-by: Netanel Belgazal <netanel@amazon.com>
I don't understand this at all.
This whole reason we have those:
> @@ -3008,8 +3015,6 @@ static void ena_set_conf_feat_params(struct ena_adapter *adapter,
> ena_set_dev_offloads(feat, netdev);
>
> adapter->max_mtu = feat->dev_attr.max_mtu;
> - netdev->max_mtu = adapter->max_mtu;
> - netdev->min_mtu = ENA_MIN_MTU;
> }
>
assignments you are removing is so that the core networking can
validate the request and therefore individual drivers don't have to.
If it's just to get that silly driver message out when the MTU asked
for is too large, that's not a good reason to bypass the
infrastructure for MTU changes that we've provided for drivers in the
core.
I don't like this change at all.
You could have helped things a lot by actually writing a commit log
message explaining what you are really doing, and why you are doing
it. Empty commit log messages are never a good idea.
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2017-06-19 12:26 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-06-08 22:01 [PATCH net-next 07/13] net: ena: use napi_schedule_irqoff when possible netanel
2017-06-08 22:01 ` [PATCH net-next 08/13] net: ena: separate skb allocation to dedicated function netanel
2017-06-08 22:01 ` [PATCH net-next 09/13] net: ena: adding missing cast in ena_com_mem_addr_set() netanel
2017-06-08 22:01 ` [PATCH net-next 10/13] net: ena: add mtu limitation in ena_change_mtu() netanel
2017-06-08 22:01 ` [PATCH net-next 11/13] net: ena: update driver's rx drop statistics netanel
2017-06-08 22:01 ` [PATCH net-next 12/13] net: ena: change validate_tx_req_id() to be inline function netanel
2017-06-08 22:01 ` [PATCH net-next 13/13] net: ena: update ena driver to version 1.2.0 netanel
-- strict thread matches above, loose matches on Subject: below --
2017-06-18 11:28 [PATCH net-next 00/13] update ena ethernet " netanel
2017-06-18 11:28 ` [PATCH net-next 10/13] net: ena: add mtu limitation in ena_change_mtu() netanel
2017-06-18 16:21 ` David Miller
2017-06-19 12:26 ` Belgazal, Netanel
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).