From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 71B9A38C2BB for ; Tue, 17 Mar 2026 20:59:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773781150; cv=none; b=ZfYWNH3cpP8bMf/UqMRIBoanO3Fahn+/5K2XrNqGhdhdqokxb+SDUc9fVu9ADjpqXGu4cbzg2AXgAynC+K5hlFmSUdsxr7iLNSxABYP2wa3L3tY0In3BTsClsiNE1iChgRQYPEBOvnWH4Pcrm7jVrXbSpplJ58JfNpC7eU27x9Y= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773781150; c=relaxed/simple; bh=Gg0x70YeYeS/hvsK6d03WDxTrHh/HV8HIwkK82kwBL0=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=uv0yJ5Li5XCEh6jGIYSRnlDGD1WwZWqhhx884OQrGsa3jak8m42QXRuUt6dGpdl5CmADlCWpRa5wlnWsz5Oi4Cj6RPnHt3Btq9rKjR6AAcWFae7QTyVTgfmj3z8IfpsOQ8SAXMZZrRAB4SVpbiWdjgugzzXQ9OpEm1COh8A6MK4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=qpgAX0bW; arc=none smtp.client-ip=209.85.214.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="qpgAX0bW" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-2b052ec7176so9025ad.1 for ; Tue, 17 Mar 2026 13:59:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1773781149; x=1774385949; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=XXz7CkkQTRz+WIdQ5aQKBGXyXXsdoAFd36PRskCjU8s=; b=qpgAX0bW+78vn6WG8gxjW+m62QbE19IOPzAYzGZYix1vLaGMTzxYE61M+zGuYA3Q5k pRVs3EvuKYGKuPEENYM32MVH9/4w5hN4AnX+dm/eTfpR2wPxDt2NfDxfA+P7bWEhVu6Q DM3uFLh5OhoiONjyf5wk7Ds5MrUuKgOCCtdlk96H5ZsruLXSLiuSB2gr35ibJhcA1y/S biok2x8+tgrAifazjDWXnZJ3kMR1YJq+WITKOokIXcKIFPhOzRgpunRMI5Lk7RXQzMm9 QzVwO0svBALsj8V4GRS61Ub40b38Snn6bRvESfq1OmB3l0oE96aAEtPOHB4uTmIuQ4pA oAwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773781149; x=1774385949; h=in-reply-to: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=XXz7CkkQTRz+WIdQ5aQKBGXyXXsdoAFd36PRskCjU8s=; b=FvCJ81FFCN3aTo4kYJ1vAk4ikx2VwAWcVHSo6u3xui0dpk5AOg8lhll7mA5aqEDZFA ebsxfxw4li8s66pymOCTVzHrNP6oHHJNE0CBnDumFTBIn1TDbp1pzkvjeEQ/4Evnc2nZ sOpZHgVpF9sYSO32qP/+QpQe1+QDAqnA6MjXq0wBkWuVTfLTEiUCFkR706QH7aykkSoy 6K4SPsQ2cUnypFS8MblyUu4Oh2oCCCoMEEOn8lRgTL7hzcUQzZLQlJp7Dp5ywEeVIMZ+ vTtMRgqUqupcGsuYgnWOkEXUqU8e4CwxDDkZVQtUP+fEP85/AANoAdkQ+5dOse5IWA4N tGow== X-Forwarded-Encrypted: i=1; AJvYcCWwZfyW3ZPmwP2VfP3ZFhuAASAiC5n8XW2Cie/rbMHAwrX5x8jVUeDPzPX27oH0nshRMaI+uPRaiBCVrRc=@vger.kernel.org X-Gm-Message-State: AOJu0Yz8u3SALPpW8H+qk8emOna5ZZQl3MITqUAZG56ZVT7XHoLp2fX7 jCSYc+KVEAhsVd54dnzPC1VtoTj/A5PacK1v+0HRNLNxT/zhWYZuYuUifsUPWAk4XQ== X-Gm-Gg: ATEYQzzPYRs9Uuqh/wqWHCy0BSaBrLQ4SUYXJo6OJVcectYU/R4X0E9T0r4J5i1goFu FFJ2RjUMCbSqjuqgAEoCWo9H7baoIYBPTj9pUNGdl6Lq23APianJWnJ6DybaLNAGScMwhKcMt7b 6OGu8x7NZdg456CeCIdPC5gZhN87+K/GhvYTbl5g1IH20TZLQ72gbEVkBkgYPIvYrc8aaVODD7n GR3URQchSIF9Wqfe+LuMrKuYb4BP3zxOhKEylTeH76GB86PQB6oHf/qRrsV1zDoffO0niMQdNrt n4Z0WpPQ4zZlcuNLIHCPXZr6AQqY31pxjmJOHuJkJVnB79GD/TNKPEi+9M48Xot6YzAaU/D+CJW VY1RScqwaWv7WPwRFlgQP0mAgNH7/sQj9szEEXHp50DXLaTpA/04fd0DLWp/5V1cYxg2nOnhWkY CmZiHdLq9zk458pSC+n1+pGR3nfZc0ef/N1P+Akzu4mcgN4aOXfO61P4F/Cg== X-Received: by 2002:a17:903:184:b0:2ad:6f9b:3b2e with SMTP id d9443c01a7336-2b06f8b55c8mr253645ad.23.1773781148322; Tue, 17 Mar 2026 13:59:08 -0700 (PDT) Received: from google.com (60.89.247.35.bc.googleusercontent.com. [35.247.89.60]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82a6bee9a14sm357119b3a.53.2026.03.17.13.59.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 17 Mar 2026 13:59:07 -0700 (PDT) Date: Tue, 17 Mar 2026 13:59:03 -0700 From: Vipin Sharma To: Samiullah Khawaja Cc: David Woodhouse , Lu Baolu , Joerg Roedel , Will Deacon , Jason Gunthorpe , Robin Murphy , Kevin Tian , Alex Williamson , Shuah Khan , iommu@lists.linux.dev, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Saeed Mahameed , Adithya Jayachandran , Parav Pandit , Leon Romanovsky , William Tu , Pratyush Yadav , Pasha Tatashin , David Matlack , Andrew Morton , Chris Li , Pranjal Shrivastava , YiFei Zhu Subject: Re: [PATCH 04/14] iommu/pages: Add APIs to preserve/unpreserve/restore iommu pages Message-ID: <20260317202925.GA2582517.vipinsh@google.com> References: <20260203220948.2176157-1-skhawaja@google.com> <20260203220948.2176157-5-skhawaja@google.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=us-ascii Content-Disposition: inline In-Reply-To: <20260203220948.2176157-5-skhawaja@google.com> On Tue, Feb 03, 2026 at 10:09:38PM +0000, Samiullah Khawaja wrote: > + > +void iommu_unpreserve_pages(struct iommu_pages_list *list, int count) > +{ > + struct ioptdesc *iopt; > + > + if (!count) > + return; > + > + /* If less than zero then unpreserve all pages. */ > + if (count < 0) > + count = 0; > + > + list_for_each_entry(iopt, &list->pages, iopt_freelist_elm) { > + kho_unpreserve_folio(ioptdesc_folio(iopt)); > + if (count > 0 && --count == 0) > + break; > + } > +} I see you are trying to have common function for error handling in iommu_preserve_pages() down and unpreserving in the next patch with overloaded meaning of count. < 0 means unpreserve all of the pages = 0 means do nothing > 0 unpreserve these many pages. It seems non-intuitive to me and code also end up having multiple ifs. I will recommend to just have this function go through all of the pages without passing count argument. In iommu_preserve_pages() function down, handle the error case with a "goto err" statement. If this is the way things happen in iommu codebase feel free to ignore this suggestion. > +EXPORT_SYMBOL_GPL(iommu_unpreserve_pages); > + > +void iommu_restore_page(u64 phys) > +{ > + struct ioptdesc *iopt; > + struct folio *folio; > + unsigned long pgcnt; > + unsigned int order; > + > + folio = kho_restore_folio(phys); > + BUG_ON(!folio); > + > + iopt = folio_ioptdesc(folio); > + > + order = folio_order(folio); > + pgcnt = 1UL << order; > + mod_node_page_state(folio_pgdat(folio), NR_IOMMU_PAGES, pgcnt); > + lruvec_stat_mod_folio(folio, NR_SECONDARY_PAGETABLE, pgcnt); Above two functions are also used in other two places in this file, lets create a common function for these two operations. > +} > +EXPORT_SYMBOL_GPL(iommu_restore_page); > +