mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 16:53:55 -06:00
i386/xen: handle PV timer hypercalls
Introduce support for one shot and periodic mode of Xen PV timers, whereby timer interrupts come through a special virq event channel with deadlines being set through: 1) set_timer_op hypercall (only oneshot) 2) vcpu_op hypercall for {set,stop}_{singleshot,periodic}_timer hypercalls Signed-off-by: Joao Martins <joao.m.martins@oracle.com> Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> Reviewed-by: Paul Durrant <paul@xen.org>
This commit is contained in:
parent
b46f9745b1
commit
b746a77926
5 changed files with 308 additions and 2 deletions
|
@ -1222,6 +1222,37 @@ int xen_evtchn_send_op(struct evtchn_send *send)
|
|||
return ret;
|
||||
}
|
||||
|
||||
int xen_evtchn_set_port(uint16_t port)
|
||||
{
|
||||
XenEvtchnState *s = xen_evtchn_singleton;
|
||||
XenEvtchnPort *p;
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (!s) {
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
if (!valid_port(port)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
qemu_mutex_lock(&s->port_lock);
|
||||
|
||||
p = &s->port_table[port];
|
||||
|
||||
/* QEMU has no business sending to anything but these */
|
||||
if (p->type == EVTCHNSTAT_virq ||
|
||||
(p->type == EVTCHNSTAT_interdomain &&
|
||||
(p->type_val & PORT_INFO_TYPEVAL_REMOTE_QEMU))) {
|
||||
set_port_pending(s, port);
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
qemu_mutex_unlock(&s->port_lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
EvtchnInfoList *qmp_xen_event_list(Error **errp)
|
||||
{
|
||||
XenEvtchnState *s = xen_evtchn_singleton;
|
||||
|
|
|
@ -20,6 +20,8 @@ int xen_evtchn_set_callback_param(uint64_t param);
|
|||
void xen_evtchn_connect_gsis(qemu_irq *system_gsis);
|
||||
void xen_evtchn_set_callback_level(int level);
|
||||
|
||||
int xen_evtchn_set_port(uint16_t port);
|
||||
|
||||
struct evtchn_status;
|
||||
struct evtchn_close;
|
||||
struct evtchn_unmask;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue