clear-pkgs-linux-iot-lts2018/0560-vhm-add-ioctl-for-set-...

96 lines
3.7 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Yonghua Huang <yonghua.huang@intel.com>
Date: Thu, 27 Sep 2018 00:24:18 +0800
Subject: [PATCH] vhm: add ioctl for set/clear IRQ line
ASSERT/DEASSERT/PULSE IRQ line ioctl commands
will be deprecated.
Tracked-On: projectacrn/acrn-hypervisor#861
Signed-off-by: Yonghua Huang <yonghua.huang@intel.com>
Reviewed-by: Fei Li <fei1.li@intel.com>
Acked-by: Eddie Dong <eddie.dong@intel.com>
---
drivers/char/vhm/vhm_dev.c | 9 +++++++++
drivers/vhm/vhm_hypercall.c | 5 +++++
include/linux/vhm/acrn_hv_defs.h | 1 +
include/linux/vhm/vhm_hypercall.h | 1 +
include/linux/vhm/vhm_ioctl_defs.h | 1 +
5 files changed, 17 insertions(+)
diff --git a/drivers/char/vhm/vhm_dev.c b/drivers/char/vhm/vhm_dev.c
index 4d76905e616d..0eb31d8d8535 100644
--- a/drivers/char/vhm/vhm_dev.c
+++ b/drivers/char/vhm/vhm_dev.c
@@ -418,6 +418,15 @@ static long vhm_dev_ioctl(struct file *filep,
break;
}
+ case IC_SET_IRQLINE: {
+ ret = hcall_set_irqline(vm->vmid, ioctl_param);
+ if (ret < 0) {
+ pr_err("vhm: failed to set irqline!\n");
+ return -EFAULT;
+ }
+ break;
+ }
+
case IC_INJECT_MSI: {
struct acrn_msi_entry msi;
diff --git a/drivers/vhm/vhm_hypercall.c b/drivers/vhm/vhm_hypercall.c
index 666f9aeb87ad..9a761022be08 100644
--- a/drivers/vhm/vhm_hypercall.c
+++ b/drivers/vhm/vhm_hypercall.c
@@ -142,6 +142,11 @@ inline long hcall_pulse_irqline(unsigned long vmid, unsigned long irq)
return acrn_hypercall2(HC_PULSE_IRQLINE, vmid, irq);
}
+inline long hcall_set_irqline(unsigned long vmid, unsigned long op)
+{
+ return acrn_hypercall2(HC_SET_IRQLINE, vmid, op);
+}
+
inline long hcall_inject_msi(unsigned long vmid, unsigned long msi)
{
return acrn_hypercall2(HC_INJECT_MSI, vmid, msi);
diff --git a/include/linux/vhm/acrn_hv_defs.h b/include/linux/vhm/acrn_hv_defs.h
index 2cd6172e8e1d..6b7bfb421301 100644
--- a/include/linux/vhm/acrn_hv_defs.h
+++ b/include/linux/vhm/acrn_hv_defs.h
@@ -86,6 +86,7 @@
#define HC_PULSE_IRQLINE _HC_ID(HC_ID, HC_ID_IRQ_BASE + 0x02)
#define HC_INJECT_MSI _HC_ID(HC_ID, HC_ID_IRQ_BASE + 0x03)
#define HC_VM_INTR_MONITOR _HC_ID(HC_ID, HC_ID_IRQ_BASE + 0x04)
+#define HC_SET_IRQLINE _HC_ID(HC_ID, HC_ID_IRQ_BASE + 0x05)
/* DM ioreq management */
#define HC_ID_IOREQ_BASE 0x30UL
diff --git a/include/linux/vhm/vhm_hypercall.h b/include/linux/vhm/vhm_hypercall.h
index 062196ab1194..7f8b6bcecd09 100644
--- a/include/linux/vhm/vhm_hypercall.h
+++ b/include/linux/vhm/vhm_hypercall.h
@@ -158,6 +158,7 @@ inline long hcall_notify_req_finish(unsigned long vmid, unsigned long vcpu);
inline long hcall_assert_irqline(unsigned long vmid, unsigned long irq);
inline long hcall_deassert_irqline(unsigned long vmid, unsigned long irq);
inline long hcall_pulse_irqline(unsigned long vmid, unsigned long irq);
+inline long hcall_set_irqline(unsigned long vmid, unsigned long op);
inline long hcall_inject_msi(unsigned long vmid, unsigned long msi);
inline long hcall_assign_ptdev(unsigned long vmid, unsigned long bdf);
inline long hcall_deassign_ptdev(unsigned long vmid, unsigned long bdf);
diff --git a/include/linux/vhm/vhm_ioctl_defs.h b/include/linux/vhm/vhm_ioctl_defs.h
index 2007d58faa3f..fb7b154dbd6b 100644
--- a/include/linux/vhm/vhm_ioctl_defs.h
+++ b/include/linux/vhm/vhm_ioctl_defs.h
@@ -81,6 +81,7 @@
#define IC_PULSE_IRQLINE _IC_ID(IC_ID, IC_ID_IRQ_BASE + 0x02)
#define IC_INJECT_MSI _IC_ID(IC_ID, IC_ID_IRQ_BASE + 0x03)
#define IC_VM_INTR_MONITOR _IC_ID(IC_ID, IC_ID_IRQ_BASE + 0x04)
+#define IC_SET_IRQLINE _IC_ID(IC_ID, IC_ID_IRQ_BASE + 0x05)
/* DM ioreq management */
#define IC_ID_IOREQ_BASE 0x30UL
--
https://clearlinux.org