All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: benh@kernel.crashing.org
Cc: linuxppc-dev@ozlabs.org, Nathan Lynch <ntl@pobox.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	linux-kernel@vger.kernel.org, roland@redhat.com
Subject: Re: [PATCH] elf loader support for auxvec base platform string
Date: Thu, 17 Jul 2008 00:09:51 -0700	[thread overview]
Message-ID: <20080717000951.5f8cab37.akpm@linux-foundation.org> (raw)
In-Reply-To: <1216276539.7740.309.camel@pasglop>

On Thu, 17 Jul 2008 16:35:39 +1000 Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote:

> Hi Linus, Andrew !
> 
> Should I seek somebody's ack before merging a patch like the one below ?

I think it's good to do so.

> I'm a bit reluctant to merge via the powerpc.git tree some changes to
> generic files without at least an ack from somebody else :-)

It tends to happen.  People often don't notice unless it a) crashes or
b) spits warnings or c) screws up my tree or d) all the above plus
more.

> There have been some debate on whether this AT_BASE_PLATFORM is the
> right approach, though I haven't seen them reach any useful conclusion
> and our toolchain people internally are screaming for it...
> 
> Cheers,
> Ben.
> 
> On Tue, 2008-07-15 at 18:58 -0500, Nathan Lynch wrote:
> > Some IBM POWER-based platforms have the ability to run in a
> > mode which mostly appears to the OS as a different processor from the
> > actual hardware.  For example, a Power6 system may appear to be a
> > Power5+, which makes the AT_PLATFORM value "power5+".  This means that
> > programs are restricted to the ISA supported by Power5+;
> > Power6-specific instructions are treated as illegal.
> > 
> > However, some applications (virtual machines, optimized libraries) can
> > benefit from knowledge of the underlying CPU model.  A new aux vector
> > entry, AT_BASE_PLATFORM, will denote the actual hardware.  For
> > example, on a Power6 system in Power5+ compatibility mode, AT_PLATFORM
> > will be "power5+" and AT_BASE_PLATFORM will be "power6".  The idea is
> > that AT_PLATFORM indicates the instruction set supported, while
> > AT_BASE_PLATFORM indicates the underlying microarchitecture.
> > 
> > If the architecture has defined ELF_BASE_PLATFORM, copy that value to
> > the user stack in the same manner as ELF_PLATFORM.
> > 
> > Signed-off-by: Nathan Lynch <ntl@pobox.com>
> > ---
> >  fs/binfmt_elf.c        |   23 +++++++++++++++++++++++
> >  include/linux/auxvec.h |    5 ++++-
> >  2 files changed, 27 insertions(+), 1 deletions(-)
> > 
> > diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
> > index d48ff5f..834c2c4 100644
> > --- a/fs/binfmt_elf.c
> > +++ b/fs/binfmt_elf.c
> > @@ -131,6 +131,10 @@ static int padzero(unsigned long elf_bss)
> >  #define STACK_ALLOC(sp, len) ({ sp -= len ; sp; })
> >  #endif
> >  
> > +#ifndef ELF_BASE_PLATFORM
> > +#define ELF_BASE_PLATFORM NULL
> > +#endif

Please add a comment which explains what this is.

Please also add a comment telling the world in which header file the
architecture *must* define this macro and then ensure that that header is
included into this file by reliable means.  asm/elf.h looks OK.

> >  static int
> >  create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec,
> >  		unsigned long load_addr, unsigned long interp_load_addr)
> > @@ -142,7 +146,9 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec,
> >  	elf_addr_t __user *envp;
> >  	elf_addr_t __user *sp;
> >  	elf_addr_t __user *u_platform;
> > +	elf_addr_t __user *u_base_platform;
> >  	const char *k_platform = ELF_PLATFORM;
> > +	const char *k_base_platform = ELF_BASE_PLATFORM;
> >  	int items;
> >  	elf_addr_t *elf_info;
> >  	int ei_index = 0;
> > @@ -172,6 +178,19 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec,
> >  			return -EFAULT;
> >  	}
> >  
> > +	/*
> > +	 * If this architecture has a "base" platform capability
> > +	 * string, copy it to userspace.
> > +	 */
> > +	u_base_platform = NULL;
> > +	if (k_base_platform) {
> > +		size_t len = strlen(k_base_platform) + 1;
> > +
> > +		u_base_platform = (elf_addr_t __user *)STACK_ALLOC(p, len);
> > +		if (__copy_to_user(u_base_platform, k_base_platform, len))
> > +			return -EFAULT;
> > +	}

>From my reading, this change will result in no additional code
generation on non-powerpc architectures.  This is good.  If poss, could
you please verify that theory and perhaps drop a note in the changelog
about that?


Apart from that - acked-by-me

WARNING: multiple messages have this Message-ID (diff)
From: Andrew Morton <akpm@linux-foundation.org>
To: benh@kernel.crashing.org
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	linuxppc-dev@ozlabs.org, linux-kernel@vger.kernel.org,
	roland@redhat.com, Nathan Lynch <ntl@pobox.com>
Subject: Re: [PATCH] elf loader support for auxvec base platform string
Date: Thu, 17 Jul 2008 00:09:51 -0700	[thread overview]
Message-ID: <20080717000951.5f8cab37.akpm@linux-foundation.org> (raw)
In-Reply-To: <1216276539.7740.309.camel@pasglop>

On Thu, 17 Jul 2008 16:35:39 +1000 Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote:

> Hi Linus, Andrew !
> 
> Should I seek somebody's ack before merging a patch like the one below ?

I think it's good to do so.

> I'm a bit reluctant to merge via the powerpc.git tree some changes to
> generic files without at least an ack from somebody else :-)

It tends to happen.  People often don't notice unless it a) crashes or
b) spits warnings or c) screws up my tree or d) all the above plus
more.

> There have been some debate on whether this AT_BASE_PLATFORM is the
> right approach, though I haven't seen them reach any useful conclusion
> and our toolchain people internally are screaming for it...
> 
> Cheers,
> Ben.
> 
> On Tue, 2008-07-15 at 18:58 -0500, Nathan Lynch wrote:
> > Some IBM POWER-based platforms have the ability to run in a
> > mode which mostly appears to the OS as a different processor from the
> > actual hardware.  For example, a Power6 system may appear to be a
> > Power5+, which makes the AT_PLATFORM value "power5+".  This means that
> > programs are restricted to the ISA supported by Power5+;
> > Power6-specific instructions are treated as illegal.
> > 
> > However, some applications (virtual machines, optimized libraries) can
> > benefit from knowledge of the underlying CPU model.  A new aux vector
> > entry, AT_BASE_PLATFORM, will denote the actual hardware.  For
> > example, on a Power6 system in Power5+ compatibility mode, AT_PLATFORM
> > will be "power5+" and AT_BASE_PLATFORM will be "power6".  The idea is
> > that AT_PLATFORM indicates the instruction set supported, while
> > AT_BASE_PLATFORM indicates the underlying microarchitecture.
> > 
> > If the architecture has defined ELF_BASE_PLATFORM, copy that value to
> > the user stack in the same manner as ELF_PLATFORM.
> > 
> > Signed-off-by: Nathan Lynch <ntl@pobox.com>
> > ---
> >  fs/binfmt_elf.c        |   23 +++++++++++++++++++++++
> >  include/linux/auxvec.h |    5 ++++-
> >  2 files changed, 27 insertions(+), 1 deletions(-)
> > 
> > diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
> > index d48ff5f..834c2c4 100644
> > --- a/fs/binfmt_elf.c
> > +++ b/fs/binfmt_elf.c
> > @@ -131,6 +131,10 @@ static int padzero(unsigned long elf_bss)
> >  #define STACK_ALLOC(sp, len) ({ sp -= len ; sp; })
> >  #endif
> >  
> > +#ifndef ELF_BASE_PLATFORM
> > +#define ELF_BASE_PLATFORM NULL
> > +#endif

Please add a comment which explains what this is.

Please also add a comment telling the world in which header file the
architecture *must* define this macro and then ensure that that header is
included into this file by reliable means.  asm/elf.h looks OK.

> >  static int
> >  create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec,
> >  		unsigned long load_addr, unsigned long interp_load_addr)
> > @@ -142,7 +146,9 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec,
> >  	elf_addr_t __user *envp;
> >  	elf_addr_t __user *sp;
> >  	elf_addr_t __user *u_platform;
> > +	elf_addr_t __user *u_base_platform;
> >  	const char *k_platform = ELF_PLATFORM;
> > +	const char *k_base_platform = ELF_BASE_PLATFORM;
> >  	int items;
> >  	elf_addr_t *elf_info;
> >  	int ei_index = 0;
> > @@ -172,6 +178,19 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr *exec,
> >  			return -EFAULT;
> >  	}
> >  
> > +	/*
> > +	 * If this architecture has a "base" platform capability
> > +	 * string, copy it to userspace.
> > +	 */
> > +	u_base_platform = NULL;
> > +	if (k_base_platform) {
> > +		size_t len = strlen(k_base_platform) + 1;
> > +
> > +		u_base_platform = (elf_addr_t __user *)STACK_ALLOC(p, len);
> > +		if (__copy_to_user(u_base_platform, k_base_platform, len))
> > +			return -EFAULT;
> > +	}

>From my reading, this change will result in no additional code
generation on non-powerpc architectures.  This is good.  If poss, could
you please verify that theory and perhaps drop a note in the changelog
about that?


Apart from that - acked-by-me

  reply	other threads:[~2008-07-17  7:10 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-15 23:58 AT_BASE_PLATFORM (v2) Nathan Lynch
2008-07-15 23:58 ` [PATCH] elf loader support for auxvec base platform string Nathan Lynch
2008-07-17  6:35   ` Benjamin Herrenschmidt
2008-07-17  6:35     ` Benjamin Herrenschmidt
2008-07-17  7:09     ` Andrew Morton [this message]
2008-07-17  7:09       ` Andrew Morton
2008-07-17 17:39       ` Nathan Lynch
2008-07-17 17:39         ` Nathan Lynch
2008-07-17 22:19       ` [PATCH v3] " Nathan Lynch
2008-07-17 22:19         ` Nathan Lynch
2008-07-17 22:42         ` Andrew Morton
2008-07-17 22:42           ` Andrew Morton
2008-07-17 23:35           ` John Reiser
2008-07-17 23:35             ` John Reiser
2008-07-18 18:28             ` Nathan Lynch
2008-07-18 18:28               ` Nathan Lynch
2008-07-18 20:31               ` John Reiser
2008-07-18 20:31                 ` John Reiser
2008-07-18 20:52                 ` Andrew Morton
2008-07-18 20:52                   ` Andrew Morton
2008-07-21  3:24               ` Benjamin Herrenschmidt
2008-07-21  3:24                 ` Benjamin Herrenschmidt
2008-07-21  3:40                 ` Andrew Morton
2008-07-21  3:40                   ` Andrew Morton
2008-07-21  9:33                   ` Benjamin Herrenschmidt
2008-07-21  9:33                     ` Benjamin Herrenschmidt
2008-07-21 18:48           ` [PATCH v4] " Nathan Lynch
2008-07-21 18:48             ` Nathan Lynch
2008-07-22  2:03             ` Benjamin Herrenschmidt
2008-07-22  2:03               ` Benjamin Herrenschmidt
2008-07-17 16:10     ` [PATCH] " Linus Torvalds
2008-07-17 16:10       ` Linus Torvalds
2008-07-17 19:35       ` Nathan Lynch
2008-07-17 19:35         ` Nathan Lynch
2008-07-21  3:19       ` Benjamin Herrenschmidt
2008-07-21  3:19         ` Benjamin Herrenschmidt
2008-07-15 23:58 ` [PATCH] enable AT_BASE_PLATFORM aux vector for powerpc Nathan Lynch

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080717000951.5f8cab37.akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=benh@kernel.crashing.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=ntl@pobox.com \
    --cc=roland@redhat.com \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.