Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=7ef36390fabe2168fe31f245e49eb4e5f3762622
Commit:     7ef36390fabe2168fe31f245e49eb4e5f3762622
Parent:     36e02b62084efa72f1f04c95e13295a456f394c2
Author:     Jan Beulich <[EMAIL PROTECTED]>
AuthorDate: Tue Oct 16 23:31:07 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Wed Oct 17 08:43:04 2007 -0700

    PNP: don't fail device init if no DMA channel available
    
    Most drivers for devices supporting ISA DMA can operate without DMA as well
    (falling back zo PIO).  Thus it seems inappropriate for PNP to fail device
    initialization in case none of the possible DMA channels are available.
    Instead, it should be left to the driver to decide what to do if
    request_dma() fails.
    
    The patch at once adjusts the code to account for the fact that
    pnp_assign_dma() now doesn't need to report failure anymore.
    
    Signed-off-by: Jan Beulich <[EMAIL PROTECTED]>
    Cc: Adam Belay <[EMAIL PROTECTED]>
    Cc: Bjorn Helgaas <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 drivers/pnp/manager.c |   29 ++++++++++++-----------------
 1 files changed, 12 insertions(+), 17 deletions(-)

diff --git a/drivers/pnp/manager.c b/drivers/pnp/manager.c
index ea3eac2..5e43c47 100644
--- a/drivers/pnp/manager.c
+++ b/drivers/pnp/manager.c
@@ -161,7 +161,7 @@ static int pnp_assign_irq(struct pnp_dev *dev, struct 
pnp_irq *rule, int idx)
        return 0;
 }
 
-static int pnp_assign_dma(struct pnp_dev *dev, struct pnp_dma *rule, int idx)
+static void pnp_assign_dma(struct pnp_dev *dev, struct pnp_dma *rule, int idx)
 {
        resource_size_t *start, *end;
        unsigned long *flags;
@@ -173,15 +173,14 @@ static int pnp_assign_dma(struct pnp_dev *dev, struct 
pnp_dma *rule, int idx)
        };
 
        if (idx >= PNP_MAX_DMA) {
-               pnp_err
-                   ("More than 2 dmas is incompatible with pnp 
specifications.");
-               /* pretend we were successful so at least the manager won't try 
again */
-               return 1;
+               pnp_err("More than 2 dmas is incompatible with pnp "
+                       "specifications.");
+               return;
        }
 
        /* check if this resource has been manually set, if so skip */
        if (!(dev->res.dma_resource[idx].flags & IORESOURCE_AUTO))
-               return 1;
+               return;
 
        start = &dev->res.dma_resource[idx].start;
        end = &dev->res.dma_resource[idx].end;
@@ -191,19 +190,17 @@ static int pnp_assign_dma(struct pnp_dev *dev, struct 
pnp_dma *rule, int idx)
        *flags |= rule->flags | IORESOURCE_DMA;
        *flags &= ~IORESOURCE_UNSET;
 
-       if (!rule->map) {
-               *flags |= IORESOURCE_DISABLED;
-               return 1;       /* skip disabled resource requests */
-       }
-
        for (i = 0; i < 8; i++) {
                if (rule->map & (1 << xtab[i])) {
                        *start = *end = xtab[i];
                        if (pnp_check_dma(dev, idx))
-                               return 1;
+                               return;
                }
        }
-       return 0;
+#ifdef MAX_DMA_CHANNELS
+       *start = *end = MAX_DMA_CHANNELS;
+#endif
+       *flags |= IORESOURCE_UNSET | IORESOURCE_DISABLED;
 }
 
 /**
@@ -330,8 +327,7 @@ static int pnp_assign_resources(struct pnp_dev *dev, int 
depnum)
                        irq = irq->next;
                }
                while (dma) {
-                       if (!pnp_assign_dma(dev, dma, ndma))
-                               goto fail;
+                       pnp_assign_dma(dev, dma, ndma);
                        ndma++;
                        dma = dma->next;
                }
@@ -367,8 +363,7 @@ static int pnp_assign_resources(struct pnp_dev *dev, int 
depnum)
                        irq = irq->next;
                }
                while (dma) {
-                       if (!pnp_assign_dma(dev, dma, ndma))
-                               goto fail;
+                       pnp_assign_dma(dev, dma, ndma);
                        ndma++;
                        dma = dma->next;
                }
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to