public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Helge Deller <deller@gmx.de>
To: Rusty Russell <rusty@rustcorp.com.au>
Cc: linux-parisc <linux-parisc@vger.kernel.org>,
	Linux Kernel Development <linux-kernel@vger.kernel.org>,
	Kyle McMartin <kyle@mcmartin.ca>,
	Randolph Chung <randolph@tausq.org>,
	Linus <torvalds@linux-foundation.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Sam Ravnborg <sam@ravnborg.org>,
	John David Anglin <dave@hiauly1.hia.nrc.ca>
Subject: Re: [PATCH] parisc: fix module loading failure of large kernel modules (take 4)
Date: Wed, 31 Dec 2008 15:13:56 +0100	[thread overview]
Message-ID: <495B7E24.9010802@gmx.de> (raw)
In-Reply-To: <200901010002.41477.rusty@rustcorp.com.au>

Rusty Russell wrote:
> Not quite what I had in mind... let me show you:
> ...
> Otherwise I'd have called it "arch_module_extra_size()".

Hmm, this needs more thinking then.

So, in summary this would be your proposed change (?):

+/* Bytes needed for a section: default is just the section size. */
+unsigned int __attribute__((weak))
+arch_module_section_size(struct module *mod, Elf_Shdr *sechdrs, unsigned int sec)
+{
+       return sechdrs[sec].sh_size;
+}
+
 /* Update size with this section: return offset. */
-static long get_offset(unsigned int *size, Elf_Shdr *sechdr)
+static long get_offset(struct module *mod, unsigned int *size,
+               Elf_Shdr *sechdr, unsigned int section)
 {
        long ret;

        ret = ALIGN(*size, sechdr->sh_addralign ?: 1);
-       *size = ret + sechdr->sh_size;
+       *size = ret + arch_module_section_size(mod, sechdr, section);
        return ret;
 }


This would mean that I can increase the section size in the arch-specific function
by returning a bigger value than sh_size.
This would give me space at the end of the section, but not at the beginning 
(which is what I need), as sh_entsize (the offset into memory) will stay the 
same as before.
Example: Having an initial value for core_size of zero, the code bits of the 
very first section are still copied into the very first byte in memory, leaving
me no room for the stubs.

The important part of get_offset() is, which value is returned to the caller.
Let's try another example which would work for me:

+static long get_offset(struct module *mod, unsigned int *size,
+               Elf_Shdr *sechdr, unsigned int section)
 {
-       long ret;
+       long ret, sect_size;

+       sect_size = arch_module_section_size(mod, sechdr, section);
+       *size += (sect_size - sechdr->sh_size);
        ret = ALIGN(*size, sechdr->sh_addralign ?: 1);
        *size = ret + sechdr->sh_size;
	return ret;

IMHO, this is hackish and ugly.

A last option for me would be to set core_size to the initial value
of bytes which I would need for section 1 and returning in 
arch_module_section_size() when asked for the size of section 1 the 
sum of sh_size[section 1] + additional_bytes_needed_for_section_2,
and so on...

Any proposals?

Helge

  reply	other threads:[~2008-12-31 14:14 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-12-29 20:34 [PATCH] parisc: fix module loading failure of large kernel modules (take 2) Helge Deller
2008-12-29 20:43 ` [PATCH 1/2] module.c: fix module loading failure of large " Helge Deller
     [not found]   ` <20081230180724.GA15235@bombadil.infradead.org>
2008-12-30 18:10     ` Kyle McMartin
2008-12-30 18:18       ` Helge Deller
2008-12-30 19:42         ` [PATCH 1/2] module.c: fix module loading failure of large modules (take 3) Helge Deller
2008-12-29 20:45 ` [PATCH 2/2] parisc: fix module loading failure of large modules (take 2) Helge Deller
2008-12-30 19:55   ` [PATCH 2/2] parisc: fix module loading failure of large modules (take 3) Helge Deller
2008-12-30 22:45 ` [PATCH] parisc: fix module loading failure of large kernel modules (take 2) Rusty Russell
2008-12-30 23:02   ` Helge Deller
2008-12-31  4:08     ` Rusty Russell
2008-12-31 11:31   ` [PATCH] parisc: fix module loading failure of large kernel modules (take 4) Helge Deller
2008-12-31 11:36     ` [PATCH 2/2] parisc: fix module loading failure of large modules Helge Deller
2008-12-31 13:32     ` [PATCH] parisc: fix module loading failure of large kernel modules (take 4) Rusty Russell
2008-12-31 14:13       ` Helge Deller [this message]
2009-01-01  0:52         ` Rusty Russell
2009-01-01 12:02           ` Helge Deller
2008-12-31 17:29     ` Linus Torvalds
2008-12-31 17:36       ` Roland Dreier
2008-12-31 17:47         ` Linus Torvalds
2008-12-31 18:02           ` Linus Torvalds
2008-12-31 18:11           ` Sam Ravnborg
2009-01-02 11:31             ` Ingo Molnar
2008-12-31 18:54           ` Andrew Morton
2008-12-31 21:22             ` Linus Torvalds
2008-12-31 22:14               ` David Miller
2009-01-02 11:55                 ` [PATCH] kbuild: Disallow GCC 4.1.0 / 4.1.1 Ingo Molnar
2009-01-02 13:43                   ` Bartlomiej Zolnierkiewicz
2009-01-02 15:21                     ` [PATCH] kbuild: Remove gcc 4.1.0 quirk from init/main.c Ingo Molnar
2009-01-02 18:05                       ` Sam Ravnborg
2009-01-02 16:49                   ` [PATCH] kbuild: Disallow GCC 4.1.0 / 4.1.1 Linus Torvalds
2009-01-02 17:38                     ` Linus Torvalds
2009-01-02 17:46                       ` Ingo Molnar
2009-01-02 17:54                         ` [PATCH] Disallow gcc versions 3.{0,1} Ingo Molnar
2009-01-02 17:58                         ` [PATCH] kbuild: Disallow GCC 4.1.0 / 4.1.1 Linus Torvalds
2009-01-02 18:01                           ` Ingo Molnar
2009-01-02 18:05                             ` Linus Torvalds
2009-01-02 18:08                               ` Linus Torvalds
2009-01-02 19:54                               ` Willy Tarreau
2009-01-02 20:18                                 ` Linus Torvalds
2009-01-02 17:57                       ` Sam Ravnborg
2009-01-02 18:04                         ` Linus Torvalds
2009-01-02 18:27                           ` Sam Ravnborg
2009-01-02 18:28                             ` Randy Dunlap
2009-01-02 18:51                           ` Al Viro
2009-01-02 19:14                             ` Andi Kleen
2009-01-02 22:52                               ` Al Viro
2009-01-03 14:03                           ` Krzysztof Halasa
2009-01-02 18:22                         ` Ingo Molnar
2009-01-02 18:29                           ` Sam Ravnborg
2009-01-02 18:33                             ` Ingo Molnar
2009-01-02 19:05                               ` Detlef Riekenberg
2009-01-02 22:27                         ` Benjamin Herrenschmidt
2009-01-02 22:37                           ` Sam Ravnborg
2009-01-02 17:44                     ` Ingo Molnar
2009-01-01 14:24               ` [PATCH] parisc: fix module loading failure of large kernel modules (take 4) Ingo Molnar
2009-01-01 16:37                 ` Andrew Morton
2008-12-31 17:39       ` Helge Deller
2008-12-31 18:24       ` James Bottomley
2008-12-31 22:16       ` Rusty Russell
2009-01-01  7:12       ` Jeremy Fitzhardinge

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=495B7E24.9010802@gmx.de \
    --to=deller@gmx.de \
    --cc=akpm@linux-foundation.org \
    --cc=dave@hiauly1.hia.nrc.ca \
    --cc=kyle@mcmartin.ca \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-parisc@vger.kernel.org \
    --cc=randolph@tausq.org \
    --cc=rusty@rustcorp.com.au \
    --cc=sam@ravnborg.org \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox