From: Ingo Molnar <mingo@elte.hu>
To: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: Andi Kleen <andi@firstfloor.org>,
linux-kernel@vger.kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
Xen Devel <xen-devel@lists.xensource.com>
Subject: Re: [PATCH 6 of 7] x86: use early_ioremap in __acpi_map_table
Date: Mon, 8 Sep 2008 16:26:19 +0200 [thread overview]
Message-ID: <20080908142619.GA10580@elte.hu> (raw)
In-Reply-To: <48C46BCB.2060209@goop.org>
* Jeremy Fitzhardinge <jeremy@goop.org> wrote:
> >> However, unlike early_ioremap(), __acpi_map_table() just maintains
> >> a single mapping which gets replaced each call, and has no
> >> corresponding unmap function. Implement this by just removing the
> >> previous mapping each time its called. Unfortunately, this will
> >> leave a stray mapping at the end.
> >
> > It would be better to just fix the ACPI code to unmap.
>
> I was concerned that would cause lots of cross-arch churn, but of
> course the only other relevant architecture is ia64. I'll prep a
> followup patch.
uhm, there's a nasty trap in that route: it can potentially cause a lot
of breakage.
It's not robust to assume that the ACPI code is sane wrt.
mapping/unmapping, because it currently simply doesnt rely on robust
unmapping (in the linear range).
I tried it in the past and i found tons of crappy ACPI code all around
that just never unmapped tables. Leaking ACPI maps are hard to find as
well, and it can occur anytime during bootup.
As a general principle it might be worth fixing those places, and we've
hardened up the early-ioremap code for leaks during the PAT rewrite,
still please realize that it can become non-trivial and it might cause a
lot of unhappy users.
So i'd suggest a different, more carful approach: keep the new code you
wrote, but print a WARN()ing if prev_map is not unmapped yet when the
next mapping is acquired. That way the ACPI code can be fixed gradually
and without breaking existing functionality.
There's another complication: ACPI might rely on multiple mappings being
present at once, so unmapping the previous one might not be safe. But it
_should_ be fine most of the time as __acpi_map_table() is only used
inearly init code - and we fixed most of these things in the PAT
patchset in any case.
Ingo
WARNING: multiple messages have this Message-ID (diff)
From: Ingo Molnar <mingo@elte.hu>
To: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: Xen Devel <xen-devel@lists.xensource.com>,
Andi Kleen <andi@firstfloor.org>,
linux-kernel@vger.kernel.org, "H. Peter Anvin" <hpa@zytor.com>
Subject: Re: [PATCH 6 of 7] x86: use early_ioremap in __acpi_map_table
Date: Mon, 8 Sep 2008 16:26:19 +0200 [thread overview]
Message-ID: <20080908142619.GA10580@elte.hu> (raw)
In-Reply-To: <48C46BCB.2060209@goop.org>
* Jeremy Fitzhardinge <jeremy@goop.org> wrote:
> >> However, unlike early_ioremap(), __acpi_map_table() just maintains
> >> a single mapping which gets replaced each call, and has no
> >> corresponding unmap function. Implement this by just removing the
> >> previous mapping each time its called. Unfortunately, this will
> >> leave a stray mapping at the end.
> >
> > It would be better to just fix the ACPI code to unmap.
>
> I was concerned that would cause lots of cross-arch churn, but of
> course the only other relevant architecture is ia64. I'll prep a
> followup patch.
uhm, there's a nasty trap in that route: it can potentially cause a lot
of breakage.
It's not robust to assume that the ACPI code is sane wrt.
mapping/unmapping, because it currently simply doesnt rely on robust
unmapping (in the linear range).
I tried it in the past and i found tons of crappy ACPI code all around
that just never unmapped tables. Leaking ACPI maps are hard to find as
well, and it can occur anytime during bootup.
As a general principle it might be worth fixing those places, and we've
hardened up the early-ioremap code for leaks during the PAT rewrite,
still please realize that it can become non-trivial and it might cause a
lot of unhappy users.
So i'd suggest a different, more carful approach: keep the new code you
wrote, but print a WARN()ing if prev_map is not unmapped yet when the
next mapping is acquired. That way the ACPI code can be fixed gradually
and without breaking existing functionality.
There's another complication: ACPI might rely on multiple mappings being
present at once, so unmapping the previous one might not be safe. But it
_should_ be fine most of the time as __acpi_map_table() is only used
inearly init code - and we fixed most of these things in the PAT
patchset in any case.
Ingo
next prev parent reply other threads:[~2008-09-08 14:26 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-09-07 22:21 [PATCH 0 of 7] x86: lay groundwork for Xen domain 0 support Jeremy Fitzhardinge
2008-09-07 22:21 ` [PATCH 1 of 7] x86: add _PAGE_IOMAP pte flag for IO mappings Jeremy Fitzhardinge
2008-09-09 13:32 ` Avi Kivity
2008-09-09 13:32 ` Avi Kivity
2008-09-09 14:47 ` Jeremy Fitzhardinge
2008-09-09 14:47 ` Jeremy Fitzhardinge
2008-09-09 14:56 ` Avi Kivity
2008-09-09 14:56 ` Avi Kivity
2008-09-09 15:29 ` [Xen-devel] " Keir Fraser
2008-09-09 15:29 ` Keir Fraser
2008-09-09 15:48 ` [Xen-devel] " Jeremy Fitzhardinge
2008-09-09 15:48 ` Jeremy Fitzhardinge
2008-09-09 16:05 ` [Xen-devel] " Keir Fraser
2008-09-09 16:05 ` Keir Fraser
2008-09-10 9:55 ` [Xen-devel] " Avi Kivity
2008-09-10 9:55 ` Avi Kivity
2008-09-10 16:38 ` [Xen-devel] " Jeremy Fitzhardinge
2008-09-10 16:38 ` Jeremy Fitzhardinge
2008-09-10 16:55 ` [Xen-devel] " Nick Piggin
2008-09-10 17:27 ` Jeremy Fitzhardinge
2008-09-07 22:21 ` [PATCH 2 of 7] x86: remove duplicate early_ioremap declarations Jeremy Fitzhardinge
2008-09-07 22:21 ` Jeremy Fitzhardinge
2008-09-07 22:21 ` [PATCH 3 of 7] x86: add early_memremap() Jeremy Fitzhardinge
2008-09-07 22:21 ` Jeremy Fitzhardinge
2008-09-07 22:21 ` [PATCH 4 of 7] x86: use early_memremap() in setup.c Jeremy Fitzhardinge
2008-09-07 22:21 ` [PATCH 5 of 7] x86-64: don't check for map replacement Jeremy Fitzhardinge
2008-09-07 22:21 ` [PATCH 6 of 7] x86: use early_ioremap in __acpi_map_table Jeremy Fitzhardinge
2008-09-07 23:44 ` Andi Kleen
2008-09-08 0:03 ` Jeremy Fitzhardinge
2008-09-08 0:03 ` Jeremy Fitzhardinge
2008-09-08 14:26 ` Ingo Molnar [this message]
2008-09-08 14:26 ` Ingo Molnar
2008-09-08 16:29 ` Jeremy Fitzhardinge
2008-09-08 16:29 ` Jeremy Fitzhardinge
2008-09-08 19:41 ` Jeremy Fitzhardinge
2008-09-08 19:41 ` Jeremy Fitzhardinge
2008-09-10 11:55 ` Ingo Molnar
2008-09-10 16:49 ` Jeremy Fitzhardinge
2008-09-11 7:33 ` Ingo Molnar
2008-09-11 18:36 ` Jeremy Fitzhardinge
2008-09-11 18:56 ` Ingo Molnar
2008-09-11 20:34 ` Yinghai Lu
2008-09-11 21:07 ` Jeremy Fitzhardinge
2008-09-12 9:49 ` Ingo Molnar
2008-09-12 17:31 ` Yinghai Lu
[not found] ` <20080911125748.GA14698@elte.hu>
2008-09-11 21:33 ` [PATCH] acpi: remove final __acpi_map_table mapping before setting acpi_gbl_permanent_mmap Jeremy Fitzhardinge
2008-09-07 22:21 ` [PATCH 7 of 7] x86: always explicitly map acpi memory Jeremy Fitzhardinge
2008-09-07 23:35 ` [Xen-devel] " Yinghai Lu
2008-09-07 23:35 ` Yinghai Lu
2008-09-08 0:02 ` [Xen-devel] " Jeremy Fitzhardinge
2008-09-08 0:02 ` Jeremy Fitzhardinge
2008-09-08 0:14 ` [Xen-devel] " Yinghai Lu
2008-09-08 0:14 ` Yinghai Lu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080908142619.GA10580@elte.hu \
--to=mingo@elte.hu \
--cc=andi@firstfloor.org \
--cc=hpa@zytor.com \
--cc=jeremy@goop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.