* [dpdk-dev] [PATCH] maintainers: improve coverage of arch-specific files
@ 2020-10-06 20:22 Thomas Monjalon
2020-10-06 20:45 ` David Christensen
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Thomas Monjalon @ 2020-10-06 20:22 UTC (permalink / raw)
To: dev
Cc: david.marchand, jerinj, bruce.richardson, ruifeng.wang, viktorin,
drc, konstantin.ananyev
The sub-directories of config/ are maintained by
different architecture maintainers.
Some wildcards are used to describe the lib and drivers files
which are specific to some architectures.
The EAL Arm files have split responsibilities depending on 32/64 suffix,
and the common files are shared between Armv7 and Armv8 sections.
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
MAINTAINERS | 23 +++++++++++------------
1 file changed, 11 insertions(+), 12 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 75a17d51c0..349fc9c38a 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -256,32 +256,31 @@ F: app/test/test_rand_perf.c
ARM v7
M: Jan Viktorin <viktorin@rehivetech.com>
M: Ruifeng Wang <ruifeng.wang@arm.com>
+F: config/arm/
F: lib/librte_eal/arm/
+X: lib/librte_eal/arm/include/*_64.h
ARM v8
M: Jerin Jacob <jerinj@marvell.com>
M: Ruifeng Wang <ruifeng.wang@arm.com>
-F: lib/librte_eal/arm/include/*_64.h
-F: lib/librte_net/net_crc_neon.h
-F: lib/librte_acl/acl_run_neon.*
-F: lib/librte_bpf/bpf_jit_arm64.c
-F: lib/librte_lpm/rte_lpm_neon.h
-F: lib/librte_hash/rte*_arm64.h
-F: lib/librte_efd/rte*_arm64.h
-F: lib/librte_table/rte*_arm64.h
-F: drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c
-F: drivers/net/i40e/i40e_rxtx_vec_neon.c
-F: drivers/net/virtio/virtio_rxtx_simple_neon.c
+F: config/arm/
+F: lib/librte_eal/arm/
+X: lib/librte_eal/arm/include/*_32.h
+F: lib/*/*_neon.*
+F: lib/*/*_arm64.*
+F: drivers/*/*/*_neon.*
IBM POWER (alpha)
M: David Christensen <drc@linux.vnet.ibm.com>
+F: config/ppc/
F: lib/librte_eal/ppc/
-F: drivers/net/i40e/i40e_rxtx_vec_altivec.c
+F: drivers/*/*/*_altivec.*
F: examples/l3fwd/*altivec.h
Intel x86
M: Bruce Richardson <bruce.richardson@intel.com>
M: Konstantin Ananyev <konstantin.ananyev@intel.com>
+F: config/x86/
F: lib/librte_eal/x86/
Linux EAL (with overlaps)
--
2.28.0
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [dpdk-dev] [PATCH] maintainers: improve coverage of arch-specific files
2020-10-06 20:22 [dpdk-dev] [PATCH] maintainers: improve coverage of arch-specific files Thomas Monjalon
@ 2020-10-06 20:45 ` David Christensen
2020-10-07 7:44 ` David Marchand
2020-10-24 16:36 ` [dpdk-dev] [PATCH v2] " Thomas Monjalon
2 siblings, 0 replies; 6+ messages in thread
From: David Christensen @ 2020-10-06 20:45 UTC (permalink / raw)
To: Thomas Monjalon, dev
Cc: david.marchand, jerinj, bruce.richardson, ruifeng.wang, viktorin,
konstantin.ananyev
On 10/6/20 1:22 PM, Thomas Monjalon wrote:
> The sub-directories of config/ are maintained by
> different architecture maintainers.
>
> Some wildcards are used to describe the lib and drivers files
> which are specific to some architectures.
>
> The EAL Arm files have split responsibilities depending on 32/64 suffix,
> and the common files are shared between Armv7 and Armv8 sections.
>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> ---
> MAINTAINERS | 23 +++++++++++------------
> 1 file changed, 11 insertions(+), 12 deletions(-)
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 75a17d51c0..349fc9c38a 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -256,32 +256,31 @@ F: app/test/test_rand_perf.c
> ARM v7
> M: Jan Viktorin <viktorin@rehivetech.com>
> M: Ruifeng Wang <ruifeng.wang@arm.com>
> +F: config/arm/
> F: lib/librte_eal/arm/
> +X: lib/librte_eal/arm/include/*_64.h
>
> ARM v8
> M: Jerin Jacob <jerinj@marvell.com>
> M: Ruifeng Wang <ruifeng.wang@arm.com>
> -F: lib/librte_eal/arm/include/*_64.h
> -F: lib/librte_net/net_crc_neon.h
> -F: lib/librte_acl/acl_run_neon.*
> -F: lib/librte_bpf/bpf_jit_arm64.c
> -F: lib/librte_lpm/rte_lpm_neon.h
> -F: lib/librte_hash/rte*_arm64.h
> -F: lib/librte_efd/rte*_arm64.h
> -F: lib/librte_table/rte*_arm64.h
> -F: drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c
> -F: drivers/net/i40e/i40e_rxtx_vec_neon.c
> -F: drivers/net/virtio/virtio_rxtx_simple_neon.c
> +F: config/arm/
> +F: lib/librte_eal/arm/
> +X: lib/librte_eal/arm/include/*_32.h
> +F: lib/*/*_neon.*
> +F: lib/*/*_arm64.*
> +F: drivers/*/*/*_neon.*
>
> IBM POWER (alpha)
> M: David Christensen <drc@linux.vnet.ibm.com>
> +F: config/ppc/
> F: lib/librte_eal/ppc/
> -F: drivers/net/i40e/i40e_rxtx_vec_altivec.c
> +F: drivers/*/*/*_altivec.*
> F: examples/l3fwd/*altivec.h
>
> Intel x86
> M: Bruce Richardson <bruce.richardson@intel.com>
> M: Konstantin Ananyev <konstantin.ananyev@intel.com>
> +F: config/x86/
> F: lib/librte_eal/x86/
>
> Linux EAL (with overlaps)
>
Reviewed-by: David Christensen <drc@linux.vnet.ibm.com>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [dpdk-dev] [PATCH] maintainers: improve coverage of arch-specific files
2020-10-06 20:22 [dpdk-dev] [PATCH] maintainers: improve coverage of arch-specific files Thomas Monjalon
2020-10-06 20:45 ` David Christensen
@ 2020-10-07 7:44 ` David Marchand
2020-10-07 10:06 ` Thomas Monjalon
2020-10-24 16:36 ` [dpdk-dev] [PATCH v2] " Thomas Monjalon
2 siblings, 1 reply; 6+ messages in thread
From: David Marchand @ 2020-10-07 7:44 UTC (permalink / raw)
To: Thomas Monjalon
Cc: dev, Jerin Jacob Kollanukkaran, Bruce Richardson,
Ruifeng Wang (Arm Technology China),
Jan Viktorin, David Christensen, Ananyev, Konstantin
On Tue, Oct 6, 2020 at 10:23 PM Thomas Monjalon <thomas@monjalon.net> wrote:
>
> The sub-directories of config/ are maintained by
> different architecture maintainers.
>
> Some wildcards are used to describe the lib and drivers files
> which are specific to some architectures.
I noticed "some" misses, see below.
>
> The EAL Arm files have split responsibilities depending on 32/64 suffix,
> and the common files are shared between Armv7 and Armv8 sections.
>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> ---
> MAINTAINERS | 23 +++++++++++------------
> 1 file changed, 11 insertions(+), 12 deletions(-)
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 75a17d51c0..349fc9c38a 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -256,32 +256,31 @@ F: app/test/test_rand_perf.c
> ARM v7
> M: Jan Viktorin <viktorin@rehivetech.com>
> M: Ruifeng Wang <ruifeng.wang@arm.com>
> +F: config/arm/
> F: lib/librte_eal/arm/
> +X: lib/librte_eal/arm/include/*_64.h
>
> ARM v8
> M: Jerin Jacob <jerinj@marvell.com>
> M: Ruifeng Wang <ruifeng.wang@arm.com>
> -F: lib/librte_eal/arm/include/*_64.h
> -F: lib/librte_net/net_crc_neon.h
> -F: lib/librte_acl/acl_run_neon.*
> -F: lib/librte_bpf/bpf_jit_arm64.c
> -F: lib/librte_lpm/rte_lpm_neon.h
> -F: lib/librte_hash/rte*_arm64.h
> -F: lib/librte_efd/rte*_arm64.h
> -F: lib/librte_table/rte*_arm64.h
> -F: drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c
> -F: drivers/net/i40e/i40e_rxtx_vec_neon.c
> -F: drivers/net/virtio/virtio_rxtx_simple_neon.c
> +F: config/arm/
> +F: lib/librte_eal/arm/
> +X: lib/librte_eal/arm/include/*_32.h
> +F: lib/*/*_neon.*
> +F: lib/*/*_arm64.*
> +F: drivers/*/*/*_neon.*
app and examples directory are not caught in this:
./lib/librte_net/net_crc_neon.h
./lib/librte_acl/acl_run_neon.h
./lib/librte_acl/acl_run_neon.c
./lib/librte_lpm/rte_lpm_neon.h
./lib/librte_node/ip4_lookup_neon.h
./examples/l3fwd/l3fwd_lpm_neon.h
./examples/l3fwd/l3fwd_em_hlm_neon.h
./examples/l3fwd/l3fwd_neon.h
./app/test-pmd/macswap_neon.h
./drivers/net/hns3/hns3_rxtx_vec_neon.h
./drivers/net/bnxt/bnxt_rxtx_vec_neon.c
./drivers/net/mlx5/mlx5_rxtx_vec_neon.h
./drivers/net/virtio/virtio_rxtx_simple_neon.c
./drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c
./drivers/net/i40e/i40e_rxtx_vec_neon.c
Can we use a wildcard at dpdk root?
*/*/*_neon.*
The drivers/*/*/*_neon.* entry would still be needed though.
>
> IBM POWER (alpha)
> M: David Christensen <drc@linux.vnet.ibm.com>
> +F: config/ppc/
> F: lib/librte_eal/ppc/
> -F: drivers/net/i40e/i40e_rxtx_vec_altivec.c
> +F: drivers/*/*/*_altivec.*
> F: examples/l3fwd/*altivec.h
Idem neon, lib files missing.
./lib/librte_eal/ppc/include/rte_altivec.h
./lib/librte_acl/acl_run_altivec.c
./lib/librte_acl/acl_run_altivec.h
./lib/librte_lpm/rte_lpm_altivec.h
./examples/l3fwd/l3fwd_altivec.h
./examples/l3fwd/l3fwd_lpm_altivec.h
./drivers/net/mlx5/mlx5_rxtx_vec_altivec.h
./drivers/net/virtio/virtio_rxtx_simple_altivec.c
./drivers/net/i40e/i40e_rxtx_vec_altivec.c
>
> Intel x86
> M: Bruce Richardson <bruce.richardson@intel.com>
> M: Konstantin Ananyev <konstantin.ananyev@intel.com>
> +F: config/x86/
> F: lib/librte_eal/x86/
Nothing for avx/sse ?
>
> Linux EAL (with overlaps)
> --
> 2.28.0
>
--
David Marchand
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [dpdk-dev] [PATCH] maintainers: improve coverage of arch-specific files
2020-10-07 7:44 ` David Marchand
@ 2020-10-07 10:06 ` Thomas Monjalon
0 siblings, 0 replies; 6+ messages in thread
From: Thomas Monjalon @ 2020-10-07 10:06 UTC (permalink / raw)
To: David Marchand
Cc: dev, Jerin Jacob Kollanukkaran, Bruce Richardson,
Ruifeng Wang (Arm Technology China),
Jan Viktorin, David Christensen, Ananyev, Konstantin
07/10/2020 09:44, David Marchand:
> On Tue, Oct 6, 2020 at 10:23 PM Thomas Monjalon <thomas@monjalon.net> wrote:
> >
> > The sub-directories of config/ are maintained by
> > different architecture maintainers.
> >
> > Some wildcards are used to describe the lib and drivers files
> > which are specific to some architectures.
>
> I noticed "some" misses, see below.
>
> >
> > The EAL Arm files have split responsibilities depending on 32/64 suffix,
> > and the common files are shared between Armv7 and Armv8 sections.
> >
> > Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> > ---
> > MAINTAINERS | 23 +++++++++++------------
> > 1 file changed, 11 insertions(+), 12 deletions(-)
> >
> > diff --git a/MAINTAINERS b/MAINTAINERS
> > index 75a17d51c0..349fc9c38a 100644
> > --- a/MAINTAINERS
> > +++ b/MAINTAINERS
> > @@ -256,32 +256,31 @@ F: app/test/test_rand_perf.c
> > ARM v7
> > M: Jan Viktorin <viktorin@rehivetech.com>
> > M: Ruifeng Wang <ruifeng.wang@arm.com>
> > +F: config/arm/
> > F: lib/librte_eal/arm/
> > +X: lib/librte_eal/arm/include/*_64.h
> >
> > ARM v8
> > M: Jerin Jacob <jerinj@marvell.com>
> > M: Ruifeng Wang <ruifeng.wang@arm.com>
> > -F: lib/librte_eal/arm/include/*_64.h
> > -F: lib/librte_net/net_crc_neon.h
> > -F: lib/librte_acl/acl_run_neon.*
> > -F: lib/librte_bpf/bpf_jit_arm64.c
> > -F: lib/librte_lpm/rte_lpm_neon.h
> > -F: lib/librte_hash/rte*_arm64.h
> > -F: lib/librte_efd/rte*_arm64.h
> > -F: lib/librte_table/rte*_arm64.h
> > -F: drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c
> > -F: drivers/net/i40e/i40e_rxtx_vec_neon.c
> > -F: drivers/net/virtio/virtio_rxtx_simple_neon.c
> > +F: config/arm/
> > +F: lib/librte_eal/arm/
> > +X: lib/librte_eal/arm/include/*_32.h
> > +F: lib/*/*_neon.*
> > +F: lib/*/*_arm64.*
> > +F: drivers/*/*/*_neon.*
>
> app and examples directory are not caught in this:
>
> ./lib/librte_net/net_crc_neon.h
> ./lib/librte_acl/acl_run_neon.h
> ./lib/librte_acl/acl_run_neon.c
> ./lib/librte_lpm/rte_lpm_neon.h
> ./lib/librte_node/ip4_lookup_neon.h
> ./examples/l3fwd/l3fwd_lpm_neon.h
> ./examples/l3fwd/l3fwd_em_hlm_neon.h
> ./examples/l3fwd/l3fwd_neon.h
> ./app/test-pmd/macswap_neon.h
> ./drivers/net/hns3/hns3_rxtx_vec_neon.h
> ./drivers/net/bnxt/bnxt_rxtx_vec_neon.c
> ./drivers/net/mlx5/mlx5_rxtx_vec_neon.h
> ./drivers/net/virtio/virtio_rxtx_simple_neon.c
> ./drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c
> ./drivers/net/i40e/i40e_rxtx_vec_neon.c
>
> Can we use a wildcard at dpdk root?
> */*/*_neon.*
>
> The drivers/*/*/*_neon.* entry would still be needed though.
>
>
> >
> > IBM POWER (alpha)
> > M: David Christensen <drc@linux.vnet.ibm.com>
> > +F: config/ppc/
> > F: lib/librte_eal/ppc/
> > -F: drivers/net/i40e/i40e_rxtx_vec_altivec.c
> > +F: drivers/*/*/*_altivec.*
> > F: examples/l3fwd/*altivec.h
>
> Idem neon, lib files missing.
>
> ./lib/librte_eal/ppc/include/rte_altivec.h
> ./lib/librte_acl/acl_run_altivec.c
> ./lib/librte_acl/acl_run_altivec.h
> ./lib/librte_lpm/rte_lpm_altivec.h
> ./examples/l3fwd/l3fwd_altivec.h
> ./examples/l3fwd/l3fwd_lpm_altivec.h
> ./drivers/net/mlx5/mlx5_rxtx_vec_altivec.h
> ./drivers/net/virtio/virtio_rxtx_simple_altivec.c
> ./drivers/net/i40e/i40e_rxtx_vec_altivec.c
>
>
> >
> > Intel x86
> > M: Bruce Richardson <bruce.richardson@intel.com>
> > M: Konstantin Ananyev <konstantin.ananyev@intel.com>
> > +F: config/x86/
> > F: lib/librte_eal/x86/
>
> Nothing for avx/sse ?
I was not extending the scope too much.
I think you're right, we can go further in apps and x86-specific files.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [dpdk-dev] [PATCH v2] maintainers: improve coverage of arch-specific files
2020-10-06 20:22 [dpdk-dev] [PATCH] maintainers: improve coverage of arch-specific files Thomas Monjalon
2020-10-06 20:45 ` David Christensen
2020-10-07 7:44 ` David Marchand
@ 2020-10-24 16:36 ` Thomas Monjalon
2020-10-24 17:10 ` David Marchand
2 siblings, 1 reply; 6+ messages in thread
From: Thomas Monjalon @ 2020-10-24 16:36 UTC (permalink / raw)
To: dev
Cc: david.marchand, jerinj, bruce.richardson, ruifeng.wang, viktorin,
drc, konstantin.ananyev
The sub-directories of config/ are maintained by
different architecture maintainers.
Some wildcards are used to describe the lib, drivers and app files
which are specific to some architectures.
The EAL Arm files have split responsibilities depending on 32/64 suffix,
and the common files are shared between Armv7 and Armv8 sections.
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Reviewed-by: David Christensen <drc@linux.vnet.ibm.com>
---
v2: add more files (doc, apps and SSE/AVX)
---
MAINTAINERS | 41 +++++++++++++++++++++++++++--------------
1 file changed, 27 insertions(+), 14 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index a3d1927476..41983c1490 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -98,7 +98,6 @@ F: Makefile
F: meson.build
F: meson_options.txt
F: config/
-F: buildtools/binutils-avx512-check.sh
F: buildtools/call-sphinx-build.py
F: buildtools/gen-pmdinfo-cfile.sh
F: buildtools/list-dir-globs.py
@@ -256,33 +255,47 @@ F: app/test/test_rand_perf.c
ARM v7
M: Jan Viktorin <viktorin@rehivetech.com>
M: Ruifeng Wang <ruifeng.wang@arm.com>
+F: config/arm/
F: lib/librte_eal/arm/
+X: lib/librte_eal/arm/include/*_64.h
ARM v8
M: Jerin Jacob <jerinj@marvell.com>
M: Ruifeng Wang <ruifeng.wang@arm.com>
-F: lib/librte_eal/arm/include/*_64.h
-F: lib/librte_net/net_crc_neon.c
-F: lib/librte_acl/acl_run_neon.*
-F: lib/librte_bpf/bpf_jit_arm64.c
-F: lib/librte_lpm/rte_lpm_neon.h
-F: lib/librte_hash/rte*_arm64.h
-F: lib/librte_efd/rte*_arm64.h
-F: lib/librte_table/rte*_arm64.h
-F: drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c
-F: drivers/net/i40e/i40e_rxtx_vec_neon.c
-F: drivers/net/virtio/virtio_rxtx_simple_neon.c
+F: config/arm/
+F: doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst
+F: lib/librte_eal/arm/
+X: lib/librte_eal/arm/include/*_32.h
+F: lib/*/*_arm64.*
+F: lib/*/*_neon.*
+F: drivers/*/*/*_neon.*
+F: app/*/*_neon.*
+F: examples/*/*_neon.*
IBM POWER (alpha)
M: David Christensen <drc@linux.vnet.ibm.com>
+F: config/ppc/
F: lib/librte_eal/ppc/
-F: drivers/net/i40e/i40e_rxtx_vec_altivec.c
-F: examples/l3fwd/*altivec.h
+F: drivers/*/*/*_altivec.*
+F: app/*/*_altivec.*
+F: examples/*/*_altivec.*
Intel x86
M: Bruce Richardson <bruce.richardson@intel.com>
M: Konstantin Ananyev <konstantin.ananyev@intel.com>
+F: config/x86/
+F: doc/guides/linux_gsg/nic_perf_intel_platform.rst
+F: buildtools/binutils-avx512-check.sh
+F: doc/guides/howto/avx512.rst
F: lib/librte_eal/x86/
+F: lib/*/*_sse*
+F: lib/*/*_avx*
+F: drivers/*/*/*_sse*
+F: drivers/*/*/*_avx*
+F: app/*/*_sse*
+F: app/*/*_avx*
+F: examples/*/*_sse*
+F: examples/*/*_avx*
Linux EAL (with overlaps)
F: lib/librte_eal/linux/
--
2.28.0
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [dpdk-dev] [PATCH v2] maintainers: improve coverage of arch-specific files
2020-10-24 16:36 ` [dpdk-dev] [PATCH v2] " Thomas Monjalon
@ 2020-10-24 17:10 ` David Marchand
0 siblings, 0 replies; 6+ messages in thread
From: David Marchand @ 2020-10-24 17:10 UTC (permalink / raw)
To: Thomas Monjalon
Cc: dev, Jerin Jacob Kollanukkaran, Bruce Richardson,
Ruifeng Wang (Arm Technology China),
Jan Viktorin, David Christensen, Ananyev, Konstantin
On Sat, Oct 24, 2020 at 6:36 PM Thomas Monjalon <thomas@monjalon.net> wrote:
>
> The sub-directories of config/ are maintained by
> different architecture maintainers.
>
> Some wildcards are used to describe the lib, drivers and app files
> which are specific to some architectures.
>
> The EAL Arm files have split responsibilities depending on 32/64 suffix,
> and the common files are shared between Armv7 and Armv8 sections.
>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> Reviewed-by: David Christensen <drc@linux.vnet.ibm.com>
Squashed:
@@ -276,6 +276,7 @@ IBM POWER (alpha)
M: David Christensen <drc@linux.vnet.ibm.com>
F: config/ppc/
F: lib/librte_eal/ppc/
+F: lib/*/*_altivec*
F: drivers/*/*/*_altivec.*
F: app/*/*_altivec.*
F: examples/*/*_altivec.*
Acked-by: David Marchand <david.marchand@redhat.com>
Applied.
--
David Marchand
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-10-24 17:10 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-06 20:22 [dpdk-dev] [PATCH] maintainers: improve coverage of arch-specific files Thomas Monjalon
2020-10-06 20:45 ` David Christensen
2020-10-07 7:44 ` David Marchand
2020-10-07 10:06 ` Thomas Monjalon
2020-10-24 16:36 ` [dpdk-dev] [PATCH v2] " Thomas Monjalon
2020-10-24 17:10 ` David Marchand
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).