> -Original Message-
> From: dev On Behalf Of Juraj Linke?
> Sent: Friday, October 2, 2020 5:38 PM
> To: tho...@monjalon.net; david.march...@redhat.com;
> acon...@redhat.com; maicolgabr...@hotmail.com
> Cc: dev@dpdk.org; Juraj Linkeš
> Subject: [dpdk-dev] [PATCH v3 3/3] doc: add clang to
Add support for tls functionality in EAL.
The following functions are added:
rte_thread_tls_create_key - function to create a tls data key.
rte_thread_tls_delete_key - function to delete a tls data key.
rte_thread_tls_set_value - function to set value bound to the tls key
rte_thread_tls_get_value
Acked-by: Jeff Guo
> -Original Message-
> From: Zhou, JunX W
> Sent: Tuesday, December 22, 2020 2:51 PM
> To: Yu, DapengX ; Guo, Jia
> Cc: dev@dpdk.org; Yu, DapengX ; sta...@dpdk.org
> Subject: RE: [dpdk-dev] [PATCH v2] net/ixgbe: fix fdirctrl register setting
>
> Tested-by: Zhou, Jun
From: Alvin Zhang
1. Delete original code.
2. Add 2 tables(One maps flow pattern and RSS type to PCTYPE,
another maps RSS type to input set).
3. Parse RSS pattern and RSS type to get PCTYPE.
4. Parse RSS action to get queues, RSS function and hash field.
5. Create and destroy RSS filters.
6. C
From: Amaranath Somalapuram
Adding API for get_module_eeprom and get_module_info.wq
Signed-off-by: Amaranath Somalapuram
---
doc/guides/nics/features/axgbe.ini | 1 +
drivers/net/axgbe/axgbe_ethdev.c | 2 +
drivers/net/axgbe/axgbe_phy.h | 4 ++
drivers/net/axgbe/axgbe_phy_impl.c |
Tested-by: Zhou, Jun
-Original Message-
From: dev [mailto:dev-boun...@dpdk.org] On Behalf Of dapengx...@intel.com
Sent: Tuesday, December 15, 2020 6:11 PM
To: Guo, Jia
Cc: dev@dpdk.org; Yu, DapengX ; sta...@dpdk.org
Subject: [dpdk-dev] [PATCH v2] net/ixgbe: fix fdirctrl register setting
https://bugs.dpdk.org/show_bug.cgi?id=83
Qimingy (qiming.y...@intel.com) changed:
What|Removed |Added
Status|CONFIRMED |RESOLVED
Resolution|---
The measure_perf function should be excuted after worker threads exit
to collect correct perf data. Otherwise, while workers are running, the
main thread may get incomplete data from workers.
In the meanwhile, remove unnecessary barrier in the test.
For signal variables "ldata.done" and "ldata.sta
The variable "wrk_cmd" is a signal to control threads from running and
stopping. When worker lcores load "wrk_cmd == WRK_CMD_RUN", they start
running and when worker lcores load "wrk_cmd == WRK_CMD_STOP", they
stop.
For the wmb in test_mt1, no storing operations must keep the order
after storing "
For smp barriers in app/test, remove the unnecessary barriers and fix
some bugs.
Feifei Wang (2):
app/test: remove unnecessary barriers for ring stress test
app/test: collect perf data after worker threads exit
app/test/test_ring_stress_impl.h | 5 +
app/test/test_trace_perf.c | 5
Hi, Van Haaren
> -邮件原件-
> 发件人: Van Haaren, Harry
> 发送时间: 2020年12月21日 17:57
> 收件人: Feifei Wang ; Rao, Nikhil
>
> 抄送: dev@dpdk.org; nd ; pbhagavat...@marvell.com;
> sta...@dpdk.org; jer...@marvell.com
> 主题: RE: [PATCH] examples/eventdev: move eth stop to the end
>
> > -Original Messag
For the wmb in order_process_stage_1 and order_process_stage_invalid in
the order test, they can be removed. This is because when the test results
are wrong, the worker core writes 'true' to t->err. Then other worker
cores, producer cores and the main core will load the 'error' index and
stop testi
For "processed_pkts" function, no operations should keep the order that
being executed before loading "worker[i].processed_pkts".
Signed-off-by: Feifei Wang
Reviewed-by: Ruifeng Wang
---
app/test-eventdev/test_pipeline_common.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/test-eventde
Add release barriers before updating the processed packets for worker
lcores to ensure the worker lcore has really finished data processing
and then it can update the processed packets number.
Fixes: 314bcf58ca8f ("app/eventdev: add pipeline queue worker functions")
Cc: pbhagavat...@marvell.com
Cc
Simply replace rte_smp barrier with atomic threand fence.
Signed-off-by: Phil Yang
Signed-off-by: Feifei Wang
Reviewed-by: Ruifeng Wang
---
app/test-eventdev/test_perf_common.h | 16
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/app/test-eventdev/test_perf_comm
For "processed_pkts" and "total_latency" functions, no operations should
keep the order that being executed before loading
"worker[i].processed_pkts". Thus rmb is unnecessary before loading.
For "perf_launch_lcores" function, wmb after that the main lcore
updates the variable "t->done", which repr
This patch fixes RTE SMP barrier bugs for the perf test of eventdev.
For the "perf_process_last_stage" function, wmb after storing
processed_pkts should be moved before it. This is because the worker
lcore should ensure it has really finished data processing, e.g. event
stored into buffers, before
For smp barriers in app/eventdev, remove the unnecessary barriers or
replace them with thread fence.
Feifei Wang (6):
app/eventdev: fix SMP barrier bugs for perf test
app/eventdev: remove unnecessary barriers for perf test
app/eventdev: replace wmb with thread fence for perf test
app/event
For the wmb in order_process_stage_1 and order_process_stage_invalid in
the order test, they can be removed. This is because when the test results
are wrong, the worker core writes 'true' to t->err. Then other worker
cores, producer cores and the main core will load the 'error' index and
stop testi
For "processed_pkts" function, no operations should keep the order that
being executed before loading "worker[i].processed_pkts".
Signed-off-by: Feifei Wang
Reviewed-by: Honnappa Nagarahalli
Reviewed-by: Ruifeng Wang
---
app/test-eventdev/test_pipeline_common.c | 1 -
1 file changed, 1 deletio
Add release barriers before updating the processed packets for worker
lcores to ensure the worker lcore has really finished data processing
and then it can update the processed packets number.
Fixes: 314bcf58ca8f ("app/eventdev: add pipeline queue worker functions")
Cc: pbhagavat...@marvell.com
Cc
Simply replace rte_smp barrier with atomic threand fence.
Signed-off-by: Phil Yang
Signed-off-by: Feifei Wang
Reviewed-by: Honnappa Nagarahalli
Reviewed-by: Ruifeng Wang
---
app/test-eventdev/test_perf_common.h | 16
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git
For "processed_pkts" and "total_latency" functions, no operations should
keep the order that being executed before loading
"worker[i].processed_pkts". Thus rmb is unnecessary before loading.
For "perf_launch_lcores" function, wmb after that the main lcore
updates the varaible "t->done", which repr
This patch fixes RTE SMP barrier bugs for the perf test of eventdev.
For the "perf_process_last_stage" function, wmb after storing
processed_pkts should be moved before it. This is because the worker
lcore should ensure it has really finished data processing, e.g. event
stored into buffers, before
For smp barriers in app/eventdev, remove the unnecessary barriers or
replace them with thread fence.
Feifei Wang (6):
app/eventdev: fix SMP barrier bugs for perf test
app/eventdev: remove unnecessary barriers for perf test
app/eventdev: replace wmb with thread fence for perf test
app/event
Async enqueue offloads large copies to DMA devices, and small copies
are still performed by the CPU. However, it requires users to get
enqueue completed packets by rte_vhost_poll_enqueue_completed(), even
if they are completed by the CPU when rte_vhost_submit_enqueue_burst()
returns. This design in
This patch removes unnecessary check and function calls, and it changes
appropriate types for internal variables and fixes typos.
Signed-off-by: Jiayu Hu
---
lib/librte_vhost/rte_vhost_async.h | 6 +++---
lib/librte_vhost/virtio_net.c | 16
2 files changed, 11 insertions(+
Async enqueue offloads large copies to DMA devices, and small copies
are still performed by the CPU. However, it requires users to get
enqueue completed packets by rte_vhost_poll_enqueue_completed(), even
if they are completed by the CPU when rte_vhost_submit_enqueue_burst()
returns. This design in
Hi Maxime,
> -Original Message-
> From: Maxime Coquelin
> Sent: Monday, December 21, 2020 8:02 PM
> To: Xia, Chenbo ; Thomas Monjalon ;
> David Marchand
> Cc: dev ; Stephen Hemminger ; Liang,
> Cunming ; Lu, Xiuchun ; Li,
> Miao ; Wu, Jingjing
> Subject: Re: [dpdk-dev] [PATCH 0/8] Intro
Hello,
Thanks for your comments.
Please see my comments inline tagged with [HY].
> Hi,
>
> >
> > This patch modifies to use apistats by librte_ethdev.
> >
> > Signed-off-by: Hideyuki Yamashita
> > ---
> > lib/librte_ethdev/meson.build| 6 ++-
> > lib/librte_ethdev/rte_apistats.c | 64 ++
Hello,
Thanks for your comments.
Please see my comments inline tagged with [HY].
> Hi,
>
> >
> > This patch modifies to use apistats by librte_ethdev.
> >
> > Signed-off-by: Hideyuki Yamashita
> > ---
> > lib/librte_ethdev/meson.build| 6 ++-
> > lib/librte_ethdev/rte_apistats.c | 64 ++
Hello,
Thanks for your comments.
Please see my comments inline tagged with [HY].
> 04/12/2020 08:51, Hideyuki Yamashita:
> > In general, DPDK application consumes CPU usage because it polls
> > incoming packets using rx_burst API in infinite loop.
> > This makes difficult to estimate how much CPU
Hi, David
Thanks for your comments.
Please see my comments inline tagged with [HY].
>
> On 4/12/2020 7:51 AM, Hideyuki Yamashita wrote:
> > In general, DPDK application consumes CPU usage because it polls
> > incoming packets using rx_burst API in infinite loop.
> > This makes difficult to estim
This file is required to compile and build i40e PMD on Windows.
Add rte_rand variable to export file.
Redefine _m_prefetchw for Clang toolchain due to following error
with respect to conflicting types:
FAILED: lib/76b5a35@@rte_eal@sta/librte_eal_common_rte_random.c.obj
clang @lib/76b5a35@@rte_eal
Allows i40e PMD to compile on Windows and disable other drivers.
Disable few warnings with Clang such as comparison of integers of
different signs and macro redefinitions.
Adds temp folder mlx5/windows as it is required to build this patch
without any build error. This folder will be removed once
This patch-set enables building the Intel i40e PMD on Windows.
Depends-on: series-14296 ("eal/windows: add interrupt functions stub")
v3 changes:
- Added a comment for __m_prefetchw (Thomas)
- Replaced the letter from the reason to lowercase (Thomas)
v2 changes:
- Update
On Mon, 21 Dec 2020 13:33:22 -0800
Long Li wrote:
> /* trying to get mac address if this is a network device*/
> + s = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
> + if (s == -1) {
> + PMD_DRV_LOG(ERR, "Failed to create socket errno %d\n",
> +
From: Long Li
When a VF device is present, netvsc can send or receive packets over the
VF device. The VF device driver communicates directly with the PCI device
via the PF from the host hypervisor. This is faster than exchanging data
with netvsp via vmbus, i.e. syntheic path.
In Azure and Hyper-
From: Long Li
In some cases, a device or infrastructure may want to enable hotplug
but application may also try and start hotplug as well. Therefore
change the monitor_started from a boolean into a reference count.
Signed-off-by: Long Li
---
lib/librte_eal/linux/eal_dev.c | 56
On Mon, 21 Dec 2020 07:35:10 +
"Peng, ZhihongX" wrote:
> 1. I think this implement doesn't add significant overhead. Overhead only
> will be occurred in rte_malloc and rte_free.
>
> 2. Current existing address sanitizer infrastructure only support libc malloc.
>
> Regards,
> Peng,Zhihong
>
Hi,
We are running testpmd with 150MB(2M huge pages) with OVS DPDK (17.0.2) but
ran into issues as pmd interfaces are shown as link down.
./testpmd -c 0x3 -n 4 *--socket-mem 150* --no-pci
--file-prefix=virtio_user-testpmd
--vdev=virtio_user0,mac=00:01:02:03:04:03,path=/var/run/openvswitch/l3_h_g
On Sat, Dec 19, 2020 at 9:26 AM David Marchand
wrote:
>
> APT cache must be updated to avoid trying to install an unavailable
> version of a package.
>
> Fixes: 87009585e293 ("ci: hook to GitHub Actions")
>
> Signed-off-by: David Marchand
Applied.
--
David Marchand
While it is worth clarifying whether the fake mbuf
in virtnet_rx struct is really necessary, it is sure
that it heavily impacts cache usage by being part of
the struct. Indeed, it takes uses cachelines, and
requires alignement on a cacheline.
Before this series, it means it took 120 bytes in
virtn
This patch optimizes packing of the virtuqueue
struct by moving fields around to fill holes.
Offset field is not used and so can be removed.
Signed-off-by: Maxime Coquelin
---
drivers/net/virtio/virtqueue.h | 18 +-
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/d
Vrings are part of the virtqueues, so we don't need
to have a pointer to it in Vrings descriptions.
Instead, let's just substract from its offset to
calculate virtqueue address.
Signed-off-by: Maxime Coquelin
---
drivers/net/virtio/virtio_ethdev.c| 36 +--
drivers/ne
This series optimizes the cache usage of virtqueue struct,
by make a "fake" mbuf being dynamically allocated in Rx
virtnet struct, by removing a useless virtuque pointer
into the virtnet structs and by moving a few fields
to pack holes.
With these 3 patches, the virtqueue struct size goes from
576
Simply replace the smp barriers with atomic thread fence for vhost control
path, if there are no synchronization points.
Signed-off-by: Joyce Kong
Reviewed-by: Ruifeng Wang
---
lib/librte_vhost/vhost.c | 18 +-
lib/librte_vhost/vhost.h | 6 +++---
lib/librte_vhost/vho
Simply relace smp barriers with atomic thread fence for
virtio packed vring.
Signed-off-by: Joyce Kong
Reviewed-by: Ruifeng Wang
---
lib/librte_vhost/virtio_net.c | 9 +
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/lib/librte_vhost/virtio_net.c b/lib/librte_vhost/virtio
Used idx can be synchronized by one-way barrier instead of full
write barrier for split vring.
Signed-off-by: Joyce Kong
Reviewed-by: Ruifeng Wang
---
lib/librte_vhost/vdpa.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/librte_vhost/vdpa.c b/lib/librte_vhost/vdpa.
Relax the full read barrier to one-way barrier for desc flags in
packed vring.
Signed-off-by: Joyce Kong
Reviewed-by: Ruifeng Wang
---
lib/librte_vhost/virtio_net.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/lib/librte_vhost/virtio_net.c b/lib/librte_vhost/virtio_n
The ordering between avail index and desc reads has been enforced
by load-acquire for split vring, so smp_rmb barrier is not needed
behind it.
Signed-off-by: Joyce Kong
Reviewed-by: Ruifeng Wang
---
lib/librte_vhost/virtio_net.c | 7 ++-
1 file changed, 2 insertions(+), 5 deletions(-)
diff
As function desc_is_avail performs a load-acquire barrier to
enforce the ordering between desc flags and desc content, it is
unnecessary to add a rte_smp_rmb barrier around the trace which
follows desc_is_avail.
Signed-off-by: Joyce Kong
Reviewed-by: Ruifeng Wang
---
lib/librte_vhost/virtio_net
Simply replace the rte_smp_mb barriers with SEQ_CST atomic thread fence,
if there is no load/store operations.
Signed-off-by: Joyce Kong
Reviewed-by: Ruifeng Wang
---
examples/vhost_blk/vhost_blk.c | 8
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/examples/vhost_blk/vh
Use C11 atomic APIs with one-way barriers to replace two-way
barriers when operating enqueue/dequeue. Used->idx and avail->idx
are the synchronization points for split vring.
Signed-off-by: Joyce Kong
Reviewed-by: Ruifeng Wang
---
examples/vhost/virtio_net.c | 12
1 file changed, 4
This patchset is to replace rte smp barriers in vhost with C11 atomic
built-ins.
The rte_smp_*mb APIs provide full barrier functionality. However, many
use cases do not require full barriers. To support such use cases, DPDK
will adopt C11 barrier semantics and provide wrappers using C11 atomic
bui
On Thu, Dec 17, 2020 at 09:23:01AM +, Steve Yang wrote:
> External Email
>
> --
> The jumbo frame uses the 'RTE_ETHER_MAX_LEN' as boundary condition, but
> the Ether overhead is larger than 18 when it supports dual VLAN tags.
On Mon, Dec 21, 2020 at 02:28:42PM +, Hemant Agrawal wrote:
>
> > -Original Message-
> > From: dev On Behalf Of Bruce Richardson
> >
> > On Mon, Dec 21, 2020 at 12:19:17PM +, Hemant Agrawal wrote:
> > > Hi,
> > > I am trying to cross compile DPDK for arm64 on a ub
On Mon, Nov 02, 2020 at 02:15:01AM +, wangyunjian wrote:
> > -Original Message-
> > From: wangyunjian
> > Sent: Tuesday, September 22, 2020 8:06 PM
> > To: 'Harman Kalra'
> > Cc: dev@dpdk.org; david.march...@redhat.com; ferruh.yi...@intel.com;
> > Thomas Monjalon ; Lilijun (Jerry)
> >
> -Original Message-
> From: dev On Behalf Of Bruce Richardson
>
> On Mon, Dec 21, 2020 at 12:19:17PM +, Hemant Agrawal wrote:
> > Hi,
> > I am trying to cross compile DPDK for arm64 on a ubuntu
> > machine,
> which has a zlib pre-installed for native env.
> >
> > I
Replace the smp barriers with atomic thread fence for synchronization
between different threads, if there are no load/store operations.
Signed-off-by: Joyce Kong
Reviewed-by: Ruifeng Wang
---
drivers/net/virtio/virtqueue.h | 8
1 file changed, 4 insertions(+), 4 deletions(-)
diff --gi
Relax the full write barriers to one-way barriers for virtio
control path for Arm platform
Signed-off-by: Joyce Kong
Reviewed-by: Ruifeng Wang
---
drivers/net/virtio/virtio_ethdev.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/virtio/virtio_ethdev.c
b/dri
Replace rte_smp_wmb/rmb with rte_io_wmb/rmb as they are the same on x86
and ppc platforms. Then, for function virtqueue_fetch_flags_packed/
virtqueue_store_flags_packed, the if and else branch are still identical
for the platforms except Arm.
Signed-off-by: Joyce Kong
Reviewed-by: Ruifeng Wang
-
As desc_is_used has a load-acquire or rte_io_rmb inside
and wait for used desc in virtqueue, it is ok to remove
virtio_rmb behind it.
Signed-off-by: Joyce Kong
Reviewed-by: Ruifeng Wang
---
drivers/net/virtio/virtio_ethdev.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --gi
This patchset is to replace rte smp barriers in virtio with C11 atomic
built-ins.
The rte_smp_*mb APIs provide full barrier functionality. However, many
use cases do not require full barriers. To support such use cases, DPDK
will adopt C11 barrier semantics and provide wrappers using C11 atomic
bu
On Mon, Dec 21, 2020 at 12:19:17PM +, Hemant Agrawal wrote:
> Hi,
> I am trying to cross compile DPDK for arm64 on a ubuntu
> machine, which has a zlib pre-installed for native env.
>
> I am encountering following build error in net_bnx2x as it has dependency on
> zlib. It i
From: Sunil Kumar Kori
On Tx, lastseg->next is not being reset to null for multi segmented packet
and same mbuf can be used on Rx which has a stale mbuf entry into
mbuf->next.
On Rx, application receives mbuf with mbuf->next uninitialized though
mbuf->nb_segs is correct. Application iterates ove
Hi,
I am trying to cross compile DPDK for arm64 on a ubuntu
machine, which has a zlib pre-installed for native env.
I am encountering following build error in net_bnx2x as it has dependency on
zlib. It is trying to link with x86 arch based zlib.
Cross compiling zlib and setting
On 12/21/20 10:52 AM, Maxime Coquelin wrote:
> Hi Chenbo,
>
> On 12/19/20 7:11 AM, Xia, Chenbo wrote:
>> Hi David,
>>
>>> -Original Message-
>>> From: David Marchand
>>> Sent: Friday, December 18, 2020 5:54 PM
>>> To: Xia, Chenbo
>>> Cc: dev ; Thomas Monjalon ; Stephen
>>> Hemminger ;
For legacy modes, rename ring_generic/c11 to ring_generic/c11_pvt.
Furthermore, add new file ring_elem_pvt.h which includes ring_do_eq/deq
and ring element copy/delete APIs.
For other modes, rename xx_c11_mem to xx_elem_pvt. Move all private APIs
into these new header files.
Suggested-by: Honnapp
Add __rte prefix before update_tail API because it is a internal
function.
Signed-off-by: Feifei Wang
Reviewed-by: Honnappa Nagarahalli
Reviewed-by: Ruifeng Wang
---
lib/librte_ring/rte_ring_c11_mem.h | 4 ++--
lib/librte_ring/rte_ring_elem.h| 4 ++--
lib/librte_ring/rte_ring_generic.h | 4
When testing ring performance in the case that multiple lcores are mapped to
the same physical core, e.g. --lcores '(0-3)@10', it takes a very long time
to wait for the "enqueue_dequeue_bulk_helper" to finish. This is because
too much iteration numbers and extremely low efficiency for enqueue and
d
Do some work for ring refactoring, which includes:
1. add rte prefix before update tail API
2. Move all private APIs into new header files
Feifei Wang (3):
test/ring: reduce iteration numbers to make test duration shorter
ring: add rte prefix before update tail API
ring: rename and refactor
On Fri, Dec 18, 2020 at 02:14:22PM +0100, Olivier Matz wrote:
> When dpdk is compiled as static libraries, it is not possible
> to load a plugin from an application. We get the following error:
>
> EAL: librte_pmd_.so: undefined symbol: per_lcore__rte_errno
>
> This happens because the dpdk
On 12/20/20 10:13 PM, Maxime Coquelin wrote:
> This series significantly rework Virtio PMD to improve
> the Virtio-user PMD and its backends integration.
>
> First part of the series (first 21 patches) removes the
> dependency of Virtio-user ethdev on Virtio PCI, by
> creating generic files, ad
> -Original Message-
> From: Feifei Wang
> Sent: Monday, December 21, 2020 5:35 AM
> To: Van Haaren, Harry ; Rao, Nikhil
> ; Pavan Nikhilesh
> Cc: dev@dpdk.org; n...@arm.com; Feifei Wang ;
> pbhagavat...@marvell.com; sta...@dpdk.org
> Subject: [PATCH] examples/eventdev: move eth stop to t
Hi Chenbo,
On 12/19/20 7:11 AM, Xia, Chenbo wrote:
> Hi David,
>
>> -Original Message-
>> From: David Marchand
>> Sent: Friday, December 18, 2020 5:54 PM
>> To: Xia, Chenbo
>> Cc: dev ; Thomas Monjalon ; Stephen
>> Hemminger ; Liang, Cunming
>> ; Lu, Xiuchun ; Li, Miao
>> ; Wu, Jingjing
Move eth stop code from "signal_handler" function to the end of "main"
function. There are two reasons for this:
First, this improves code maintenance and makes code look simple and
clear. Based on this change, after receiving the interrupt signal,
"fdata->done" is set as 1. Then the main thread w
在 2020/12/21 6:47, Rahul Lakkireddy 写道:
From: Karra Satwik
Start from index 0 when going through the FEC array. This will allow
"off" to get printed for RTE_ETH_FEC_NOFEC mode.
Fixes: b19da32e3151 ("app/testpmd: add FEC command")
Cc: sta...@dpdk.org
Signed-off-by: Karra Satwik
Signed-off-
78 matches
Mail list logo