Messages in this thread Patch in this message | | | From | guoren@kernel ... | Subject | [RFC PATCH V2 28/38] riscv: s64ilp32: Temporary workaround solution to gcc problem | Date | Sun, 12 Nov 2023 01:15:04 -0500 |
| |
From: Guo Ren <guoren@linux.alibaba.com>
There is an existing problem in 64ilp32 gcc that combines two pointers in one register. Liao is solving that problem. Before he finishes the job, we could prevent it with a simple noinline attribute, fortunately.
struct path { struct vfsmount *mnt; struct dentry *dentry; } __randomize_layout;
struct nameidata { struct path path; struct qstr last; struct path root; ... } __randomize_layout;
struct nameidata *nd ... nd->path = nd->root; 6c88 ld a0,24(s1) ^^ // Wrong arg of mntget e088 sd a0,0(s1) // Need inserting "lw a0,0(s1)" here mntget(path->mnt); 2a6150ef jal c01ce946 <mntget>
Any gcc helps are welcome :)
Signed-off-by: Guo Ren <guoren@linux.alibaba.com> Signed-off-by: Guo Ren <guoren@kernel.org> Cc: LiaoShihua <shihua@iscas.ac.cn> --- fs/namei.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/namei.c b/fs/namei.c index e56ff39a79bc..1285736dadc4 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -543,7 +543,7 @@ EXPORT_SYMBOL(inode_permission); * * Given a path increment the reference count to the dentry and the vfsmount. */ -void path_get(const struct path *path) +void noinline path_get(const struct path *path) { mntget(path->mnt); dget(path->dentry); -- 2.36.1
| |