hil_mlc_copy_di_scratch(mlc, i);
                mlc_serio = kzalloc(sizeof(*mlc_serio), GFP_KERNEL);
                mlc->serio[i] = mlc_serio;
+               if (!mlc->serio[i]) {
+                       for (; i >= 0; i--)
+                               kfree(mlc->serio[i]);
+                       return -ENOMEM;
+               }
                snprintf(mlc_serio->name, sizeof(mlc_serio->name)-1, "HIL_SERIO%d", i);
                snprintf(mlc_serio->phys, sizeof(mlc_serio->phys)-1, "HIL%d", i);
                mlc_serio->id                   = hil_mlc_serio_id;
 
 static int __init hp_sdc_mlc_init(void)
 {
        hil_mlc *mlc = &hp_sdc_mlc;
+       int err;
 
 #ifdef __mc68000__
        if (!MACH_IS_HP300)
        mlc->out = &hp_sdc_mlc_out;
        mlc->priv = &hp_sdc_mlc_priv;
 
-       if (hil_mlc_register(mlc)) {
+       err = hil_mlc_register(mlc);
+       if (err) {
                printk(KERN_WARNING PREFIX "Failed to register MLC structure with hil_mlc\n");
-               goto err0;
+               return err;
        }
 
        if (hp_sdc_request_hil_irq(&hp_sdc_mlc_isr)) {
                printk(KERN_WARNING PREFIX "Request for raw HIL ISR hook denied\n");
-               goto err1;
+               if (hil_mlc_unregister(mlc))
+                       printk(KERN_ERR PREFIX "Failed to unregister MLC structure with hil_mlc.\n"
+                               "This is bad.  Could cause an oops.\n");
+               return -EBUSY;
        }
+
        return 0;
- err1:
-       if (hil_mlc_unregister(mlc))
-               printk(KERN_ERR PREFIX "Failed to unregister MLC structure with hil_mlc.\n"
-                       "This is bad.  Could cause an oops.\n");
- err0:
-       return -EBUSY;
 }
 
 static void __exit hp_sdc_mlc_exit(void)