mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Deep Debroy <ddebroy@gmail.com>
To: Randy Dunlap <rdunlap@xenotime.net>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	linux-kernel@vger.kernel.org, kraxel@redhat.com
Subject: Re: code sections beyond .text skipped from alternatives_smp_module_add
Date: Wed, 22 Jun 2011 22:03:12 -0700	[thread overview]
Message-ID: <BANLkTimHCQYE+YGKZzQbOMF__FN+7a_PFQ@mail.gmail.com> (raw)
In-Reply-To: <20110622164502.b5b19e6d.rdunlap@xenotime.net>

On Wed, Jun 22, 2011 at 4:45 PM, Randy Dunlap <rdunlap@xenotime.net> wrote:
> On Wed, 22 Jun 2011 14:58:12 -0700 Deep Debroy wrote:
>
>> On Wed, Jun 22, 2011 at 10:27 AM, Deep Debroy <ddebroy@gmail.com> wrote:
>> > On Wed, Jun 22, 2011 at 6:21 AM, Konrad Rzeszutek Wilk
>> > <konrad.wilk@oracle.com> wrote:
>> >>> > Looking at the code, in module_finalize for x86, only .text seems to
>> >>> > be getting picked for the patching of lock prefixes while other
>> >>> > sections such as .exit.text or .init.text are not. Is there a reason
>> >>> > we skip the other *.text code sections from the lock patches? Would
>> >>> + Gerd Hoffmann who introduced the SMP patching code below back in Jan
>> >>> 2006 as part of 2.6.15.
>> >>
>> >> Whoa, long time ago.
>> >>
>> >>>
>> >>> Any comments on why patching of smp_lock prefixes should be restricted
>> >>> to .text and not other *.text code sections?
>> >>
>> >> It could be that at that time the .exit.text or .init.text did not exist.
>> >>
>> >> As in, the patching code just hasn't kept up. One way of checking that
>> >> is just finding the ancient 2.6.15 code and seeing if there is any
>> >> mention of those extra segments.
>> >>
>> >
>> > Thanks Konrad. One slight correction: after rechecking the kernel
>> > sources, it appears the smp lock prefix code first made it's
>> > appearance in the official trees during 2.6.18. In any case, going
>> > back even to 2.6.16 sources, layout_sections in module.c specially
>> > handled .init prefixed sections from the rest i.e. core sections.
>> > Further, the module struct in include/module/linux.h seems to have had
>> > members such as init_text_size which suggests atleast .init.text did
>> > exit back then as well. While I didn't find any crumbs in the code
>> > that point to the existence of a .exit.text (besides a function
>> > pointer called exit which most likely ended up in the .exit.text), the
>> > ELF headers for Centos 5.6 kernel objects (which uses the 2.6.18
>> > kernel) typically have a .exit.text.
>> >
>> >> Do you have a patch to fix this?
>> >>
>> >
>> > I can work on that. Just wanted to first make sure that there wasn't
>> > any specific reason to avoid patching non .text sections.
>> >
>> > Thanks,
>> > Deep
>> >
>>
>> Some further digging through messages revealed a patch from Randy
>> Dunlap in June 2006: "[PATCH] ignore smp_locks section warnings from
>> init/exit code." Given this patch came in after the smp locking
>> hotpatching mechanism was introduced, there may have been an
>> assumption that instructions that results in entries in smp_locks
>> relocations in the object file should not exist in the init/exit.text
>> sections.
>
> I don't quite see how this patch (below) would affect your problem
> description...
>

I didn't fully understand what the patch addressed. Initially I
thought if a ko had lock prefixed instructions in .init/.exit, it
would lead to entries in .smp_locks section but modpost would report
warnings in that situation. Since there would be these warnings, I
thought a module author would avoid lock prefixed instructions in
.init/.exit prior to the below patch. Sounds like that is not the
case?

>
> commit 35899c57516be6eaa42cc27151767c52d75b2979
> Author: Randy Dunlap <rdunlap@xenotime.net>
> Date:   Wed Jun 7 16:23:26 2006 -0700
>
>    kbuild: ignore smp_locks section warnings from init/exit code
>
>    Add ".smp_locks" section to whitelist as being safe from
>    init and exit sections.
>
> diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
> index d0f86ed..94047bc 100644
> --- a/scripts/mod/modpost.c
> +++ b/scripts/mod/modpost.c
> @@ -821,6 +821,7 @@ static int init_section_ref_ok(const char *name)
>                ".pci_fixup_final",
>                ".pdr",
>                "__param",
> +               ".smp_locks",
>                NULL
>        };
>        /* Start of section names */
> @@ -892,6 +893,7 @@ static int exit_section_ref_ok(const char *name)
>                ".exitcall.exit",
>                ".eh_frame",
>                ".stab",
> +               ".smp_locks",
>                NULL
>        };
>        /* Start of section names */
>
> ---
> ~Randy
> *** Remember to use Documentation/SubmitChecklist when testing your code ***
>

      reply	other threads:[~2011-06-23  5:03 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-21  8:10 Deep Debroy
2011-06-21 18:08 ` Deep Debroy
2011-06-22 13:21   ` Konrad Rzeszutek Wilk
2011-06-22 17:27     ` Deep Debroy
2011-06-22 21:58       ` Deep Debroy
2011-06-22 23:45         ` Randy Dunlap
2011-06-23  5:03           ` Deep Debroy [this message]

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=BANLkTimHCQYE+YGKZzQbOMF__FN+7a_PFQ@mail.gmail.com \
    --to=ddebroy@gmail.com \
    --cc=konrad.wilk@oracle.com \
    --cc=kraxel@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rdunlap@xenotime.net \
    /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

all inboxes | Powered by JetHome®