X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fplugins%2Fdpdk%2Fmain.c;h=9781d0ed7f0a6d0d6db56bb10160d352f5bcf251;hb=HEAD;hp=2bea10185cd4b1fcc24609af07cb347cf91730d5;hpb=642829de7958d5cd9c1c88f9845385882a7c211d;p=vpp.git diff --git a/src/plugins/dpdk/main.c b/src/plugins/dpdk/main.c index 2bea10185cd..9781d0ed7f0 100644 --- a/src/plugins/dpdk/main.c +++ b/src/plugins/dpdk/main.c @@ -13,13 +13,6 @@ * limitations under the License. */ -#include -#include -#include -#include -#include -#include - #include #include #include @@ -79,77 +72,20 @@ rte_delay_us_override_cb (unsigned us) static clib_error_t * dpdk_main_init (vlib_main_t * vm) { - dpdk_main_t * dm = &dpdk_main; clib_error_t * error = 0; - dm->vlib_main = vm; - dm->vnet_main = vnet_get_main (); - - if ((error = vlib_call_init_function (vm, dpdk_init))) - return error; - /* register custom delay function */ rte_delay_us_callback_register (rte_delay_us_override_cb); return error; } -VLIB_INIT_FUNCTION (dpdk_main_init); - - -clib_error_t * -dpdk_early_init (vlib_main_t *vm) +VLIB_INIT_FUNCTION (dpdk_main_init) = { - int fd = -1; - u64 *pt = 0; - clib_error_t *err = 0; - clib_mem_vm_alloc_t alloc = { 0 }; - - /* check if pagemap is accessible - if we get zero result - dpdk will not be able to get physical memory address and game is over - unless we have IOMMU */ - pt = clib_mem_vm_get_paddr (&pt, min_log2 (sysconf (_SC_PAGESIZE)), 1); - if (pt && pt[0]) - goto check_hugetlb; - - if ((fd = open ("/dev/vfio/vfio", O_RDWR)) == -1) - goto error; - - if (ioctl (fd, VFIO_GET_API_VERSION) != VFIO_API_VERSION) - goto error; - - /* if we have type 1 IOMMU page map is not needed */ - if (ioctl (fd, VFIO_CHECK_EXTENSION, VFIO_TYPE1_IOMMU) != 1) - goto error; - -check_hugetlb: - alloc.flags = CLIB_MEM_VM_F_SHARED | CLIB_MEM_VM_F_HUGETLB | CLIB_MEM_VM_F_HUGETLB_PREALLOC; - alloc.size = 1; - - if ((err = clib_mem_vm_ext_alloc (&alloc))) - { - clib_error_free (err); - goto error; - } - else - clib_mem_vm_ext_free (&alloc); - - goto done; - -error: - err = clib_error_return (0, "access to physical devices is not allowed"); - -done: - if (fd != -1) - close (fd); - vec_free (pt); - return err; -} + .runs_after = VLIB_INITS("dpdk_init"), +}; -/* *INDENT-OFF* */ VLIB_PLUGIN_REGISTER () = { .version = VPP_BUILD_VER, .description = "Data Plane Development Kit (DPDK)", - .early_init = "dpdk_early_init", }; -/* *INDENT-ON* */