[dpdk-dev] [PATCH v6 1/6] Move common functions in eal_thread.c

Bruce Richardson bruce.richardson at intel.com
Tue Apr 21 16:25:35 CEST 2015


On Sat, Apr 18, 2015 at 12:43:06PM -0700, Ravi Kerur wrote:
> Changes in v6
> Remove RTE_EXEC_ENV_BSDAPP from eal_common_thread.c file.
> Add pthread_setname_np/pthread_set_name_np for Linux/FreeBSD
> respectively. Plan to use _getname_ in RTE_LOG when available.
> Use existing rte_get_systid() in RTE_LOG to print thread_id.

Hi Ravi

I think the change to add names to the threads might be better in an existing
patch as it is separate from the change of making the code common.
[The code changes for the names also seems to have issues with it, as
described in comments below]

> 
> Changes in v5
> Rebase to latest code.
> 
> Changes in v4
> None
> 
> Changes in v3
> Changed subject to be more explicit on file name inclusion.
> 
> Changes in v2
> None
> 
> Changes in v1
> eal_thread.c has minor differences between Linux and BSD, move
> entire file into common directory.
> Use RTE_EXEC_ENV_BSDAPP to differentiate on minor differences.
> Rename eal_thread.c to eal_common_thread.c
> Makefile changes to reflect file move and name change.
> Fix checkpatch warnings.
> 
> Signed-off-by: Ravi Kerur <rkerur at gmail.com>
> ---
>  examples/vhost/main.c                              |  18 ++-
>  examples/vhost_xen/main.c                          |  18 ++-
>  lib/librte_eal/bsdapp/eal/Makefile                 |   2 +-
>  lib/librte_eal/bsdapp/eal/eal.c                    |   7 +
>  lib/librte_eal/bsdapp/eal/eal_thread.c             | 152 ---------------------
>  lib/librte_eal/common/eal_common_thread.c          | 147 +++++++++++++++++++-
>  lib/librte_eal/common/eal_thread.h                 |   5 +
>  lib/librte_eal/linuxapp/eal/Makefile               |   2 +
>  lib/librte_eal/linuxapp/eal/eal.c                  |  10 ++
>  lib/librte_eal/linuxapp/eal/eal_interrupts.c       |  11 ++
>  lib/librte_eal/linuxapp/eal/eal_pci_vfio_mp_sync.c |  22 ++-
>  lib/librte_eal/linuxapp/eal/eal_thread.c           | 152 +--------------------
>  lib/librte_eal/linuxapp/eal/eal_timer.c            |  15 +-
>  13 files changed, 250 insertions(+), 311 deletions(-)
> 

<<<snip>>>

> --- a/lib/librte_eal/linuxapp/eal/eal_pci_vfio_mp_sync.c
> +++ b/lib/librte_eal/linuxapp/eal/eal_pci_vfio_mp_sync.c
> @@ -34,6 +34,7 @@
>  #include <string.h>
>  #include <fcntl.h>
>  #include <sys/socket.h>
> +#include <pthread.h>
>  
>  /* sys/un.h with __USE_MISC uses strlen, which is unsafe */
>  #ifdef __USE_MISC
> @@ -54,6 +55,7 @@
>  
>  #include "eal_filesystem.h"
>  #include "eal_pci_init.h"
> +#include "eal_thread.h"
>  
>  /**
>   * @file
> @@ -374,20 +376,36 @@ int
>  pci_vfio_mp_sync_setup(void)
>  {
>  	int ret;
> +	char thread_name[RTE_THREAD_NAME_LEN];
>  
>  	if (vfio_mp_sync_socket_setup() < 0) {
>  		RTE_LOG(ERR, EAL, "Failed to set up local socket!\n");
>  		return -1;
>  	}
>  
> +	snprintf(thread_name, RTE_THREAD_NAME_LEN,
> +		"pci-vfio-mp-sync");

This string is too long. According to the man page (Fedora Linux):
"The thread name is a meaningful C language string, whose length is restricted to 16  charac‐
       ters, including the terminating null byte ('\0')."
I make the string 16+ null, i.e. 17 in total.

> +
>  	ret = pthread_create(&socket_thread, NULL,
>  			pci_vfio_mp_sync_thread, NULL);
>  	if (ret) {
> -		RTE_LOG(ERR, EAL, "Failed to create thread for communication with "
> -				"secondary processes!\n");
> +		RTE_LOG(ERR, EAL,
> +			"Failed to create thread for communication with "
> +			"secondary processes!\n");

Should not split the error message string across multiple lines as it breaks
git grep searches for the error message.

> +		close(mp_socket_fd);
> +		return -1;
> +	}
> +
> +	ret = pthread_setname_np(socket_thread, thread_name);
> +
> +	if (ret) {
> +		RTE_LOG(ERR, EAL,
> +			"Failed to set thread name for "
> +			"secondary processes!\n");
>  		close(mp_socket_fd);
>  		return -1;

Do we really want to return with an error here. Right now I can't run any apps
since I get an error on init of PCI - due to the name string being too long for
Linux. (Things seem fine on BSD). Failing to name a thread doesn't seem to be
a fatal error IMHO.

Regards,
/Bruce



More information about the dev mailing list