From: Bjorn Helgaas <bjorn.helgaas@hp.com>
To: ykzhao <yakui.zhao@intel.com>
Cc: "minyard@acm.org" <minyard@acm.org>,
"lenb@kernel.org" <lenb@kernel.org>,
"openipmi-developer@lists.sourceforge.net"
<openipmi-developer@lists.sourceforge.net>,
"linux-acpi@vger.kernel.org" <linux-acpi@vger.kernel.org>
Subject: Re: [PATCH 1/2] IPMI/ACPI: Locate the IPMI system interface in ACPI namespace
Date: Tue, 27 Oct 2009 23:11:20 -0600 [thread overview]
Message-ID: <1256706680.29099.7.camel@dc7800.home> (raw)
In-Reply-To: <1256698248.12059.65.camel@localhost.localdomain>
On Wed, 2009-10-28 at 10:50 +0800, ykzhao wrote:
> On Tue, 2009-10-27 at 23:38 +0800, Bjorn Helgaas wrote:
> > On Monday 26 October 2009 07:02:55 pm ykzhao wrote:
> > > In fact you mention two issues about the two patches:
> > > 1: Load a PNP driver for it to register the IPMI system interface.
> > > This is about the first patch.
> > > 2. coding style( for example: comments, the definition about some
> > > variables).
> > >
> > > For the first issue: Before I start the first patch, I consider using
> > > the PNP device driver. But I find that it is so complex because of the
> > > following two points:
> > > 1. One is that we can't register the IPMI system interface if the
> > > boot option of "pnpacpi=off" is added. This will also depend on the PNP
> > > module.
> >
> > This is not a problem. It is perfectly acceptable for the IPMI driver
> > to depend on PNP and PNPACPI in order to claim an ACPI device. If the
> > users boots with "pnpacpi=off", we just won't find an IPMI device.
> > That is the way it works for TPM devices and serial devices described
> > by ACPI, and IPMI should work the same way.
> Yes. Several methods can be used to detect the IPMI system interface.
> In such case it still can be detected by using other method when the
> ACPI detection mechanism is disabled. But the acpi detection mechanism
> will depend on the ACPI and PNP subsystem if we detect the IMPI system
> interface defined in ACPI table by using PNP device driver.
>
> At the same time there exist two ACPI detection mechanisms. One is
> defined in SPMI table. The other is defined in ACPI table. We expect
> that the two ACPI detection mechanisms depend on the same judgement
> condition.
> So I prefer to detect the IPMI system interface when ACPI enabled
> regardless of the boot option of "pnpacpi=off".
The IPMI driver is not special. It should behave like all other
drivers. There is no reason it should handle the "pnpacpi=off" case
differently than other drivers.
But if you change this to use acpi_bus_register_driver(), there will be
no PNP dependency, "pnpacpi=off" will have no effect either way, and
I'll be happy. I don't think it's the cleanest solution, but it at
least gives us a chance to properly bind the driver to the device.
> > > 2. The second is that there exist so many cases about the IPMI
> > > IO/memory resource definition. Maybe there exist both IO/memory resource
> > > definition for one IPMI device. In such case we can't know which should
> > > be selected. At the same time we have similar issues about the interrupt
> > > type. So I decide to parse the IO/memory/interrupt resource
> > > independently.
> >
> > This doesn't make any sense. The fact that an IPMI device might have
> > a variety of IO/memory/IRQ resources is orthogonal to the question of
> > whether you should use pnp_register_driver() or acpi_walk_namespace().
> When we detect the IPMI system interface by loading PNP device driver,
> the advantage is that it can re-use the parse mechanism of
> IO/memory/interrupt. Right?
> In fact we will have to evaluate the following ACPI object:
> >_IFT, _GPE, _SRV
>
> If there exists the _GPE object, it is unnecessary to parse the resource
> related with the interrupt.
>
> At the same time as I mentioned in the previous email, sometimes we will
> get the two different IO address definitions after evaluating the _CRS
> object. Which should be selected?
> If there exist both IO and memory address definition in _CRS object,
> which should be selected?
You have to decide which address to use whether you learn the addresses
by using acpi_walk_resources() or by looking through the resources
decoded by PNPACPI. Using acpi_walk_resources() doesn't make that
choice any easier.
> > PNPACPI parses the IPMI device resources for every ACPI device,
> > including the IPMI device, before we even know whether there will be
> > a PNP driver for the device. It's much easier to look at the PNP
> > resources and figure out which to use than it is to use
> > acpi_walk_resources() manually.
> >
> > The main point is that ipmi_si_intf.c is a device driver, and it should
> > use the normal driver registration mechanisms. I think it would be
> > simplest and clearest to make a few PNP enhancements so it could use
> > pnp_register_driver(), but even using acpi_bus_register_driver() would
> > be fine. Using acpi_walk_namespace() to do everything by hand is just
> > completely wrong.
> The main purpose is to detect the IPMI system interface defined in ACPI
> table. If the device can be detected correctly, IMO it will be OK.
It is important to detect the device. It is also important to have a
mechanism to prevent two drivers from thinking they own the same device.
> Why do think that it is wrong to use the acpi_walk_namespace to parse
> the resource?
You're using acpi_walk_namespace() to locate the device, not to parse
the resources. You use acpi_walk_resources() to parse the resources.
The fact that your patch uses acpi_walk_namespace() to find the
device means that ipmi_si_intf.c can be talking to a device, but the
rest of the system doesn't know ipmi_si_intf.c "owns" it. So another
driver B could come along and correctly use acpi_bus_register_driver()
with the IPMI IDs. The Linux ACPI core knows nothing about the fact
that ipmi_si_intf.c thinks it "owns" the IPMI device, so it will call
the driver B "add" method. Now we have two drivers that both think
they own the device. This leads to chaos.
Bjorn
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2009-10-28 5:15 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-26 13:33 [PATCH 1/2] IPMI/ACPI: Locate the IPMI system interface in ACPI namespace yakui.zhao
2009-10-26 13:33 ` [PATCH 2/2] IPMI/ACPI: Add the IPMI opregion driver to send IPMI message in AML code yakui.zhao
2009-10-26 15:20 ` [PATCH 1/2] IPMI/ACPI: Locate the IPMI system interface in ACPI namespace Bjorn Helgaas
2009-10-27 1:02 ` ykzhao
2009-10-27 15:38 ` Bjorn Helgaas
2009-10-27 17:05 ` Bjorn Helgaas
2009-10-27 18:02 ` EC driver registration (was: IPMI/ACPI: Locate the IPMI system interface in ACPI namespace) Alexey Starikovskiy
2009-10-27 18:14 ` Bjorn Helgaas
2009-10-28 2:50 ` [PATCH 1/2] IPMI/ACPI: Locate the IPMI system interface in ACPI namespace ykzhao
2009-10-28 5:11 ` Bjorn Helgaas [this message]
2009-10-28 9:51 ` ykzhao
2009-10-28 16:49 ` Bjorn Helgaas
2009-10-29 1:06 ` ykzhao
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=1256706680.29099.7.camel@dc7800.home \
--to=bjorn.helgaas@hp.com \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=minyard@acm.org \
--cc=openipmi-developer@lists.sourceforge.net \
--cc=yakui.zhao@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox