From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id C2C79D75E35 for ; Fri, 22 Nov 2024 12:38:23 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 405136B00B1; Fri, 22 Nov 2024 07:38:23 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 3B4696B00B2; Fri, 22 Nov 2024 07:38:23 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 206A76B00B3; Fri, 22 Nov 2024 07:38:23 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 031D26B00B1 for ; Fri, 22 Nov 2024 07:38:22 -0500 (EST) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id ACB17141164 for ; Fri, 22 Nov 2024 12:38:22 +0000 (UTC) X-FDA: 82813681272.03.20D5D8C Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf25.hostedemail.com (Postfix) with ESMTP id 49CC4A0011 for ; Fri, 22 Nov 2024 12:37:41 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=hnn8X4TG; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf25.hostedemail.com: domain of pbonzini@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=pbonzini@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1732279007; h=from:from:sender: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:dkim-signature; bh=AOkxIt1AHITD8TmVq6RWJQXe+1uYkCgTbrbFwt/v6nM=; b=J7IAbD28qQ6acxCMjZCt8xKndTkvEj/grZWR/wyfvBjammPqxh951GnqG7EieoQ5frq0Kj FvFVUoJRcULtzFy4B7E7rAsDyBzqBkpbjDScisnXdf9uzhxpJi43bkJc2hLknvlHAeekum 5UZOVGbFSWMz0VfgaXuFvLoKpv8Wc+A= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=hnn8X4TG; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf25.hostedemail.com: domain of pbonzini@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=pbonzini@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1732279007; a=rsa-sha256; cv=none; b=fFWTPW94KfLHYCuOjdHGC0oLe6aoTlX/mtuOg667tm4n6HXEoL2Pjkq3rxWeNpw+MmNtT2 HQDRBvewOnP8V71WzNJrn4g9kVoCeBVpkdNjfKJvEJp2nSWxN/BaOfA+RuzEoT0Bf/TvYN AnzFXNYTyW2fSl53PhOnmJEgcFsj20Y= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1732279099; 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:autocrypt:autocrypt; bh=AOkxIt1AHITD8TmVq6RWJQXe+1uYkCgTbrbFwt/v6nM=; b=hnn8X4TGMTiwbxxwnH+uboR0TbyWrUe0FBTgRk85aETg+TE12FUve54JyN8F7Fs2pnS0uO IH8wp27AfRba/12fGRQhrPlC8HfooQ3wQFDBJuI0NnmuuQCYa/XKjnNNpPLsFx523SXtvE kWHWN8+8sm+3JkXYBXKQF21Ym6JAc0c= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-640-PmOpKh8sOcmCop8uaGUE5w-1; Fri, 22 Nov 2024 07:38:18 -0500 X-MC-Unique: PmOpKh8sOcmCop8uaGUE5w-1 X-Mimecast-MFC-AGG-ID: PmOpKh8sOcmCop8uaGUE5w Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-431673032e6so12969955e9.0 for ; Fri, 22 Nov 2024 04:38:18 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732279097; x=1732883897; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :from:references:cc:to:subject:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=AOkxIt1AHITD8TmVq6RWJQXe+1uYkCgTbrbFwt/v6nM=; b=HhsHwRDSMS/OYKKqNgjgNB9xVWRbIOI9E9FtBkzIiIZRcJ8a1e4qeC8TJlkLHPMI0V X1pKbuQKGD61yCWsMmjGJ/qy1cUTP6brC9bb05acKKDYXmG6jF8Z/8I9SfvHGuwnup/1 3F6irQUda8zBtUhA5vMRxiAloZb590S2oHgb6egtC7g1HalkAenicYf4Vi1adWAvkVtA GHs8NctJBcBcU95LKxg9Q39ITjaOVepKiP1ZjcWBBG/OMRI2vnsjBXsjWZQxuS0SV7Hg MgSGLrVqE5RpN00dS97+OIXXZnV+yz4gQn770s9qa5BSaOxAFL7xCGma/1VYF4ZbbwlL ItVg== X-Forwarded-Encrypted: i=1; AJvYcCVi02xS4pi+pkx0vqoeGcqfkyzshgY7/5iVXPlvU0YP+djABocYeWopJ9RhImnS4Aa8NMgAWAg7Sg==@kvack.org X-Gm-Message-State: AOJu0YydtuA3VQ1w+DYvj7o5kBFuRtGmw7USexA8dHHq6rfMhhZ7ymmK cFpS8rDk5sqV8VD4C6cQxVBxFEeqF9M2ZB3v5gp3SkgHyaceBs5BCsn9U/ZvWjzKegnX1yMRKdo aSqYaiumvgQ42AoJRaDozq0XZ3mY4GCg78okA0/Lk5O4mBeny X-Gm-Gg: ASbGnctsZpXx+xufeElDpQjGuzzJR6nT+yo+tafKABun82GkqgJC3lnKqktpu7juF3y O9yJlyfnjKLcZZgPgb//SvKTrb7Aymp3Lx7A+iv8fOUVOXwISYbb40U1EuVAz9uykNFgDQvUGwH DqkKXbzdcicu4/SGZfSa1U816MOy95IomnKUdFNmKqNARpeVtDJawY2viofO4NIGsA77PW4z5Sf yjf/VvNRAaQDt1aPUc+c7het6iDImgwWsHeyq4EfJ1IYncMqmri7tI= X-Received: by 2002:a05:6000:4007:b0:382:5295:b350 with SMTP id ffacd0b85a97d-38260b46ceamr2594960f8f.5.1732279097117; Fri, 22 Nov 2024 04:38:17 -0800 (PST) X-Google-Smtp-Source: AGHT+IGEZInS/V+C95z8kX3djBHqB5SHFPy2/nAlMRTVT5yKTTrnAME7eptwqsuW4/RdXQz74jgt5A== X-Received: by 2002:a05:6000:4007:b0:382:5295:b350 with SMTP id ffacd0b85a97d-38260b46ceamr2594923f8f.5.1732279096712; Fri, 22 Nov 2024 04:38:16 -0800 (PST) Received: from [192.168.10.28] ([151.49.204.250]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-3825fbf2b29sm2283601f8f.107.2024.11.22.04.38.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 22 Nov 2024 04:38:16 -0800 (PST) Message-ID: Date: Fri, 22 Nov 2024 13:37:43 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 0/2] rust: page: Add support for existing struct page mappings To: David Airlie , Matthew Wilcox Cc: Abdiel Janulgue , Boqun Feng , Alice Ryhl , rust-for-linux@vger.kernel.org, Miguel Ojeda , Alex Gaynor , Gary Guo , =?UTF-8?Q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Danilo Krummrich , Wedson Almeida Filho , Valentin Obst , open list , Andrew Morton , "open list:MEMORY MANAGEMENT" , Kairui Song References: <98a46b27-c4bb-4540-8f75-f176c3f2fae1@gmail.com> <650846e4-b6a0-472d-a14e-4357d20faadb@gmail.com> <0195fb77-c55a-40d5-8fe2-5844158f4f63@gmail.com> From: Paolo Bonzini Autocrypt: addr=pbonzini@redhat.com; keydata= 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 In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: pJLj2gwqSzUN5qwv4vRRn92D2TS4hweD4W-cKGvucpM_1732279097 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 49CC4A0011 X-Stat-Signature: h7ntbtj1smptc8n1hfjd3yq9e5syp4q1 X-HE-Tag: 1732279061-880500 X-HE-Meta: U2FsdGVkX1/1SiRNo1J82FChPU6SXpeoC9Yx3UBgXI+K8SZi18y4jOubnQxg35WL1OWSneOvkGeqo6XMzVCv8gfuyor9BqPpfLQbR3CB5/6A5McXqlE0UBYpekUjOD1SPJC1KZbXT5DthvSA9DguOdfZaHhNAcBvYm5wZS0ZA1gp2RSPx8zDRlD5oNNZJbZIFq2YNNkvgfa/SiJLw/eNK8gewnVSOBJTduqb+DrhCCzLQyFv517ycIsOrJQS46ApeRvOVqwa9uJuRx/Ppc2c8lpdX3uk24dYckqBzk41Vw2LYnFmXjKdkiCeimOARCvlnC2lqPvOXp4kgbuZybW0UCENg4K3KQfvX/gUW449jrVPGU6yhZc49ALOZHr7SplevAa5871G3Xp8najZfbHK1Fb1O4ZdVJgJQ5ONp9wy9oqxikpOsDjaqW0upvW7/sbz0RsoLF6xVQo2adK3Ps1hg+TOjl2WZP4e6MzAfM0sbegoVPD248WOFrXiqzzrmdwQ96ExdTEEyB4xKr0di3wBQb7nMjOk6KMuB2btnUZjfuA6OXlwFNCVjld+xMCDusfJWMoiV7iBtYB94XZ1wxZdnrXuYhgm7T5J+V3d2Hn6AfI4AdLuhgrSr4OkwEWxEgPrS2RvnsNawXXOXC5XFXlOoeRKE1QKu+p/xbue3ErF89fZUH12+sVFu0mfGCEasJhB9b6k+e0trD1/KVg+dMAhFQzfFCA8+TwZvne30L3zIlNlcr4zldvyvDNGCYtDgcBy5gXrBd+tPYBn0W1hoBVYoj9oInTsVzlIM603XAB4y4Vswr6lRrSi6m4ZEE/Tqaq1x8GFhKNN9WmpWHrjhb6rIK6I5ydHjqSXVNNV/u4ey5TkukwKebnxCd4D2rGKTGC4jwEgYa2IbM05qS47gjlUD0uKEchUU40XHvQdfvMms0xNrnnr7CCjq2j4+nnkueVR07zvwtzktvC0vIdAPXD ygWt8Of5 xemod0bwr6Ch0JguQpRTyGfHiV/2gVZKz8qNRVkH5cvRHaBPYAxST8KgqlfJseg5ljPOFP/lG5fQHZ027dw9J0HRb4jc+Wi7IYblByWOv4bTEC47xESEEG5xoLsLX9XLXkasyDDCMragpxAL/A7++dkdQo8SpG0kSQlGTVu7AQQ07AF80f1o8IbKk6sH/gXcbBFh1ZOI/NcgI3kba7Ssh/Mi1dfUmxBJ8iL0ykGLjlPD6kyDPs046NJzeWV7x3DNwPQxzJo68FXqoAcYZgbXzBGafFjBk4KtnCYBPVvjUEdCkpywJk8/QrULimDf4CPZnkp3QGwsuayzOhAIhS28vtQ5ZYxe6PYVJKqy43qNhY/WsZU+foJ+/SYJ45n9BaPsowFM+DBDeCuPZL3kGF8HGZGdREjvv+n1Rox+5qac8+Mty5jfz1bZcJ4yOaj2z813z7FIvt36s29aUAsGwqKIvU93CTKDGVxPcImVyGuIZw3CKSoF/+NAM8Kr22cYiwcQZPpepq/ujE5lrQckVSeGof9XFOQg2uzuRh2K901OnjVJ/heIeIeQk8iIcNTr8BfnIPbaasUYe67Bz/g5uyZi6lhzK5g== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On 11/22/24 07:58, David Airlie wrote: > On Fri, Nov 22, 2024 at 11:24 AM Matthew Wilcox wrote: >> >> On Fri, Nov 22, 2024 at 01:18:28AM +0200, Abdiel Janulgue wrote: >>> We need an abstraction of struct page to construct a scatterlist which is >>> needed for an internal firmware structure. Now most of pages needed there >>> come from vmalloc_to_page() which, unlike the current rust Page abstraction, >>> not allocated on demand but is an existing mapping. >>> >>> Hope that clears things up! >> >> That's very helpful! So the lifetime of the scatterllist must not >> outlive the lifetime of the vmalloc allocation. That means you can call >> kmap_local_page() on the page in the scatterlist without worrying about >> the refcount of the struct page. BTW, you can't call page_address() on >> vmalloc memory because vmalloc can allocate pages from HIGHMEM. Unless >> you're willing to disable support for 32-bit systems with highmem ... >> > > https://elixir.bootlin.com/linux/v6.11.5/source/drivers/gpu/drm/nouveau/nvkm/core/firmware.c#L266 > > This is the C code we want to rustify. I don't think you want to increase/decrease the refcount there. Instead you tie the lifetime of the returned page to the lifetime of the thing that provides the page, which would be some kind of NvkmFirmware struct. pub enum NvkmFirmwareData { Ram(KBox<[PageSlice]>, Dma(CoherentAllocation, Sgt(VBox<[PageSlice]>, } pub struct NvkmFirmware { ..., img: NvkmFirmwareData, } pub struct NvkmFirmwarePages<'a> { fw: &'a NvkmFirmware, sgt: SgTable, } impl NvkmFirmware { fn get_sgl(&self) -> NvkmFirmwarePages { ... } } Perhaps a trait that is implemented by both {K,V,KV}Vec and {K,V,KV}Box<[PageSlice]>, like trait ToComponentPage { fn to_component_page(&self, i: usize) -> &Page; } impl ToComponentPage for KVec { // same for KBox<[PageSlice]> fn to_component_page(&self, i: usize) -> &Page { let base = &self[i << PAGE_SHIFT..]; bindings::virt_to_page(base.as_ptr()) } } impl ToComponentPage for VVec { // same for VBox<[PageSlice]> fn to_component_page(&self, i: usize) -> &Page { let base = &self[i << PAGE_SHIFT..]; bindings::vmalloc_to_page(base.as_ptr()) } } ? And possibly also trait ToComponentPageMut { fn to_component_page_mut(&mut self, i: usize) -> &Page; } which would be implemented by the Box types, but not by the Vec types because their data is not pinned. Paolo