From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-vc0-f179.google.com (mail-vc0-f179.google.com [209.85.220.179]) by dpdk.org (Postfix) with ESMTP id C9CD15930 for ; Tue, 20 May 2014 09:40:19 +0200 (CEST) Received: by mail-vc0-f179.google.com with SMTP id im17so101645vcb.38 for ; Tue, 20 May 2014 00:40:28 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=/hFEoaQ78M3xnS6IYWlpwjt6DjD1NhLjRKWqI3RUi+I=; b=IWrUXrzx/Ec74e5iYhs7YvFRZOWFfnnpE+Mc45uoP8fMKxZn27DDEXFZ9HYCMFM1s4 aS+oBYPWPL76d8kpoJQmYmONL+jGGLYk59LrcVlA+GguhUKfOFAZyZMSAOVOYkUx+Exq vnWDI2eb2kL7yKO9q9ubngm5ve0VmXSMUQ9mKCuFn0XBF2CTFq7F33fyHFCNmceQdMA9 b3NSiI5LOn6CadhthAaUdRtw7jrs3ZZlLuGks1ptJobd7QWZPQ+nD6gqkMoEDW1KLd14 LpcWUjiVks3Csg+npOJJE06cth7TFTOZtPLWkLf2orjS6NyuQKe5UYu8t4g/sS7iaRko 2VtQ== X-Gm-Message-State: ALoCoQlROFl/LkpEKwD6nVcfec6yzWLwkTzXa2eGQX9WE0Vcf6BmSnpvhIfYpGkilpKXo+gTrevA MIME-Version: 1.0 X-Received: by 10.220.82.133 with SMTP id b5mr2286939vcl.13.1400571628844; Tue, 20 May 2014 00:40:28 -0700 (PDT) Received: by 10.220.185.199 with HTTP; Tue, 20 May 2014 00:40:28 -0700 (PDT) In-Reply-To: <1400514709-24087-11-git-send-email-anatoly.burakov@intel.com> References: <1400514709-24087-11-git-send-email-anatoly.burakov@intel.com> Date: Tue, 20 May 2014 00:40:28 -0700 Message-ID: From: Stephen Hemminger To: Anatoly Burakov Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Cc: "dev@dpdk.org" Subject: Re: [dpdk-dev] [PATCH v2 10/16] Added support for selecting VFIO interrupt type from EAL command-line X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 May 2014 07:40:20 -0000 I really wish the code did automatic fall back based on PCI config. It is possible to know the right mode, and do the right thing. Rather than punting the problem out to command line which is totally unusable in hot plug and generic application. On Mon, May 19, 2014 at 8:51 AM, Anatoly Burakov wrote: > Unlike igb_uio, VFIO interrupt type is not set by kernel module > parameters but is set up via ioctl() calls at runtime. This warrants > a new EAL command-line parameter. It will have no effect if VFIO is > not compiled, but will set VFIO interrupt type to either "legacy" or > "msix" if VFIO support is compiled. Note that VFIO initialization will > fail if the interrupt type selected is not supported by the system. > > Signed-off-by: Anatoly Burakov > --- > lib/librte_eal/linuxapp/eal/eal.c | 32 ++++++++++++++++++++++++++++++++ > 1 files changed, 32 insertions(+), 0 deletions(-) > > diff --git a/lib/librte_eal/linuxapp/eal/eal.c > b/lib/librte_eal/linuxapp/eal/eal.c > index 01bfd6c..bae1078 100644 > --- a/lib/librte_eal/linuxapp/eal/eal.c > +++ b/lib/librte_eal/linuxapp/eal/eal.c > @@ -99,6 +99,7 @@ > #define OPT_BASE_VIRTADDR "base-virtaddr" > #define OPT_XEN_DOM0 "xen-dom0" > #define OPT_CREATE_UIO_DEV "create-uio-dev" > +#define OPT_VFIO_INTR "vfio-intr" > > #define RTE_EAL_BLACKLIST_SIZE 0x100 > > @@ -361,6 +362,7 @@ eal_usage(const char *prgname) > " --"OPT_VMWARE_TSC_MAP": use VMware TSC map instead of " > "native RDTSC\n" > " --"OPT_BASE_VIRTADDR": specify base virtual address\n" > + " --"OPT_VFIO_INTR": specify desired interrupt mode for > VFIO (intx|msix)\n" > " --"OPT_CREATE_UIO_DEV": create /dev/uioX (usually done > by hotplug)\n" > "\nEAL options for DEBUG use only:\n" > " --"OPT_NO_HUGE" : use malloc instead of hugetlbfs\n" > @@ -579,6 +581,27 @@ eal_parse_base_virtaddr(const char *arg) > return 0; > } > > +static int > +eal_parse_vfio_intr(const char *mode) > +{ > + unsigned i; > + static struct { > + const char *name; > + enum rte_intr_mode value; > + } map[] = { > + { "legacy", RTE_INTR_MODE_LEGACY }, > + { "msix", RTE_INTR_MODE_MSIX }, > + }; > + > + for (i = 0; i < RTE_DIM(map); i++) { > + if (!strcmp(mode, map[i].name)) { > + internal_config.vfio_intr_mode = map[i].value; > + return 0; > + } > + } > + return -1; > +} > + > static inline size_t > eal_get_hugepage_mem_size(void) > { > @@ -633,6 +656,7 @@ eal_parse_args(int argc, char **argv) > {OPT_PCI_BLACKLIST, 1, 0, 0}, > {OPT_VDEV, 1, 0, 0}, > {OPT_SYSLOG, 1, NULL, 0}, > + {OPT_VFIO_INTR, 1, NULL, 0}, > {OPT_BASE_VIRTADDR, 1, 0, 0}, > {OPT_XEN_DOM0, 0, 0, 0}, > {OPT_CREATE_UIO_DEV, 1, NULL, 0}, > @@ -828,6 +852,14 @@ eal_parse_args(int argc, char **argv) > return -1; > } > } > + else if (!strcmp(lgopts[option_index].name, > OPT_VFIO_INTR)) { > + if (eal_parse_vfio_intr(optarg) < 0) { > + RTE_LOG(ERR, EAL, "invalid > parameters for --" > + OPT_VFIO_INTR > "\n"); > + eal_usage(prgname); > + return -1; > + } > + } > else if (!strcmp(lgopts[option_index].name, > OPT_CREATE_UIO_DEV)) { > internal_config.create_uio_dev = 1; > } > -- > 1.7.0.7 > >