Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp4164043imm; Tue, 29 May 2018 23:48:54 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJrbqR+TDWWTWtDB1IKBfD+7ATBxBFG/aDyRTGjGIeTxLgE3Qhz6xYnVCtZYpws7Okzq7zC X-Received: by 2002:a17:902:1aa:: with SMTP id b39-v6mr1651728plb.120.1527662934032; Tue, 29 May 2018 23:48:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527662934; cv=none; d=google.com; s=arc-20160816; b=IuvbdG5GwWvVe1RmcLebd82fYZKDa2LMu5gT6LtGslyWPUeT6PAkAbxYJvk5QiHR9b hJ+Wv6JthPjcBmkrH2Iqt8VUSVd4a/2IQgjCijHEJBvw+purPwHfsB8D/CxnXG/W+dw6 CGgT0ga69pv4XU0W1oSoRqOK2sVCUDptgOcpX1FMN/WiXDagb/Z8SlgSkZpOU8GHoFoM fYKOd1XSDbfJEZc/aDp6BCTIYs6mbbs0gD9HuwrpnKef8TsvGKatGVqS7wr1aNNCpYfQ RSgIrU0VYLSmJF41PwmqPGmtHcbA/t4+t4OhiM7tyKTWhLiy0dK0IxH3/G1w5ldRtzm/ 9Plg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dkim-signature :arc-authentication-results; bh=FjTWKx/aKVm+JuqiVgRe33+E5yzG0N6O0by4sZZT8TM=; b=d5lmzmFePd7vBve1oDqA1Eq5QMrvDYiJanz9Pca2LVMVlfmQWr61xp7NBI6LpnG8ex QQNNKO5HY5UqyIq5Riz/0SimwpeKxjlvpI/R2Hga1JYIcuV5nlJJ1mOzK9ykDUgltJUF 8//TzFpvmYRBsbPqr26k2NqdXavDw1GX6sqCAM/+RDne2/mYvPSZNrqU1TxIrFgulzB1 yOiwcCga8fnA6DK96sSCOQWQBKr+UkL+LdpaCc+bNg6kfaUau3vMrvj5o1ilsjdfDyJx lWaLCUUQ0I4N28Ti1vneLkZ05kCk9jS+3qR5PxlLrugQrwY7ypSNPPXDLoVtq19TcVLu n9FQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=lujnum0+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t5-v6si13709971plj.112.2018.05.29.23.48.26; Tue, 29 May 2018 23:48:53 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=lujnum0+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964986AbeE3Grw (ORCPT + 99 others); Wed, 30 May 2018 02:47:52 -0400 Received: from mail-lf0-f68.google.com ([209.85.215.68]:44211 "EHLO mail-lf0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935905AbeE3Gru (ORCPT ); Wed, 30 May 2018 02:47:50 -0400 Received: by mail-lf0-f68.google.com with SMTP id 36-v6so580754lfr.11; Tue, 29 May 2018 23:47:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding:content-language; bh=FjTWKx/aKVm+JuqiVgRe33+E5yzG0N6O0by4sZZT8TM=; b=lujnum0+owOCMGdM3FpyQE4d3mIIdxa9m1pyR84otSF+g1cSX7uiL6+mGfgtbeLEa6 hLJPPdm195Z5I5Wiqk0IHW4RUNzKf6EeLzzOi99wcIIF5xnGH0S6smgILY4KVQ6H1aqy 8r0zxpveceKAJjZ9T8Zst0ryxWo8cSH6kcxSoux0Ci4WdMeNCgMNd2NkEiz9UPgxNfDU o/TDv5TFcCkM8s63MHbHpiDskWuerbtAfkOctNT/epRan0NxUaw7sbyxtngiLUkXe2yH U0/qMwh/WjGjlcJM8HCSlwmMLcF9pOkOAhFCpXKPIu30Eqe5aLDctUQlfycyebGiW1Bq Ux6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=FjTWKx/aKVm+JuqiVgRe33+E5yzG0N6O0by4sZZT8TM=; b=RgsWruXsHaMoFe5k/1x1Nbv6z/nri5JY7poNXEXw+t7OItN00j/RvcZ5n1AqZG7pI/ pItohTOv4v5+RJaX9hRttQoiQsIug/Xn4JvdwV4ak+kNbvWmH9cLZieI523KrRENW3R2 n8y/BOK/UpeiwMjz/xDlsPM5gIWtFpZ+tozEcDe9wZNnO8rIAZLYFYe9MfySViqLydgy gyL1xwEtGcLw/T0ZpA++Y20PzZE68Im3VYaUPQh8BbtoJaQdUS8etidiSqq5rS3VTu/c VExropJYHHeTEmdS3Uc8J5uDhMJt/1OpWMACvNbJD16AddTWhHvmH/SbDuQporjMyPom eE3w== X-Gm-Message-State: ALKqPwcgw1uU7UjiW5eo6iW0/7vlcSD6FV2sfjUKiQVUiyJjHNBnLfB+ 3juKIqCyO3PlPXnrlaCwUmE= X-Received: by 2002:a19:9390:: with SMTP id w16-v6mr900338lfk.70.1527662868429; Tue, 29 May 2018 23:47:48 -0700 (PDT) Received: from [10.17.182.9] (ll-55.209.223.85.sovam.net.ua. [85.223.209.55]) by smtp.gmail.com with ESMTPSA id 141-v6sm5488948lfz.88.2018.05.29.23.47.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 29 May 2018 23:47:47 -0700 (PDT) Subject: Re: [PATCH 4/8] xen/gntdev: Allow mappings for DMA buffers To: Boris Ostrovsky , xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org, jgross@suse.com, konrad.wilk@oracle.com Cc: daniel.vetter@intel.com, dongwon.kim@intel.com, matthew.d.roper@intel.com, Oleksandr Andrushchenko References: <20180525153331.31188-1-andr2000@gmail.com> <20180525153331.31188-5-andr2000@gmail.com> <9f2999a8-7786-5811-bdf0-ff7f30301cf2@oracle.com> From: Oleksandr Andrushchenko Message-ID: Date: Wed, 30 May 2018 09:47:46 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: <9f2999a8-7786-5811-bdf0-ff7f30301cf2@oracle.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 05/30/2018 12:52 AM, Boris Ostrovsky wrote: > On 05/25/2018 11:33 AM, Oleksandr Andrushchenko wrote: >> >> struct unmap_notify { >> @@ -96,10 +104,28 @@ struct grant_map { >> struct gnttab_unmap_grant_ref *kunmap_ops; >> struct page **pages; >> unsigned long pages_vm_start; >> + >> +#ifdef CONFIG_XEN_GRANT_DMA_ALLOC >> + /* >> + * If dmabuf_vaddr is not NULL then this mapping is backed by DMA >> + * capable memory. >> + */ >> + >> + /* Device for which DMA memory is allocated. */ >> + struct device *dma_dev; >> + /* Flags used to create this DMA buffer: GNTDEV_DMABUF_FLAG_XXX. */ >> + bool dma_flags; > Again, I think most of the comments here can be dropped. Except possibly > for the flags. will drop most of those >> + /* Virtual/CPU address of the DMA buffer. */ >> + void *dma_vaddr; >> + /* Bus address of the DMA buffer. */ >> + dma_addr_t dma_bus_addr; >> +#endif >> }; >> >> static int unmap_grant_pages(struct grant_map *map, int offset, int pages); >> >> +static struct miscdevice gntdev_miscdev; >> + >> /* ------------------------------------------------------------------ */ >> >> static void gntdev_print_maps(struct gntdev_priv *priv, >> @@ -121,8 +147,26 @@ static void gntdev_free_map(struct grant_map *map) >> if (map == NULL) >> return; >> >> +#ifdef CONFIG_XEN_GRANT_DMA_ALLOC >> + if (map->dma_vaddr) { >> + struct gnttab_dma_alloc_args args; >> + >> + args.dev = map->dma_dev; >> + args.coherent = map->dma_flags & GNTDEV_DMA_FLAG_COHERENT; >> + args.nr_pages = map->count; >> + args.pages = map->pages; >> + args.vaddr = map->dma_vaddr; >> + args.dev_bus_addr = map->dma_bus_addr; >> + >> + gnttab_dma_free_pages(&args); >> + } else if (map->pages) { >> + gnttab_free_pages(map->count, map->pages); >> + } >> +#else >> if (map->pages) >> gnttab_free_pages(map->count, map->pages); >> +#endif >> + > } else > #endif >     if (map->pages) >         gnttab_free_pages(map->count, map->pages); > > > (and elsewhere) ok, just wasn't sure if it is ok to violate kernel coding style here ;) >> kfree(map->pages); >> kfree(map->grants); >> kfree(map->map_ops); > > >> >> diff --git a/include/uapi/xen/gntdev.h b/include/uapi/xen/gntdev.h >> index 6d1163456c03..2d5a4672f07c 100644 >> --- a/include/uapi/xen/gntdev.h >> +++ b/include/uapi/xen/gntdev.h >> @@ -200,4 +200,19 @@ struct ioctl_gntdev_grant_copy { >> /* Send an interrupt on the indicated event channel */ >> #define UNMAP_NOTIFY_SEND_EVENT 0x2 >> >> +/* >> + * Flags to be used while requesting memory mapping's backing storage >> + * to be allocated with DMA API. >> + */ >> + >> +/* >> + * The buffer is backed with memory allocated with dma_alloc_wc. >> + */ >> +#define GNTDEV_DMA_FLAG_WC (1 << 1) > > Is there a reason you are not using bit 0? No reason for that, will start from 0 > > -boris Thank you, Oleksandr >> + >> +/* >> + * The buffer is backed with memory allocated with dma_alloc_coherent. >> + */ >> +#define GNTDEV_DMA_FLAG_COHERENT (1 << 2) >> + >> #endif /* __LINUX_PUBLIC_GNTDEV_H__ */