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

Re: [Xen-ia64-devel] Re: [patch 01/12] ia64: kexec: Define macros for EFI RID



On Fri, Apr 25, 2008 at 01:57:04PM +1000, Simon Horman wrote:

Hi,

I try to fix the comments according to my knowledge.

[...]
> +/*
> + * According to xen/arch/ia64/xen/regionreg.c the RID space is broken
> + * up into chunks, one per domain, and 0th block is for Xen. The 0th block
> + * is broken up into small blocks, which are used for metaphisical mappins,

 metaphysical

> + * except for the 0th small block which is used by Xen.
> + *
> + * By default each large block is 18 bits wide, which is also the minimum
> + * width. Each small block is by default 1/64 the width of a large block,
> + * which is also the maximum devision. In other words each small block is

 division (?)

> + * at least 12 bits wide.
> + *
> + * What isn't obvious to me is how the 0th small block is divided up.

 small block 0 was not used (except during Xen boot).

> + * While xen/arch/ia64/xen/regionreg.c seems to handle allocating RIDs for
> + * domains, they hypervisor's RIDs seem to be handled in a bit more of an
 their (?)
> + * ad-hoc fashion.

No, there are no hypervisor's RIDs.  The hypervisor always use domain regions.

> + * In xen/include/asm-ia64/mmu_context.h there is IA64_REGION_ID_KERNEL.
> + * This is used to form an RID in the follwing way:
> + *
> + * a: bit 0:     VHPT
> + * b: bit 1:     reserved (0)
> + * c: bits 2-7:  log 2 page_size
> + * d: bits 8-10: Region   (0-7, corresponding to the 8 region registers)
> + * e: bits 10-N: IA64_REGION_ID_KERNEL (0)
> + * f: bits N-53: reserved (0)

To my best knowledge, this is linux specific (ie not used by Xen except during
boot time).  So I suppose you are explaining how to use an RID compatible
with Linux ?

> + *
> + * N is defined by the platform. Areas c and d above form the RID, it just
> + * happens to be further divided in two due to the way that its value is
> + * calculated buy the code. This subdivision does not reflect any hardware

by

> + * limitation. The hardware sets the limit of the with of this area to
> + * between 18 and 24 bits.
> + *
> + * As we are only using the first 4 bits (3 bits in area d and 1 bit in
> + * area e) of RID space it easily fits inside the 0th small block, which
> + * is 12 bits wide.
> + *
> + * For EFI we use the following RID
> + *
> + * a: bit 0:     VHPT (1)
> + * b: bit 1:     reserved (0)
> + * c: bits 2-7:  log 2 page_size
> + * d: bits 8-10: Region   (0-7, corresponding to the 8 region registers) +
> + * e: bits 10-N: IA64_REGION_ID_KERNEL (1)
> + * f: bits N-53: reserved (0)
> + *
> + * + Only 0 is used as we only need one RID. Its not really important
> + *   what this number is, so long as its between 0 and 7.
> + *
> + * The nice thing about this is that we are still only using 4 bits of RID
> + * space, so it shouldn't have any chance of running into an adjacent
> + * small-block.
> + *
> + * It would actually be possible to just use a IA64_REGION_ID_KERNEL
> + * based RID for EFI use. The important thing is that it is in the 0th
> + * small block, and that not available to domains. But as we have
> + * lots of space, its seems to be nice and clean to just use a separate
> + * RID for EFI.
> + *
> + * This can be trivially changed by updating the definition of XEN_EFI_RID.

Tristan.

_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.