Date: Tue, 22 Apr 2008 21:52:39 GMT From: Oleksandr Tymoshenko <gonzo@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 140428 for review Message-ID: <200804222152.m3MLqdut011976@repoman.freebsd.org>
index | next in thread | raw e-mail
http://perforce.freebsd.org/chv.cgi?CH=140428 Change 140428 by gonzo@gonzo_jeeves on 2008/04/22 21:51:57 o Use intr_event_handle instead of handmade loop o Add new parameter (irq) to intr_event_create call o Merge patch submitted by Zhao, Ning a while ago (obtained from NetBSD): fixes messes with PIC_OCW1/PIC_OCW3 Affected files ... .. //depot/projects/mips2-jnpr/src/sys/mips/mips32/malta/gt_pci.c#5 edit Differences ... ==== //depot/projects/mips2-jnpr/src/sys/mips/mips32/malta/gt_pci.c#5 (text+ko) ==== @@ -142,17 +142,14 @@ { struct gt_pci_softc *sc = v; struct intr_event *event; - struct intr_handler *ih; - int irq, thread; + int irq; for (;;) { bus_space_write_1(sc->sc_pciio, sc->sc_ioh_icu1, PIC_OCW3, OCW3_SEL | OCW3_P); irq = bus_space_read_1(sc->sc_pciio, sc->sc_ioh_icu1, PIC_OCW3); if ((irq & OCW3_POLL_PENDING) == 0) - { return FILTER_HANDLED; - } irq = OCW3_POLL_IRQ(irq); @@ -168,22 +165,14 @@ } event = sc->sc_eventstab[irq]; - thread = 0; - if (event && !TAILQ_EMPTY(&event->ie_handlers)) - { - /* Execute fast handlers. */ - TAILQ_FOREACH(ih, &event->ie_handlers, ih_next) { - if (ih->ih_filter == NULL) - thread = 1; - else - ih->ih_filter(ih->ih_argument); - } + if (!event || TAILQ_EMPTY(&event->ie_handlers)) { + printf("gt_pci: stray interrupt %d\n", irq); + continue; } - /* Schedule thread if needed. */ - if (thread) - intr_event_schedule_thread(event); + if (intr_event_handle(event, NULL) != 0) + printf("gt_pci: stray interrupt %d\n", irq); /* Send a specific EOI to the 8259. */ if (irq > 7) { @@ -285,15 +274,15 @@ ICW4_8086); /* mask all interrupts */ - bus_space_write_1(sc->sc_pciio, sc->sc_ioh_icu1, 0, + bus_space_write_1(sc->sc_pciio, sc->sc_ioh_icu1, 1, sc->sc_imask & 0xff); /* enable special mask mode */ - bus_space_write_1(sc->sc_pciio, sc->sc_ioh_icu1, 1, + bus_space_write_1(sc->sc_pciio, sc->sc_ioh_icu1, 0, OCW3_SEL | OCW3_ESMM | OCW3_SMM); /* read IRR by default */ - bus_space_write_1(sc->sc_pciio, sc->sc_ioh_icu1, 1, + bus_space_write_1(sc->sc_pciio, sc->sc_ioh_icu1, 0, OCW3_SEL | OCW3_RR); /* reset, program device, 4 bytes */ @@ -307,15 +296,15 @@ ICW4_8086); /* mask all interrupts */ - bus_space_write_1(sc->sc_pciio, sc->sc_ioh_icu2, 0, + bus_space_write_1(sc->sc_pciio, sc->sc_ioh_icu2, 1, sc->sc_imask & 0xff); /* enable special mask mode */ - bus_space_write_1(sc->sc_pciio, sc->sc_ioh_icu2, 1, + bus_space_write_1(sc->sc_pciio, sc->sc_ioh_icu2, 0, OCW3_SEL | OCW3_ESMM | OCW3_SMM); /* read IRR by default */ - bus_space_write_1(sc->sc_pciio, sc->sc_ioh_icu2, 1, + bus_space_write_1(sc->sc_pciio, sc->sc_ioh_icu2, 0, OCW3_SEL | OCW3_RR); /* @@ -657,9 +646,9 @@ event = sc->sc_eventstab[irq]; if (event == NULL) { - error = intr_event_create(&event, (void *)irq, 0, + error = intr_event_create(&event, (void *)irq, 0, irq, (mask_fn)mips_mask_irq, (mask_fn)mips_unmask_irq, - (mask_fn)mips_unmask_irq, NULL, "gt_pci intr%d:", irq); + NULL, NULL, "gt_pci intr%d:", irq); if (error) return 0; sc->sc_eventstab[irq] = event;help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200804222152.m3MLqdut011976>
