From: jbarnes@sgi.com (Jesse Barnes)
To: linux-ia64@vger.kernel.org
Subject: Re: [Discontig-devel] [PATCH] another discontig patch
Date: Sun, 22 Jun 2003 05:53:49 +0000 [thread overview]
Message-ID: <marc-linux-ia64-105626126524891@msgid-missing> (raw)
In-Reply-To: <marc-linux-ia64-105618641519753@msgid-missing>
Thanks for looking at this, Christoph. Comments below.
On Sat, Jun 21, 2003 at 10:06:46AM +0100, Christoph Hellwig wrote:
> On Thu, Jun 19, 2003 at 03:28:29PM -0700, Jesse Barnes wrote:
> > #else /* !CONFIG_SMP */
> > cpu_data = __phys_per_cpu_start;
> > #endif /* !CONFIG_SMP */
>
> Maybe this whole code should better be abstracted out then? Also
> the use of smp_processor_id() here is not preempt-safe but I 'm not sure
> whether preemption is already enabled at that point.
I think we're ok preempt wise here, but you're right that it could
probably be abstracted a bit. The issue is that we need to create
per-node data structures containing each node's info before the per-cpu
stuff is initialized, so we do it all before the bootmem allocator is
even setup while we discover memory (see
discontig.c:find_pernode_space() I think).
> > +static struct ia64_node_data *boot_node_data[NR_NODES] __initdata;
> > +static pg_data_t *pg_data_ptr[NR_NODES] __initdata;
> > +static bootmem_data_t bdata[NR_NODES] __initdata;
> > +static unsigned long boot_pernode[NR_NODES] __initdata;
> > +static unsigned long boot_pernodesize[NR_NODES] __initdata;
>
> Maybe it's time for special pernode data like the percpu data?
> Okay, okay, not revelant for this patch yet...
It's already there. It's really necessary to get decent performance,
and you have to watch out for cache aliasing effects.
> > +extern int filter_rsvd_memory(unsigned long start, unsigned long end, void *arg);
>
> Move this to a header?
Yeah, maybe it should be in asm/page.h? Or maybe we need an
asm/discontig.h?
> > +# define pfn_valid(pfn) ((pfn) < max_mapnr)
> > +#endif
>
> Hmm, this ifdef mess look ugly. Can't we use max_low_pfn for the
> !CONFIG_DISCONTIGMEM case, too and simp;ify it to something like:
Agreed, no question. I think this could use some additional cleanup.
> #if defined(CONFIG_VIRTUAL_MEM_MAP)
> extern int ia64_pfn_valid(unsigned long pfn);
> #else
> # define ia64_pfn_valid(pfn) (1)
> #endif
>
> #define pfn_valid(pfn) (((pfn) < max_low_pfn) && ia64_pfn_valid(pfn))
>
> > +
> > +#if defined(CONFIG_DISCONTIGMEM) && defined(CONFIG_VIRTUAL_MEM_MAP)
> > + extern struct page *vmem_map;
> > +# define pfn_to_page(pfn) (vmem_map + (pfn))
> > +# define page_to_pfn(page) ((unsigned long) (page - vmem_map))
> > +#else
> > +# define pfn_to_page(pfn) (mem_map + (pfn))
> > +# define page_to_pfn(page) ((unsigned long) (page - mem_map))
> > +#endif /* CONFIG_DISCONTIGMEM && CONFIG_VIRTUAL_MEM_MAP */
> > +
Though I'm not sure if this is the right way to do it... If discontig
on ia64 is going to depend on virtual mem map, then making this one
#ifdef somehow is probably best.
> Hmm, doesn't CONFIG_VIRTUAL_MEM_MAP && !CONFIG_DISCONTIGMEM need
> vmem_map also. Again, the ifdef mess is horrible :)
>
> What about:
>
> #ifndef CONFIG_VIRTUAL_MEM_MAP
> #define vmem_map mem_map
> #endif
>
> #define pfn_to_page(pfn) (vmem_map + (pfn))
> #define page_to_pfn(page) ((unsigned long) (page - vmem_map))
>
> In fact I wonder what's so special about mem_map that the symbol
> can't be used for the vmalloc'ed version..
Don't know, I'll have to look some more.
> BTW, what about per-node memmaps for SN2 like it's done for NUMAQ?
AFAIK, the per-node memmaps index into the big virtual memmap, but I'd
have to look at it some more. If we made per-node memory maps, then we
probably wouldn't need to use the virtual mem map, except that it makes
dealing with holes a bit easier (since on sn2 even memory within a node
isn't contiguous, and there are big holes between nodes).
> > #ifdef CONFIG_NUMA
> > struct ia64_node_data *node_data;
> > + int nodeid;
> > + struct cpuinfo_ia64 *cpu_data[NR_CPUS];
> > #endif
>
> Should the big array be before the nodeid field?
Good catch, probably not. :)
Thanks,
Jesse
next prev parent reply other threads:[~2003-06-22 5:53 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-06-21 9:06 [Discontig-devel] [PATCH] another discontig patch Christoph Hellwig
2003-06-21 14:48 ` Martin J. Bligh
2003-06-22 5:53 ` Jesse Barnes [this message]
2003-06-22 5:57 ` Jesse Barnes
2003-06-22 15:25 ` Martin J. Bligh
2003-06-23 17:20 ` William Lee Irwin III
2003-07-16 19:29 ` Jesse Barnes
2003-07-16 19:40 ` Matthew Wilcox
2003-07-16 19:51 ` Jesse Barnes
2003-07-16 19:56 ` Erich Focht
2003-07-16 22:37 ` Jesse Barnes
2003-07-17 8:23 ` Erich Focht
2003-07-18 0:16 ` Jesse Barnes
2003-07-18 16:15 ` Erich Focht
2003-07-21 18:46 ` Takayoshi Kochi
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=marc-linux-ia64-105626126524891@msgid-missing \
--to=jbarnes@sgi.com \
--cc=linux-ia64@vger.kernel.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