|
|
Subject: Timeshare - msg#00036
List: linux.kernel.janitors
Sell or Rent your Timeshare!
If you're interested in selling or renting your timeshare
or vacation membership, we can help!
For a free consultation (click reply) and respond with
your name, telephone number and the name of the resort. We will contact you
shortly!
Removal Instructions:
To be removed from this list, please
reply with "remove" in the subject line.
-------------------------------------------------------
This sf.net email is sponsored by: Influence the future
of Java(TM) technology. Join the Java Community
Process(SM) (JCP(SM)) program now.
http://ads.sourceforge.net/cgi-bin/redirect.pl?sunm0004en
Was this page helpful?
Thread at a glance:
Previous Message by Date:
click to view message preview
[PATCH] region changes for sm.c hamradio soundmodem driver
Hi
this is a small patch for sm.c soundmodem hamradio driver for Linux to
1) remove two calls to check_region using request_region instead
2) release allocated region resource in case of error.
I don't have this hardware so compilation checked only.
This patch removes all references to check_region in this driver.
Patch also available at the following URL:
http://www.chez.com/wstinson/linux/kernel/patch-hamradio-sm
Comments and suggestions welcome
William Stinson (wstinson@xxxxxxxxxx)
--- linux-2.5.40/drivers/net/hamradio/soundmodem/sm.c Thu Oct 24 23:34:32 2002
+++ linux-local/drivers/net/hamradio/soundmodem/sm.c Thu Oct 24 23:41:50 2002
@@ -202,7 +202,7 @@
if (iobase <= 0 || iobase > 0x1000-SER_EXTENT)
return c_uart_unknown;
- if (check_region(iobase, SER_EXTENT))
+ if (!request_region(iobase, SER_EXTENT, "sm ser ptt"))
return c_uart_unknown;
b1 = inb(UART_MCR(iobase));
outb(b1 | 0x10, UART_MCR(iobase)); /* loopback mode */
@@ -212,7 +212,7 @@
outb(b1, UART_MCR(iobase)); /* restore old values */
outb(b2, UART_MSR(iobase));
if (b3 != 0x90)
- return c_uart_unknown;
+ goto err_out;
inb(UART_RBR(iobase));
inb(UART_RBR(iobase));
outb(0x01, UART_FCR(iobase)); /* enable FIFOs */
@@ -226,6 +226,9 @@
u = c_uart_8250;
}
return u;
+err_out:
+ release_region(iobase, SER_EXTENT);
+ return c_uart_unknown;
}
/* --------------------------------------------------------------------- */
@@ -238,23 +241,26 @@
if (iobase <= 0 || iobase > 0x1000-MIDI_EXTENT)
return 0;
- if (check_region(iobase, MIDI_EXTENT))
+ if (!request_region(iobase, MIDI_EXTENT, "sm midi ptt"))
return 0;
timeout = jiffies + (HZ / 100);
while (inb(MIDI_STATUS(iobase)) & MIDI_WRITE_EMPTY)
if ((signed)(jiffies - timeout) > 0)
- return 0;
+ goto err_out;
save_flags(flags);
cli();
outb(0xff, MIDI_DATA(iobase));
b = inb(MIDI_STATUS(iobase));
restore_flags(flags);
if (!(b & MIDI_WRITE_EMPTY))
- return 0;
+ goto err_out;
while (inb(MIDI_STATUS(iobase)) & MIDI_WRITE_EMPTY)
if ((signed)(jiffies - timeout) > 0)
- return 0;
+ goto err_out;
return 1;
+ err_out:
+ release_region(iobase, MIDI_EXTENT);
+ return 0;
}
/* --------------------------------------------------------------------- */
@@ -289,7 +295,6 @@
sm->hdrv.ptt_out.seriobase <= 0x1000-SER_EXTENT &&
((u = check_uart(sm->hdrv.ptt_out.seriobase))) != c_uart_unknown) {
sm->hdrv.ptt_out.flags |= SP_SER;
- request_region(sm->hdrv.ptt_out.seriobase, SER_EXTENT, "sm ser
ptt");
outb(0, UART_IER(sm->hdrv.ptt_out.seriobase));
/* 5 bits, 1 stop, no parity, no break, Div latch access */
outb(0x80, UART_LCR(sm->hdrv.ptt_out.seriobase));
@@ -325,8 +330,6 @@
sm->hdrv.ptt_out.midiiobase <= 0x1000-MIDI_EXTENT &&
check_midi(sm->hdrv.ptt_out.midiiobase)) {
sm->hdrv.ptt_out.flags |= SP_MIDI;
- request_region(sm->hdrv.ptt_out.midiiobase, MIDI_EXTENT,
- "sm midi ptt");
}
sm_output_status(sm);
-------------------------------------------------------
This sf.net email is sponsored by: Influence the future
of Java(TM) technology. Join the Java Community
Process(SM) (JCP(SM)) program now.
http://ads.sourceforge.net/cgi-bin/redirect.pl?sunm0003en
Next Message by Date:
click to view message preview
[PATCH] region changes for sm_sbc.c hamradio soundmodem driver
Hi
this is a patch for sm_sbc.c soundmodem hamradio driver for Linux to
1) remove two calls to check_region using request_region instead
2) release allocated region resource in case of error.
I don't have this hardware so compilation checked only.
This patch removes all references to check_region in this driver.
Patch also available at the following URL:
http://www.chez.com/wstinson/linux/kernel/patch-hamradio-sm_sbc
Comments and suggestions welcome
William Stinson (wstinson@xxxxxxxxxx)
--- linux-2.5.44/drivers/net/hamradio/soundmodem/sm_sbc.c Sat Oct 26
00:47:41 2002
+++ linux-local/drivers/net/hamradio/soundmodem/sm_sbc.c Sat Oct 26
01:11:45 2002
@@ -379,7 +379,7 @@
if (dev->base_addr <= 0 || dev->base_addr > 0x1000-SBC_EXTENT ||
dev->irq < 2 || dev->irq > 15 || dev->dma > 3)
return -ENXIO;
- if (check_region(dev->base_addr, SBC_EXTENT))
+ if (!request_region(dev->base_addr, SBC_EXTENT, sm->hwdrv->hw_name))
return -EACCES;
/*
* check if a card is available
@@ -387,30 +387,35 @@
if (!reset_dsp(dev)) {
printk(KERN_ERR "%s: sbc: no card at io address 0x%lx\n",
sm_drvname, dev->base_addr);
- return -ENODEV;
+ err = -ENODEV;
+ goto err_out;
}
write_dsp(dev, SBC_GET_REVISION);
if (!read_dsp(dev, &SCSTATE->revhi) ||
- !read_dsp(dev, &SCSTATE->revlo))
- return -ENODEV;
+ !read_dsp(dev, &SCSTATE->revlo)) {
+ err = -ENODEV;
+ goto err_out;
+ }
printk(KERN_INFO "%s: SoundBlaster DSP revision %d.%d\n", sm_drvname,
SCSTATE->revhi, SCSTATE->revlo);
if (SCSTATE->revhi < 2) {
printk(KERN_ERR "%s: your card is an antiquity, at least DSP "
"rev 2.00 required\n", sm_drvname);
- return -ENODEV;
+ err = -ENODEV;
+ goto err_out;
}
if (SCSTATE->revhi < 3 &&
(SCSTATE->fmt[0] >= 180 || SCSTATE->fmt[1] >= 180)) {
printk(KERN_ERR "%s: sbc io 0x%lx: DSP rev %d.%02d too "
"old, at least 3.00 required\n", sm_drvname,
dev->base_addr, SCSTATE->revhi, SCSTATE->revlo);
- return -ENODEV;
+ err = -ENODEV;
+ goto err_out;
}
if (SCSTATE->revhi >= 4 &&
(err = config_resources(dev, sm, 0))) {
printk(KERN_ERR "%s: invalid IRQ and/or DMA specified\n",
sm_drvname);
- return err;
+ goto err_out;
}
/*
* initialize some variables
@@ -420,8 +425,10 @@
u = NUM_FRAGMENTS * sm->dma.ofragsz;
if (u > dmasz)
dmasz = u;
- if (!(sm->dma.ibuf = sm->dma.obuf = kmalloc(dmasz, GFP_KERNEL |
GFP_DMA)))
- return -ENOMEM;
+ if (!(sm->dma.ibuf = sm->dma.obuf = kmalloc(dmasz, GFP_KERNEL |
GFP_DMA))) {
+ err = -ENOMEM;
+ goto err_out;
+ }
dma_init_transmit(sm);
dma_init_receive(sm);
@@ -433,18 +440,23 @@
sm->mode_rx->init(sm);
if (request_dma(dev->dma, sm->hwdrv->hw_name)) {
- kfree(sm->dma.obuf);
- return -EBUSY;
+ err = -EBUSY;
+ goto err_out1;
}
if (request_irq(dev->irq, sbc_interrupt, SA_INTERRUPT,
sm->hwdrv->hw_name, dev)) {
- free_dma(dev->dma);
- kfree(sm->dma.obuf);
- return -EBUSY;
+ err = -EBUSY;
+ goto err_out2;
}
- request_region(dev->base_addr, SBC_EXTENT, sm->hwdrv->hw_name);
setup_dma_dsp(dev, sm, 0);
return 0;
+err_out2:
+ free_dma(dev->dma);
+err_out1:
+ kfree(sm->dma.obuf);
+err_out:
+ release_region(dev->base_addr, SBC_EXTENT);
+ return err;
}
/* --------------------------------------------------------------------- */
@@ -761,7 +773,7 @@
if (dev->base_addr <= 0 || dev->base_addr > 0x1000-SBC_EXTENT ||
dev->irq < 2 || dev->irq > 15 || dev->dma > 3)
return -ENXIO;
- if (check_region(dev->base_addr, SBC_EXTENT))
+ if (!request_region(dev->base_addr, SBC_EXTENT, sm->hwdrv->hw_name))
return -EACCES;
/*
* check if a card is available
@@ -769,30 +781,36 @@
if (!reset_dsp(dev)) {
printk(KERN_ERR "%s: sbc: no card at io address 0x%lx\n",
sm_drvname, dev->base_addr);
- return -ENODEV;
+ err = -ENODEV;
+ goto err_out;
}
write_dsp(dev, SBC_GET_REVISION);
if (!read_dsp(dev, &SCSTATE->revhi) ||
- !read_dsp(dev, &SCSTATE->revlo))
- return -ENODEV;
+ !read_dsp(dev, &SCSTATE->revlo)) {
+ err = -ENODEV;
+ goto err_out;
+ }
printk(KERN_INFO "%s: SoundBlaster DSP revision %d.%d\n", sm_drvname,
SCSTATE->revhi, SCSTATE->revlo);
if (SCSTATE->revhi < 4) {
printk(KERN_ERR "%s: at least DSP rev 4.00 required\n",
sm_drvname);
- return -ENODEV;
+ err = -ENODEV;
+ goto err_out;
}
if ((err = config_resources(dev, sm, 1))) {
printk(KERN_ERR "%s: invalid IRQ and/or DMA specified\n",
sm_drvname);
- return err;
+ goto err_out;
}
/*
* initialize some variables
*/
- if (!(sm->dma.ibuf = kmalloc(sm->dma.ifragsz * (NUM_FRAGMENTS+1),
GFP_KERNEL | GFP_DMA)))
- return -ENOMEM;
+ if (!(sm->dma.ibuf = kmalloc(sm->dma.ifragsz * (NUM_FRAGMENTS+1),
GFP_KERNEL | GFP_DMA))) {
+ err = -ENOMEM;
+ goto err_out;
+ }
if (!(sm->dma.obuf = kmalloc(sm->dma.ofragsz * NUM_FRAGMENTS,
GFP_KERNEL | GFP_DMA))) {
- kfree(sm->dma.ibuf);
- return -ENOMEM;
+ err = -ENOMEM;
+ goto err_out1;
}
dma_init_transmit(sm);
dma_init_receive(sm);
@@ -805,27 +823,31 @@
sm->mode_rx->init(sm);
if (request_dma(dev->dma, sm->hwdrv->hw_name)) {
- kfree(sm->dma.ibuf);
- kfree(sm->dma.obuf);
- return -EBUSY;
+ err = -EBUSY;
+ goto err_out2;
}
if (request_dma(sm->hdrv.ptt_out.dma2, sm->hwdrv->hw_name)) {
- kfree(sm->dma.ibuf);
- kfree(sm->dma.obuf);
- free_dma(dev->dma);
- return -EBUSY;
+ err = -EBUSY;
+ goto err_out3;
}
if (request_irq(dev->irq, sbcfdx_interrupt, SA_INTERRUPT,
sm->hwdrv->hw_name, dev)) {
- kfree(sm->dma.ibuf);
- kfree(sm->dma.obuf);
- free_dma(dev->dma);
- free_dma(sm->hdrv.ptt_out.dma2);
- return -EBUSY;
+ err = -EBUSY;
+ goto err_out4;
}
- request_region(dev->base_addr, SBC_EXTENT, sm->hwdrv->hw_name);
setup_dma_fdx_dsp(dev, sm);
return 0;
+err_out4:
+ free_dma(sm->hdrv.ptt_out.dma2);
+err_out3:
+ free_dma(dev->dma);
+err_out2:
+ kfree(sm->dma.obuf);
+err_out1:
+ kfree(sm->dma.ibuf);
+err_out:
+ release_region(dev->base_addr, SBC_EXTENT);
+ return err;
}
/* --------------------------------------------------------------------- */
-------------------------------------------------------
This sf.net email is sponsored by: Influence the future
of Java(TM) technology. Join the Java Community
Process(SM) (JCP(SM)) program now.
http://ads.sourceforge.net/cgi-bin/redirect.pl?sunm0004en
Previous Message by Thread:
click to view message preview
[PATCH] region changes for sm.c hamradio soundmodem driver
Hi
this is a small patch for sm.c soundmodem hamradio driver for Linux to
1) remove two calls to check_region using request_region instead
2) release allocated region resource in case of error.
I don't have this hardware so compilation checked only.
This patch removes all references to check_region in this driver.
Patch also available at the following URL:
http://www.chez.com/wstinson/linux/kernel/patch-hamradio-sm
Comments and suggestions welcome
William Stinson (wstinson@xxxxxxxxxx)
--- linux-2.5.40/drivers/net/hamradio/soundmodem/sm.c Thu Oct 24 23:34:32 2002
+++ linux-local/drivers/net/hamradio/soundmodem/sm.c Thu Oct 24 23:41:50 2002
@@ -202,7 +202,7 @@
if (iobase <= 0 || iobase > 0x1000-SER_EXTENT)
return c_uart_unknown;
- if (check_region(iobase, SER_EXTENT))
+ if (!request_region(iobase, SER_EXTENT, "sm ser ptt"))
return c_uart_unknown;
b1 = inb(UART_MCR(iobase));
outb(b1 | 0x10, UART_MCR(iobase)); /* loopback mode */
@@ -212,7 +212,7 @@
outb(b1, UART_MCR(iobase)); /* restore old values */
outb(b2, UART_MSR(iobase));
if (b3 != 0x90)
- return c_uart_unknown;
+ goto err_out;
inb(UART_RBR(iobase));
inb(UART_RBR(iobase));
outb(0x01, UART_FCR(iobase)); /* enable FIFOs */
@@ -226,6 +226,9 @@
u = c_uart_8250;
}
return u;
+err_out:
+ release_region(iobase, SER_EXTENT);
+ return c_uart_unknown;
}
/* --------------------------------------------------------------------- */
@@ -238,23 +241,26 @@
if (iobase <= 0 || iobase > 0x1000-MIDI_EXTENT)
return 0;
- if (check_region(iobase, MIDI_EXTENT))
+ if (!request_region(iobase, MIDI_EXTENT, "sm midi ptt"))
return 0;
timeout = jiffies + (HZ / 100);
while (inb(MIDI_STATUS(iobase)) & MIDI_WRITE_EMPTY)
if ((signed)(jiffies - timeout) > 0)
- return 0;
+ goto err_out;
save_flags(flags);
cli();
outb(0xff, MIDI_DATA(iobase));
b = inb(MIDI_STATUS(iobase));
restore_flags(flags);
if (!(b & MIDI_WRITE_EMPTY))
- return 0;
+ goto err_out;
while (inb(MIDI_STATUS(iobase)) & MIDI_WRITE_EMPTY)
if ((signed)(jiffies - timeout) > 0)
- return 0;
+ goto err_out;
return 1;
+ err_out:
+ release_region(iobase, MIDI_EXTENT);
+ return 0;
}
/* --------------------------------------------------------------------- */
@@ -289,7 +295,6 @@
sm->hdrv.ptt_out.seriobase <= 0x1000-SER_EXTENT &&
((u = check_uart(sm->hdrv.ptt_out.seriobase))) != c_uart_unknown) {
sm->hdrv.ptt_out.flags |= SP_SER;
- request_region(sm->hdrv.ptt_out.seriobase, SER_EXTENT, "sm ser
ptt");
outb(0, UART_IER(sm->hdrv.ptt_out.seriobase));
/* 5 bits, 1 stop, no parity, no break, Div latch access */
outb(0x80, UART_LCR(sm->hdrv.ptt_out.seriobase));
@@ -325,8 +330,6 @@
sm->hdrv.ptt_out.midiiobase <= 0x1000-MIDI_EXTENT &&
check_midi(sm->hdrv.ptt_out.midiiobase)) {
sm->hdrv.ptt_out.flags |= SP_MIDI;
- request_region(sm->hdrv.ptt_out.midiiobase, MIDI_EXTENT,
- "sm midi ptt");
}
sm_output_status(sm);
-------------------------------------------------------
This sf.net email is sponsored by: Influence the future
of Java(TM) technology. Join the Java Community
Process(SM) (JCP(SM)) program now.
http://ads.sourceforge.net/cgi-bin/redirect.pl?sunm0003en
Next Message by Thread:
click to view message preview
[PATCH] region changes for sm_sbc.c hamradio soundmodem driver
Hi
this is a patch for sm_sbc.c soundmodem hamradio driver for Linux to
1) remove two calls to check_region using request_region instead
2) release allocated region resource in case of error.
I don't have this hardware so compilation checked only.
This patch removes all references to check_region in this driver.
Patch also available at the following URL:
http://www.chez.com/wstinson/linux/kernel/patch-hamradio-sm_sbc
Comments and suggestions welcome
William Stinson (wstinson@xxxxxxxxxx)
--- linux-2.5.44/drivers/net/hamradio/soundmodem/sm_sbc.c Sat Oct 26
00:47:41 2002
+++ linux-local/drivers/net/hamradio/soundmodem/sm_sbc.c Sat Oct 26
01:11:45 2002
@@ -379,7 +379,7 @@
if (dev->base_addr <= 0 || dev->base_addr > 0x1000-SBC_EXTENT ||
dev->irq < 2 || dev->irq > 15 || dev->dma > 3)
return -ENXIO;
- if (check_region(dev->base_addr, SBC_EXTENT))
+ if (!request_region(dev->base_addr, SBC_EXTENT, sm->hwdrv->hw_name))
return -EACCES;
/*
* check if a card is available
@@ -387,30 +387,35 @@
if (!reset_dsp(dev)) {
printk(KERN_ERR "%s: sbc: no card at io address 0x%lx\n",
sm_drvname, dev->base_addr);
- return -ENODEV;
+ err = -ENODEV;
+ goto err_out;
}
write_dsp(dev, SBC_GET_REVISION);
if (!read_dsp(dev, &SCSTATE->revhi) ||
- !read_dsp(dev, &SCSTATE->revlo))
- return -ENODEV;
+ !read_dsp(dev, &SCSTATE->revlo)) {
+ err = -ENODEV;
+ goto err_out;
+ }
printk(KERN_INFO "%s: SoundBlaster DSP revision %d.%d\n", sm_drvname,
SCSTATE->revhi, SCSTATE->revlo);
if (SCSTATE->revhi < 2) {
printk(KERN_ERR "%s: your card is an antiquity, at least DSP "
"rev 2.00 required\n", sm_drvname);
- return -ENODEV;
+ err = -ENODEV;
+ goto err_out;
}
if (SCSTATE->revhi < 3 &&
(SCSTATE->fmt[0] >= 180 || SCSTATE->fmt[1] >= 180)) {
printk(KERN_ERR "%s: sbc io 0x%lx: DSP rev %d.%02d too "
"old, at least 3.00 required\n", sm_drvname,
dev->base_addr, SCSTATE->revhi, SCSTATE->revlo);
- return -ENODEV;
+ err = -ENODEV;
+ goto err_out;
}
if (SCSTATE->revhi >= 4 &&
(err = config_resources(dev, sm, 0))) {
printk(KERN_ERR "%s: invalid IRQ and/or DMA specified\n",
sm_drvname);
- return err;
+ goto err_out;
}
/*
* initialize some variables
@@ -420,8 +425,10 @@
u = NUM_FRAGMENTS * sm->dma.ofragsz;
if (u > dmasz)
dmasz = u;
- if (!(sm->dma.ibuf = sm->dma.obuf = kmalloc(dmasz, GFP_KERNEL |
GFP_DMA)))
- return -ENOMEM;
+ if (!(sm->dma.ibuf = sm->dma.obuf = kmalloc(dmasz, GFP_KERNEL |
GFP_DMA))) {
+ err = -ENOMEM;
+ goto err_out;
+ }
dma_init_transmit(sm);
dma_init_receive(sm);
@@ -433,18 +440,23 @@
sm->mode_rx->init(sm);
if (request_dma(dev->dma, sm->hwdrv->hw_name)) {
- kfree(sm->dma.obuf);
- return -EBUSY;
+ err = -EBUSY;
+ goto err_out1;
}
if (request_irq(dev->irq, sbc_interrupt, SA_INTERRUPT,
sm->hwdrv->hw_name, dev)) {
- free_dma(dev->dma);
- kfree(sm->dma.obuf);
- return -EBUSY;
+ err = -EBUSY;
+ goto err_out2;
}
- request_region(dev->base_addr, SBC_EXTENT, sm->hwdrv->hw_name);
setup_dma_dsp(dev, sm, 0);
return 0;
+err_out2:
+ free_dma(dev->dma);
+err_out1:
+ kfree(sm->dma.obuf);
+err_out:
+ release_region(dev->base_addr, SBC_EXTENT);
+ return err;
}
/* --------------------------------------------------------------------- */
@@ -761,7 +773,7 @@
if (dev->base_addr <= 0 || dev->base_addr > 0x1000-SBC_EXTENT ||
dev->irq < 2 || dev->irq > 15 || dev->dma > 3)
return -ENXIO;
- if (check_region(dev->base_addr, SBC_EXTENT))
+ if (!request_region(dev->base_addr, SBC_EXTENT, sm->hwdrv->hw_name))
return -EACCES;
/*
* check if a card is available
@@ -769,30 +781,36 @@
if (!reset_dsp(dev)) {
printk(KERN_ERR "%s: sbc: no card at io address 0x%lx\n",
sm_drvname, dev->base_addr);
- return -ENODEV;
+ err = -ENODEV;
+ goto err_out;
}
write_dsp(dev, SBC_GET_REVISION);
if (!read_dsp(dev, &SCSTATE->revhi) ||
- !read_dsp(dev, &SCSTATE->revlo))
- return -ENODEV;
+ !read_dsp(dev, &SCSTATE->revlo)) {
+ err = -ENODEV;
+ goto err_out;
+ }
printk(KERN_INFO "%s: SoundBlaster DSP revision %d.%d\n", sm_drvname,
SCSTATE->revhi, SCSTATE->revlo);
if (SCSTATE->revhi < 4) {
printk(KERN_ERR "%s: at least DSP rev 4.00 required\n",
sm_drvname);
- return -ENODEV;
+ err = -ENODEV;
+ goto err_out;
}
if ((err = config_resources(dev, sm, 1))) {
printk(KERN_ERR "%s: invalid IRQ and/or DMA specified\n",
sm_drvname);
- return err;
+ goto err_out;
}
/*
* initialize some variables
*/
- if (!(sm->dma.ibuf = kmalloc(sm->dma.ifragsz * (NUM_FRAGMENTS+1),
GFP_KERNEL | GFP_DMA)))
- return -ENOMEM;
+ if (!(sm->dma.ibuf = kmalloc(sm->dma.ifragsz * (NUM_FRAGMENTS+1),
GFP_KERNEL | GFP_DMA))) {
+ err = -ENOMEM;
+ goto err_out;
+ }
if (!(sm->dma.obuf = kmalloc(sm->dma.ofragsz * NUM_FRAGMENTS,
GFP_KERNEL | GFP_DMA))) {
- kfree(sm->dma.ibuf);
- return -ENOMEM;
+ err = -ENOMEM;
+ goto err_out1;
}
dma_init_transmit(sm);
dma_init_receive(sm);
@@ -805,27 +823,31 @@
sm->mode_rx->init(sm);
if (request_dma(dev->dma, sm->hwdrv->hw_name)) {
- kfree(sm->dma.ibuf);
- kfree(sm->dma.obuf);
- return -EBUSY;
+ err = -EBUSY;
+ goto err_out2;
}
if (request_dma(sm->hdrv.ptt_out.dma2, sm->hwdrv->hw_name)) {
- kfree(sm->dma.ibuf);
- kfree(sm->dma.obuf);
- free_dma(dev->dma);
- return -EBUSY;
+ err = -EBUSY;
+ goto err_out3;
}
if (request_irq(dev->irq, sbcfdx_interrupt, SA_INTERRUPT,
sm->hwdrv->hw_name, dev)) {
- kfree(sm->dma.ibuf);
- kfree(sm->dma.obuf);
- free_dma(dev->dma);
- free_dma(sm->hdrv.ptt_out.dma2);
- return -EBUSY;
+ err = -EBUSY;
+ goto err_out4;
}
- request_region(dev->base_addr, SBC_EXTENT, sm->hwdrv->hw_name);
setup_dma_fdx_dsp(dev, sm);
return 0;
+err_out4:
+ free_dma(sm->hdrv.ptt_out.dma2);
+err_out3:
+ free_dma(dev->dma);
+err_out2:
+ kfree(sm->dma.obuf);
+err_out1:
+ kfree(sm->dma.ibuf);
+err_out:
+ release_region(dev->base_addr, SBC_EXTENT);
+ return err;
}
/* --------------------------------------------------------------------- */
-------------------------------------------------------
This sf.net email is sponsored by: Influence the future
of Java(TM) technology. Join the Java Community
Process(SM) (JCP(SM)) program now.
http://ads.sourceforge.net/cgi-bin/redirect.pl?sunm0004en
|
|