From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wi0-f179.google.com (mail-wi0-f179.google.com [209.85.212.179]) by dpdk.org (Postfix) with ESMTP id C0862C522 for ; Thu, 18 Jun 2015 10:08:14 +0200 (CEST) Received: by wicnd19 with SMTP id nd19so52187967wic.1 for ; Thu, 18 Jun 2015 01:08:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to:content-type; bh=/a97j0XTBPCVyYXmRwDkQVl0aY8XyVG4pphoWo1unUg=; b=UEpKYP5hFccXj3jvRAlnA1wf8mbCtptyg/6GDgJly+GkhEAw6MEl/UNTfrzeIpH+4m JP750O51vXhpmSQQzr0Z+ADtpY9wD7NVGtC1rQjVYrRnv0In0mxfIUwg6r9Cc7i35R+L DaXB5CWZrci4snxZfLjoIlm3N7ggmuAJ+bgef/WAxSOIWFkvNrBUJ2kEjE2h39ArVQbO PftFsVBwQVG70unZYWXfPcHG5wb70WOygSVsvEAxxzaRaTpsDDV+0r/KRkHWRmQ7TnvC dqYHtEN9NZzDpjpe2bfkIqgwQ44b+j6fOUCNu8C6EXN9YhwhFNDIUuaSFtivzBPNIyeG vong== X-Received: by 10.194.205.101 with SMTP id lf5mr13738305wjc.37.1434614894622; Thu, 18 Jun 2015 01:08:14 -0700 (PDT) MIME-Version: 1.0 Received: by 10.194.56.199 with HTTP; Thu, 18 Jun 2015 01:07:33 -0700 (PDT) From: Umar Farooq Date: Thu, 18 Jun 2015 13:07:33 +0500 Message-ID: To: dev@dpdk.org Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: [dpdk-dev] EAL PCI dev problem when using .a file to compile app 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, 18 Jun 2015 08:08:15 -0000 Hi I am trying to write an application "abc" using DPDK 2.0.0 that calls rte_eal_init to test if EAL is setup correctly. I have run "helloworld" and "l2fwd" applications and they run fine on my setup. A new thing that i am trying is to create a libdpdk.a file using build target "x86_64-native-linuxapp-gcc" and use it to compile my application. The application simply calls "rte_eal_init(argc, argv)" and exits. It compiles successfully and runs but the EAL doesn't initialize the PCI devices. The flow is this: 1. The method to create libdpdk.a is by using this shell script: #bin/bash rm -f libdpdk.a cp /path_to/dpdk/x86_64-native-linuxapp-gcc/lib/* . DPDK_LIBS=$(ls *.a) for file in *.a; do ar -x "$file" done ar -rcs libdpdk.a *.o 2. Application is compiled using the command: gcc abc.c /path_to/dpdk/libdpdk.a -I/path_to/dpdk/x86_64-native-linuxapp-gcc/include -lpthread -lrt -ldl -mssse3 -lm -o abc 3. After the successful compilation, the app is run using the command: ./abc -c c -n 4 -b 00:03.0 4. Application calls rte_eal_init(argc, argv), which calls rte_eal_pci_probe(), which calls pci_probe_all_drivers(). 5. In the last function called, pci_probe_all_drivers(struct rte_pci_device *dev) in dpdk/lib/librte_eal/common/eal_common_pci.c file, the control never enters the loop: TAILQ_FOREACH(dr, &pci_driver_list, next) { rc = rte_eal_pci_probe_one_driver(dr, dev); if (rc < 0) /* negative value is an error */ return -1; if (rc > 0) /* positive value means driver not found */ continue; return 0; } and the function always returns 1. If the application is compiled using normal Makefile as used by l2fwd or helloworld example apps, this problem doesn't occur and application calls the "rte_eal_pci_probe_one_driver(dr, dev)" in "TAILQ_FOREACH" loop. The question is what am I missing while creating the libdpdk.a and compiling application using it? Thanks for your time. Regards Umar