* [PATCH v2] drm/ttm: Support 52-bit PAs in ttm_place
@ 2026-05-13 14:12 Felix Kuehling
2026-05-13 14:19 ` Christian König
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Felix Kuehling @ 2026-05-13 14:12 UTC (permalink / raw)
To: amd-gfx, dri-devel; +Cc: christian.koenig
fpfn and lpfn in struct ttm_place are 32-bit page numbers. With 4KB page
size this can support up to 44-bit physical addressing. Grow these to
unsigned long to support larger physical addresses.
Signed-off-by: Felix Kuehling <felix.kuehling@amd.com>
---
include/drm/ttm/ttm_placement.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/drm/ttm/ttm_placement.h b/include/drm/ttm/ttm_placement.h
index b510a4812609..ab2639e42c54 100644
--- a/include/drm/ttm/ttm_placement.h
+++ b/include/drm/ttm/ttm_placement.h
@@ -81,8 +81,8 @@
* Structure indicating a possible place to put an object.
*/
struct ttm_place {
- unsigned fpfn;
- unsigned lpfn;
+ uint64_t fpfn;
+ uint64_t lpfn;
uint32_t mem_type;
uint32_t flags;
};
--
2.43.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2] drm/ttm: Support 52-bit PAs in ttm_place
2026-05-13 14:12 [PATCH v2] drm/ttm: Support 52-bit PAs in ttm_place Felix Kuehling
@ 2026-05-13 14:19 ` Christian König
2026-05-13 14:27 ` Kuehling, Felix
2026-05-13 14:50 ` Tvrtko Ursulin
` (2 subsequent siblings)
3 siblings, 1 reply; 8+ messages in thread
From: Christian König @ 2026-05-13 14:19 UTC (permalink / raw)
To: Felix Kuehling, amd-gfx, dri-devel, Paneer Selvam, Arunpravin
On 5/13/26 16:12, Felix Kuehling wrote:
> fpfn and lpfn in struct ttm_place are 32-bit page numbers. With 4KB page
> size this can support up to 44-bit physical addressing. Grow these to
> unsigned long to support larger physical addresses.
>
> Signed-off-by: Felix Kuehling <felix.kuehling@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
@Arun can you pick that one up and push it to drm-misc-next?
Thanks,
Christian.
> ---
> include/drm/ttm/ttm_placement.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/include/drm/ttm/ttm_placement.h b/include/drm/ttm/ttm_placement.h
> index b510a4812609..ab2639e42c54 100644
> --- a/include/drm/ttm/ttm_placement.h
> +++ b/include/drm/ttm/ttm_placement.h
> @@ -81,8 +81,8 @@
> * Structure indicating a possible place to put an object.
> */
> struct ttm_place {
> - unsigned fpfn;
> - unsigned lpfn;
> + uint64_t fpfn;
> + uint64_t lpfn;
> uint32_t mem_type;
> uint32_t flags;
> };
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2] drm/ttm: Support 52-bit PAs in ttm_place
2026-05-13 14:19 ` Christian König
@ 2026-05-13 14:27 ` Kuehling, Felix
2026-05-13 14:50 ` Arunpravin Paneer Selvam
0 siblings, 1 reply; 8+ messages in thread
From: Kuehling, Felix @ 2026-05-13 14:27 UTC (permalink / raw)
To: Christian König, amd-gfx, dri-devel,
Paneer Selvam, Arunpravin
On 2026-05-13 09:19, Christian König wrote:
> On 5/13/26 16:12, Felix Kuehling wrote:
>> fpfn and lpfn in struct ttm_place are 32-bit page numbers. With 4KB page
>> size this can support up to 44-bit physical addressing. Grow these to
>> unsigned long to support larger physical addresses.
I forgot to update the commit message. It still says unsigned long.
@Arun, can you update that before you push it to drm-misc-next?
Thanks,
Felix
>>
>> Signed-off-by: Felix Kuehling <felix.kuehling@amd.com>
> Reviewed-by: Christian König <christian.koenig@amd.com>
>
> @Arun can you pick that one up and push it to drm-misc-next?
>
> Thanks,
> Christian.
>
>> ---
>> include/drm/ttm/ttm_placement.h | 4 ++--
>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/include/drm/ttm/ttm_placement.h b/include/drm/ttm/ttm_placement.h
>> index b510a4812609..ab2639e42c54 100644
>> --- a/include/drm/ttm/ttm_placement.h
>> +++ b/include/drm/ttm/ttm_placement.h
>> @@ -81,8 +81,8 @@
>> * Structure indicating a possible place to put an object.
>> */
>> struct ttm_place {
>> - unsigned fpfn;
>> - unsigned lpfn;
>> + uint64_t fpfn;
>> + uint64_t lpfn;
>> uint32_t mem_type;
>> uint32_t flags;
>> };
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2] drm/ttm: Support 52-bit PAs in ttm_place
2026-05-13 14:12 [PATCH v2] drm/ttm: Support 52-bit PAs in ttm_place Felix Kuehling
2026-05-13 14:19 ` Christian König
@ 2026-05-13 14:50 ` Tvrtko Ursulin
2026-05-13 15:32 ` Christian König
2026-05-16 1:53 ` Claude review: " Claude Code Review Bot
2026-05-16 1:53 ` Claude Code Review Bot
3 siblings, 1 reply; 8+ messages in thread
From: Tvrtko Ursulin @ 2026-05-13 14:50 UTC (permalink / raw)
To: Felix Kuehling, amd-gfx, dri-devel; +Cc: christian.koenig
On 13/05/2026 15:12, Felix Kuehling wrote:
> fpfn and lpfn in struct ttm_place are 32-bit page numbers. With 4KB page
> size this can support up to 44-bit physical addressing. Grow these to
> unsigned long to support larger physical addresses.
>
> Signed-off-by: Felix Kuehling <felix.kuehling@amd.com>
> ---
> include/drm/ttm/ttm_placement.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/include/drm/ttm/ttm_placement.h b/include/drm/ttm/ttm_placement.h
> index b510a4812609..ab2639e42c54 100644
> --- a/include/drm/ttm/ttm_placement.h
> +++ b/include/drm/ttm/ttm_placement.h
> @@ -81,8 +81,8 @@
> * Structure indicating a possible place to put an object.
> */
> struct ttm_place {
> - unsigned fpfn;
> - unsigned lpfn;
> + uint64_t fpfn;
> + uint64_t lpfn;
> uint32_t mem_type;
> uint32_t flags;
> };
Maybe audit of usage sites is required to make sure no compiler warnings
on 32-bit builds if nothing else. Things like:
amdgpu_vram_mgr_intersects()
...
if (place->fpfn < lpfn &&
(!place->lpfn || place->lpfn > fpfn))
return true;
Etc. Probably are all best adjusted to match the new type.
There is also:
struct ttm_resource {
unsigned long start;
Which also may need aligning. I know no one cares about 32-bit builds
but some automated systems will probably test it and send reports.
Regards,
Tvrtko
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2] drm/ttm: Support 52-bit PAs in ttm_place
2026-05-13 14:27 ` Kuehling, Felix
@ 2026-05-13 14:50 ` Arunpravin Paneer Selvam
0 siblings, 0 replies; 8+ messages in thread
From: Arunpravin Paneer Selvam @ 2026-05-13 14:50 UTC (permalink / raw)
To: Kuehling, Felix, Christian König, amd-gfx, dri-devel
I modified the commit message and pushed into drm-misc-next.
Regards,
Arun.
On 5/13/2026 7:57 PM, Kuehling, Felix wrote:
> On 2026-05-13 09:19, Christian König wrote:
>> On 5/13/26 16:12, Felix Kuehling wrote:
>>> fpfn and lpfn in struct ttm_place are 32-bit page numbers. With 4KB
>>> page
>>> size this can support up to 44-bit physical addressing. Grow these to
>>> unsigned long to support larger physical addresses.
>
> I forgot to update the commit message. It still says unsigned long.
> @Arun, can you update that before you push it to drm-misc-next?
>
> Thanks,
> Felix
>
>
>>>
>>> Signed-off-by: Felix Kuehling <felix.kuehling@amd.com>
>> Reviewed-by: Christian König <christian.koenig@amd.com>
>>
>> @Arun can you pick that one up and push it to drm-misc-next?
>>
>> Thanks,
>> Christian.
>>
>>> ---
>>> include/drm/ttm/ttm_placement.h | 4 ++--
>>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/include/drm/ttm/ttm_placement.h
>>> b/include/drm/ttm/ttm_placement.h
>>> index b510a4812609..ab2639e42c54 100644
>>> --- a/include/drm/ttm/ttm_placement.h
>>> +++ b/include/drm/ttm/ttm_placement.h
>>> @@ -81,8 +81,8 @@
>>> * Structure indicating a possible place to put an object.
>>> */
>>> struct ttm_place {
>>> - unsigned fpfn;
>>> - unsigned lpfn;
>>> + uint64_t fpfn;
>>> + uint64_t lpfn;
>>> uint32_t mem_type;
>>> uint32_t flags;
>>> };
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2] drm/ttm: Support 52-bit PAs in ttm_place
2026-05-13 14:50 ` Tvrtko Ursulin
@ 2026-05-13 15:32 ` Christian König
0 siblings, 0 replies; 8+ messages in thread
From: Christian König @ 2026-05-13 15:32 UTC (permalink / raw)
To: Tvrtko Ursulin, Felix Kuehling, amd-gfx, dri-devel
On 5/13/26 16:50, Tvrtko Ursulin wrote:
> On 13/05/2026 15:12, Felix Kuehling wrote:
>> fpfn and lpfn in struct ttm_place are 32-bit page numbers. With 4KB page
>> size this can support up to 44-bit physical addressing. Grow these to
>> unsigned long to support larger physical addresses.
>>
>> Signed-off-by: Felix Kuehling <felix.kuehling@amd.com>
>> ---
>> include/drm/ttm/ttm_placement.h | 4 ++--
>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/include/drm/ttm/ttm_placement.h b/include/drm/ttm/ttm_placement.h
>> index b510a4812609..ab2639e42c54 100644
>> --- a/include/drm/ttm/ttm_placement.h
>> +++ b/include/drm/ttm/ttm_placement.h
>> @@ -81,8 +81,8 @@
>> * Structure indicating a possible place to put an object.
>> */
>> struct ttm_place {
>> - unsigned fpfn;
>> - unsigned lpfn;
>> + uint64_t fpfn;
>> + uint64_t lpfn;
>> uint32_t mem_type;
>> uint32_t flags;
>> };
>
> Maybe audit of usage sites is required to make sure no compiler warnings on 32-bit builds if nothing else. Things like:
>
> amdgpu_vram_mgr_intersects()
> ...
> if (place->fpfn < lpfn &&
> (!place->lpfn || place->lpfn > fpfn))
> return true;
>
> Etc. Probably are all best adjusted to match the new type.
>
> There is also:
>
> struct ttm_resource {
> unsigned long start;
>
> Which also may need aligning. I know no one cares about 32-bit builds but some automated systems will probably test it and send reports.
Yeah I have been trying to remove ttm_resource.start exactly for that reason for a very very long time now.
Drivers shouldn't use that and instead rely on their own backends to give the actual placement.
Regards,
Christian.
>
> Regards,
>
> Tvrtko
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Claude review: drm/ttm: Support 52-bit PAs in ttm_place
2026-05-13 14:12 [PATCH v2] drm/ttm: Support 52-bit PAs in ttm_place Felix Kuehling
` (2 preceding siblings ...)
2026-05-16 1:53 ` Claude review: " Claude Code Review Bot
@ 2026-05-16 1:53 ` Claude Code Review Bot
3 siblings, 0 replies; 8+ messages in thread
From: Claude Code Review Bot @ 2026-05-16 1:53 UTC (permalink / raw)
To: dri-devel-reviews
Overall Series Review
Subject: drm/ttm: Support 52-bit PAs in ttm_place
Author: Felix Kuehling <felix.kuehling@amd.com>
Patches: 6
Reviewed: 2026-05-16T11:53:55.057936
---
This is a single patch (v2) that widens `fpfn` and `lpfn` in `struct ttm_place` from `unsigned` (32-bit) to `uint64_t` (64-bit) to support physical addresses beyond 44 bits (32-bit page number × 4KB page = 44-bit PA).
The change is straightforward and minimal — only the struct definition is modified. However, there is a notable discrepancy between the commit message and the actual code, and the patch lacks accompanying driver-side audit work.
**Note:** The drm-next tree already contains this exact change (`uint64_t` for both fields), so this patch has either already been merged or an equivalent fix landed independently.
---
Generated by Claude Code Patch Reviewer
^ permalink raw reply [flat|nested] 8+ messages in thread
* Claude review: drm/ttm: Support 52-bit PAs in ttm_place
2026-05-13 14:12 [PATCH v2] drm/ttm: Support 52-bit PAs in ttm_place Felix Kuehling
2026-05-13 14:19 ` Christian König
2026-05-13 14:50 ` Tvrtko Ursulin
@ 2026-05-16 1:53 ` Claude Code Review Bot
2026-05-16 1:53 ` Claude Code Review Bot
3 siblings, 0 replies; 8+ messages in thread
From: Claude Code Review Bot @ 2026-05-16 1:53 UTC (permalink / raw)
To: dri-devel-reviews
Patch Review
**Commit message vs. code mismatch:**
The commit message says:
> Grow these to **unsigned long** to support larger physical addresses.
But the actual diff changes the type to `uint64_t`, not `unsigned long`:
```c
- unsigned fpfn;
- unsigned lpfn;
+ uint64_t fpfn;
+ uint64_t lpfn;
```
The code change (`uint64_t`) is actually the better choice — `unsigned long` would only be 32 bits on 32-bit architectures, which wouldn't achieve the stated goal. The commit message should be updated to say `uint64_t` to match the code.
**Title says "52-bit" but no justification:**
The subject line says "52-bit PAs" but neither the commit message nor the code explains why 52 bits specifically. With `uint64_t` page numbers and 4KB pages, the theoretical limit is 64+12 = 76-bit addressing. The title should either say "larger PAs" generically or explain why 52-bit is the relevant target (likely ARM64's 52-bit PA extension or x86's 5-level paging).
**Missing driver-side audit:**
The patch only changes the struct definition but doesn't audit the 21+ driver files that use `fpfn`/`lpfn`. Potential issues include:
1. **Truncation on assignment:** Drivers that assign `fpfn`/`lpfn` from 32-bit variables are fine (implicit widening), but any driver storing the result of these fields back into a 32-bit variable could truncate silently.
2. **Format strings:** Any `printk`/`drm_dbg` calls that print fpfn/lpfn with `%u` or `%x` will now produce warnings or incorrect output — they need `%llu` or `PRIu64`.
3. **`struct ttm_resource.start`** is `unsigned long`, which is 32-bit on 32-bit platforms. If fpfn/lpfn values >32 bits flow into `start`, there's a truncation path. On 64-bit platforms `unsigned long` is 64-bit so this isn't an issue in practice, but it's worth noting.
4. **Structure size change:** `struct ttm_place` grows from 16 bytes to 24 bytes (with padding). Since placements are typically small static/stack arrays, this shouldn't be a performance concern, but it's worth noting for any driver that allocates large arrays of `ttm_place`.
**Verdict:**
The code change itself is correct and desirable — `uint64_t` is the right type for page frame numbers that need to exceed 32-bit range. However:
- Fix the commit message to say `uint64_t` instead of `unsigned long`.
- Consider explaining *why* 52-bit in the subject, or generalize the title.
- An audit of callers for truncation and format string issues would strengthen this patch (or could be a follow-up).
---
Generated by Claude Code Patch Reviewer
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-05-16 1:53 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-13 14:12 [PATCH v2] drm/ttm: Support 52-bit PAs in ttm_place Felix Kuehling
2026-05-13 14:19 ` Christian König
2026-05-13 14:27 ` Kuehling, Felix
2026-05-13 14:50 ` Arunpravin Paneer Selvam
2026-05-13 14:50 ` Tvrtko Ursulin
2026-05-13 15:32 ` Christian König
2026-05-16 1:53 ` Claude review: " Claude Code Review Bot
2026-05-16 1:53 ` Claude Code Review Bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox