Fix hang on IBM Token Ring PCMCIA card ejection
[powerpc.git] / sound / oss / i810_audio.c
index ddcddc2..f5e31f1 100644 (file)
 #include <linux/ac97_codec.h>
 #include <linux/bitops.h>
 #include <linux/mutex.h>
+#include <linux/mm.h>
 
 #include <asm/uaccess.h>
 
@@ -1523,9 +1524,9 @@ static void i810_channel_interrupt(struct i810_card *card)
 #endif
 }
 
-static irqreturn_t i810_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t i810_interrupt(int irq, void *dev_id)
 {
-       struct i810_card *card = (struct i810_card *)dev_id;
+       struct i810_card *card = dev_id;
        u32 status;
 
        spin_lock(&card->lock);
@@ -2579,10 +2580,9 @@ static int i810_open(struct inode *inode, struct file *file)
                for (i = 0; i < NR_HW_CH && card && !card->initializing; i++) {
                        if (card->states[i] == NULL) {
                                state = card->states[i] = (struct i810_state *)
-                                       kmalloc(sizeof(struct i810_state), GFP_KERNEL);
+                                       kzalloc(sizeof(struct i810_state), GFP_KERNEL);
                                if (state == NULL)
                                        return -ENOMEM;
-                               memset(state, 0, sizeof(struct i810_state));
                                dmabuf = &state->dmabuf;
                                goto found_virt;
                        }
@@ -3204,10 +3204,9 @@ static void __devinit i810_configure_clocking (void)
         */
        if(card != NULL) {
                state = card->states[0] = (struct i810_state *)
-                                       kmalloc(sizeof(struct i810_state), GFP_KERNEL);
+                                       kzalloc(sizeof(struct i810_state), GFP_KERNEL);
                if (state == NULL)
                        return;
-               memset(state, 0, sizeof(struct i810_state));
                dmabuf = &state->dmabuf;
 
                dmabuf->write_channel = card->alloc_pcm_channel(card);
@@ -3272,11 +3271,10 @@ static int __devinit i810_probe(struct pci_dev *pci_dev, const struct pci_device
                return -ENODEV;
        }
        
-       if ((card = kmalloc(sizeof(struct i810_card), GFP_KERNEL)) == NULL) {
+       if ((card = kzalloc(sizeof(struct i810_card), GFP_KERNEL)) == NULL) {
                printk(KERN_ERR "i810_audio: out of memory\n");
                return -ENOMEM;
        }
-       memset(card, 0, sizeof(*card));
 
        card->initializing = 1;
        card->pci_dev = pci_dev;