From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 890BF2EAB72 for ; Thu, 15 Jan 2026 08:44:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768466660; cv=none; b=OOAr3XCtf/fgu6kn7cD9voKWqrlcrcKK+iiIgo0Vknc3KNcqe+uM6N0avdGq4bMLt5Xe3eAn8Cu3xtE8/EdOsE036YXtX146j0mpFFpJP0hm4tctqOPZhM/L/tMIXV5uLW8C/znwoasMQAb5kQPMluGBJ2VIZChYVAyb4iMVP+8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768466660; c=relaxed/simple; bh=qztr4yN9cDU2fYa+YAsxuBk5uaNmtfnLDjdgd2TKv5A=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=uMFuwoGitpfsFUztjdr30qa2eIAm8M8inoTSH/cqEK1Yy9HHbzoNhCU7J3piVSf/6h2DJGW8EPf1ew7N13ZRtPNSSRsfxyT+eiIMEJMXh5RgC8znGg01luQF4PcBvUVT7Jt3blHDO3uK+cd2iS0NFoxakwX1V/Od/WtW8uPq7/o= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=TjFzHMo/; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=Af0I631e; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="TjFzHMo/"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="Af0I631e" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1768466657; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3bvAtymdtyG51JQ1U1ePnSZyVkW4snaVL8Aa76RL2IA=; b=TjFzHMo/DfmnquBaWT2arM5S4ZeKagg+boMVITfD4eF+ep12yY9AAt/fGMV36TCF8+WRnh RJtmhiIwmaP6jrbMpeOgMXJMbaKTne107AO9E7s6qhg1pXS/BPKgyPvA7Fy6QWmGG/WgX/ sRADY/BMlqgacWrTbCTZfCDJU7zlF38= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-483-z_kBjDADPbGpcoVJB2og2Q-1; Thu, 15 Jan 2026 03:44:13 -0500 X-MC-Unique: z_kBjDADPbGpcoVJB2og2Q-1 X-Mimecast-MFC-AGG-ID: z_kBjDADPbGpcoVJB2og2Q_1768466652 Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-434302283dcso503553f8f.0 for ; Thu, 15 Jan 2026 00:44:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1768466652; x=1769071452; darn=vger.kernel.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=3bvAtymdtyG51JQ1U1ePnSZyVkW4snaVL8Aa76RL2IA=; b=Af0I631eV7/ksGMpBFVkybuErUvUF4yZdaboX2JuyE4ZL7Qirv6JeGpmqpZslJJ2RI 5+aZ818BtLxb2xO1KJouACD5OHo0yO5Xo7yrT/SAN07BxmhnJASId6LAJxOb+c1LYDBG YG4aVmbqZEd8QcFLHg/mDLWBP4FLdPVKU/RA4ddKOkXxlOFioiGm6aSxqYXA0ACcUSrY 2jQykPcy9pRKKZws3Lbs7dbmIrpMDVuwwnSfTk4s08WvVIfeKT8Pq1Jz3tXhQkfFAeuC S1BEz1X9pMIVXiP9Wm3Fkn0M9jVmHlYjbNgXyWgg7wRCU0cKX1G+ny8Sr3X9eo6kMylS srtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768466652; x=1769071452; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=3bvAtymdtyG51JQ1U1ePnSZyVkW4snaVL8Aa76RL2IA=; b=i7aI516bprx/iJBCVC3SSKvXt9C1G3NG6q3RC7jGsvLdTB+BOpvjpQgaw9UIEx+8pf rDoJDTuxehQbN6fH7wMfhPEqHnCM1SUNz/LZ8/0MJ477RlDC94Xhn0d9b1wPqTn6N5Xw LduXM3ayybkSkyIp06coKeYz8p9xpbKzxbmmdKSOWKly9lnw+32CXlfmnoI0Tip+VTFs Gq8SsfdASY4n9Xz6Iw/h2VPERjtJBXTcGFsIIkQV5zTDoh36lftCKVe6UzADDlznontv Chgiq2w7igIaUJGKCpfA0aUbz3JojCYgZoaboFmeXofsVLrnP9A4P/qhAXXIWDXPl+Eg VO/g== X-Forwarded-Encrypted: i=1; AJvYcCUStvP2EoWUA9i0FDaYX5qgQhQR7VDPoabsE3HmVAYDhnfSH6HgGu0/i84Wej04X2zqtZI1k7BS4H6cXxI=@vger.kernel.org X-Gm-Message-State: AOJu0YwFki7wBtf9tf/1ACzUSh/RL0MAzN5WLjsDjqKC2hAY4YCDVFsb gm4QXgfO+twdX5JMylnWQtNx5nDMfoXAOtUQji05NDXueJPzX5xyU/WzKLfKMulY4ZX313vExhL dHJlkPSLtKKaZmKebAzKIZigAwzoRzO+7k0vovQazBf7Q7rZhrpDwrhY0QKGPLfHhtw== X-Gm-Gg: AY/fxX61+aaRJLywlz9NNbBDhvY4Os0V6qogpQKzJaiq8aD5DEGahD8B0NlaSFESSmJ S/0ld6viJKBOp/PkqVO3TJnORCzXkKF3EoYxtLFSME0ZgAhbEwMYnipF/vmEJpZJBNqJZ15eKok aUdHeCadCAkVk29sUFKQ25NAHIeAYoQL4kbDB8WkF0i4fdQMD0q0cP8R7nBBzMBi6xSADLK7R1u YcDTLyKcdWGisIKsSfKG3wJqtuKdGfa0bFzpugIZeCUvwCIxtkVB5g+J6/SaMsnt2loGlulV/YW 4cUgNH5x4gOHXhddI5y/BbQG0ojzUirGh3h7Ij9dRxddX/llv3RJM5n7B4l1sIsvLVGZDpEjeC+ O90043YGqCesvDcpt9N/bcNc2EpnWlw== X-Received: by 2002:a5d:5885:0:b0:430:fdb8:8516 with SMTP id ffacd0b85a97d-4342c54ad96mr6607903f8f.35.1768466652254; Thu, 15 Jan 2026 00:44:12 -0800 (PST) X-Received: by 2002:a5d:5885:0:b0:430:fdb8:8516 with SMTP id ffacd0b85a97d-4342c54ad96mr6607865f8f.35.1768466651778; Thu, 15 Jan 2026 00:44:11 -0800 (PST) Received: from redhat.com (IGLD-80-230-35-22.inter.net.il. [80.230.35.22]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-434af6535ddsm4460853f8f.15.2026.01.15.00.44.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Jan 2026 00:44:11 -0800 (PST) Date: Thu, 15 Jan 2026 03:44:08 -0500 From: "Michael S. Tsirkin" To: Jason Wang Cc: Eugenio =?iso-8859-1?Q?P=E9rez?= , Maxime Coquelin , Xuan Zhuo , virtualization@lists.linux.dev, Stefano Garzarella , Yongji Xie , linux-kernel@vger.kernel.org, Cindy Lu , Laurent Vivier Subject: Re: [PATCH v12 09/13] vduse: take out allocations from vduse_dev_alloc_coherent Message-ID: <20260115034348-mutt-send-email-mst@kernel.org> References: <20260114184839.926884-1-eperezma@redhat.com> <20260114184839.926884-10-eperezma@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: On Thu, Jan 15, 2026 at 04:22:49PM +0800, Jason Wang wrote: > On Thu, Jan 15, 2026 at 2:49 AM Eugenio Pérez wrote: > > > > The function vduse_dev_alloc_coherent will be called under rwlock in > > next patches. Make it out of the lock to avoid increasing its fail > > rate. > > > > Signed-off-by: Eugenio Pérez > > --- > > v12: > > * Avoid free_pages_exact(NULL, size) in case vduse_domain_alloc_coherent > > fails (MST). > > > > v11: Remove duplicated call to free_pages_exact (Jason). > > --- > > drivers/vdpa/vdpa_user/iova_domain.c | 24 +++++++----------------- > > drivers/vdpa/vdpa_user/iova_domain.h | 5 ++--- > > drivers/vdpa/vdpa_user/vduse_dev.c | 17 +++++++++++------ > > 3 files changed, 20 insertions(+), 26 deletions(-) > > > > diff --git a/drivers/vdpa/vdpa_user/iova_domain.c b/drivers/vdpa/vdpa_user/iova_domain.c > > index 309cd5a039d1..0a9f668467a8 100644 > > --- a/drivers/vdpa/vdpa_user/iova_domain.c > > +++ b/drivers/vdpa/vdpa_user/iova_domain.c > > @@ -493,17 +493,15 @@ void vduse_domain_unmap_page(struct vduse_iova_domain *domain, > > vduse_domain_free_iova(iovad, dma_addr, size); > > } > > > > -void *vduse_domain_alloc_coherent(struct vduse_iova_domain *domain, > > - size_t size, dma_addr_t *dma_addr, > > - gfp_t flag) > > +dma_addr_t vduse_domain_alloc_coherent(struct vduse_iova_domain *domain, > > + size_t size, void *orig) > > { > > struct iova_domain *iovad = &domain->consistent_iovad; > > unsigned long limit = domain->iova_limit; > > dma_addr_t iova = vduse_domain_alloc_iova(iovad, size, limit); > > - void *orig = alloc_pages_exact(size, flag); > > > > - if (!iova || !orig) > > - goto err; > > + if (!iova) > > + return DMA_MAPPING_ERROR; > > > > spin_lock(&domain->iotlb_lock); > > if (vduse_iotlb_add_range(domain, (u64)iova, (u64)iova + size - 1, > > @@ -514,17 +512,12 @@ void *vduse_domain_alloc_coherent(struct vduse_iova_domain *domain, > > } > > spin_unlock(&domain->iotlb_lock); > > > > - *dma_addr = iova; > > + return iova; > > > > - return orig; > > err: > > - *dma_addr = DMA_MAPPING_ERROR; > > - if (orig) > > - free_pages_exact(orig, size); > > - if (iova) > > - vduse_domain_free_iova(iovad, iova, size); > > + vduse_domain_free_iova(iovad, iova, size); > > > > - return NULL; > > + return DMA_MAPPING_ERROR; > > } > > > > void vduse_domain_free_coherent(struct vduse_iova_domain *domain, size_t size, > > @@ -533,7 +526,6 @@ void vduse_domain_free_coherent(struct vduse_iova_domain *domain, size_t size, > > struct iova_domain *iovad = &domain->consistent_iovad; > > struct vhost_iotlb_map *map; > > struct vdpa_map_file *map_file; > > - phys_addr_t pa; > > > > spin_lock(&domain->iotlb_lock); > > map = vhost_iotlb_itree_first(domain->iotlb, (u64)dma_addr, > > @@ -545,12 +537,10 @@ void vduse_domain_free_coherent(struct vduse_iova_domain *domain, size_t size, > > map_file = (struct vdpa_map_file *)map->opaque; > > fput(map_file->file); > > kfree(map_file); > > - pa = map->addr; > > vhost_iotlb_map_free(domain->iotlb, map); > > spin_unlock(&domain->iotlb_lock); > > > > vduse_domain_free_iova(iovad, dma_addr, size); > > - free_pages_exact(phys_to_virt(pa), size); > > } > > > > static vm_fault_t vduse_domain_mmap_fault(struct vm_fault *vmf) > > diff --git a/drivers/vdpa/vdpa_user/iova_domain.h b/drivers/vdpa/vdpa_user/iova_domain.h > > index 081f06c52cdc..e50e55d1396f 100644 > > --- a/drivers/vdpa/vdpa_user/iova_domain.h > > +++ b/drivers/vdpa/vdpa_user/iova_domain.h > > @@ -65,9 +65,8 @@ void vduse_domain_unmap_page(struct vduse_iova_domain *domain, > > dma_addr_t dma_addr, size_t size, > > enum dma_data_direction dir, unsigned long attrs); > > > > -void *vduse_domain_alloc_coherent(struct vduse_iova_domain *domain, > > - size_t size, dma_addr_t *dma_addr, > > - gfp_t flag); > > +dma_addr_t vduse_domain_alloc_coherent(struct vduse_iova_domain *domain, > > + size_t size, void *orig); > > > > void vduse_domain_free_coherent(struct vduse_iova_domain *domain, size_t size, > > dma_addr_t dma_addr, unsigned long attrs); > > diff --git a/drivers/vdpa/vdpa_user/vduse_dev.c b/drivers/vdpa/vdpa_user/vduse_dev.c > > index 0e3cf5128ad0..6dba1f3224d9 100644 > > --- a/drivers/vdpa/vdpa_user/vduse_dev.c > > +++ b/drivers/vdpa/vdpa_user/vduse_dev.c > > @@ -916,23 +916,27 @@ static void *vduse_dev_alloc_coherent(union virtio_map token, size_t size, > > { > > struct vduse_dev *vdev; > > struct vduse_iova_domain *domain; > > - unsigned long iova; > > void *addr; > > > > *dma_addr = DMA_MAPPING_ERROR; > > if (!token.group) > > return NULL; > > > > - vdev = token.group->dev; > > - domain = vdev->domain; > > - addr = vduse_domain_alloc_coherent(domain, size, > > - (dma_addr_t *)&iova, flag); > > + addr = alloc_pages_exact(size, flag); > > if (!addr) > > return NULL; > > > > - *dma_addr = (dma_addr_t)iova; > > + vdev = token.group->dev; > > + domain = vdev->domain; > > + *dma_addr = vduse_domain_alloc_coherent(domain, size, addr); > > + if (*dma_addr == DMA_MAPPING_ERROR) > > + goto err; > > > > return addr; > > + > > +err: > > + free_pages_exact(addr, size); > > + return NULL; > > } > > I think the code tries to hide the iova domain specific things (e.g > mappings and DMA_MAPPING_ERROR) from vduse core. Could we find a way > to stick to that? > > Thanks what do you suggest more spefically though? > > > > static void vduse_dev_free_coherent(union virtio_map token, size_t size, > > @@ -949,6 +953,7 @@ static void vduse_dev_free_coherent(union virtio_map token, size_t size, > > domain = vdev->domain; > > > > vduse_domain_free_coherent(domain, size, dma_addr, attrs); > > + free_pages_exact(vaddr, size); > > } > > > > static bool vduse_dev_need_sync(union virtio_map token, dma_addr_t dma_addr) > > -- > > 2.52.0 > >