-----Original Message-----
> Date: Fri, 23 Jun 2017 10:06:19 +0100
> From: Harry van Haaren <harry.van.haa...@intel.com>
> To: dev@dpdk.org
> CC: tho...@monjalon.net, jerin.ja...@caviumnetworks.com,
>  keith.wi...@intel.com, bruce.richard...@intel.com, Harry van Haaren
>  <harry.van.haa...@intel.com>
> Subject: [PATCH 6/6] service cores: enable event/sw with service
> X-Mailer: git-send-email 2.7.4
> 
> This commit shows how easy it is to enable a specific
> DPDK component with a service callback, in order to get
> CPU cycles for it.
> 
> The beauty of this method is that the service is unaware
> of how much CPU time it is getting - the application can
> decide how to split and slice cores and map them to the
> registered services.
> 
> Signed-off-by: Harry van Haaren <harry.van.haa...@intel.com>
> ---
>  drivers/event/sw/sw_evdev.c | 22 ++++++++++++++++++++++
>  1 file changed, 22 insertions(+)
> 
> diff --git a/drivers/event/sw/sw_evdev.c b/drivers/event/sw/sw_evdev.c
> index a31aaa6..f55cad9 100644
> --- a/drivers/event/sw/sw_evdev.c
> +++ b/drivers/event/sw/sw_evdev.c
> @@ -38,6 +38,9 @@
>  #include <rte_ring.h>
>  #include <rte_errno.h>
>  
> +#include <rte_service_private.h>
> +#include <rte_cycles.h>

If rte_service_private.h needs the rte_cycles.h then I think it can be
included in rte_service_private.h.

> +
>  #include "sw_evdev.h"
>  #include "iq_ring.h"
>  #include "event_ring.h"
> @@ -695,6 +698,14 @@ set_credit_quanta(const char *key __rte_unused, const 
> char *value, void *opaque)
>       return 0;
>  }
>  
> +
> +static int32_t sw_sched_service_func(void *args)
> +{
> +     struct rte_eventdev *dev = args;
> +     sw_event_schedule(dev);
> +     return 0;
> +}
> +
>  static int
>  sw_probe(struct rte_vdev_device *vdev)
>  {
> @@ -806,6 +817,17 @@ sw_probe(struct rte_vdev_device *vdev)
>       sw->credit_update_quanta = credit_quanta;
>       sw->sched_quanta = sched_quanta;
>  
> +     /* register service with EAL */
> +     struct rte_service_spec service;
> +     memset(&service, 0, sizeof(struct rte_service_spec));
> +     snprintf(service.name, sizeof(service.name), "%s_service", name);

Should we add socket_id as well in the service name?


> +     service.socket_id = socket_id;
> +     service.callback = sw_sched_service_func;
> +     service.callback_userdata = (void *)dev;
> +
> +     int32_t ret = rte_service_register(&service);
> +     printf("serivce register = %d, cb ud %p\n", ret, dev);

sw_pmd_log?

> +
>       return 0;

Should we also check rte_service_is_running() in sw pmd start function
to verify application did everything to setup the service function on
service lcore? or means for feedback?


>  }
>  
> -- 
> 2.7.4
> 

Reply via email to