From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by dpdk.org (Postfix) with ESMTP id 5CF4D374C for ; Thu, 28 Feb 2019 15:41:25 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga106.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 28 Feb 2019 06:41:24 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,423,1544515200"; d="scan'208";a="130097807" Received: from aburakov-mobl1.ger.corp.intel.com (HELO [10.237.220.83]) ([10.237.220.83]) by orsmga003.jf.intel.com with ESMTP; 28 Feb 2019 06:41:21 -0800 To: Shahaf Shuler , yskoh@mellanox.com, thomas@monjalon.net, ferruh.yigit@intel.com, nhorman@tuxdriver.com, gaetan.rivet@6wind.com Cc: dev@dpdk.org References: From: "Burakov, Anatoly" Message-ID: Date: Thu, 28 Feb 2019 14:41:20 +0000 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.5.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Subject: Re: [dpdk-dev] [PATCH v2 3/6] bus: introduce device level DMA memory mapping X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Feb 2019 14:41:25 -0000 On 28-Feb-19 12:14 PM, Burakov, Anatoly wrote: > On 21-Feb-19 2:50 PM, Shahaf Shuler wrote: >> The DPDK APIs expose 3 different modes to work with memory used for DMA: >> >> 1. Use the DPDK owned memory (backed by the DPDK provided hugepages). >> This memory is allocated by the DPDK libraries, included in the DPDK >> memory system (memseg lists) and automatically DMA mapped by the DPDK >> layers. >> >> 2. Use memory allocated by the user and register to the DPDK memory >> systems. Upon registration of memory, the DPDK layers will DMA map it >> to all needed devices. After registration, allocation of this memory >> will be done with rte_*malloc APIs. >> >> 3. Use memory allocated by the user and not registered to the DPDK memory >> system. This is for users who wants to have tight control on this >> memory (e.g. avoid the rte_malloc header). >> The user should create a memory, register it through rte_extmem_register >> API, and call DMA map function in order to register such memory to >> the different devices. >> >> The scope of the patch focus on #3 above. >> >> Currently the only way to map external memory is through VFIO >> (rte_vfio_dma_map). While VFIO is common, there are other vendors >> which use different ways to map memory (e.g. Mellanox and NXP). >> >> The work in this patch moves the DMA mapping to vendor agnostic APIs. >> Device level DMA map and unmap APIs were added. Implementation of those >> APIs was done currently only for PCI devices. >> >> For PCI bus devices, the pci driver can expose its own map and unmap >> functions to be used for the mapping. In case the driver doesn't provide >> any, the memory will be mapped, if possible, to IOMMU through VFIO APIs. >> >> Application usage with those APIs is quite simple: >> * allocate memory >> * call rte_extmem_register on the memory chunk. >> * take a device, and query its rte_device. >> * call the device specific mapping function for this device. >> >> Future work will deprecate the rte_vfio_dma_map and rte_vfio_dma_unmap >> APIs, leaving the rte device APIs as the preferred option for the user. >> >> Signed-off-by: Shahaf Shuler >> --- > > > >> + >> +    if (!pdev || !pdev->driver) { >> +        rte_errno = EINVAL; >> +        return -rte_errno; >> +    } > > We could put a check in here to see if the memory has been registered > with DPDK. Just call rte_mem_virt2memseg_list(addr) - if it returns > NULL, the memory wasn't registered, so you can throw an error. Not sure > of appropriate errno in that case - ENODEV? EINVAL? Apologies - i meant to delete that, but hit one ctrl+Z too many :( -- Thanks, Anatoly