From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by dpdk.org (Postfix) with ESMTP id 59ACFF3E for ; Mon, 30 Apr 2018 19:20:43 +0200 (CEST) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 12A1B4268A32; Mon, 30 Apr 2018 17:20:43 +0000 (UTC) Received: from dhcp-25.97.bos.redhat.com (unknown [10.18.25.61]) by smtp.corp.redhat.com (Postfix) with ESMTP id C3E73215CDA7; Mon, 30 Apr 2018 17:20:42 +0000 (UTC) From: Aaron Conole To: stable@dpdk.org Cc: Alejandro Lucero , Ferruh Yigit , Yuanhan Liu , Eelco Chaudron , Pablo Cascon , Kevin Traynor , Adrien Mazarguil Date: Mon, 30 Apr 2018 13:20:40 -0400 Message-Id: <20180430172040.13506-3-aconole@redhat.com> In-Reply-To: <20180430172040.13506-1-aconole@redhat.com> References: <20180430172040.13506-1-aconole@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.5]); Mon, 30 Apr 2018 17:20:43 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.5]); Mon, 30 Apr 2018 17:20:43 +0000 (UTC) for IP:'10.11.54.6' DOMAIN:'int-mx06.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'aconole@redhat.com' RCPT:'' Subject: [dpdk-stable] [PATCH 2/2] nfp: allow for non-root user X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 30 Apr 2018 17:20:44 -0000 Currently, the nfp lock files are taken from the global lock file location, which will work when the user is running as root. However, some distributions and applications (notably ovs 2.8+ on RHEL/Fedora) run as a non-root user. Acked-by: Alejandro Lucero Signed-off-by: Aaron Conole --- drivers/net/nfp/nfp_nfpu.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/drivers/net/nfp/nfp_nfpu.c b/drivers/net/nfp/nfp_nfpu.c index 2ed985ff4..ae2e07220 100644 --- a/drivers/net/nfp/nfp_nfpu.c +++ b/drivers/net/nfp/nfp_nfpu.c @@ -18,6 +18,22 @@ #define NFP_CFG_EXP_BAR 7 #define NFP_CFG_EXP_BAR_CFG_BASE 0x30000 +#define NFP_LOCKFILE_PATH_FMT "%s/nfp%d" + +/* get nfp lock file path (/var/lock if root, $HOME otherwise) */ +static void +nspu_get_lockfile_path(char *buffer, int bufsz, nfpu_desc_t *desc) +{ + const char *dir = "/var/lock"; + const char *home_dir = getenv("HOME"); + + if (getuid() != 0 && home_dir != NULL) + dir = home_dir; + + /* use current prefix as file path */ + snprintf(buffer, bufsz, NFP_LOCKFILE_PATH_FMT, dir, + desc->nfp); +} /* There could be other NFP userspace tools using the NSP interface. * Make sure there is no other process using it and locking the access for @@ -30,9 +46,7 @@ nspv_aquire_process_lock(nfpu_desc_t *desc) struct flock lock; char lockname[30]; - memset(&lock, 0, sizeof(lock)); - - snprintf(lockname, sizeof(lockname), "/var/lock/nfp%d", desc->nfp); + nspu_get_lockfile_path(lockname, sizeof(lockname), desc); /* Using S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH */ desc->lock = open(lockname, O_RDWR | O_CREAT, 0666); @@ -106,7 +120,6 @@ nfpu_close(nfpu_desc_t *desc) rte_free(desc->nspu); close(desc->lock); - snprintf(lockname, sizeof(lockname), "/var/lock/nfp%d", desc->nfp); - unlink(lockname); + nspu_get_lockfile_path(lockname, sizeof(lockname), desc); return 0; } -- 2.14.3