/* various tuning parameters */
 #define HPT_RESET_STATE_ENGINE
 #undef HPT_DELAY_INTERRUPT
-#define HPT_SERIALIZE_IO       0
 
 static const char *quirk_drives[] = {
        "QUANTUM FIREBALLlct08 08",
 static void __devinit init_hwif_hpt366(ide_hwif_t *hwif)
 {
        struct hpt_info *info   = hpt3xx_get_info(hwif->dev);
-       int serialize           = HPT_SERIALIZE_IO;
        u8  chip_type           = info->chip_type;
 
        /* Cache the channel's MISC. control registers' offset */
                 * Clock is shared between the channels,
                 * so we'll have to serialize them... :-(
                 */
-               serialize = 1;
+               hwif->host->host_flags |= IDE_HFLAG_SERIALIZE;
                hwif->rw_disk = &hpt3xxn_rw_disk;
        }
-
-       /* Serialize access to this device if needed */
-       if (serialize && hwif->mate)
-               hwif->serialized = hwif->mate->serialized = 1;
 }
 
 static int __devinit init_dma_hpt366(ide_hwif_t *hwif,
 
        }
 }
 
-/*
- * save_match() is used to simplify logic in init_irq() below.
- *
- * A loophole here is that we may not know about a particular
- * hwif's irq until after that hwif is actually probed/initialized..
- * This could be a problem for the case where an hwif is on a
- * dual interface that requires serialization (eg. cmd640) and another
- * hwif using one of the same irqs is initialized beforehand.
- *
- * This routine detects and reports such situations, but does not fix them.
- */
-static void save_match(ide_hwif_t *hwif, ide_hwif_t *new, ide_hwif_t **match)
-{
-       ide_hwif_t *m = *match;
-
-       if (m && m->hwgroup && m->hwgroup != new->hwgroup) {
-               if (!new->hwgroup)
-                       return;
-               printk(KERN_WARNING "%s: potential IRQ problem with %s and %s\n",
-                       hwif->name, new->name, m->name);
-       }
-       if (!m || m->irq != hwif->irq) /* don't undo a prior perfect match */
-               *match = new;
-}
-
 /*
  * init request queue
  */
        mutex_lock(&ide_cfg_mtx);
        hwif->hwgroup = NULL;
 
-       /*
-        * Group up with any other hwifs that share our irq(s).
-        */
        for (index = 0; index < MAX_HWIFS; index++) {
                ide_hwif_t *h = ide_ports[index];
 
                if (h && h->hwgroup) {  /* scan only initialized ports */
-                       if (hwif->irq == h->irq) {
-                               if (hwif->chipset != ide_pci ||
-                                   h->chipset != ide_pci) {
-                                       save_match(hwif, h, &match);
-                               }
-                       }
-                       if (hwif->serialized) {
-                               if (hwif->mate && hwif->mate->irq == h->irq)
-                                       save_match(hwif, h, &match);
-                       }
-                       if (h->serialized) {
-                               if (h->mate && hwif->irq == h->mate->irq)
-                                       save_match(hwif, h, &match);
+                       if (hwif->host->host_flags & IDE_HFLAG_SERIALIZE) {
+                               if (hwif->host == h->host)
+                                       match = h;
                        }
                }
        }
        }
 
        if ((d->host_flags & IDE_HFLAG_SERIALIZE) ||
-           ((d->host_flags & IDE_HFLAG_SERIALIZE_DMA) && hwif->dma_base)) {
-               if (hwif->mate)
-                       hwif->mate->serialized = hwif->serialized = 1;
-       }
+           ((d->host_flags & IDE_HFLAG_SERIALIZE_DMA) && hwif->dma_base))
+               hwif->host->host_flags |= IDE_HFLAG_SERIALIZE;
 
        if (d->max_sectors)
                hwif->rqsize = d->max_sectors;