Hi Alex,
Exactly you are right.
EFI memmap command tells the actual size is not zero.
I attached the result.
And I tried your patch immediately.
But it causes another problem that I can't boot xen.
The attachment is its log. System RAM becomes 1MB.
I'll investigate it.
Thanks so much,
Kouya
Alex Williamson writes:
> On Wed, 2006-06-07 at 09:05 -0600, Alex Williamson wrote:
> > Hi Kouya,
> >
> > Yes, I do too. Does the PRIMEQUEST have a memmap command from the
> > EFI shell that reports the original MDT as reported by firmware? I
> > notice this range reports both WB and UC attributes. I wonder if the
> > zero size is a result of the efi trim_top/trim_bottom calls zero-ing out
> > that range to prevent attribute aliasing. On my system the ACPI reclaim
> > memory is only reported with the UC attribute and therefore does not get
> > trimmed. If this is the case, the solution might be to have the
> > trimming functions remove the WB attribute instead of reducing the range
> > to zero. I'd certainly prefer to add that kind of special case than to
> > walk the ACPI tables by hand. Thanks,
>
> Hi Kouya,
>
> Here's a patch that will remove the WB attribute instead of trimming
> ranges that support both WB & UC. It's untested, but let me know if
> this solves the problem on PRIMEQUEST. Thanks,
>
> Alex
>
> --
> Alex Williamson HP Open Source & Linux Org.
> diff -r 4e78528e3480 xen/arch/ia64/linux-xen/efi.c
> --- a/xen/arch/ia64/linux-xen/efi.c Tue Jun 06 09:11:25 2006 -0600
> +++ b/xen/arch/ia64/linux-xen/efi.c Wed Jun 07 09:36:51 2006 -0600
> @@ -273,8 +273,13 @@ trim_bottom (efi_memory_desc_t *md, u64
> * descriptor list to become unsorted. In such a case, md->num_pages
> will be
> * zero, so the Right Thing will happen.
> */
> - md->phys_addr += num_skipped_pages << EFI_PAGE_SHIFT;
> - md->num_pages -= num_skipped_pages;
> + if (!(md->attribute & EFI_MEMORY_UC)) {
> + md->phys_addr += num_skipped_pages << EFI_PAGE_SHIFT;
> + md->num_pages -= num_skipped_pages;
> + } else {
> + /* If range supports multiple attributes, turn off WB */
> + md->attribute &= ~EFI_MEMORY_WB;
> + }
> }
>
> static void
> @@ -296,7 +301,10 @@ trim_top (efi_memory_desc_t *md, u64 end
> "at 0x%lx\n", __FUNCTION__,
> (num_dropped_pages << EFI_PAGE_SHIFT) >> 10,
> md->phys_addr, end_addr);
> - md->num_pages -= num_dropped_pages;
> + if (!(md->attribute & EFI_MEMORY_UC))
> + md->num_pages -= num_dropped_pages;
> + else
> + md->attribute &= ~EFI_MEMORY_WB;
> }
>
> /*
fs0:\> memmap
Type Start End # Pages Attributes
available 0000000000000000-000000000009FFFF 00000000000000A0 0000000000000009
RT_data 00000000000C0000-00000000000FFFFF 0000000000000040 8000000000000009
available 0000000000100000-000000007E6D5FFF 000000000007E5D6 0000000000000009
BS_data 000000007E6D6000-000000007E6D7FFF 0000000000000002 0000000000000009
available 000000007E6D8000-000000007E6D9FFF 0000000000000002 0000000000000009
BS_data 000000007E6DA000-000000007ECC1FFF 00000000000005E8 0000000000000009
available 000000007ECC2000-000000007F40FFFF 000000000000074E 0000000000000009
BS_code 000000007F410000-000000007F4C1FFF 00000000000000B2 0000000000000009
available 000000007F4C2000-000000007F51BFFF 000000000000005A 0000000000000009
RT_code 000000007F51C000-000000007F5C1FFF 00000000000000A6 8000000000000009
available 000000007F5C2000-000000007F83BFFF 000000000000027A 0000000000000009
RT_data 000000007F83C000-000000007F8C5FFF 000000000000008A 8000000000000009
RT_code 000000007F8C6000-000000007FCBDFFF 00000000000003F8 8000000000000009
RT_data 000000007FCBE000-000000007FCFFFFF 0000000000000042 8000000000000009
PAL_code 000000007FD00000-000000007FD41FFF 0000000000000042 8000000000000009
RT_code 000000007FD66000-000000007FFFFFFF 000000000000029A 8000000000000009
MemMapIO 00000000FE000000-00000000FEBFFFFF 0000000000000C00 8000000000000001
MemMapIO 00000000FEC00000-00000000FEEFFFFF 0000000000000300 0000000000000001
RT_data 00000000FF000000-00000000FFFFFFFF 0000000000001000 8000000000000001
MemMapIO 00000FFC00000000-00000FFC7FFFFFFF 0000000000080000 8000000000000001
MemPortIO 0003FFFFFC000000-0003FFFFFFFFFFFF 0000000000004000 8000000000000001
BS_code : 178 Pages (729,088)
BS_data : 1,514 Pages (6,201,344)
RT_code : 1,848 Pages (7,569,408)
RT_data : 4,364 Pages (17,874,944)
available : 520,346 Pages (2,131,337,216)
MemMapIO : 528,128 Pages (2,163,212,288)
MemPortIO : 16,384 Pages (67,108,864)
PAL_code : 66 Pages (270,336)
Total Memory: 2,063 MB (2,163,982,336) Bytes
fs0:\>
PRIMEQUEST.log
Description: Binary data
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel
|