lkml.org 
[lkml]   [2008]   [Jun]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 17/18] ISAPNP: handle independent options following dependent ones
    The ISAPNP spec recommends that independent options precede
    dependent ones, but this is not actually required. The current
    ISAPNP code incorrectly puts such trailing independent options
    at the end of the last dependent option list.

    This patch fixes that bug by resetting the current option list
    to the independent list when we see an "End Dependent Functions"
    tag. PNPBIOS and PNPACPI handle this the same way.

    Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

    Index: work10/drivers/pnp/isapnp/core.c
    ===================================================================
    --- work10.orig/drivers/pnp/isapnp/core.c 2008-06-03 15:45:02.000000000 -0600
    +++ work10/drivers/pnp/isapnp/core.c 2008-06-03 15:49:38.000000000 -0600
    @@ -584,14 +584,14 @@ static int __init isapnp_create_device(s
    {
    int number = 0, skip = 0, priority, compat = 0;
    unsigned char type, tmp[17];
    - struct pnp_option *option;
    + struct pnp_option *option, *option_independent;
    struct pnp_dev *dev;
    u32 eisa_id;
    char id[8];

    if ((dev = isapnp_parse_device(card, size, number++)) == NULL)
    return 1;
    - option = pnp_register_independent_option(dev);
    + option_independent = option = pnp_register_independent_option(dev);
    if (!option) {
    kfree(dev);
    return 1;
    @@ -613,6 +613,7 @@ static int __init isapnp_create_device(s
    size = 0;
    skip = 0;
    option = pnp_register_independent_option(dev);
    + option_independent = option;
    if (!option) {
    kfree(dev);
    return 1;
    @@ -662,6 +663,10 @@ static int __init isapnp_create_device(s
    case _STAG_ENDDEP:
    if (size != 0)
    goto __skip;
    + if (option_independent == option)
    + dev_warn(&dev->dev, "missing "
    + "_STAG_STARTDEP tag\n");
    + option = option_independent;
    dev_dbg(&dev->dev, "end dependent options\n");
    break;
    case _STAG_IOPORT:
    --


    \
     
     \ /
      Last update: 2008-06-05 00:19    [W:0.048 / U:62.604 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site