[PATCH] xen/mce: add .poll method for mcelog device driver

From: Liu , Jinsong
Date: Thu Jun 14 2012 - 16:16:52 EST


If a driver leaves its poll method NULL, the device is assumed to
be both readable and writable without blocking.

This patch add .poll method to xen mcelog device driver, so that
when mcelog use system calls like ppoll or select, it would be
blocked when no data available, and avoid spinning at CPU.

Reported-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
Signed-off-by: Liu, Jinsong <jinsong.liu@xxxxxxxxx>
---
drivers/xen/mcelog.c | 10 ++++++++++
1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/drivers/xen/mcelog.c b/drivers/xen/mcelog.c
index 804aa3c..c0b39c9 100644
--- a/drivers/xen/mcelog.c
+++ b/drivers/xen/mcelog.c
@@ -41,6 +41,7 @@
#include <linux/miscdevice.h>
#include <linux/uaccess.h>
#include <linux/capability.h>
+#include <linux/poll.h>
=20
#include <xen/interface/xen.h>
#include <xen/events.h>
@@ -135,6 +136,14 @@ out:
return err ? err : buf - ubuf;
}
=20
+static unsigned int xen_mce_chrdev_poll(struct file *file, poll_table *wai=
t)
+{
+ if (xen_mcelog.next)
+ return POLLIN | POLLRDNORM;
+
+ return 0;
+}
+
static long xen_mce_chrdev_ioctl(struct file *f, unsigned int cmd,
unsigned long arg)
{
@@ -166,6 +175,7 @@ static const struct file_operations xen_mce_chrdev_ops =
=3D {
.open =3D xen_mce_chrdev_open,
.release =3D xen_mce_chrdev_release,
.read =3D xen_mce_chrdev_read,
+ .poll =3D xen_mce_chrdev_poll,
.unlocked_ioctl =3D xen_mce_chrdev_ioctl,
.llseek =3D no_llseek,
};
--=20
1.7.1

--_002_DE8DF0795D48FD4CA783C40EC82923352321ABSHSMSX101ccrcorpi_
Content-Type: application/octet-stream;
name="0001-xen-mce-add-.poll-method-for-mcelog-device-driver.patch"
Content-Description: 0001-xen-mce-add-.poll-method-for-mcelog-device-driver.patch
Content-Disposition: attachment;
filename="0001-xen-mce-add-.poll-method-for-mcelog-device-driver.patch";
size=1677; creation-date="Thu, 14 Jun 2012 12:49:08 GMT";
modification-date="Thu, 14 Jun 2012 20:35:18 GMT"
Content-Transfer-Encoding: base64

RnJvbSBmYjY2NDU5MGNlNDE5ODUzOWQ5NmI2YmMyNDVjNWQ3MGNjMDc5MTI5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBMaXUsIEppbnNvbmcgPGppbnNvbmcubGl1QGludGVsLmNvbT4K
RGF0ZTogRnJpLCAxNSBKdW4gMjAxMiAwNDoxNjo1MiArMDgwMApTdWJqZWN0OiBbUEFUQ0hdIHhl
bi9tY2U6IGFkZCAucG9sbCBtZXRob2QgZm9yIG1jZWxvZyBkZXZpY2UgZHJpdmVyCgpJZiBhIGRy
aXZlciBsZWF2ZXMgaXRzIHBvbGwgbWV0aG9kIE5VTEwsIHRoZSBkZXZpY2UgaXMgYXNzdW1lZCB0
bwpiZSBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZSB3aXRob3V0IGJsb2NraW5nLgoKVGhpcyBw
YXRjaCBhZGQgLnBvbGwgbWV0aG9kIHRvIHhlbiBtY2Vsb2cgZGV2aWNlIGRyaXZlciwgc28gdGhh
dAp3aGVuIG1jZWxvZyB1c2Ugc3lzdGVtIGNhbGxzIGxpa2UgcHBvbGwgb3Igc2VsZWN0LCBpdCB3
b3VsZCBiZQpibG9ja2VkIHdoZW4gbm8gZGF0YSBhdmFpbGFibGUsIGFuZCBhdm9pZCBzcGlubmlu
ZyBhdCBDUFUuCgpSZXBvcnRlZC1ieTogS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWQud2ls
a0BvcmFjbGUuY29tPgpTaWduZWQtb2ZmLWJ5OiBMaXUsIEppbnNvbmcgPGppbnNvbmcubGl1QGlu
dGVsLmNvbT4KLS0tCiBkcml2ZXJzL3hlbi9tY2Vsb2cuYyB8ICAgMTAgKysrKysrKysrKwogMSBm
aWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp
dCBhL2RyaXZlcnMveGVuL21jZWxvZy5jIGIvZHJpdmVycy94ZW4vbWNlbG9nLmMKaW5kZXggODA0
YWEzYy4uYzBiMzljOSAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vbWNlbG9nLmMKKysrIGIvZHJp
dmVycy94ZW4vbWNlbG9nLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9taXNj
ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nh
cGFiaWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAKICNpbmNsdWRlIDx4ZW4vaW50
ZXJmYWNlL3hlbi5oPgogI2luY2x1ZGUgPHhlbi9ldmVudHMuaD4KQEAgLTEzNSw2ICsxMzYsMTQg
QEAgb3V0OgogCXJldHVybiBlcnIgPyBlcnIgOiBidWYgLSB1YnVmOwogfQogCitzdGF0aWMgdW5z
aWduZWQgaW50IHhlbl9tY2VfY2hyZGV2X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFi
bGUgKndhaXQpCit7CisJaWYgKHhlbl9tY2Vsb2cubmV4dCkKKwkJcmV0dXJuIFBPTExJTiB8IFBP
TExSRE5PUk07CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGxvbmcgeGVuX21jZV9jaHJkZXZf
aW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkJdW5zaWduZWQgbG9u
ZyBhcmcpCiB7CkBAIC0xNjYsNiArMTc1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29w
ZXJhdGlvbnMgeGVuX21jZV9jaHJkZXZfb3BzID0gewogCS5vcGVuCQkJPSB4ZW5fbWNlX2NocmRl
dl9vcGVuLAogCS5yZWxlYXNlCQk9IHhlbl9tY2VfY2hyZGV2X3JlbGVhc2UsCiAJLnJlYWQJCQk9
IHhlbl9tY2VfY2hyZGV2X3JlYWQsCisJLnBvbGwJCQk9IHhlbl9tY2VfY2hyZGV2X3BvbGwsCiAJ
LnVubG9ja2VkX2lvY3RsCQk9IHhlbl9tY2VfY2hyZGV2X2lvY3RsLAogCS5sbHNlZWsJCQk9IG5v
X2xsc2VlaywKIH07Ci0tIAoxLjcuMQoK

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