From: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
To: Jon Masters <jcm@redhat.com>
Cc: Bjorn Helgaas <helgaas@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
Tomasz Nowicki <tn@semihalf.com>,
Jayachandran C <jchandra@broadcom.com>,
linux-arm-kernel@lists.infradead.org,
Will Deacon <will.deacon@arm.com>,
Catalin Marinas <catalin.marinas@arm.com>,
rafael@kernel.org, Hanjun Guo <hanjun.guo@linaro.org>,
Sinan Kaya <okaya@codeaurora.org>,
jiang.liu@linux.intel.com, linaro-acpi@lists.linaro.org,
linux-pci@vger.kernel.org, Liviu.Dudau@arm.com,
David Daney <ddaney@caviumnetworks.com>,
linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org,
robert.richter@caviumnetworks.com, Suravee.Suthikulpanit@amd.com,
msalter@redhat.com, Wangyijing <wangyijing@huawei.com>,
Marcin Wojtas <mw@semihalf.com>
Subject: Re: [PATCH V6 08/13] PCI: generic, thunder: update to use generic ECAM API
Date: Fri, 29 Apr 2016 10:41:08 +0100 [thread overview]
Message-ID: <20160429094108.GB3249@red-moon> (raw)
In-Reply-To: <572284E3.6050209@redhat.com>
On Thu, Apr 28, 2016 at 05:47:15PM -0400, Jon Masters wrote:
[...]
> >>> In general, there's no reason we can't reassign BARs, whether we're
> >>> using DT, ACPI, or whatever. In many cases, systems with ACPI also
> >>> assign all the BARs in firmware, and Linux doesn't reassign them
> >>> unless it needs to. But that's just a coincidence. There's no
> >>> requirement that Linux leave BARs as firmware programmed them.
>
> There's no requirement, generally, that PCI compliant devices with ECAM
> can't be programmed with different base addresses. There's this PCI
> change called EA that is disjoint and some vendors have chosen to use
> it. We didn't catch that early in the definition of the SBSA for ARM,
> but just as an aside, I have already suggested we require future
> generations of chips to not use EA and only support writeable BARs (even
> for the decoders in the on-SoC platformish devices doing "PCI"). This
> isn't Cavium's fault - they did the right thing with the data at hand
> and nobody really considered the impact of PCI getting EA added. Again,
> that's something that will likely happen on x86 at some point (maybe it
> already is, I don't get any data about future Intel stuff).
PCI EA support in the kernel was implemented by Intel, for the records.
And I do not think anyone is questioning EA here (I mean implemented
through a real PCI capability, not config space quirks).
> On the rest of the quirks and hacks. Without going into too much detail,
> some "concerned citizens" are chatting with various folks to ensure that
> many of these common quirks aren't needed in future parts.
>
> >> I'm thought I've seen systems in which the ACPI BIOS assumes that
> >> certain PCI devices never move around, because it pokes the registers
> >> from AML, and changing them would require never using the same device
> >> through ACPI. It's likely that this is against some standard, but that
> >> won't help you if you have to deal with the system anyway.
>
> Right. This has happened, I think, and there you're no worse off on ARM
> than you would be on x86 if you had AML poking at something underneath.
Except that (if I read their code correctly - arch/x86/pci/i386.c,
see pcibios_resource_survey()) X86 claims the resources as
set-up by FW and thus does not reassign them, whereas on ARM we reassign
the whole PCI address space and we totally ignore the FW set-up (in DT
and ACPI alike), whether that's a problem or not time will tell,
as Bjorn mentioned I do not think that by the time FW hands over to
the OS there is any requirement whatsoever that prevents the OS
from reprogramming the PCI BARs set-up.
> > Yes, I'm pretty sure there are systems like that, e.g., I think SMM
> > code on some HP servers assumes the iLO address never changes. I
> > think that is a firmware defect because I don't think there's any spec
> > that says firmware retains control over PCI BARs after handoff. And
> > this particular case isn't really ACPI-specific.
>
> If you substitute SMM for EL3 on ARM we're bound to eventually have the
> same kinds of things happening on some systems. It's just life.
>
> > But as you say, we have to deal with these systems anyway, even if we
> > consider that behavior broken. My proposal has been to add quirks to
> > mark those devices as IORESOURCE_PCI_FIXED, but I don't think anybody
> > has gotten around to doing that.
Well, that's going to be interesting. To me it is more something FW
should be able to communicate to the OS rather than a device specific
quirk, it is not that the device has fixed BARs, it is that the FW
expects them to be immutable (not saying that's the correct FW
behaviour - but it looks like a FW specific issue, not device specific).
I wonder whether this can be solved (at least in ACPI) through
a PCI BAR Target Operation Region (ACPI 6.0, 5.5.2.4.2), I will have
a look into that.
Lorenzo
WARNING: multiple messages have this Message-ID (diff)
From: lorenzo.pieralisi@arm.com (Lorenzo Pieralisi)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH V6 08/13] PCI: generic, thunder: update to use generic ECAM API
Date: Fri, 29 Apr 2016 10:41:08 +0100 [thread overview]
Message-ID: <20160429094108.GB3249@red-moon> (raw)
In-Reply-To: <572284E3.6050209@redhat.com>
On Thu, Apr 28, 2016 at 05:47:15PM -0400, Jon Masters wrote:
[...]
> >>> In general, there's no reason we can't reassign BARs, whether we're
> >>> using DT, ACPI, or whatever. In many cases, systems with ACPI also
> >>> assign all the BARs in firmware, and Linux doesn't reassign them
> >>> unless it needs to. But that's just a coincidence. There's no
> >>> requirement that Linux leave BARs as firmware programmed them.
>
> There's no requirement, generally, that PCI compliant devices with ECAM
> can't be programmed with different base addresses. There's this PCI
> change called EA that is disjoint and some vendors have chosen to use
> it. We didn't catch that early in the definition of the SBSA for ARM,
> but just as an aside, I have already suggested we require future
> generations of chips to not use EA and only support writeable BARs (even
> for the decoders in the on-SoC platformish devices doing "PCI"). This
> isn't Cavium's fault - they did the right thing with the data at hand
> and nobody really considered the impact of PCI getting EA added. Again,
> that's something that will likely happen on x86 at some point (maybe it
> already is, I don't get any data about future Intel stuff).
PCI EA support in the kernel was implemented by Intel, for the records.
And I do not think anyone is questioning EA here (I mean implemented
through a real PCI capability, not config space quirks).
> On the rest of the quirks and hacks. Without going into too much detail,
> some "concerned citizens" are chatting with various folks to ensure that
> many of these common quirks aren't needed in future parts.
>
> >> I'm thought I've seen systems in which the ACPI BIOS assumes that
> >> certain PCI devices never move around, because it pokes the registers
> >> from AML, and changing them would require never using the same device
> >> through ACPI. It's likely that this is against some standard, but that
> >> won't help you if you have to deal with the system anyway.
>
> Right. This has happened, I think, and there you're no worse off on ARM
> than you would be on x86 if you had AML poking at something underneath.
Except that (if I read their code correctly - arch/x86/pci/i386.c,
see pcibios_resource_survey()) X86 claims the resources as
set-up by FW and thus does not reassign them, whereas on ARM we reassign
the whole PCI address space and we totally ignore the FW set-up (in DT
and ACPI alike), whether that's a problem or not time will tell,
as Bjorn mentioned I do not think that by the time FW hands over to
the OS there is any requirement whatsoever that prevents the OS
from reprogramming the PCI BARs set-up.
> > Yes, I'm pretty sure there are systems like that, e.g., I think SMM
> > code on some HP servers assumes the iLO address never changes. I
> > think that is a firmware defect because I don't think there's any spec
> > that says firmware retains control over PCI BARs after handoff. And
> > this particular case isn't really ACPI-specific.
>
> If you substitute SMM for EL3 on ARM we're bound to eventually have the
> same kinds of things happening on some systems. It's just life.
>
> > But as you say, we have to deal with these systems anyway, even if we
> > consider that behavior broken. My proposal has been to add quirks to
> > mark those devices as IORESOURCE_PCI_FIXED, but I don't think anybody
> > has gotten around to doing that.
Well, that's going to be interesting. To me it is more something FW
should be able to communicate to the OS rather than a device specific
quirk, it is not that the device has fixed BARs, it is that the FW
expects them to be immutable (not saying that's the correct FW
behaviour - but it looks like a FW specific issue, not device specific).
I wonder whether this can be solved (at least in ACPI) through
a PCI BAR Target Operation Region (ACPI 6.0, 5.5.2.4.2), I will have
a look into that.
Lorenzo
next prev parent reply other threads:[~2016-04-29 9:41 UTC|newest]
Thread overview: 224+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-15 17:06 [PATCH V6 00/13] Support for generic ACPI based PCI host controller Tomasz Nowicki
2016-04-15 17:06 ` Tomasz Nowicki
2016-04-15 17:06 ` [PATCH V6 01/13] pci, acpi, x86, ia64: Move ACPI host bridge device companion assignment to core code Tomasz Nowicki
2016-04-15 17:06 ` Tomasz Nowicki
2016-04-15 17:06 ` Tomasz Nowicki
2016-04-15 20:41 ` kbuild test robot
2016-04-15 20:41 ` kbuild test robot
2016-04-15 20:41 ` kbuild test robot
2016-04-26 22:36 ` Bjorn Helgaas
2016-04-26 22:36 ` Bjorn Helgaas
2016-04-27 10:12 ` Tomasz Nowicki
2016-04-27 10:12 ` Tomasz Nowicki
2016-04-27 2:45 ` Bjorn Helgaas
2016-04-27 2:45 ` Bjorn Helgaas
2016-05-04 8:10 ` Tomasz Nowicki
2016-05-04 8:10 ` Tomasz Nowicki
2016-05-09 22:18 ` Rafael J. Wysocki
2016-05-09 22:18 ` Rafael J. Wysocki
2016-05-10 10:27 ` Lorenzo Pieralisi
2016-05-10 10:27 ` Lorenzo Pieralisi
2016-05-09 22:56 ` Rafael J. Wysocki
2016-05-09 22:56 ` Rafael J. Wysocki
2016-05-10 1:53 ` Bjorn Helgaas
2016-05-10 1:53 ` Bjorn Helgaas
2016-05-10 10:07 ` Lorenzo Pieralisi
2016-05-10 10:07 ` Lorenzo Pieralisi
2016-04-15 17:06 ` [PATCH V6 02/13] pci, acpi: Provide generic way to assign bus domain number Tomasz Nowicki
2016-04-15 17:06 ` Tomasz Nowicki
2016-04-27 2:26 ` Bjorn Helgaas
2016-04-27 2:26 ` Bjorn Helgaas
2016-04-27 11:17 ` Lorenzo Pieralisi
2016-04-27 11:17 ` Lorenzo Pieralisi
2016-04-27 16:44 ` Bjorn Helgaas
2016-04-27 16:44 ` Bjorn Helgaas
2016-04-27 17:31 ` Lorenzo Pieralisi
2016-04-27 17:31 ` Lorenzo Pieralisi
2016-04-28 8:13 ` Liviu.Dudau
2016-04-28 8:13 ` Liviu.Dudau at arm.com
2016-04-28 8:13 ` Liviu.Dudau
2016-04-28 15:12 ` Bjorn Helgaas
2016-04-28 15:12 ` Bjorn Helgaas
2016-04-28 15:34 ` Arnd Bergmann
2016-04-28 15:34 ` Arnd Bergmann
2016-04-29 22:50 ` Arnd Bergmann
2016-04-29 22:50 ` Arnd Bergmann
2016-05-02 12:43 ` Tomasz Nowicki
2016-05-02 12:43 ` Tomasz Nowicki
2016-05-02 13:26 ` Jayachandran C
2016-05-02 13:26 ` Jayachandran C
2016-05-03 11:02 ` Lorenzo Pieralisi
2016-05-03 11:02 ` Lorenzo Pieralisi
2016-05-03 14:22 ` Jayachandran C
2016-05-03 14:22 ` Jayachandran C
2016-05-03 14:55 ` Lorenzo Pieralisi
2016-05-03 14:55 ` Lorenzo Pieralisi
2016-04-27 11:59 ` Tomasz Nowicki
2016-04-27 11:59 ` Tomasz Nowicki
2016-04-15 17:06 ` [PATCH V6 03/13] x86, ia64: Include acpi_pci_{add|remove}_bus to the default pcibios_{add|remove}_bus implementation Tomasz Nowicki
2016-04-15 17:06 ` Tomasz Nowicki
2016-04-15 17:06 ` Tomasz Nowicki
2016-04-27 2:34 ` Bjorn Helgaas
2016-04-27 2:34 ` Bjorn Helgaas
2016-04-27 13:19 ` Tomasz Nowicki
2016-04-27 13:19 ` Tomasz Nowicki
2016-04-15 17:06 ` [PATCH V6 04/13] pci, of: Move the PCI I/O space management to PCI core code Tomasz Nowicki
2016-04-15 17:06 ` Tomasz Nowicki
2016-04-15 17:06 ` [PATCH V6 05/13] acpi, pci: Support IO resources when parsing PCI host bridge resources Tomasz Nowicki
2016-04-15 17:06 ` Tomasz Nowicki
2016-04-15 17:06 ` Tomasz Nowicki
2016-04-27 2:39 ` Bjorn Helgaas
2016-04-27 2:39 ` Bjorn Helgaas
2016-04-27 5:36 ` Jon Masters
2016-04-27 5:36 ` Jon Masters
2016-04-27 5:36 ` Jon Masters
2016-04-28 21:53 ` Jon Masters
2016-04-28 21:53 ` Jon Masters
2016-04-27 14:26 ` Lorenzo Pieralisi
2016-04-27 14:26 ` Lorenzo Pieralisi
2016-04-27 15:10 ` Liviu.Dudau
2016-04-27 15:10 ` Liviu.Dudau at arm.com
2016-04-27 15:10 ` Liviu.Dudau
2016-04-27 16:09 ` Lorenzo Pieralisi
2016-04-27 16:09 ` Lorenzo Pieralisi
2016-04-28 15:45 ` Bjorn Helgaas
2016-04-28 15:45 ` Bjorn Helgaas
2016-04-15 17:06 ` [PATCH V6 06/13] arm64, pci, acpi: ACPI support for legacy IRQs parsing and consolidation with DT code Tomasz Nowicki
2016-04-15 17:06 ` Tomasz Nowicki
2016-04-15 17:06 ` Tomasz Nowicki
2016-04-27 2:44 ` Bjorn Helgaas
2016-04-27 2:44 ` Bjorn Helgaas
2016-04-27 11:46 ` Lorenzo Pieralisi
2016-04-27 11:46 ` Lorenzo Pieralisi
2016-04-15 17:06 ` [PATCH V6 07/13] PCI: Provide common functions for ECAM mapping Tomasz Nowicki
2016-04-15 17:06 ` Tomasz Nowicki
2016-04-15 17:06 ` Tomasz Nowicki
2016-04-15 18:41 ` Arnd Bergmann
2016-04-15 18:41 ` Arnd Bergmann
2016-04-28 21:47 ` Bjorn Helgaas
2016-04-28 21:47 ` Bjorn Helgaas
2016-04-29 8:01 ` Jayachandran C
2016-04-29 8:01 ` Jayachandran C
2016-05-05 9:24 ` Jayachandran C
2016-05-05 9:24 ` Jayachandran C
2016-05-05 10:38 ` Tomasz Nowicki
2016-05-05 10:38 ` Tomasz Nowicki
2016-04-15 17:06 ` [PATCH V6 08/13] PCI: generic, thunder: update to use generic ECAM API Tomasz Nowicki
2016-04-15 17:06 ` Tomasz Nowicki
2016-04-15 18:39 ` Arnd Bergmann
2016-04-15 18:39 ` Arnd Bergmann
2016-04-16 7:20 ` Jayachandran C
2016-04-16 7:20 ` Jayachandran C
2016-04-16 7:31 ` Arnd Bergmann
2016-04-16 7:31 ` Arnd Bergmann
2016-04-16 14:36 ` Jayachandran C
2016-04-16 14:36 ` Jayachandran C
2016-04-18 13:03 ` Tomasz Nowicki
2016-04-18 13:03 ` Tomasz Nowicki
2016-04-18 14:44 ` Arnd Bergmann
2016-04-18 14:44 ` Arnd Bergmann
2016-04-18 19:31 ` Tomasz Nowicki
2016-04-18 19:31 ` Tomasz Nowicki
2016-04-19 13:06 ` Arnd Bergmann
2016-04-19 13:06 ` Arnd Bergmann
2016-04-21 9:28 ` Tomasz Nowicki
2016-04-21 9:28 ` Tomasz Nowicki
2016-04-21 9:36 ` Arnd Bergmann
2016-04-21 9:36 ` Arnd Bergmann
2016-04-21 10:08 ` Tomasz Nowicki
2016-04-21 10:08 ` Tomasz Nowicki
2016-04-22 14:30 ` Jon Masters
2016-04-22 14:30 ` Jon Masters
2016-04-22 16:00 ` David Daney
2016-04-22 16:00 ` David Daney
2016-04-28 20:14 ` Bjorn Helgaas
2016-04-28 20:14 ` Bjorn Helgaas
2016-04-28 20:40 ` Arnd Bergmann
2016-04-28 20:40 ` Arnd Bergmann
2016-04-28 21:18 ` Bjorn Helgaas
2016-04-28 21:18 ` Bjorn Helgaas
2016-04-28 21:47 ` Jon Masters
2016-04-28 21:47 ` Jon Masters
2016-04-29 9:41 ` Lorenzo Pieralisi [this message]
2016-04-29 9:41 ` Lorenzo Pieralisi
2016-04-19 21:40 ` Arnd Bergmann
2016-04-19 21:40 ` Arnd Bergmann
2016-04-20 0:22 ` Jayachandran C
2016-04-20 0:22 ` Jayachandran C
2016-04-15 17:06 ` [PATCH V6 09/13] pci, acpi: Support for ACPI based generic PCI host controller Tomasz Nowicki
2016-04-15 17:06 ` Tomasz Nowicki
2016-04-20 19:12 ` Jayachandran C
2016-04-20 19:12 ` Jayachandran C
2016-04-21 9:06 ` Tomasz Nowicki
2016-04-21 9:06 ` Tomasz Nowicki
2016-04-22 12:49 ` Jayachandran C
2016-04-22 12:49 ` Jayachandran C
2016-04-22 14:40 ` Jon Masters
2016-04-22 14:40 ` Jon Masters
2016-04-23 15:23 ` Jon Masters
2016-04-23 15:23 ` Jon Masters
2016-04-28 21:48 ` Bjorn Helgaas
2016-04-28 21:48 ` Bjorn Helgaas
2016-04-29 8:37 ` Lorenzo Pieralisi
2016-04-29 8:37 ` Lorenzo Pieralisi
2016-04-29 17:35 ` Jayachandran C
2016-04-29 17:35 ` Jayachandran C
2016-05-02 11:31 ` Tomasz Nowicki
2016-05-02 11:31 ` Tomasz Nowicki
2016-05-03 8:46 ` Lorenzo Pieralisi
2016-05-03 8:46 ` Lorenzo Pieralisi
2016-05-02 11:03 ` Tomasz Nowicki
2016-05-02 11:03 ` Tomasz Nowicki
2016-04-15 17:06 ` [PATCH V6 10/13] arm64, pci, acpi: Start using ACPI based PCI host controller driver for ARM64 Tomasz Nowicki
2016-04-15 17:06 ` Tomasz Nowicki
2016-04-15 17:06 ` [PATCH V6 11/13] pci, acpi: Match PCI config space accessors against platfrom specific quirks Tomasz Nowicki
2016-04-15 17:06 ` Tomasz Nowicki
2016-04-18 11:37 ` liudongdong (C)
2016-04-18 11:37 ` liudongdong (C)
2016-04-18 11:37 ` liudongdong (C)
2016-04-18 12:21 ` Tomasz Nowicki
2016-04-18 12:21 ` Tomasz Nowicki
2016-04-15 17:06 ` [PATCH V6 12/13] pci, pci-thunder-ecam: Add ACPI support for ThunderX ECAM Tomasz Nowicki
2016-04-15 17:06 ` Tomasz Nowicki
2016-04-19 10:26 ` Tomasz Nowicki
2016-04-19 10:26 ` Tomasz Nowicki
2016-04-19 10:41 ` [Linaro-acpi] " G Gregory
2016-04-19 10:41 ` G Gregory
2016-04-19 11:12 ` Graeme Gregory
2016-04-19 11:12 ` Graeme Gregory
2016-04-19 11:22 ` Tomasz Nowicki
2016-04-19 11:22 ` Tomasz Nowicki
2016-04-19 12:29 ` G Gregory
2016-04-19 12:29 ` G Gregory
2016-04-15 17:06 ` [PATCH V6 13/13] pci, pci-thunder-pem: Add ACPI support for ThunderX PEM Tomasz Nowicki
2016-04-15 17:06 ` Tomasz Nowicki
2016-04-15 18:19 ` [PATCH V6 00/13] Support for generic ACPI based PCI host controller Jon Masters
2016-04-15 18:19 ` Jon Masters
2016-04-16 15:31 ` Jayachandran C
2016-04-16 15:31 ` Jayachandran C
2016-04-18 13:33 ` Tomasz Nowicki
2016-04-18 13:33 ` Tomasz Nowicki
2016-04-18 14:38 ` Arnd Bergmann
2016-04-18 14:38 ` Arnd Bergmann
2016-04-18 15:26 ` Tomasz Nowicki
2016-04-18 15:26 ` Tomasz Nowicki
2016-04-18 16:14 ` Mark Langsdorf
2016-04-17 9:23 ` Martinez Kristofer
2016-04-17 9:23 ` Martinez Kristofer
2016-04-16 18:30 ` Duc Dang
2016-04-16 18:30 ` Duc Dang
2016-04-17 4:18 ` Sinan Kaya
2016-04-17 4:18 ` Sinan Kaya
2016-04-22 16:08 ` Robert Richter
2016-04-22 16:08 ` Robert Richter
2016-04-22 16:08 ` Robert Richter
2016-04-22 20:46 ` Suravee Suthikulpanit
2016-04-22 20:46 ` Suravee Suthikulpanit
2016-04-22 20:46 ` Suravee Suthikulpanit
2016-04-25 17:23 ` Jeremy Linton
2016-04-25 17:23 ` Jeremy Linton
2016-04-26 9:07 ` liudongdong (C)
2016-04-26 9:07 ` liudongdong (C)
2016-04-26 9:07 ` liudongdong (C)
2016-04-28 21:27 ` [PATCH] acpi: pci: QDF2432 32 bit config space accessors Christopher Covington
2016-04-28 21:35 ` Rafael J. Wysocki
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=20160429094108.GB3249@red-moon \
--to=lorenzo.pieralisi@arm.com \
--cc=Liviu.Dudau@arm.com \
--cc=Suravee.Suthikulpanit@amd.com \
--cc=arnd@arndb.de \
--cc=catalin.marinas@arm.com \
--cc=ddaney@caviumnetworks.com \
--cc=hanjun.guo@linaro.org \
--cc=helgaas@kernel.org \
--cc=jchandra@broadcom.com \
--cc=jcm@redhat.com \
--cc=jiang.liu@linux.intel.com \
--cc=linaro-acpi@lists.linaro.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=msalter@redhat.com \
--cc=mw@semihalf.com \
--cc=okaya@codeaurora.org \
--cc=rafael@kernel.org \
--cc=robert.richter@caviumnetworks.com \
--cc=tn@semihalf.com \
--cc=wangyijing@huawei.com \
--cc=will.deacon@arm.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.