Re: [PATCH 3/4] powerpc: Use IRQF_NO_SUSPEND not IRQF_TIMER for non-timer interrupts

2010-07-30 Thread Benjamin Herrenschmidt
On Thu, 2010-07-29 at 11:16 +0100, Ian Campbell wrote:
 kw_i2c_irq and via_pmu_interrupt are not timer interrupts and
 therefore should not use IRQF_TIMER. Use the recently introduced
 IRQF_NO_SUSPEND instead since that is the actual desired behaviour.
 
 Signed-off-by: Ian Campbell ian.campb...@citrix.com
 Cc: Thomas Gleixner t...@linutronix.de

Acked-by: Benjamin Herrenschmidt b...@kernel.crashing.org

 Cc: Paul Mackerras pau...@samba.org
 Cc: Grant Likely grant.lik...@secretlab.ca
 Cc: linuxppc-...@ozlabs.org
 Cc: devicetree-discuss@lists.ozlabs.org
 ---
  arch/powerpc/platforms/powermac/low_i2c.c |5 +++--
  drivers/macintosh/via-pmu.c   |9 +
  2 files changed, 8 insertions(+), 6 deletions(-)
 
 diff --git a/arch/powerpc/platforms/powermac/low_i2c.c 
 b/arch/powerpc/platforms/powermac/low_i2c.c
 index 06a137c..480567e 100644
 --- a/arch/powerpc/platforms/powermac/low_i2c.c
 +++ b/arch/powerpc/platforms/powermac/low_i2c.c
 @@ -542,11 +542,12 @@ static struct pmac_i2c_host_kw *__init 
 kw_i2c_host_init(struct device_node *np)
   /* Make sure IRQ is disabled */
   kw_write_reg(reg_ier, 0);
  
 - /* Request chip interrupt. We set IRQF_TIMER because we don't
 + /* Request chip interrupt. We set IRQF_NO_SUSPEND because we don't
* want that interrupt disabled between the 2 passes of driver
* suspend or we'll have issues running the pfuncs
*/
 - if (request_irq(host-irq, kw_i2c_irq, IRQF_TIMER, keywest i2c, host))
 + if (request_irq(host-irq, kw_i2c_irq, IRQF_NO_SUSPEND,
 + keywest i2c, host))
   host-irq = NO_IRQ;
  
   printk(KERN_INFO KeyWest i2c @0x%08x irq %d %s\n,
 diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c
 index 3d4fc0f..35bc273 100644
 --- a/drivers/macintosh/via-pmu.c
 +++ b/drivers/macintosh/via-pmu.c
 @@ -400,11 +400,12 @@ static int __init via_pmu_start(void)
   printk(KERN_ERR via-pmu: can't map interrupt\n);
   return -ENODEV;
   }
 - /* We set IRQF_TIMER because we don't want the interrupt to be disabled
 -  * between the 2 passes of driver suspend, we control our own disabling
 -  * for that one
 + /* We set IRQF_NO_SUSPEND because we don't want the interrupt
 +  * to be disabled between the 2 passes of driver suspend, we
 +  * control our own disabling for that one
*/
 - if (request_irq(irq, via_pmu_interrupt, IRQF_TIMER, VIA-PMU, (void 
 *)0)) {
 + if (request_irq(irq, via_pmu_interrupt, IRQF_NO_SUSPEND,
 + VIA-PMU, (void *)0)) {
   printk(KERN_ERR via-pmu: can't request irq %d\n, irq);
   return -ENODEV;
   }


___
devicetree-discuss mailing list
devicetree-discuss@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/devicetree-discuss


[patch v2] nouveau: unwind on load errors

2010-07-30 Thread Dan Carpenter
nuveau_load() just returned directly if there was an error instead of   

releasing resources.
 

Signed-off-by: Dan Carpenter erro...@gmail.com
---
V2: updated to the nouveau git tree.

diff --git a/drivers/gpu/drm/nouveau/nouveau_state.c 
b/drivers/gpu/drm/nouveau/nouveau_state.c
index ee3729e..cf16bfb 100644
--- a/drivers/gpu/drm/nouveau/nouveau_state.c
+++ b/drivers/gpu/drm/nouveau/nouveau_state.c
@@ -739,8 +739,10 @@ int nouveau_load(struct drm_device *dev, unsigned long 
flags)
int ret;
 
dev_priv = kzalloc(sizeof(*dev_priv), GFP_KERNEL);
-   if (!dev_priv)
-   return -ENOMEM;
+   if (!dev_priv) {
+   ret = -ENOMEM;
+   goto err_out;
+   }
dev-dev_private = dev_priv;
dev_priv-dev = dev;
 
@@ -750,8 +752,10 @@ int nouveau_load(struct drm_device *dev, unsigned long 
flags)
 dev-pci_vendor, dev-pci_device, dev-pdev-class);
 
dev_priv-wq = create_workqueue(nouveau);
-   if (!dev_priv-wq)
-   return -EINVAL;
+   if (!dev_priv-wq) {
+   ret = -EINVAL;
+   goto err_priv;
+   }
 
/* resource 0 is mmio regs */
/* resource 1 is linear FB */
@@ -764,7 +768,8 @@ int nouveau_load(struct drm_device *dev, unsigned long 
flags)
if (!dev_priv-mmio) {
NV_ERROR(dev, Unable to initialize the mmio mapping. 
 Please report your setup to  DRIVER_EMAIL \n);
-   return -EINVAL;
+   ret = -EINVAL;
+   goto err_wq;
}
NV_DEBUG(dev, regs mapped ok at 0x%llx\n,
(unsigned long long)mmio_start_offs);
@@ -812,7 +817,8 @@ int nouveau_load(struct drm_device *dev, unsigned long 
flags)
break;
default:
NV_INFO(dev, Unsupported chipset 0x%08x\n, reg0);
-   return -EINVAL;
+   ret = -EINVAL;
+   goto err_mmio;
}
 
NV_INFO(dev, Detected an NV%2x generation card (0x%08x)\n,
@@ -820,7 +826,7 @@ int nouveau_load(struct drm_device *dev, unsigned long 
flags)
 
ret = nouveau_remove_conflicting_drivers(dev);
if (ret)
-   return ret;
+   goto err_mmio;
 
/* Map PRAMIN BAR, or on older cards, the aperture withing BAR0 */
if (dev_priv-card_type = NV_40) {
@@ -834,7 +840,8 @@ int nouveau_load(struct drm_device *dev, unsigned long 
flags)
dev_priv-ramin_size);
if (!dev_priv-ramin) {
NV_ERROR(dev, Failed to PRAMIN BAR);
-   return -ENOMEM;
+   ret = -ENOMEM;
+   goto err_mmio;
}
} else {
dev_priv-ramin_size = 1 * 1024 * 1024;
@@ -842,7 +849,8 @@ int nouveau_load(struct drm_device *dev, unsigned long 
flags)
  dev_priv-ramin_size);
if (!dev_priv-ramin) {
NV_ERROR(dev, Failed to map BAR0 PRAMIN.\n);
-   return -ENOMEM;
+   ret = -ENOMEM;
+   goto err_mmio;
}
}
 
@@ -857,9 +865,21 @@ int nouveau_load(struct drm_device *dev, unsigned long 
flags)
/* For kernel modesetting, init card now and bring up fbcon */
ret = nouveau_card_init(dev);
if (ret)
-   return ret;
+   goto err_ramin;
 
return 0;
+
+err_ramin:
+   iounmap(dev_priv-ramin);
+err_mmio:
+   iounmap(dev_priv-mmio);
+err_wq:
+   destroy_workqueue(dev_priv-wq);
+err_priv:
+   kfree(dev_priv);
+   dev-dev_private = NULL;
+err_out:
+   return ret;
 }
 
 void nouveau_lastclose(struct drm_device *dev)
___
devicetree-discuss mailing list
devicetree-discuss@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/devicetree-discuss