Re: [lng-odp] [PATCH] linux-generic: pktio: enable classifier only when needed

2015-09-28 Thread Savolainen, Petri (Nokia - FI/Espoo)
Sent out v2 which enables classifier also in this case.

-Petri


> -Original Message-
> From: EXT Bala Manoharan [mailto:bala.manoha...@linaro.org]
> Sent: Friday, September 18, 2015 3:26 PM
> To: Savolainen, Petri (Nokia - FI/Espoo)
> Cc: LNG ODP Mailman List
> Subject: Re: [lng-odp] [PATCH] linux-generic: pktio: enable classifier
> only when needed
> 
> In this case the packet will not be dispatched to the default CoS in
> the scenario when the application configures only the default CoS and
> not the PMRs.
> Is this the expected behaviour? in case not then
> pktio_cls_enabled_set() should be configured in the
> odp_pktio_default_cos_set() function also.
> 
> 
> Regards,
> Bala
> 
> On 18 September 2015 at 17:17, Petri Savolainen
>  wrote:
> > Skip packet_classifier function as long as there's no pmr
> > set for an pktio interface.
> >
> > Signed-off-by: Petri Savolainen 
> > ---
> >  platform/linux-generic/include/odp_packet_io_internal.h | 10
> ++
> >  platform/linux-generic/odp_classification.c |  2 ++
> >  platform/linux-generic/odp_packet_io.c  |  6 ++
> >  3 files changed, 14 insertions(+), 4 deletions(-)
> >
> > diff --git a/platform/linux-generic/include/odp_packet_io_internal.h
> b/platform/linux-generic/include/odp_packet_io_internal.h
> > index a21c683..6b03051 100644
> > --- a/platform/linux-generic/include/odp_packet_io_internal.h
> > +++ b/platform/linux-generic/include/odp_packet_io_internal.h
> > @@ -109,6 +109,16 @@ static inline pktio_entry_t
> *get_pktio_entry(odp_pktio_t pktio)
> > return pktio_entry_ptr[pktio_to_id(pktio)];
> >  }
> >
> > +static inline int pktio_cls_enabled(pktio_entry_t *entry)
> > +{
> > +   return entry->s.cls_enabled;
> > +}
> > +
> > +static inline void pktio_cls_enabled_set(pktio_entry_t *entry, int
> ena)
> > +{
> > +   entry->s.cls_enabled = ena;
> > +}
> > +
> >  int pktin_poll(pktio_entry_t *entry);
> >
> >  extern const pktio_if_ops_t sock_mmsg_pktio_ops;
> > diff --git a/platform/linux-generic/odp_classification.c
> b/platform/linux-generic/odp_classification.c
> > index 6c1aff4..7809a42 100644
> > --- a/platform/linux-generic/odp_classification.c
> > +++ b/platform/linux-generic/odp_classification.c
> > @@ -488,6 +488,7 @@ int odp_pktio_pmr_cos(odp_pmr_t pmr_id,
> > pktio_entry->s.cls.pmr[num_pmr] = pmr;
> > pktio_entry->s.cls.cos[num_pmr] = cos;
> > pktio_entry->s.cls.num_pmr++;
> > +   pktio_cls_enabled_set(pktio_entry, 1);
> > UNLOCK(&pktio_entry->s.cls.lock);
> >
> > return 0;
> > @@ -625,6 +626,7 @@ int odp_pktio_pmr_match_set_cos(odp_pmr_set_t
> pmr_set_id, odp_pktio_t src_pktio,
> > pktio_entry->s.cls.pmr[num_pmr] = pmr;
> > pktio_entry->s.cls.cos[num_pmr] = cos;
> > pktio_entry->s.cls.num_pmr++;
> > +   pktio_cls_enabled_set(pktio_entry, 1);
> > UNLOCK(&pktio_entry->s.cls.lock);
> >
> > return 0;
> > diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-
> generic/odp_packet_io.c
> > index d724933..aa2b566 100644
> > --- a/platform/linux-generic/odp_packet_io.c
> > +++ b/platform/linux-generic/odp_packet_io.c
> > @@ -154,9 +154,7 @@ static void unlock_entry_classifier(pktio_entry_t
> *entry)
> >  static void init_pktio_entry(pktio_entry_t *entry)
> >  {
> > set_taken(entry);
> > -   /* Currently classifier is enabled by default. It should be
> enabled
> > -  only when used. */
> > -   entry->s.cls_enabled = 1;
> > +   pktio_cls_enabled_set(entry, 0);
> > entry->s.inq_default = ODP_QUEUE_INVALID;
> >
> > pktio_classifier_init(entry);
> > @@ -642,7 +640,7 @@ int pktin_poll(pktio_entry_t *entry)
> > buf = _odp_packet_to_buffer(pkt_tbl[i]);
> > hdr = odp_buf_to_hdr(buf);
> >
> > -   if (entry->s.cls_enabled) {
> > +   if (pktio_cls_enabled(entry)) {
> > if (packet_classifier(entry->s.handle,
> pkt_tbl[i]) < 0)
> > hdr_tbl[num_enq++] = hdr;
> > } else {
> > --
> > 2.5.3
> >
> > ___
> > lng-odp mailing list
> > lng-odp@lists.linaro.org
> > https://lists.linaro.org/mailman/listinfo/lng-odp
___
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp


Re: [lng-odp] [PATCH] linux-generic: pktio: enable classifier only when needed

2015-09-18 Thread Bill Fischofer
Good catch.  The classifier can be completely bypassed only if there are no
classification rules (default or PMRs) in effect.  Presumably the
classifier itself can contain fastpath processing if only a default CoS is
in effect.

On Fri, Sep 18, 2015 at 5:25 AM, Bala Manoharan 
wrote:

> In this case the packet will not be dispatched to the default CoS in
> the scenario when the application configures only the default CoS and
> not the PMRs.
> Is this the expected behaviour? in case not then
> pktio_cls_enabled_set() should be configured in the
> odp_pktio_default_cos_set() function also.
>
>
> Regards,
> Bala
>
> On 18 September 2015 at 17:17, Petri Savolainen
>  wrote:
> > Skip packet_classifier function as long as there's no pmr
> > set for an pktio interface.
> >
> > Signed-off-by: Petri Savolainen 
> > ---
> >  platform/linux-generic/include/odp_packet_io_internal.h | 10 ++
> >  platform/linux-generic/odp_classification.c |  2 ++
> >  platform/linux-generic/odp_packet_io.c  |  6 ++
> >  3 files changed, 14 insertions(+), 4 deletions(-)
> >
> > diff --git a/platform/linux-generic/include/odp_packet_io_internal.h
> b/platform/linux-generic/include/odp_packet_io_internal.h
> > index a21c683..6b03051 100644
> > --- a/platform/linux-generic/include/odp_packet_io_internal.h
> > +++ b/platform/linux-generic/include/odp_packet_io_internal.h
> > @@ -109,6 +109,16 @@ static inline pktio_entry_t
> *get_pktio_entry(odp_pktio_t pktio)
> > return pktio_entry_ptr[pktio_to_id(pktio)];
> >  }
> >
> > +static inline int pktio_cls_enabled(pktio_entry_t *entry)
> > +{
> > +   return entry->s.cls_enabled;
> > +}
> > +
> > +static inline void pktio_cls_enabled_set(pktio_entry_t *entry, int ena)
> > +{
> > +   entry->s.cls_enabled = ena;
> > +}
> > +
> >  int pktin_poll(pktio_entry_t *entry);
> >
> >  extern const pktio_if_ops_t sock_mmsg_pktio_ops;
> > diff --git a/platform/linux-generic/odp_classification.c
> b/platform/linux-generic/odp_classification.c
> > index 6c1aff4..7809a42 100644
> > --- a/platform/linux-generic/odp_classification.c
> > +++ b/platform/linux-generic/odp_classification.c
> > @@ -488,6 +488,7 @@ int odp_pktio_pmr_cos(odp_pmr_t pmr_id,
> > pktio_entry->s.cls.pmr[num_pmr] = pmr;
> > pktio_entry->s.cls.cos[num_pmr] = cos;
> > pktio_entry->s.cls.num_pmr++;
> > +   pktio_cls_enabled_set(pktio_entry, 1);
> > UNLOCK(&pktio_entry->s.cls.lock);
> >
> > return 0;
> > @@ -625,6 +626,7 @@ int odp_pktio_pmr_match_set_cos(odp_pmr_set_t
> pmr_set_id, odp_pktio_t src_pktio,
> > pktio_entry->s.cls.pmr[num_pmr] = pmr;
> > pktio_entry->s.cls.cos[num_pmr] = cos;
> > pktio_entry->s.cls.num_pmr++;
> > +   pktio_cls_enabled_set(pktio_entry, 1);
> > UNLOCK(&pktio_entry->s.cls.lock);
> >
> > return 0;
> > diff --git a/platform/linux-generic/odp_packet_io.c
> b/platform/linux-generic/odp_packet_io.c
> > index d724933..aa2b566 100644
> > --- a/platform/linux-generic/odp_packet_io.c
> > +++ b/platform/linux-generic/odp_packet_io.c
> > @@ -154,9 +154,7 @@ static void unlock_entry_classifier(pktio_entry_t
> *entry)
> >  static void init_pktio_entry(pktio_entry_t *entry)
> >  {
> > set_taken(entry);
> > -   /* Currently classifier is enabled by default. It should be
> enabled
> > -  only when used. */
> > -   entry->s.cls_enabled = 1;
> > +   pktio_cls_enabled_set(entry, 0);
> > entry->s.inq_default = ODP_QUEUE_INVALID;
> >
> > pktio_classifier_init(entry);
> > @@ -642,7 +640,7 @@ int pktin_poll(pktio_entry_t *entry)
> > buf = _odp_packet_to_buffer(pkt_tbl[i]);
> > hdr = odp_buf_to_hdr(buf);
> >
> > -   if (entry->s.cls_enabled) {
> > +   if (pktio_cls_enabled(entry)) {
> > if (packet_classifier(entry->s.handle,
> pkt_tbl[i]) < 0)
> > hdr_tbl[num_enq++] = hdr;
> > } else {
> > --
> > 2.5.3
> >
> > ___
> > lng-odp mailing list
> > lng-odp@lists.linaro.org
> > https://lists.linaro.org/mailman/listinfo/lng-odp
> ___
> lng-odp mailing list
> lng-odp@lists.linaro.org
> https://lists.linaro.org/mailman/listinfo/lng-odp
>
___
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp


Re: [lng-odp] [PATCH] linux-generic: pktio: enable classifier only when needed

2015-09-18 Thread Bala Manoharan
In this case the packet will not be dispatched to the default CoS in
the scenario when the application configures only the default CoS and
not the PMRs.
Is this the expected behaviour? in case not then
pktio_cls_enabled_set() should be configured in the
odp_pktio_default_cos_set() function also.


Regards,
Bala

On 18 September 2015 at 17:17, Petri Savolainen
 wrote:
> Skip packet_classifier function as long as there's no pmr
> set for an pktio interface.
>
> Signed-off-by: Petri Savolainen 
> ---
>  platform/linux-generic/include/odp_packet_io_internal.h | 10 ++
>  platform/linux-generic/odp_classification.c |  2 ++
>  platform/linux-generic/odp_packet_io.c  |  6 ++
>  3 files changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/platform/linux-generic/include/odp_packet_io_internal.h 
> b/platform/linux-generic/include/odp_packet_io_internal.h
> index a21c683..6b03051 100644
> --- a/platform/linux-generic/include/odp_packet_io_internal.h
> +++ b/platform/linux-generic/include/odp_packet_io_internal.h
> @@ -109,6 +109,16 @@ static inline pktio_entry_t *get_pktio_entry(odp_pktio_t 
> pktio)
> return pktio_entry_ptr[pktio_to_id(pktio)];
>  }
>
> +static inline int pktio_cls_enabled(pktio_entry_t *entry)
> +{
> +   return entry->s.cls_enabled;
> +}
> +
> +static inline void pktio_cls_enabled_set(pktio_entry_t *entry, int ena)
> +{
> +   entry->s.cls_enabled = ena;
> +}
> +
>  int pktin_poll(pktio_entry_t *entry);
>
>  extern const pktio_if_ops_t sock_mmsg_pktio_ops;
> diff --git a/platform/linux-generic/odp_classification.c 
> b/platform/linux-generic/odp_classification.c
> index 6c1aff4..7809a42 100644
> --- a/platform/linux-generic/odp_classification.c
> +++ b/platform/linux-generic/odp_classification.c
> @@ -488,6 +488,7 @@ int odp_pktio_pmr_cos(odp_pmr_t pmr_id,
> pktio_entry->s.cls.pmr[num_pmr] = pmr;
> pktio_entry->s.cls.cos[num_pmr] = cos;
> pktio_entry->s.cls.num_pmr++;
> +   pktio_cls_enabled_set(pktio_entry, 1);
> UNLOCK(&pktio_entry->s.cls.lock);
>
> return 0;
> @@ -625,6 +626,7 @@ int odp_pktio_pmr_match_set_cos(odp_pmr_set_t pmr_set_id, 
> odp_pktio_t src_pktio,
> pktio_entry->s.cls.pmr[num_pmr] = pmr;
> pktio_entry->s.cls.cos[num_pmr] = cos;
> pktio_entry->s.cls.num_pmr++;
> +   pktio_cls_enabled_set(pktio_entry, 1);
> UNLOCK(&pktio_entry->s.cls.lock);
>
> return 0;
> diff --git a/platform/linux-generic/odp_packet_io.c 
> b/platform/linux-generic/odp_packet_io.c
> index d724933..aa2b566 100644
> --- a/platform/linux-generic/odp_packet_io.c
> +++ b/platform/linux-generic/odp_packet_io.c
> @@ -154,9 +154,7 @@ static void unlock_entry_classifier(pktio_entry_t *entry)
>  static void init_pktio_entry(pktio_entry_t *entry)
>  {
> set_taken(entry);
> -   /* Currently classifier is enabled by default. It should be enabled
> -  only when used. */
> -   entry->s.cls_enabled = 1;
> +   pktio_cls_enabled_set(entry, 0);
> entry->s.inq_default = ODP_QUEUE_INVALID;
>
> pktio_classifier_init(entry);
> @@ -642,7 +640,7 @@ int pktin_poll(pktio_entry_t *entry)
> buf = _odp_packet_to_buffer(pkt_tbl[i]);
> hdr = odp_buf_to_hdr(buf);
>
> -   if (entry->s.cls_enabled) {
> +   if (pktio_cls_enabled(entry)) {
> if (packet_classifier(entry->s.handle, pkt_tbl[i]) < 
> 0)
> hdr_tbl[num_enq++] = hdr;
> } else {
> --
> 2.5.3
>
> ___
> lng-odp mailing list
> lng-odp@lists.linaro.org
> https://lists.linaro.org/mailman/listinfo/lng-odp
___
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp


[lng-odp] [PATCH] linux-generic: pktio: enable classifier only when needed

2015-09-18 Thread Petri Savolainen
Skip packet_classifier function as long as there's no pmr
set for an pktio interface.

Signed-off-by: Petri Savolainen 
---
 platform/linux-generic/include/odp_packet_io_internal.h | 10 ++
 platform/linux-generic/odp_classification.c |  2 ++
 platform/linux-generic/odp_packet_io.c  |  6 ++
 3 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/platform/linux-generic/include/odp_packet_io_internal.h 
b/platform/linux-generic/include/odp_packet_io_internal.h
index a21c683..6b03051 100644
--- a/platform/linux-generic/include/odp_packet_io_internal.h
+++ b/platform/linux-generic/include/odp_packet_io_internal.h
@@ -109,6 +109,16 @@ static inline pktio_entry_t *get_pktio_entry(odp_pktio_t 
pktio)
return pktio_entry_ptr[pktio_to_id(pktio)];
 }
 
+static inline int pktio_cls_enabled(pktio_entry_t *entry)
+{
+   return entry->s.cls_enabled;
+}
+
+static inline void pktio_cls_enabled_set(pktio_entry_t *entry, int ena)
+{
+   entry->s.cls_enabled = ena;
+}
+
 int pktin_poll(pktio_entry_t *entry);
 
 extern const pktio_if_ops_t sock_mmsg_pktio_ops;
diff --git a/platform/linux-generic/odp_classification.c 
b/platform/linux-generic/odp_classification.c
index 6c1aff4..7809a42 100644
--- a/platform/linux-generic/odp_classification.c
+++ b/platform/linux-generic/odp_classification.c
@@ -488,6 +488,7 @@ int odp_pktio_pmr_cos(odp_pmr_t pmr_id,
pktio_entry->s.cls.pmr[num_pmr] = pmr;
pktio_entry->s.cls.cos[num_pmr] = cos;
pktio_entry->s.cls.num_pmr++;
+   pktio_cls_enabled_set(pktio_entry, 1);
UNLOCK(&pktio_entry->s.cls.lock);
 
return 0;
@@ -625,6 +626,7 @@ int odp_pktio_pmr_match_set_cos(odp_pmr_set_t pmr_set_id, 
odp_pktio_t src_pktio,
pktio_entry->s.cls.pmr[num_pmr] = pmr;
pktio_entry->s.cls.cos[num_pmr] = cos;
pktio_entry->s.cls.num_pmr++;
+   pktio_cls_enabled_set(pktio_entry, 1);
UNLOCK(&pktio_entry->s.cls.lock);
 
return 0;
diff --git a/platform/linux-generic/odp_packet_io.c 
b/platform/linux-generic/odp_packet_io.c
index d724933..aa2b566 100644
--- a/platform/linux-generic/odp_packet_io.c
+++ b/platform/linux-generic/odp_packet_io.c
@@ -154,9 +154,7 @@ static void unlock_entry_classifier(pktio_entry_t *entry)
 static void init_pktio_entry(pktio_entry_t *entry)
 {
set_taken(entry);
-   /* Currently classifier is enabled by default. It should be enabled
-  only when used. */
-   entry->s.cls_enabled = 1;
+   pktio_cls_enabled_set(entry, 0);
entry->s.inq_default = ODP_QUEUE_INVALID;
 
pktio_classifier_init(entry);
@@ -642,7 +640,7 @@ int pktin_poll(pktio_entry_t *entry)
buf = _odp_packet_to_buffer(pkt_tbl[i]);
hdr = odp_buf_to_hdr(buf);
 
-   if (entry->s.cls_enabled) {
+   if (pktio_cls_enabled(entry)) {
if (packet_classifier(entry->s.handle, pkt_tbl[i]) < 0)
hdr_tbl[num_enq++] = hdr;
} else {
-- 
2.5.3

___
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp