All of lore.kernel.org
 help / color / mirror / Atom feed
* How to allocate contiguous RAM in pv guests
@ 2007-01-29 14:54 Uli
  2007-01-30 10:28 ` Guy Zana
  0 siblings, 1 reply; 3+ messages in thread
From: Uli @ 2007-01-29 14:54 UTC (permalink / raw)
  To: xen-devel

Hi!

I'm working on a patch to get the GART as an IOMMU working in linux/dom0.
However, the problem I describe below applies equally to the software
IOMMU.

If the BIOS doesn't setup the aperture it has to be allocated from
memory. Therefore, one needs a contiguous memory region, currently 64MB.
The software IOMMU always needs a contiguous memory region (same size).

In order to do this, the hypercall XENMEM_exchange is given a bunch of
mfns and returns a (host physically) contiguous memory region.
Unfortunately, the implementation allocates the contiguous memory from
the heap first and then returns the discontiguous mfns to it. Therefore,
there has to be a (in this case) 64MB chunk of memory in the xen heap
available for the call to succeed.
I have observed that on most machines exactly one such chunk is
available. However, I've also had a machine where this is not the case.

It seems to me that using the xen heap is not the right thing to do.
The only other option I can think of is scanning dom0's memory for a
(host physical) chunk of memory that
a) belongs entirely to it and
b) is free

Once such a chunk is found, one would have to map it contiguously into
virtual memory.  Actually, the latter is only neccessary for the
software IOMMU. The GART aperture doesn't have to be in virtual memory
since it is only accessed from devices.

Thanks for any suggestions,

Uli

^ permalink raw reply	[flat|nested] 3+ messages in thread

* RE: How to allocate contiguous RAM in pv guests
  2007-01-29 14:54 How to allocate contiguous RAM in pv guests Uli
@ 2007-01-30 10:28 ` Guy Zana
  2007-01-30 16:31   ` Uli
  0 siblings, 1 reply; 3+ messages in thread
From: Guy Zana @ 2007-01-30 10:28 UTC (permalink / raw)
  To: Uli, xen-devel

Hi,

An idea is to scan the bios e820 table and split a large block to reserve those 64MB.
Than, you can mark this block as E820_GART or something and add your own allocator next to the xen-heap allocator.
To map it contigiously, you can use the fixmap from the I/O remapping area.
Is this what you need?

Thanks,
Guy. 

> -----Original Message-----
> From: xen-devel-bounces@lists.xensource.com 
> [mailto:xen-devel-bounces@lists.xensource.com] On Behalf Of Uli
> Sent: Monday, January 29, 2007 4:55 PM
> To: xen-devel@lists.xensource.com
> Subject: [Xen-devel] How to allocate contiguous RAM in pv guests
> 
> Hi!
> 
> I'm working on a patch to get the GART as an IOMMU working in 
> linux/dom0.
> However, the problem I describe below applies equally to the 
> software IOMMU.
> 
> If the BIOS doesn't setup the aperture it has to be allocated 
> from memory. Therefore, one needs a contiguous memory region, 
> currently 64MB.
> The software IOMMU always needs a contiguous memory region 
> (same size).
> 
> In order to do this, the hypercall XENMEM_exchange is given a 
> bunch of mfns and returns a (host physically) contiguous 
> memory region.
> Unfortunately, the implementation allocates the contiguous 
> memory from the heap first and then returns the discontiguous 
> mfns to it. Therefore, there has to be a (in this case) 64MB 
> chunk of memory in the xen heap available for the call to succeed.
> I have observed that on most machines exactly one such chunk 
> is available. However, I've also had a machine where this is 
> not the case.
> 
> It seems to me that using the xen heap is not the right thing to do.
> The only other option I can think of is scanning dom0's 
> memory for a (host physical) chunk of memory that
> a) belongs entirely to it and
> b) is free
> 
> Once such a chunk is found, one would have to map it 
> contiguously into virtual memory.  Actually, the latter is 
> only neccessary for the software IOMMU. The GART aperture 
> doesn't have to be in virtual memory since it is only 
> accessed from devices.
> 
> Thanks for any suggestions,
> 
> Uli
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: How to allocate contiguous RAM in pv guests
  2007-01-30 10:28 ` Guy Zana
@ 2007-01-30 16:31   ` Uli
  0 siblings, 0 replies; 3+ messages in thread
From: Uli @ 2007-01-30 16:31 UTC (permalink / raw)
  To: Guy Zana; +Cc: xen-devel

On Tue 30.01.07 05:28, Guy Zana wrote:
> Hi,
> 
> An idea is to scan the bios e820 table and split a large block to reserve those 64MB.
> Than, you can mark this block as E820_GART or something and add your own allocator next to the xen-heap allocator.
> To map it contigiously, you can use the fixmap from the I/O remapping area.
> Is this what you need?

Yeah, I would have needed something along these lines.
However, I just found out that there's an adaptive mechanism due to
which I don't need to implement anything at all.

Xen will (unless dom0_mem is provided) keep 1/16th of the memory free
and in the heap. For a >4GB system, this is at least 256mb, leaving
enough memory for the aperture. This mechanism is also the reason why I
experienced a case where there wasn't enough memory...that was on a
system with 1GB memory, 1/16th being 64MB. Since the GART is usually
deactivated on systems with less than 4GB RAM, there is no problem at
all.

I'm relieved :)
Thanks for your help,

Uli

> 
> Thanks,
> Guy. 
> 
> > -----Original Message-----
> > From: xen-devel-bounces@lists.xensource.com 
> > [mailto:xen-devel-bounces@lists.xensource.com] On Behalf Of Uli
> > Sent: Monday, January 29, 2007 4:55 PM
> > To: xen-devel@lists.xensource.com
> > Subject: [Xen-devel] How to allocate contiguous RAM in pv guests
> > 
> > Hi!
> > 
> > I'm working on a patch to get the GART as an IOMMU working in 
> > linux/dom0.
> > However, the problem I describe below applies equally to the 
> > software IOMMU.
> > 
> > If the BIOS doesn't setup the aperture it has to be allocated 
> > from memory. Therefore, one needs a contiguous memory region, 
> > currently 64MB.
> > The software IOMMU always needs a contiguous memory region 
> > (same size).
> > 
> > In order to do this, the hypercall XENMEM_exchange is given a 
> > bunch of mfns and returns a (host physically) contiguous 
> > memory region.
> > Unfortunately, the implementation allocates the contiguous 
> > memory from the heap first and then returns the discontiguous 
> > mfns to it. Therefore, there has to be a (in this case) 64MB 
> > chunk of memory in the xen heap available for the call to succeed.
> > I have observed that on most machines exactly one such chunk 
> > is available. However, I've also had a machine where this is 
> > not the case.
> > 
> > It seems to me that using the xen heap is not the right thing to do.
> > The only other option I can think of is scanning dom0's 
> > memory for a (host physical) chunk of memory that
> > a) belongs entirely to it and
> > b) is free
> > 
> > Once such a chunk is found, one would have to map it 
> > contiguously into virtual memory.  Actually, the latter is 
> > only neccessary for the software IOMMU. The GART aperture 
> > doesn't have to be in virtual memory since it is only 
> > accessed from devices.
> > 
> > Thanks for any suggestions,
> > 
> > Uli
> > 
> > 
> > _______________________________________________
> > Xen-devel mailing list
> > Xen-devel@lists.xensource.com
> > http://lists.xensource.com/xen-devel
> > 
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2007-01-30 16:31 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-01-29 14:54 How to allocate contiguous RAM in pv guests Uli
2007-01-30 10:28 ` Guy Zana
2007-01-30 16:31   ` Uli

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.