106 lines
3.7 KiB
Diff
106 lines
3.7 KiB
Diff
From b7e9e555a80801d33d94287307e7b7606501cffb Mon Sep 17 00:00:00 2001
|
|
From: Suren Baghdasaryan <surenb@google.com>
|
|
Date: Sat, 19 Jul 2025 11:28:53 -0700
|
|
Subject: fs/proc/task_mmu: remove conversion of seq_file position to unsigned
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Back in 2.6 era, last_addr used to be stored in seq_file->version
|
|
variable, which was unsigned long. As a result, sentinels to represent
|
|
gate vma and end of all vmas used unsigned values. In more recent kernels
|
|
we don't used seq_file->version anymore and therefore conversion from
|
|
loff_t into unsigned type is not needed. Similarly, sentinel values don't
|
|
need to be unsigned. Remove type conversion for set_file position and
|
|
change sentinel values to signed. While at it, change the hardcoded
|
|
sentinel values with named definitions for better documentation.
|
|
|
|
Link: https://lkml.kernel.org/r/20250719182854.3166724-6-surenb@google.com
|
|
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
|
|
Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
|
|
Reviewed-by: Vlastimil Babka <vbabka@suse.cz>
|
|
Acked-by: David Hildenbrand <david@redhat.com>
|
|
Cc: Alexey Dobriyan <adobriyan@gmail.com>
|
|
Cc: Andrii Nakryiko <andrii@kernel.org>
|
|
Cc: Christian Brauner <brauner@kernel.org>
|
|
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
|
|
Cc: Jann Horn <jannh@google.com>
|
|
Cc: Jeongjun Park <aha310510@gmail.com>
|
|
Cc: Johannes Weiner <hannes@cmpxchg.org>
|
|
Cc: Josef Bacik <josef@toxicpanda.com>
|
|
Cc: Kalesh Singh <kaleshsingh@google.com>
|
|
Cc: Liam Howlett <liam.howlett@oracle.com>
|
|
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
|
|
Cc: Michal Hocko <mhocko@kernel.org>
|
|
Cc: Oscar Salvador <osalvador@suse.de>
|
|
Cc: "Paul E . McKenney" <paulmck@kernel.org>
|
|
Cc: Peter Xu <peterx@redhat.com>
|
|
Cc: Ryan Roberts <ryan.roberts@arm.com>
|
|
Cc: Shuah Khan <shuah@kernel.org>
|
|
Cc: Thomas Weißschuh <linux@weissschuh.net>
|
|
Cc: T.J. Mercier <tjmercier@google.com>
|
|
Cc: Ye Bin <yebin10@huawei.com>
|
|
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
|
---
|
|
fs/proc/task_mmu.c | 17 ++++++++++-------
|
|
1 file changed, 10 insertions(+), 7 deletions(-)
|
|
|
|
--- a/fs/proc/task_mmu.c
|
|
+++ b/fs/proc/task_mmu.c
|
|
@@ -29,6 +29,9 @@
|
|
#include <asm/tlbflush.h>
|
|
#include "internal.h"
|
|
|
|
+#define SENTINEL_VMA_END -1
|
|
+#define SENTINEL_VMA_GATE -2
|
|
+
|
|
#define SEQ_PUT_DEC(str, val) \
|
|
seq_put_decimal_ull_width(m, str, (val) << (PAGE_SHIFT-10), 8)
|
|
void task_mem(struct seq_file *m, struct mm_struct *mm)
|
|
@@ -135,7 +138,7 @@ static struct vm_area_struct *proc_get_v
|
|
if (vma) {
|
|
*ppos = vma->vm_start;
|
|
} else {
|
|
- *ppos = -2UL;
|
|
+ *ppos = SENTINEL_VMA_GATE;
|
|
vma = get_gate_vma(priv->mm);
|
|
}
|
|
|
|
@@ -145,11 +148,11 @@ static struct vm_area_struct *proc_get_v
|
|
static void *m_start(struct seq_file *m, loff_t *ppos)
|
|
{
|
|
struct proc_maps_private *priv = m->private;
|
|
- unsigned long last_addr = *ppos;
|
|
+ loff_t last_addr = *ppos;
|
|
struct mm_struct *mm;
|
|
|
|
/* See m_next(). Zero at the start or after lseek. */
|
|
- if (last_addr == -1UL)
|
|
+ if (last_addr == SENTINEL_VMA_END)
|
|
return NULL;
|
|
|
|
priv->task = get_proc_task(priv->inode);
|
|
@@ -170,9 +173,9 @@ static void *m_start(struct seq_file *m,
|
|
return ERR_PTR(-EINTR);
|
|
}
|
|
|
|
- vma_iter_init(&priv->iter, mm, last_addr);
|
|
+ vma_iter_init(&priv->iter, mm, (unsigned long)last_addr);
|
|
hold_task_mempolicy(priv);
|
|
- if (last_addr == -2UL)
|
|
+ if (last_addr == SENTINEL_VMA_GATE)
|
|
return get_gate_vma(mm);
|
|
|
|
return proc_get_vma(priv, ppos);
|
|
@@ -180,8 +183,8 @@ static void *m_start(struct seq_file *m,
|
|
|
|
static void *m_next(struct seq_file *m, void *v, loff_t *ppos)
|
|
{
|
|
- if (*ppos == -2UL) {
|
|
- *ppos = -1UL;
|
|
+ if (*ppos == SENTINEL_VMA_GATE) {
|
|
+ *ppos = SENTINEL_VMA_END;
|
|
return NULL;
|
|
}
|
|
return proc_get_vma(m->private, ppos);
|