From: "H. Peter Anvin" <hpa@zytor.com>
To: Yinghai Lu <yinghai@kernel.org>
Cc: Ingo Molnar <mingo@elte.hu>, Thomas Gleixner <tglx@linutronix.de>,
Andrew Morton <akpm@linux-foundation.org>,
Jesse Barnes <jbarnes@virtuousgeek.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 1/9] x86: move range related operation to one file
Date: Fri, 18 Dec 2009 12:10:39 -0800 [thread overview]
Message-ID: <4B2BE1BF.60803@zytor.com> (raw)
In-Reply-To: <4B2B4F85.5030901@kernel.org>
On 12/18/2009 01:46 AM, Yinghai Lu wrote:
> +
> +struct range {
> + u64 start;
> + u64 end;
> +};
Okay, this does bring up two things that I have long griped about.
Firstly, I don't think this is the proper data structure. Even worse,
the range operations take *inclusive* ranges (e.g. 0x0000 to 0xffff is
64K, not 0x0000 to 0x10000). It would be one thing if it only affected
the internal representation, but as written, this is exposed through the
interfaces, too.
As far as the choice of data structures, I have used in other places,
with very good success, a data structure which looks like:
struct {
u64 start;
u32 attr;
};
Note that there is no end: the end is always given by an end token. The
"attr" here was an e820 attribute (or 0 for no attribute), but the
payload can be almost anything -- for a simple include/exclude it can
just be boolean.
This data structures doesn't permit things like out-of-order ranges,
overlapping ranges, and so on, and that's a good thing; it means the
data structure itself can never be ambiguous, and the interfaces clean
out most errors inherently.
http://git.kernel.org/?p=boot/syslinux/syslinux.git;a=blob;f=com32/lib/syslinux/zonelist.c;hb=HEAD
... contains an implementation of this data structure using linked lists
for internal storage, and
http://git.kernel.org/?p=boot/syslinux/syslinux.git;a=blob;f=memdisk/e820func.c;hb=HEAD
... contains one based on arrays. I'm not saying these should be
applied directly, but I think the equivalent concept might be
worthwhile, not just for this but also for the e820 memrange code.
-hpa
next prev parent reply other threads:[~2009-12-18 20:12 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <4B2B4C19.6010402@kernel.org>
2009-12-18 9:46 ` [PATCH 1/9] x86: move range related operation to one file Yinghai Lu
2009-12-18 20:10 ` H. Peter Anvin [this message]
2009-12-18 20:17 ` Yinghai Lu
2009-12-18 21:26 ` H. Peter Anvin
2009-12-18 23:47 ` Yinghai Lu
2009-12-19 0:25 ` H. Peter Anvin
2009-12-19 0:27 ` Yinghai Lu
2009-12-19 0:34 ` H. Peter Anvin
2009-12-18 9:46 ` [PATCH 2/9] x86: check range in update range Yinghai Lu
2009-12-18 17:23 ` Jesse Barnes
2009-12-18 19:39 ` Yinghai Lu
2009-12-18 9:47 ` [PATCH 3/9] x86: call early_res_to_bootmem one time Yinghai Lu
2009-12-18 9:47 ` [PATCH 4/9] x86: introduce max_early_res and early_res_count Yinghai Lu
2009-12-18 9:47 ` [PATCH 5/9] x86: dynamic increase early_res array size -v2 Yinghai Lu
2009-12-18 9:47 ` [PATCH 6/9] x86: print bootmem free before pci_iommu_alloc and free_all_bootmem -v2 Yinghai Lu
2009-12-18 9:48 ` [PATCH 7/9] x86: make early_node_mem get mem > 4g if possible -v2 Yinghai Lu
2009-12-18 9:48 ` [PATCH 8/9] x86: only call dma32_reserve_bootmem 64bit !CONFIG_NUMA Yinghai Lu
2009-12-18 9:48 ` [PATCH 9/9] x86: make 64 bit use early_res instead of bootmem before slab Yinghai Lu
2009-12-20 9:18 ` [PATCH 1/2] sparsemem: put usemap for one node together Yinghai Lu
2009-12-20 9:20 ` [PATCH 2/2] sparsemem: put mem map " Yinghai Lu
2009-12-28 8:35 ` Ingo Molnar
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=4B2BE1BF.60803@zytor.com \
--to=hpa@zytor.com \
--cc=akpm@linux-foundation.org \
--cc=jbarnes@virtuousgeek.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=tglx@linutronix.de \
--cc=yinghai@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