From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf0-f42.google.com (mail-lf0-f42.google.com [209.85.215.42]) by dpdk.org (Postfix) with ESMTP id E0F495A35 for ; Thu, 12 May 2016 18:34:29 +0200 (CEST) Received: by mail-lf0-f42.google.com with SMTP id u64so75144852lff.3 for ; Thu, 12 May 2016 09:34:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to; bh=ZkRXgoUttQgj8uPqCUaoW/5vqWHbqzSI4sYuafEtuBM=; b=D20yk4MAHbOb2W5JasZlOPaKI1d/nAqfZ/apHYxHvsqXHNj5rZP77QPYD0X+zO0Wkv 4Y5u2z0UXf3ZuosFFSTIb0TF+wWuzOOkjpgEH6Bd+Sv2eGdaUlWOKlkI62AFqbLwgjsL 02Py9UZbObDzu+W5V+IfUdzisKcr8NbmXHHNqtvMI5lV3xzlNBWbsSQeNGxhprtXdGFQ fb29w+dAwW9vVjL37vtcuz4f9ngktLAbqMGENwl3nsXLgwk0qwdPXK9cZIQhMIpj4cOo tD+TYDfeuyLg3+dMxVJh0G8PHHf5qaTErMUIreoACwqcxjxB5Tb4d1aFtq3+nP9icHfa Jf8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to; bh=ZkRXgoUttQgj8uPqCUaoW/5vqWHbqzSI4sYuafEtuBM=; b=jhwkAxYljfSdoRohsMLLyKhSUlXtn5XsPYK+HR1nCSDgthcqIZF1DHSSyum1bWUEcH 7bc3/p2z7NOvPIng9g0zqYnx9DJh8+q7FdEAT6cQRUsBOHDWhw5tXAe/S6ZhPzgL1hWs 2xJICG1cQNV/6aM605FYO7sheCbKKjOgF6FNR/9fKN0Y8sFLzfhqpAKko2gA+TshghEI zCQJ0ax8/JPO6xEXjsTG/vAlJCCuGIuIozjAytlJQH/uBeC8CYVvzFxr7wGplPm9bh97 fJPWbU6tB2I6p4OcS35ZIOAtoKKbWHXaeXVs0FdpA+BwhmLuZdsY9AS4V0X1hB4SYaJk /k7w== X-Gm-Message-State: AOPr4FU2TIO+kZgnuhtdPblD5V7DtnJQpBI9xnj6wzUDiMZWg960UwP/taR+CJNUAkI8Zo9KcT8RnZwuJjmSNA== MIME-Version: 1.0 X-Received: by 10.25.154.74 with SMTP id c71mr4397603lfe.111.1463070869536; Thu, 12 May 2016 09:34:29 -0700 (PDT) Received: by 10.25.15.207 with HTTP; Thu, 12 May 2016 09:34:29 -0700 (PDT) Date: Thu, 12 May 2016 09:34:29 -0700 Message-ID: From: Vincent Li To: dev@dpdk.org Content-Type: text/plain; charset=UTF-8 Subject: [dpdk-dev] virtio pmd failed in pci probing 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: Thu, 12 May 2016 16:34:30 -0000 Hi I am testing mTCP https://github.com/eunyoung14/mtcp with dpdk-16.04 on KVM guest and it appears the virtio pmd fail to load, detail info below: # ./tools/dpdk_nic_bind.py --status Network devices using DPDK-compatible driver ============================================ 0000:00:07.0 'Virtio network device' drv=igb_uio unused= Network devices using kernel driver =================================== 0000:00:03.0 'Virtio network device' if= drv=virtio-pci unused=igb_uio 0000:00:08.0 'Virtio network device' if= drv=virtio-pci unused=igb_uio in mtcp/src/io_module.c, I have (I hard code the whiltelist to make it easy to test for me): sprintf(whitelist, "%s", "0000:00:07.0"); /* initialize the rte env first, what a waste of implementation effort! */ char *argv[] = {"", "-c", cpumaskbuf, "-w", whitelist, "-n", mem_channels, "--proc-type=auto", "" }; const int argc = 8; /* * re-set getopt extern variable optind. * this issue was a bitch to debug * rte_eal_init() internally uses getopt() syscall * mtcp applications that also use an `external' getopt * will cause a violent crash if optind is not reset to zero * prior to calling the func below... * see man getopt(3) for more details */ optind = 0; /* initialize the dpdk eal env */ ret = rte_eal_init(argc, argv); if (ret < 0) rte_exit(EXIT_FAILURE, "Invalid EAL args!\n"); /* give me the count of 'detected' ethernet ports */ num_devices = rte_eth_dev_count(); if (num_devices == 0) { rte_exit(EXIT_FAILURE, "No Ethernet port!\n"); } in dpdk-16.04/lib/librte_eal/common/eal_common_pci.c rte_eal_pci_probe_one_driver, I added debug line below: /* * If vendor/device ID match, call the devinit() function of the * driver. */ static int rte_eal_pci_probe_one_driver(struct rte_pci_driver *dr, struct rte_pci_device *dev) { int ret; const struct rte_pci_id *id_table; RTE_LOG(DEBUG, EAL, " dev->id.vendor_id:dev->id.device_id dr->name %x:%x %s\n", dev->id.vendor_id, dev->id.device_id, dr->name); when I run mTCP app as below, it says "No Ethernet port!", please note that the debug line did not show rte_virtio_pmd, why? is it because virtio pmd lack of vendor_id/device_id implementation? EAL: WARNING: cpu flags constant_tsc=yes nonstop_tsc=no -> using unreliable clock cycles ! EAL: Master lcore 0 is ready (tid=dca0e900;cpuset=[0]) EAL: dev->id.vendor_id:dev->id.device_id dr->name 1af4:1000 rte_vmxnet3_pmd EAL: dev->id.vendor_id:dev->id.device_id dr->name 1af4:1000 rte_i40e_pmd EAL: dev->id.vendor_id:dev->id.device_id dr->name 1af4:1000 rte_i40evf_pmd EAL: dev->id.vendor_id:dev->id.device_id dr->name 1af4:1000 rte_ixgbe_pmd EAL: dev->id.vendor_id:dev->id.device_id dr->name 1af4:1000 rte_ixgbevf_pmd EAL: dev->id.vendor_id:dev->id.device_id dr->name 1af4:1000 rte_igb_pmd EAL: dev->id.vendor_id:dev->id.device_id dr->name 1af4:1000 rte_igbvf_pmd EAL: dev->id.vendor_id:dev->id.device_id dr->name 1af4:1000 rte_em_pmd pci_probe_all_drivers ret: 1 devargs not NULL and whitelisted EAL: Error - exiting with code: 1 Cause: No Ethernet port! dpdk testpmd app detects the ethernet port fine, here is the testpmd output (Note here the debug line shows rte_virtio_pmd): ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 -w 0000:00:07.0 -- -i EAL: Master lcore 0 is ready (tid=e9c98900;cpuset=[0]) EAL: lcore 3 is ready (tid=a69f6700;cpuset=[3]) EAL: lcore 2 is ready (tid=a71f7700;cpuset=[2]) EAL: lcore 1 is ready (tid=a79f8700;cpuset=[1]) EAL: dev->id.vendor_id:dev->id.device_id dr->name 1af4:1000 rte_vmxnet3_pmd EAL: dev->id.vendor_id:dev->id.device_id dr->name 1af4:1000 rte_virtio_pmd EAL: PCI device 0000:00:07.0 on NUMA socket -1 EAL: probe driver: 1af4:1000 rte_virtio_pmd EAL: PCI memory mapped at 0x7fabe8a00000 I am able to workaround this by compiling dpdk as shared library for mTCP and use '-d' to load librte_pmd_virtio.so explicitly. it looks to me there isn't much difference between how testpmd and mTCP invokes dpdk, it is straightforward rte_eal_init(argc, argv) and rte_eth_dev_count() is there any potential bug in the implementation of virtio pmd in pci probing ? Thanks!