[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 1/2] xen/pdx: account for frametable_base_pdx in generic pdx_to_page/page_to_pdx


  • To: Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • From: "Orzel, Michal" <michal.orzel@xxxxxxx>
  • Date: Tue, 5 May 2026 09:35:05 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=citrix.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0)
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=bIQ6B5QXxPXvMZAEqD+pNtNTZG1nBhilZB1wzodtdWQ=; b=ohCiVgPOKQ4QKVwjxgRHvYYQ6LNGBMPH0ChSvEJamqm6T30Jw4W+Ti8Vy2mndbzHc3Y5JUuxJObgVIy0PkgvIzL81P1T0vulM4IiDHzJnLXwga30FYzm01rQLjJHPFg3DVzJ3w2BxhRpB5bQXYE5Yi9hEN0iOdxvVrhObNowhU9Hbol+J5rFVnvu0PWkzXizkrpyXmFveYK2DbmBtYGL0r2ZBMMP8nVB5GEYzuzovtV0JpodvKTVVOqEJuK/y0Dn5txrZS6hSWCB5LgA+2Wmg9exCWdXK5yYQ74w/DtoASCksBawes2WBgAbYt4LkP2DUnTStyVKA7j5fVtj6fJMhw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=y0It1EC1G3ufCyMA5Ws0UIy+s0NXZPgLIRViRnVrfUZmr6DHQCuPQie3j9oaHC66hon4WZ4iATxyY++q/ovkJh1BkreGYiXpjvo+JItBrLyrYIVj2yRIESHqmb0a00eHRVSLq5fQBbrArCn686mUrYnYD6GACMUBi2ub7kL8UYiotn7Q143SwRZKwGUdrX8evOzNwKNqyL2n7864knzqS9RViXbsMqF+nWG6yk6TGcwGvamydpUF9Odrz2hg9bI1URraSaFZYSrMCV96JpJuwbOK/wUETyfjhwUq6Zaul28Blj/j1AufULo+RBrAdGqWIqvQSh4/St90qLYgdGDXqg==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=amd.com header.i="@amd.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"
  • Cc: <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, Timothy Pearson <tpearson@xxxxxxxxxxxxxxxxxxxxx>, Teddy Astie <teddy.astie@xxxxxxxxxx>
  • Delivery-date: Tue, 05 May 2026 07:35:29 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>


On 05-May-26 09:13, Roger Pau Monné wrote:
> On Tue, May 05, 2026 at 08:48:15AM +0200, Orzel, Michal wrote:
>>
>>
>> On 04-May-26 17:28, Roger Pau Monné wrote:
>>> On Thu, Apr 30, 2026 at 02:51:02PM +0200, Michal Orzel wrote:
>>>> The generic pdx_to_page() and page_to_pdx() macros in xen/pdx.h assume
>>>> the frame table starts at PDX 0, which is only true on x86. ARM
>>>> uses a non-zero frametable_base_pdx to offset into the frame table (PPC 
>>>> also
>>>> defines it).
>>>>
>>>> Fix the generic macros to subtract/add frametable_base_pdx, defaulting
>>>> to 0 when the arch does not define it. This makes the generic macros
>>>> correct for all architectures, even though they are only used on x86
>>>> today.
>>>
>>> Hm, I assume this offset was added because the original mask PDX
>>> compression won't (usually) compress the gap between 0 and the start
>>> of RAM.  However the newish offset PDX compression should be able to
>>> compress from 0 to start of RAM, and hence you don't need to apply
>>> an extra PDX offset there?
>>>
>>> If that's indeed the case it might be better to integrate
>>> frametable_base_pdx into the mask compression algorithm itself, so
>>> that on some arches it's a mask plus a decrease.
>> The offset is needed regardless of whether compression is used. With
>> CONFIG_PDX_NONE (no compression, PDX == MFN), if RAM starts at e.g.
>> 0x80000000, the first valid PDX is 0x80000.
> 
> OK, so you are doing some (kind of) address space compression (removing
> the leading empty range to the first RAM region) even when PDX is
> disabled.
> 
>> Without frametable_base_pdx
>> the frame table would have to be indexed from 0, wasting
>> 0x80000 * sizeof(page_info) of memory just to cover the hole before RAM.
> 
> But you don't really "waste" memory, just address space?  Oh, maybe
> not on ARM as it doesn't use pdx_group_valid?  And so you
> unconditionally populate the frametable from PDX 0 to max PDX.
With pdx_group_valid (which this series adds) we wouldn't waste
physical memory for the leading gap. But we'd still waste virtual address
space and the FRAMETABLE_NR check (max_pdx > FRAMETABLE_NR) becomes tighter
because the full range from PDX 0 must fit. For example with RAM starting at 5TB
the virtual offset before the first usable entry would be ~70GB — more than the
entire 32GB FRAMETABLE_SIZE on ARM64.

> 
>> So frametable_base_pdx is really a frame table indexing offset, not
>> something tied to the compression algorithm.
> 
> Right, it just seems odd to do that extra subtraction when using
> offset compression, as in that case the compression logic itself
> should remove that leading gap when RAM doesn't start at 0.
> 
> Instead of generalizing and expanding the usage of frametable_base_pdx
> it might be better to implement support for pdx_group_valid when
> populating the frame table, and switch by default to the offset
> compression method that will already remove any leading unpopulated
> spaces?
Switching the compression method would be a bigger change, and with feature
freeze on Friday I'd prefer not to get into that now. The current approach
is minimal and self-contained and works with mask and no-pdx which is what we
use nowadays: frametable_base_pdx already existed on ARM and PPC, we're just
making the generic macros aware of it as Julien requested (in v1 I just
overwrote the macro in local file). We can revisit the compression strategy as a
follow-up next release.

~Michal




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.