From: Bjorn Helgaas <bjorn.helgaas@hp.com>
To: Rene Herman <rene.herman@keyaccess.nl>
Cc: Len Brown <lenb@kernel.org>,
linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org,
Adam Belay <ambx1@neo.rr.com>, Adam M Belay <abelay@mit.edu>,
Li Shaohua <shaohua.li@intel.com>,
Matthieu Castet <castet.matthieu@free.fr>,
Thomas Renninger <trenn@suse.de>,
Jaroslav Kysela <perex@perex.cz>,
Andrew Morton <akpm@linux-foundation.org>,
Takashi Iwai <tiwai@suse.de>
Subject: Re: [patch 15/15] PNP: convert resource options to single linked list
Date: Wed, 4 Jun 2008 15:26:17 -0600 [thread overview]
Message-ID: <200806041526.19234.bjorn.helgaas@hp.com> (raw)
In-Reply-To: <4845B401.7020102@keyaccess.nl>
On Tuesday 03 June 2008 03:13:37 pm Rene Herman wrote:
> On 31-05-08 00:49, Bjorn Helgaas wrote:
>
> Forgot this comment:
>
> > --- work10.orig/drivers/pnp/quirks.c 2008-05-30 15:58:14.000000000 -0600
> > +++ work10/drivers/pnp/quirks.c 2008-05-30 15:58:15.000000000 -0600
>
> > +static struct pnp_option *pnp_clone_dependent_set(struct pnp_dev *dev,
> > + unsigned int set)
> > {
> > - struct pnp_option *head = NULL;
> > - struct pnp_option *prev = NULL;
> > - struct pnp_option *res;
> > -
> > - /*
> > - * Build a functional IRQ-optional variant of each MPU option.
> > - */
> > -
> > - for (res = dev->dependent; res; res = res->next) {
> > - struct pnp_option *curr;
> > - struct pnp_port *port;
> > - struct pnp_port *copy_port;
> > - struct pnp_irq *irq;
> > - struct pnp_irq *copy_irq;
> > -
> > - port = res->port;
> > - irq = res->irq;
> > - if (!port || !irq)
> > - continue;
> > + struct pnp_option *tail = NULL, *first_new_option = NULL;
> > + struct pnp_option *option, *new_option;
> > + unsigned int flags;
> > +
> > + list_for_each_entry(option, &dev->options, list) {
> > + if (pnp_option_is_dependent(option))
> > + tail = option;
> > + }
> > + if (!tail) {
> > + dev_err(&dev->dev, "no dependent option sets\n");
> > + return NULL;
> > + }
> >
> > - copy_port = pnp_alloc(sizeof *copy_port);
> > - if (!copy_port)
> > - break;
> > -
> > - copy_irq = pnp_alloc(sizeof *copy_irq);
> > - if (!copy_irq) {
> > - kfree(copy_port);
> > - break;
> > - }
> > + flags = pnp_dependent_option(dev, PNP_RES_PRIORITY_FUNCTIONAL);
> > + list_for_each_entry(option, &dev->options, list) {
> > + if (pnp_option_is_dependent(option) &&
> > + pnp_option_set(option) == set) {
> > + new_option = kmalloc(sizeof(struct pnp_option),
> > + GFP_KERNEL);
> > + if (!new_option) {
> > + dev_err(&dev->dev, "couldn't clone dependent "
> > + "set %d\n", set);
> > + return NULL;
> > + }
> >
> > - *copy_port = *port;
> > - copy_port->next = NULL;
> > + *new_option = *option;
> > + new_option->flags = flags;
> > + if (!first_new_option)
> > + first_new_option = new_option;
> >
> > - *copy_irq = *irq;
> > - copy_irq->flags |= IORESOURCE_IRQ_OPTIONAL;
> > - copy_irq->next = NULL;
> > -
> > - curr = pnp_build_option(PNP_RES_PRIORITY_FUNCTIONAL);
> > - if (!curr) {
> > - kfree(copy_port);
> > - kfree(copy_irq);
> > - break;
> > + list_add(&new_option->list, &tail->list);
> > + tail = new_option;
> > }
> > - curr->port = copy_port;
> > - curr->irq = copy_irq;
> > -
> > - if (prev)
> > - prev->next = curr;
> > - else
> > - head = curr;
> > - prev = curr;
> > }
> > - if (head)
> > - dev_info(&dev->dev, "adding IRQ-optional MPU options\n");
> >
> > - return head;
> > + return first_new_option;
> > }
>
> This works, but I did the "disconnected chain build" that I did due to
> finding it particularly clumsy to add to the dependent chain while
> walking it.
>
> This avoids actual problems due to num_sets = dev->num_dependents_sets
> in caller and the pnp_option_set(option) == set in the loop (not unlike
> the first version of the original checked for a present irq) but it's
> again checking the options it just added itself.
>
> If you feel that's perfectly fine then <shrug> but thought I'd still
> remark on it in case it wasn't intentional.
Hmmm... I think I see what you mean. It should work as-is, but
maybe it'd be more elegant to build the new list separately and use
list_splice to insert it.
Guess I'll wait for you to confirm whether we can rip out the list
clone altogether before trying this out.
Bjorn
next prev parent reply other threads:[~2008-06-04 21:26 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-30 22:48 [patch 00/15] PNP: convert resource options to unified dynamic list, v1 Bjorn Helgaas
2008-05-30 22:48 ` [patch 01/15] serial: when guessing, check only active resources, not options Bjorn Helgaas
2008-06-01 19:42 ` Rene Herman
2008-06-02 15:21 ` Bjorn Helgaas
2008-05-30 22:48 ` [patch 02/15] PNP: whitespace/coding style fixes Bjorn Helgaas
2008-06-01 19:52 ` Rene Herman
2008-05-30 22:48 ` [patch 03/15] PNP: define PNP-specific IORESOURCE_IO_* flags alongside IRQ, DMA, MEM Bjorn Helgaas
2008-06-01 21:03 ` Rene Herman
2008-05-30 22:48 ` [patch 04/15] PNP: make resource option structures private to PNP subsystem Bjorn Helgaas
2008-06-01 21:06 ` Rene Herman
2008-05-30 22:48 ` [patch 05/15] PNP: introduce pnp_irq_mask_t typedef Bjorn Helgaas
2008-06-01 21:25 ` Rene Herman
2008-05-30 22:48 ` [patch 06/15] PNP: increase I/O port & memory option address sizes Bjorn Helgaas
2008-06-01 21:39 ` Rene Herman
2008-05-30 22:49 ` [patch 07/15] PNP: improve resource assignment debug Bjorn Helgaas
2008-06-01 21:41 ` Rene Herman
2008-05-30 22:49 ` [patch 08/15] PNP: in debug resource dump, make empty list obvious Bjorn Helgaas
2008-06-01 21:44 ` Rene Herman
2008-05-30 22:49 ` [patch 09/15] PNP: make resource assignment functions return 0 (success) or -EBUSY (failure) Bjorn Helgaas
2008-06-01 21:59 ` Rene Herman
2008-05-30 22:49 ` [patch 10/15] PNP: remove redundant pnp_can_configure() check Bjorn Helgaas
2008-06-01 22:00 ` Rene Herman
2008-05-30 22:49 ` [patch 11/15] PNP: centralize resource option allocations Bjorn Helgaas
2008-06-01 23:21 ` Rene Herman
2008-06-02 15:29 ` Bjorn Helgaas
2008-05-30 22:49 ` [patch 12/15] PNPACPI: ignore _PRS interrupt numbers larger than PNP_IRQ_NR Bjorn Helgaas
2008-06-01 23:23 ` Rene Herman
2008-05-30 22:49 ` [patch 13/15] PNP: rename pnp_register_*_resource() local variables Bjorn Helgaas
2008-06-01 23:25 ` Rene Herman
2008-05-30 22:49 ` [patch 14/15] PNP: support optional IRQ resources Bjorn Helgaas
2008-06-03 17:37 ` Rene Herman
2008-06-03 20:20 ` Bjorn Helgaas
2008-06-03 20:25 ` Rene Herman
2008-05-30 22:49 ` [patch 15/15] PNP: convert resource options to single linked list Bjorn Helgaas
2008-06-03 19:57 ` Rene Herman
2008-06-03 23:03 ` Bjorn Helgaas
2008-06-04 0:03 ` Rene Herman
2008-06-03 23:52 ` Rene Herman
2008-06-04 11:48 ` Rene Herman
2008-06-04 20:50 ` Bjorn Helgaas
2008-06-04 22:31 ` Rene Herman
2008-06-04 23:06 ` Bjorn Helgaas
2008-06-03 21:13 ` Rene Herman
2008-06-04 21:26 ` Bjorn Helgaas [this message]
2008-06-01 19:28 ` [patch 00/15] PNP: convert resource options to unified dynamic list, v1 Rene Herman
2008-06-02 15:56 ` Bjorn Helgaas
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=200806041526.19234.bjorn.helgaas@hp.com \
--to=bjorn.helgaas@hp.com \
--cc=abelay@mit.edu \
--cc=akpm@linux-foundation.org \
--cc=ambx1@neo.rr.com \
--cc=castet.matthieu@free.fr \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=perex@perex.cz \
--cc=rene.herman@keyaccess.nl \
--cc=shaohua.li@intel.com \
--cc=tiwai@suse.de \
--cc=trenn@suse.de \
/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
all inboxes | Powered by JetHome®