> On Oct 21, 2025, at 4:30 PM, John Hubbard <[email protected]> wrote:
>
> On 10/21/25 11:26 AM, Joel Fernandes wrote:
>>> On 10/20/2025 4:59 PM, John Hubbard wrote:
>>>> On 10/20/25 11:55 AM, Joel Fernandes wrote:
>>> ...
>> Yes, there's different format versions.
>>
>> This patch supports all Turing and later GPUs because all GPUs including
>> Hopper+
>> are backward compatible with version 1. However they wont be able to use the
>> version 2 and 3 features with only this patch.
>>
>> I kind of intentionally did this for a first cut. But yes, I could split it
>> into
>> versions. The 3 MMU structures (PTE, PDE and Dual PDE) are versioned.
>> Version 2
>> is Turing and later. Hopper+ is when Version 3 got introduced and it is also
>
> Ah, then we shouldn't even do version 1. We should take full advantage of
> the fact that Nova's earliest GPU is Turing.
Makes sense, though one advantage of just defining version 1 too is it may
be a good reference or a fallback should we ever need it (Especially since it
took me 2 months to be get my nova-core MMU code working and it may be
nice to have a fallback. Let me think about it, I believe it will be just few
more
lines of code, so should not be that bad.)
>
>> backward compatible with Version 2.
>>
>> We could eventually support versions 2 and 3 (instead of just version 1 as I
>> am
>> doing), however my working MMU translation prototype is based on version 1 (I
>> did not have to configure anything in the MMU to switch versions, this was
>> default).
>>
>> There are a couple of options:
>>
>> 1. For starters, support only version 1. Drawback is, when/if we want to use
>> version 2 and 3 features, it may require some rework.
>>
>> 2. Have the following hierarchy:
>> mm/types.rs - all common structures (stuff that is generic like Pfn).
>> mm/types/ver1.rs - Version 1 specific types.
>> mm/types/ver2.rs - Version 2 specific types.
>> mm/types/ver3.rs - Version 3 specific types.
>
> Maybe a file/directory structure that more directly indicates page table
> formats. "mm/types" could be quite a few things.
>
Agreed, though mm/types also contains other non-pagetable structures.
I could prefix ver1/2/3 with page_tables_, so it would be like:
mm/types/page_tables_ver{1,2,3}.rs. That is much more clear.
>
>> version (which is reasonable).
>>
>> 5. Your options here.
>>
>> Btw, I used Nouveau as a reference as well, so likely Nouveau doesn't support
>> version 2 and 3 features. Not that that matters (we should support newer
>> features in nova-core), but just thought I'd mention it.
>>
>> Other thoughts?
>
> Two things:
>
> 1) Danilo is working on writing down locking requirements for Nova page
> tables, based on earlier experience with Nouveau page table locking
> problems, which were apparently very serious.
Sure, though I believe it should not block these patches because we are
not yet designing higher level users. These patches just expose the structures
and things like locking should be built at a higher level. I believe Danilo
is referring to page table look ups and updates, that will a different module
outside of types.
> 2) Maybe it would be good to start with versions 2 and 3, so that we
> can see how to do >1 version?
Yes I will start with version 2, 3. If version 1 is simple, I may include that
in too for the benefit of my working prototype if that is Ok :) Worst case,
we have to just delete an extra file should be not need it :)
thanks,
- Joel
>
> thanks,
> --
> John Hubbard
>