Re: [PATCH 1/2] module.c: fix module loading failure of large modules (take 2)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Ugh, I fail at typing, resending for rusty's benefit.

On Tue, Dec 30, 2008 at 01:07:24PM -0500, Kyle McMartin wrote:
> [Adding rusty to CC]
> 
> On Mon, Dec 29, 2008 at 09:43:12PM +0100, Helge Deller wrote:
> > +unsigned long module_additional_section_size(struct module *mod,
> > +					     unsigned int section);
> > +
> 
> I think this would be more palatable as
> 
> #ifdef HAVE_MODULE_SECTION_STUBS
> unsigned long module_additional_section_size(struct module *mod,
> 	unsigned int section);
> #else
> static inline unsigned long module_additional_section_size(struct module *mod,
> 	unsigned int section)
> {
> 	return 0;
> }
> #endif
> 
> and removing the conditional in kernel/module.c, possibly the symbol
> should be "arch_module_a..." just to make it clear to anyone reading.
> 
> Anyway, it's up to rusty.
> 
> Rusty, we'd like to get this patch in, so I can merge the dependent
> parisc-specific patch.
> 
> regards, Kyle
> 
> >  /* Allocator used for allocating struct module, core sections and init
> >     sections.  Returns NULL on failure. */
> >  void *module_alloc(unsigned long size);
> > diff --git a/init/Kconfig b/init/Kconfig
> > index f763762..5383815 100644
> > --- a/init/Kconfig
> > +++ b/init/Kconfig
> > @@ -908,6 +908,9 @@ config MODULE_SRCVERSION_ALL
> >  	  the version).  With this option, such a "srcversion" field
> >  	  will be created for all modules.  If unsure, say N.
> >  
> > +config HAVE_MODULE_SECTION_STUBS
> > +	bool
> > +
> >  config KMOD
> >  	def_bool y
> >  	help
> > diff --git a/kernel/module.c b/kernel/module.c
> > index 1f4cc00..4b86308 100644
> > --- a/kernel/module.c
> > +++ b/kernel/module.c
> > @@ -1579,10 +1579,15 @@ static int simplify_symbols(Elf_Shdr *sechdrs,
> >  }
> >  
> >  /* 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;
> >  
> > +#ifdef CONFIG_HAVE_MODULE_SECTION_STUBS
> > +	/* allocate some memory for stubs in front of each section */
> > +	*size += module_additional_section_size(mod, section);
> > +#endif
> >  	ret = ALIGN(*size, sechdr->sh_addralign ?: 1);
> >  	*size = ret + sechdr->sh_size;
> >  	return ret;
> > @@ -1622,7 +1627,7 @@ static void layout_sections(struct module *mod,
> >  			    || strncmp(secstrings + s->sh_name,
> >  				       ".init", 5) == 0)
> >  				continue;
> > -			s->sh_entsize = get_offset(&mod->core_size, s);
> > +			s->sh_entsize = get_offset(mod, &mod->core_size, s, i);
> >  			DEBUGP("\t%s\n", secstrings + s->sh_name);
> >  		}
> >  		if (m == 0)
> > @@ -1640,7 +1645,7 @@ static void layout_sections(struct module *mod,
> >  			    || strncmp(secstrings + s->sh_name,
> >  				       ".init", 5) != 0)
> >  				continue;
> > -			s->sh_entsize = (get_offset(&mod->init_size, s)
> > +			s->sh_entsize = (get_offset(mod, &mod->init_size, s, i)
> >  					 | INIT_OFFSET_MASK);
> >  			DEBUGP("\t%s\n", secstrings + s->sh_name);
> >  		}
> > 
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-parisc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux SoC]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux