diff mbox

[3/3] thread_info: include <current.h> for THREAD_INFO_IN_TASK

Message ID 1476901693-8492-4-git-send-email-mark.rutland@arm.com
State Superseded
Headers show

Commit Message

Mark Rutland Oct. 19, 2016, 6:28 p.m. UTC
When CONFIG_THREAD_INFO_IN_TASK is selected, the current_thread_info()
macro relies on current having been defined prior to its use. However,
not all users of current_thread_info() include <asm/current.h>, and thus
current is not guaranteed to be defined.

When CONFIG_THREAD_INFO_IN_TASK is not selected, it's possible that
get_current() / current are based upon current_thread_info(), and
<asm/current.h> includes <asm/thread_info.h>. Thus always including
<asm/current.h> would result in circular dependences on some platforms.

To ensure both cases work, this patch includes <asm/current.h>, but only
when CONFIG_THREAD_INFO_IN_TASK is selected.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>

Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Kees Cook <keescook@chromium.org> 
---
 include/linux/thread_info.h | 1 +
 1 file changed, 1 insertion(+)

-- 
1.9.1

Comments

Heiko Carstens Oct. 20, 2016, 10:29 a.m. UTC | #1
On Wed, Oct 19, 2016 at 07:28:13PM +0100, Mark Rutland wrote:
> When CONFIG_THREAD_INFO_IN_TASK is selected, the current_thread_info()

> macro relies on current having been defined prior to its use. However,

> not all users of current_thread_info() include <asm/current.h>, and thus

> current is not guaranteed to be defined.

> 

> When CONFIG_THREAD_INFO_IN_TASK is not selected, it's possible that

> get_current() / current are based upon current_thread_info(), and

> <asm/current.h> includes <asm/thread_info.h>. Thus always including

> <asm/current.h> would result in circular dependences on some platforms.

> 

> To ensure both cases work, this patch includes <asm/current.h>, but only

> when CONFIG_THREAD_INFO_IN_TASK is selected.

> 

> Signed-off-by: Mark Rutland <mark.rutland@arm.com>

> Cc: Andrew Morton <akpm@linux-foundation.org>

> Cc: Andy Lutomirski <luto@kernel.org>

> Cc: Heiko Carstens <heiko.carstens@de.ibm.com>

> Cc: Kees Cook <keescook@chromium.org> 

> ---

>  include/linux/thread_info.h | 1 +

>  1 file changed, 1 insertion(+)

> 

> diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h

> index c75c6ab..ef1f4b0 100644

> --- a/include/linux/thread_info.h

> +++ b/include/linux/thread_info.h

> @@ -12,6 +12,7 @@

>  #include <linux/restart_block.h>

>  

>  #ifdef CONFIG_THREAD_INFO_IN_TASK

> +#include <asm/current.h>

>  #define current_thread_info() ((struct thread_info *)current)

>  #endif


FWIW:
Acked-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Mark Rutland Oct. 24, 2016, 9:49 a.m. UTC | #2
On Thu, Oct 20, 2016 at 12:29:26PM +0200, Heiko Carstens wrote:
> On Wed, Oct 19, 2016 at 07:28:13PM +0100, Mark Rutland wrote:

> > When CONFIG_THREAD_INFO_IN_TASK is selected, the current_thread_info()

> > macro relies on current having been defined prior to its use. However,

> > not all users of current_thread_info() include <asm/current.h>, and thus

> > current is not guaranteed to be defined.

> > 

> > When CONFIG_THREAD_INFO_IN_TASK is not selected, it's possible that

> > get_current() / current are based upon current_thread_info(), and

> > <asm/current.h> includes <asm/thread_info.h>. Thus always including

> > <asm/current.h> would result in circular dependences on some platforms.

> > 

> > To ensure both cases work, this patch includes <asm/current.h>, but only

> > when CONFIG_THREAD_INFO_IN_TASK is selected.

> > 

> > Signed-off-by: Mark Rutland <mark.rutland@arm.com>

> > Cc: Andrew Morton <akpm@linux-foundation.org>

> > Cc: Andy Lutomirski <luto@kernel.org>

> > Cc: Heiko Carstens <heiko.carstens@de.ibm.com>

> > Cc: Kees Cook <keescook@chromium.org> 

> > ---

> >  include/linux/thread_info.h | 1 +

> >  1 file changed, 1 insertion(+)

> > 

> > diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h

> > index c75c6ab..ef1f4b0 100644

> > --- a/include/linux/thread_info.h

> > +++ b/include/linux/thread_info.h

> > @@ -12,6 +12,7 @@

> >  #include <linux/restart_block.h>

> >  

> >  #ifdef CONFIG_THREAD_INFO_IN_TASK

> > +#include <asm/current.h>

> >  #define current_thread_info() ((struct thread_info *)current)

> >  #endif

> 

> FWIW:

> Acked-by: Heiko Carstens <heiko.carstens@de.ibm.com>


Cheers!

Would you be happy to do the same for patch 2?

Once these have a couple more acks I'll drop these on a (hopefully)
stable branch, tagged so that we can both use them as a base.

Thanks,
Mark.
Andy Lutomirski Oct. 27, 2016, 11:13 p.m. UTC | #3
On Wed, Oct 19, 2016 at 11:28 AM, Mark Rutland <mark.rutland@arm.com> wrote:
> When CONFIG_THREAD_INFO_IN_TASK is selected, the current_thread_info()

> macro relies on current having been defined prior to its use. However,

> not all users of current_thread_info() include <asm/current.h>, and thus

> current is not guaranteed to be defined.

>

> When CONFIG_THREAD_INFO_IN_TASK is not selected, it's possible that

> get_current() / current are based upon current_thread_info(), and

> <asm/current.h> includes <asm/thread_info.h>. Thus always including

> <asm/current.h> would result in circular dependences on some platforms.

>

> To ensure both cases work, this patch includes <asm/current.h>, but only

> when CONFIG_THREAD_INFO_IN_TASK is selected.


Reviewed-by: Andy Lutomirski <luto@kernel.org>


although it would be nice if you moved your description of why the
include is conditional into a comment.

--Andy
Mark Rutland Oct. 28, 2016, 10:48 a.m. UTC | #4
On Thu, Oct 27, 2016 at 04:13:49PM -0700, Andy Lutomirski wrote:
> On Wed, Oct 19, 2016 at 11:28 AM, Mark Rutland <mark.rutland@arm.com> wrote:

> > When CONFIG_THREAD_INFO_IN_TASK is selected, the current_thread_info()

> > macro relies on current having been defined prior to its use. However,

> > not all users of current_thread_info() include <asm/current.h>, and thus

> > current is not guaranteed to be defined.

> >

> > When CONFIG_THREAD_INFO_IN_TASK is not selected, it's possible that

> > get_current() / current are based upon current_thread_info(), and

> > <asm/current.h> includes <asm/thread_info.h>. Thus always including

> > <asm/current.h> would result in circular dependences on some platforms.

> >

> > To ensure both cases work, this patch includes <asm/current.h>, but only

> > when CONFIG_THREAD_INFO_IN_TASK is selected.

> 

> Reviewed-by: Andy Lutomirski <luto@kernel.org>


Cheers!

> although it would be nice if you moved your description of why the

> include is conditional into a comment.


Agreed. I've folded in the below:

#ifdef CONFIG_THREAD_INFO_IN_TASK
/*
 * For CONFIG_THREAD_INFO_IN_TASK kernels we need <asm/current.h> for the
 * definition of current, but for !CONFIG_THREAD_INFO_IN_TASK kernels,
 * including <asm/current.h> can cause a circular dependency on some platforms.
 */
#include <asm/current.h>
#define current_thread_info() ((struct thread_info *)current)
#endif

Thanks,
Mark.
diff mbox

Patch

diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h
index c75c6ab..ef1f4b0 100644
--- a/include/linux/thread_info.h
+++ b/include/linux/thread_info.h
@@ -12,6 +12,7 @@ 
 #include <linux/restart_block.h>
 
 #ifdef CONFIG_THREAD_INFO_IN_TASK
+#include <asm/current.h>
 #define current_thread_info() ((struct thread_info *)current)
 #endif