Messages in this thread | | | Date | Mon, 22 Jul 2013 10:50:38 +0200 | From | Ingo Molnar <> | Subject | Re: [PATCH v5] x86, tboot: iomem fixes |
| |
* Qiaowei Ren <qiaowei.ren@intel.com> wrote:
> Current code doesn't use specific interface to access I/O space. > So some potential bugs can be caused. We can fix this by using > specific API. > > Signed-off-by: Qiaowei Ren <qiaowei.ren@intel.com> > --- > arch/x86/kernel/tboot.c | 18 ++++++++++-------- > 1 file changed, 10 insertions(+), 8 deletions(-) > > diff --git a/arch/x86/kernel/tboot.c b/arch/x86/kernel/tboot.c > index 3ff42d2..4e149c7 100644 > --- a/arch/x86/kernel/tboot.c > +++ b/arch/x86/kernel/tboot.c > @@ -468,7 +468,8 @@ struct sinit_mle_data { > > struct acpi_table_header *tboot_get_dmar_table(struct acpi_table_header *dmar_tbl) > { > - void *heap_base, *heap_ptr, *config; > + void __iomem *heap_base, *heap_ptr, *config; > + u32 dmar_tbl_off; > > if (!tboot_enabled()) > return dmar_tbl; > @@ -485,25 +486,26 @@ struct acpi_table_header *tboot_get_dmar_table(struct acpi_table_header *dmar_tb > return NULL; > > /* now map TXT heap */ > - heap_base = ioremap(*(u64 *)(config + TXTCR_HEAP_BASE), > - *(u64 *)(config + TXTCR_HEAP_SIZE)); > + heap_base = ioremap(readl(config + TXTCR_HEAP_BASE), > + readl(config + TXTCR_HEAP_SIZE)); > iounmap(config); > if (!heap_base) > return NULL; > > /* walk heap to SinitMleData */ > /* skip BiosData */ > - heap_ptr = heap_base + *(u64 *)heap_base; > + heap_ptr = heap_base + readq(heap_base); > /* skip OsMleData */ > - heap_ptr += *(u64 *)heap_ptr; > + heap_ptr += readq(heap_ptr);
tboot.c is build on 32-bit kernel as well, but readq() is only available on 64-bit systems.
Thanks,
Ingo
| |