2018-01-17 01:50:39

by Sukadev Bhattiprolu

[permalink] [raw]
Subject: [PATCH 1/2] powerpc: export thread-tidr interfaces

Export set_thread_tidr() and clear_thread_tidr() interfaces so they
can be used by external modules.

Signed-off-by: Sukadev Bhattiprolu <[email protected]>
---
arch/powerpc/kernel/process.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index 2010e4c..f20c1ad 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -1560,6 +1560,7 @@ void clear_thread_tidr(struct task_struct *t)
free_thread_tidr(t->thread.tidr);
t->thread.tidr = 0;
}
+EXPORT_SYMBOL_GPL(clear_thread_tidr);

void arch_release_task_struct(struct task_struct *t)
{
@@ -1592,6 +1593,7 @@ int set_thread_tidr(struct task_struct *t)

return 0;
}
+EXPORT_SYMBOL_GPL(set_thread_tidr);

#endif /* CONFIG_PPC64 */

--
2.7.4


2018-01-17 01:50:45

by Sukadev Bhattiprolu

[permalink] [raw]
Subject: [PATCH 2/2] powerpc: export set_thread_uses_vas()

Signed-off-by: Sukadev Bhattiprolu <[email protected]>
---
arch/powerpc/kernel/process.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index f20c1ad..d22055b 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -1475,6 +1475,7 @@ int set_thread_uses_vas(void)
#endif /* CONFIG_PPC_BOOK3S_64 */
return 0;
}
+EXPORT_SYMBOL_GPL(set_thread_uses_vas);

#ifdef CONFIG_PPC64
static DEFINE_SPINLOCK(vas_thread_id_lock);
--
2.7.4

2018-01-17 06:45:50

by Frederic Barrat

[permalink] [raw]
Subject: Re: [PATCH 1/2] powerpc: export thread-tidr interfaces

Hi,


> diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
> index 2010e4c..f20c1ad 100644
> --- a/arch/powerpc/kernel/process.c
> +++ b/arch/powerpc/kernel/process.c
> @@ -1560,6 +1560,7 @@ void clear_thread_tidr(struct task_struct *t)
> free_thread_tidr(t->thread.tidr);
> t->thread.tidr = 0;
> }
> +EXPORT_SYMBOL_GPL(clear_thread_tidr);

Isn't it dangerous to export clear_thread_tidr()? Other modules may also
have assigned the TIDR by calling set_thread_tidr(), so clearing it
could potentially break those other modules. My understanding is that
once the TIDR is assigned, there's no safe way to reclaim it other than
the thread exiting. Or we would need some kind of reference counter.


> void arch_release_task_struct(struct task_struct *t)
> {
> @@ -1592,6 +1593,7 @@ int set_thread_tidr(struct task_struct *t)
>
> return 0;
> }
> +EXPORT_SYMBOL_GPL(set_thread_tidr);


FYI, there's a capi patch we hope to merge soon which is also doing this:
http://patchwork.ozlabs.org/patch/858935/

Fred

2018-01-17 17:09:51

by Sukadev Bhattiprolu

[permalink] [raw]
Subject: Re: [PATCH 1/2] powerpc: export thread-tidr interfaces

Frederic Barrat [[email protected]] wrote:
> Hi,
>
>
> > diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
> > index 2010e4c..f20c1ad 100644
> > --- a/arch/powerpc/kernel/process.c
> > +++ b/arch/powerpc/kernel/process.c
> > @@ -1560,6 +1560,7 @@ void clear_thread_tidr(struct task_struct *t)
> > free_thread_tidr(t->thread.tidr);
> > t->thread.tidr = 0;
> > }
> > +EXPORT_SYMBOL_GPL(clear_thread_tidr);
>
> Isn't it dangerous to export clear_thread_tidr()? Other modules may also
> have assigned the TIDR by calling set_thread_tidr(), so clearing it could
> potentially break those other modules. My understanding is that once the
> TIDR is assigned, there's no safe way to reclaim it other than the thread
> exiting. Or we would need some kind of reference counter.

Yes the FTW driver avoids calling clear_thread_tidr() for the same reasons.
I don't have a strong case for exporting clear_thread_tidr(). Here is the
updated patch, exporting just the set_thread_tidr().

Thanks,

Sukadev
---
From 204ee3c918f8dad46c1e40d2d3730b07c10a87a3 Mon Sep 17 00:00:00 2001
From: Sukadev Bhattiprolu <[email protected]>
Date: Mon, 15 Jan 2018 13:43:18 -0600
Subject: [PATCH 1/2] powerpc: export set_thread_tidr()

Export set_thread_tidr() so it can be used by external modules.

Signed-off-by: Sukadev Bhattiprolu <[email protected]>
---
Changelog [Frederic Barrat] Don't export clear_thread_tidr()

---
arch/powerpc/kernel/process.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index 2010e4c..20df2cb2 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -1592,6 +1592,7 @@ int set_thread_tidr(struct task_struct *t)

return 0;
}
+EXPORT_SYMBOL_GPL(set_thread_tidr);

#endif /* CONFIG_PPC64 */

--
1.8.3.1