Detailed bit definition refers to section <Bit Definition>
from pvpanic device specification:
https://git.qemu.org/?p=qemu.git;a=blob_plain;f=docs/specs/pvpanic.txt
+
+What: /sys/devices/pci0000:00/*/QEMU0001:00/events
+Date: Jan 2021
+Contact: zhenwei pi <pizhenwei@bytedance.com>
+Description:
+ RW attribute. Set/get which features in-use. This attribute
+ is used to enable/disable feature(s) of pvpanic device.
+ Notice that this value should be a subset of capability.
+
+ Format: %x.
+
+ Also refer to pvpanic device specification.
static void __iomem *base;
static unsigned int capability = PVPANIC_PANICKED | PVPANIC_CRASH_LOADED;
+static unsigned int events;
static ssize_t capability_show(struct device *dev,
struct device_attribute *attr, char *buf)
}
static DEVICE_ATTR_RO(capability);
+static ssize_t events_show(struct device *dev, struct device_attribute *attr, char *buf)
+{
+ return sysfs_emit(buf, "%x", events);
+}
+
+static ssize_t events_store(struct device *dev, struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ unsigned int tmp;
+ int err;
+
+ err = kstrtouint(buf, 16, &tmp);
+ if (err)
+ return err;
+
+ if ((tmp & capability) != tmp)
+ return -EINVAL;
+
+ events = tmp;
+
+ return count;
+
+}
+static DEVICE_ATTR_RW(events);
+
static struct attribute *pvpanic_dev_attrs[] = {
&dev_attr_capability.attr,
+ &dev_attr_events.attr,
NULL
};
ATTRIBUTE_GROUPS(pvpanic_dev);
static void
pvpanic_send_event(unsigned int event)
{
- if (event & capability)
+ if (event & capability & events)
iowrite8(event, base);
}
/* initlize capability by RDPT */
capability &= ioread8(base);
+ events = capability;
if (capability)
atomic_notifier_chain_register(&panic_notifier_list,