Re: Handling interrupts from userspace

Eric Lammerts (eric@scintilla.utwente.nl)
Sun, 1 Aug 1999 02:17:53 +0200 (CEST)


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.

--655616-111165966-933466673=:3686
Content-Type: TEXT/PLAIN; charset=US-ASCII

On Thu, 29 Jul 1999, Alan Cox wrote:

> The kernel has to clear the IRQ cause on PCI or Nubus which means it has
> to know about the card. Writing a small card specific driver to send
> a signal each irq and clear the irq in kernel space works

The interrupt handler can also disable the IRQ in the PIC. This
will prevent further interrupts after exiting the handler.
I wrote a kernel module that implements this. It works as follows:

1) you open a special character device. The module grabs the IRQ and
disables it.
2) you do a read() on the device. This enables the interrupt in the
PIC and blocks the process until an interrupt occurs. Then the
interrupt is disabled again (in the PIC) and the read() returns 0.
3) you clear the IRQ on the card.
4) goto 2) if you want.
When you close the device, the interrupt is freed.

I attached the code to this mail. I've tested it with 2.2.9 and
printer port interrupts generated with a button attached to /ACK.
There's no poll() support but it would be trivial to add that.

Eric

-- 
Eric Lammerts <eric@scintilla.utwente.nl>

"Don't you know there ain't no devil? There's just God when he's drunk." -- Tom Waits

--655616-111165966-933466673=:3686 Content-Type: TEXT/x-csrc; name="usirq.c" Content-Transfer-Encoding: BASE64 Content-ID: <Pine.LNX.4.02.9908010217530.3686@adriaan.korenvliet> Content-Description: Content-Disposition: attachment; filename="usirq.c"

LyoNCiAqIHVzaXJxDQogKiB1c2UgaW50ZXJydXB0cyBmcm9tIHVzZXJzcGFj ZS4NCiAqIA0KICogKGMpIGNvcHlyaWdodCAxOTk5IEVyaWMgTGFtbWVydHMg PGVyaWNAc2NpbnRpbGxhLnV0d2VudGUubmw+DQogKiAkSWQ6IHVzaXJxLmMs diAxLjMgMTk5OS8wNy8zMSAyMzo1NToyNiBlcmljIEV4cCAkDQogKiANCiAq IFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQ0KICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQNCiAq IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQogKiAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLg0KICogDQogKiBJdCBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YNCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4NCiAqIFNlZSB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiAqIA0K ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiAqIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQog KiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwg TUEgMDIxMzksIFVTQS4NCiAqLw0KDQojZGVmaW5lIF9fS0VSTkVMX18NCiNk ZWZpbmUgTU9EVUxFDQojaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPg0KI2lu Y2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KDQojaW5jbHVkZSA8bGludXgvc2No ZWQuaD4NCiNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCiNpbmNsdWRlIDxs aW51eC9pbnRlcnJ1cHQuaD4NCiNpbmNsdWRlIDxsaW51eC9mY250bC5oPg0K I2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+DQoNCiNpbmNsdWRlIDxhc20vaXJx Lmg+DQoNCk1PRFVMRV9BVVRIT1IoIkVyaWMgTGFtbWVydHMgPGVyaWNAc2Np bnRpbGxhLnV0d2VudGUubmwiKTsNCk1PRFVMRV9ERVNDUklQVElPTigiVXNl cnNwYWNlIGludGVycnVwdCBkcml2ZXIiKTsNCg0KI2RlZmluZSBNQVhfSVJR UyAxNg0KDQpNT0RVTEVfUEFSTShkZWJ1ZywiaSIpOw0Kc3RhdGljIGludCBk ZWJ1ZzsNCg0Kc3RhdGljIHN0cnVjdCB7DQoJaW50IG9wZW46MTsNCglpbnQg ZW5hYmxlZDoxOw0KCXN0cnVjdCB3YWl0X3F1ZXVlICp3YWl0cTsNCn0gdXNp cnFbTUFYX0lSUVNdOw0KDQpzdGF0aWMgdm9pZCB1c2lycV9pbnRlcnJ1cHQo aW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykN CnsNCglkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsNCglpZihkZWJ1ZykgcHJp bnRrKCJ1c2lycV9pbnRlcnJ1cHQ6IGRpc2FibGVfaXJxX25vc3luYyglZClc biIsIGlycSk7DQoJdXNpcnFbaXJxXS5lbmFibGVkID0gMDsNCglpZih1c2ly cVtpcnFdLndhaXRxKQ0KCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnVzaXJx W2lycV0ud2FpdHEpOw0KfQ0KDQpzdGF0aWMgaW50IHVzaXJxX29wZW4oc3Ry dWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlsZSkNCnsNCgl1 bnNpZ25lZCBpbnQgcmV0dmFsOw0KCWludCBtaW5vciA9IE1JTk9SKGlub2Rl LT5pX3JkZXYpOw0KDQoJaWYgKHVzaXJxW21pbm9yXS5vcGVuKQ0KCQlyZXR1 cm4gLUVCVVNZOw0KDQoJdXNpcnFbbWlub3JdLmVuYWJsZWQgPSAxOw0KCXJl dHZhbCA9IHJlcXVlc3RfaXJxKG1pbm9yLCB1c2lycV9pbnRlcnJ1cHQsIDAs ICJ1c2lycSIsIE5VTEwpOw0KCWlmIChyZXR2YWwgPCAwKQ0KCQlyZXR1cm4g cmV0dmFsOw0KDQoJY2xpKCk7DQoJaWYodXNpcnFbbWlub3JdLmVuYWJsZWQp IGRpc2FibGVfaXJxKG1pbm9yKTsNCglzdGkoKTsNCg0KCXVzaXJxW21pbm9y XS5vcGVuID0gMTsNCglNT0RfSU5DX1VTRV9DT1VOVDsNCglyZXR1cm4gMDsN Cn0NCg0Kc3RhdGljIGludCB1c2lycV9jbG9zZShzdHJ1Y3QgaW5vZGUgKiBp bm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKQ0Kew0KCWludCBtaW5vciA9IE1J Tk9SKGlub2RlLT5pX3JkZXYpOw0KDQoJdXNpcnFbbWlub3JdLm9wZW4gPSAw Ow0KCWZyZWVfaXJxKG1pbm9yLCBOVUxMKTsNCglNT0RfREVDX1VTRV9DT1VO VDsNCglyZXR1cm4gMDsNCn0NCg0Kc3RhdGljIHNzaXplX3QgdXNpcnFfcmVh ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVz LCBsb2ZmX3QgKnBwb3MpDQp7DQoJaW50IG1pbm9yID0gTUlOT1IoZmlsZS0+ Zl9kZW50cnktPmRfaW5vZGUtPmlfcmRldik7DQoJDQoJdXNpcnFbbWlub3Jd LmVuYWJsZWQgPSAxOw0KCWlmKGRlYnVnKSBwcmludGsoInVzaXJxX3JlYWQ6 IGVuYWJsZV9pcnEoJWQpXG4iLCBtaW5vcik7DQoJZW5hYmxlX2lycShtaW5v cik7DQoNCglpZighdXNpcnFbbWlub3JdLmVuYWJsZWQpIC8qIGFwcGFyZW50 bHkgdGhlIGlycSBoYXBwZW5lZCByaWdodCBhd2F5ICovDQoJCXJldHVybiAw Ow0KCQkNCglpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spDQoJCXJl dHVybiAtRUFHQUlOOw0KDQoJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmdXNp cnFbbWlub3JdLndhaXRxKTsNCgljbGkoKTsNCglpZih1c2lycVttaW5vcl0u ZW5hYmxlZCkgew0KCQlkaXNhYmxlX2lycShtaW5vcik7DQoJCWlmKGRlYnVn KSBwcmludGsoInVzaXJxX3JlYWQ6IGRpc2FibGVfaXJxKCVkKVxuIiwgbWlu b3IpOw0KCX0NCglzdGkoKTsNCgljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVO TklORzsNCgl1c2lycVttaW5vcl0ud2FpdHEgPSBOVUxMOw0KDQoJaWYoc2ln bmFsX3BlbmRpbmcoY3VycmVudCkpDQoJCXJldHVybiAtRVJFU1RBUlRTWVM7 DQoNCglpZighdXNpcnFbbWlub3JdLmVuYWJsZWQpCS8qIGludGVycnVwdCBv Y2N1cnJlZCAqLw0KCQlyZXR1cm4gMDsNCg0KCXByaW50ayhLRVJOX0VSUiAi dXNpcnFfcmVhZDogbm8gc2lnbmFsIGFuZCBubyBpcnE/IT9cbiIpOw0KCXJl dHVybiAwOw0KfQ0KDQpzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1 c2lycV9mb3BzID0gew0KCU5VTEwsCQkJLyogbHNlZWsgKi8NCgl1c2lycV9y ZWFkLA0KCU5VTEwsCQkJLyogd3JpdGUgKi8NCglOVUxMLAkJCS8qIHJlYWRk aXIgKi8NCglOVUxMLAkJCS8qIHBvbGwgKi8NCglOVUxMLAkJCS8qIGlvY3Rs ICovDQoJTlVMTCwJCQkvKiBtbWFwICovDQoJdXNpcnFfb3BlbiwNCglOVUxM LAkJCS8qIGZsdXNoICovDQoJdXNpcnFfY2xvc2UNCn07DQoNCmludCBpbml0 X21vZHVsZSh2b2lkKQ0Kew0KCWlmIChyZWdpc3Rlcl9jaHJkZXYoVVNJUlFf TUFKT1IsICJ1c2lycSIsICZ1c2lycV9mb3BzKSA8IDApIHsNCgkJcHJpbnRr KEtFUk5fRVJSICJ1c2lycTogcmVnaXN0ZXJfY2hyZGV2IGZhaWxlZC5cbiIp Ow0KCQlyZXR1cm4gLUVJTzsNCgl9DQoJcmV0dXJuIDA7DQp9DQoNCnZvaWQg Y2xlYW51cF9tb2R1bGUodm9pZCkNCnsNCgl1bnJlZ2lzdGVyX2NocmRldihV U0lSUV9NQUpPUiwgInVzaXJxIik7DQp9DQo= --655616-111165966-933466673=:3686 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=Makefile Content-Transfer-Encoding: BASE64 Content-ID: <Pine.LNX.4.02.9908010217531.3686@adriaan.korenvliet> Content-Description: Content-Disposition: attachment; filename=Makefile

DQojICRJZDogTWFrZWZpbGUsdiAxLjIgMTk5OS8wNy8zMSAyMzo0NTo0MyBl cmljIEV4cCAkDQoNCkNDID0gZ2NjDQpDRkxBR1MgPSAtV2FsbCAtTzIgLWZv bWl0LWZyYW1lLXBvaW50ZXIgLUkvdXNyL3NyYy9saW51eC9pbmNsdWRlDQoN ClVTSVJRX01BSk9SID0gNjIgDQoNCnVzaXJxLm86IHVzaXJxLmMNCgkkKEND KSAkKENGTEFHUykgLURVU0lSUV9NQUpPUj0kKFVTSVJRX01BSk9SKSAtYyB1 c2lycS5jIC1vIHVzaXJxLm8NCg0KZGV2Og0KCS1ybSAtZiAvZGV2L3VzaXJx ezMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTV9DQoJbWtub2QgL2Rl di91c2lycTMgIGMgJChVU0lSUV9NQUpPUikgMw0KCW1rbm9kIC9kZXYvdXNp cnE0ICBjICQoVVNJUlFfTUFKT1IpIDQNCglta25vZCAvZGV2L3VzaXJxNSAg YyAkKFVTSVJRX01BSk9SKSA1DQoJbWtub2QgL2Rldi91c2lycTYgIGMgJChV U0lSUV9NQUpPUikgNg0KCW1rbm9kIC9kZXYvdXNpcnE3ICBjICQoVVNJUlFf TUFKT1IpIDcNCglta25vZCAvZGV2L3VzaXJxOCAgYyAkKFVTSVJRX01BSk9S KSA4DQoJbWtub2QgL2Rldi91c2lycTkgIGMgJChVU0lSUV9NQUpPUikgOQ0K CW1rbm9kIC9kZXYvdXNpcnExMCBjICQoVVNJUlFfTUFKT1IpIDEwDQoJbWtu b2QgL2Rldi91c2lycTExIGMgJChVU0lSUV9NQUpPUikgMTENCglta25vZCAv ZGV2L3VzaXJxMTIgYyAkKFVTSVJRX01BSk9SKSAxMg0KCW1rbm9kIC9kZXYv dXNpcnExMyBjICQoVVNJUlFfTUFKT1IpIDEzDQoJbWtub2QgL2Rldi91c2ly cTE0IGMgJChVU0lSUV9NQUpPUikgMTQNCglta25vZCAvZGV2L3VzaXJxMTUg YyAkKFVTSVJRX01BSk9SKSAxNQ0KDQpjbGVhbjoNCgktcm0gLWYgdXNpcnEu bw0K --655616-111165966-933466673=:3686--

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/