From: David Daney <ddaney@caviumnetworks.com>
To: David VomLehn <dvomlehn@cisco.com>
Cc: linux-mips@linux-mips.org, ralf@linux-mips.org
Subject: Re: [PATCH 1/2] MIPS: Preliminary vdso.
Date: Wed, 22 Apr 2009 11:05:22 -0700 [thread overview]
Message-ID: <49EF5C62.9080803@caviumnetworks.com> (raw)
In-Reply-To: <20090422175044.GA28623@cuplxvomd02.corp.sa.net>
David VomLehn wrote:
> On Tue, Apr 21, 2009 at 02:33:24PM -0700, David Daney wrote:
>> This is a preliminary patch to add a vdso to all user processes.
> ...
>> diff --git a/arch/mips/kernel/vdso.c b/arch/mips/kernel/vdso.c
>> new file mode 100644
>> index 0000000..a1f38a6
> ...
>> +static void __init install_trampoline(u32 *tramp, unsigned int sigreturn)
>> +{
>> + tramp[0] = 0x24020000 + sigreturn; /* li v0, sigreturn */
>> + tramp[1] = 0x0000000c; /* syscall */
>> +}
>
> We can do away with magic constants by building on asm/inst.h:
>
> static void __init install_trampoline(union mips_instruction *tramp,
> short sigreturn)
> {
> static struct i_format li_sigreturn = { /* li, v0, sigreturn */
> .opcode = addiu_op,
> .rs = 0, /* zero */
> .rt = 2, /* v0 */
> };
> static struct r_format syscall = { /* syscall */
> .opcode = spec_op,
> .func = syscall_op
> };
> tramp[0].i_format = li_sigreturn;
> tramp[0].i_format.simmediate = sigreturn;
> tramp[1].r_format = syscall;
> }
>
> Admittedly, this isn't really a proper use of the r_format structure. The
> right way is to add another structure to asm/inst.h and use that:
Perhaps using the uasm would be even better.
[...]
>
>> +int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
>> +{
>> + int ret;
>> + unsigned long addr;
>> + struct mm_struct *mm = current->mm;
>> +
>> + down_write(&mm->mmap_sem);
>> +
>> + addr = vdso_addr(mm->start_stack);
>> +
>> + addr = get_unmapped_area(NULL, addr, PAGE_SIZE, 0, 0);
>> + if (IS_ERR_VALUE(addr)) {
>> + ret = addr;
>> + goto up_fail;
>> + }
>> +
>> + ret = install_special_mapping(mm, addr, PAGE_SIZE,
>> + VM_READ|VM_EXEC|
>> + VM_MAYREAD|VM_MAYWRITE|VM_MAYEXEC|
>> + VM_ALWAYSDUMP,
>> + &vdso_page);
>> +
>> + if (ret)
>> + goto up_fail;
>> +
>> + mm->context.vdso = (void *)addr;
>> +
>> +up_fail:
>
> It seems that this is an unexpected condition that probably indicates
> a failure of the expected state of the process at this point. Perhaps
> a pr_err() or pr_warning() would be appropriate?
>
>> + up_write(&mm->mmap_sem);
>> + return ret;
>> +}
Really it should always succeed. Something is seriously wrong if you
cannot map that page and we should probably panic().
David Daney
next prev parent reply other threads:[~2009-04-23 6:54 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-21 21:30 [PATCH 0/2] MIPS: Move signal return trampolines off the stack David Daney
2009-04-21 21:33 ` [PATCH 1/2] MIPS: Preliminary vdso David Daney
2009-04-22 5:24 ` Shane McDonald
2009-04-22 15:18 ` David Daney
2009-04-22 9:35 ` Kevin D. Kissell
2009-04-22 18:01 ` David Daney
2009-04-24 7:20 ` Brian Foster
2009-04-24 7:50 ` Kevin D. Kissell
2009-04-24 15:30 ` David Daney
2009-04-27 7:19 ` Brian Foster
2009-04-27 12:51 ` Kevin D. Kissell
2009-04-27 15:54 ` David Daney
2009-04-27 17:27 ` Kevin D. Kissell
2009-04-27 18:26 ` David Daney
2009-04-22 17:50 ` David VomLehn
2009-04-22 18:05 ` David Daney [this message]
2009-04-22 18:28 ` David VomLehn
2009-04-21 21:33 ` [PATCH 2/2] MIPS: Move signal trampolines off of the stack David Daney
2009-04-22 17:57 ` David VomLehn
2009-04-22 18:04 ` [PATCH 0/2] MIPS: Move signal return trampolines off " David VomLehn
2009-04-22 18:13 ` David Daney
2009-04-22 18:31 ` David VomLehn
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=49EF5C62.9080803@caviumnetworks.com \
--to=ddaney@caviumnetworks.com \
--cc=dvomlehn@cisco.com \
--cc=linux-mips@linux-mips.org \
--cc=ralf@linux-mips.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox