Also I forgot to mention the double page free was in the DXE Core LoadImage() on an error path.
CoreLoadPeImage() ... return EFI_SUCCESS; Done: // // Free memory. // if (DstBufAlocated) { CoreFreePages (Image->ImageContext.ImageAddress, Image->NumberOfPages); } ... CoreUnloadAndCloseImage() ... if ((Image->ImageBasePage != 0) && FreePage) { CoreFreePages (Image->ImageBasePage, Image->NumberOfPages); } ... I fixed by setting Image->ImageContext.ImageAddress and Image->ImageBasePage to 0 after the free in CoreLoadPeImage(). BugĀ 667 <https://bugzilla.tianocore.org/show_bug.cgi?id=667> Thanks, Andrew Fish > On Aug 9, 2017, at 6:33 PM, Zeng, Star <star.z...@intel.com> wrote: > > Andrew, > > Another path may hit this DEBUG message is AllocatePages() by AllocateAddress > type. > I think it is a good suggestion to enhance the DEBUG message. How about the > update like below? > > - DEBUG ((DEBUG_ERROR | DEBUG_PAGE, "ConvertPages: Incompatible memory > types\n")); > + DEBUG ((DEBUG_ERROR | DEBUG_PAGE, "ConvertPages: Incompatible memory > types, ")); > + if (Entry->Type == EfiConventionalMemory) { > + DEBUG ((DEBUG_ERROR | DEBUG_PAGE, "the pages to free have been > freed\n")); > + } else { > + DEBUG ((DEBUG_ERROR | DEBUG_PAGE, "the pages to allocate have been > allocated\n")); > + } > > > Thanks, > Star > -----Original Message----- > From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of Andrew > Fish > Sent: Thursday, August 10, 2017 9:04 AM > To: edk2-devel <edk2-devel@lists.01.org> > Subject: [edk2] Does a double Page free report "ConvertPages: Incompatible > memory types", maybe we could do better. > > It looks to me like if you Free pages, after you free pages you hit this > DEBUG message. > > > https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Core/Dxe/Mem/Page.c#L790 > > if (!(NewType == EfiConventionalMemory ? 1 : 0) ^ (Entry->Type == > EfiConventionalMemory ? 1 : 0)) { > DEBUG ((DEBUG_ERROR | DEBUG_PAGE, "ConvertPages: Incompatible memory > types\n")); > return EFI_NOT_FOUND; > } > > I'm not sure I've thought out all the paths, but would it make more sense if > you are trying to convert EfiConventionalMemory to EfiConventionalMemory that > you are trying to free pages that are already freed. That is not very obvious > from the above DEBUG print. Could there be an if in the error path to print > a better DEBUG message for a free pages bug? > > Also to be pedantic the function change names to: CoreConvertPagesEx(). > > Thanks, > > > Andrew Fish > > > > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel