evtchn: eliminate 64k ports limitation The introduction of FIFO event channels claimed to support over 100k ports, but failed to widen a number of 16-bit variables/operations. Signed-off-by: Jan Beulich --- a/xen/common/event_channel.c +++ b/xen/common/event_channel.c @@ -275,12 +275,12 @@ static long evtchn_bind_interdomain(evtc goto out; lchn->u.interdomain.remote_dom = rd; - lchn->u.interdomain.remote_port = (u16)rport; + lchn->u.interdomain.remote_port = rport; lchn->state = ECS_INTERDOMAIN; evtchn_port_init(ld, lchn); rchn->u.interdomain.remote_dom = ld; - rchn->u.interdomain.remote_port = (u16)lport; + rchn->u.interdomain.remote_port = lport; rchn->state = ECS_INTERDOMAIN; /* --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -90,13 +90,13 @@ struct evtchn domid_t remote_domid; } unbound; /* state == ECS_UNBOUND */ struct { - u16 remote_port; + evtchn_port_t remote_port; struct domain *remote_dom; } interdomain; /* state == ECS_INTERDOMAIN */ struct { - u16 irq; - u16 next_port; - u16 prev_port; + u32 irq; + evtchn_port_t next_port; + evtchn_port_t prev_port; } pirq; /* state == ECS_PIRQ */ u16 virq; /* state == ECS_VIRQ */ } u; @@ -209,7 +209,7 @@ struct vcpu atomic_t pause_count; /* IRQ-safe virq_lock protects against delivering VIRQ to stale evtchn. */ - u16 virq_to_evtchn[NR_VIRQS]; + evtchn_port_t virq_to_evtchn[NR_VIRQS]; spinlock_t virq_lock; /* Bitmask of CPUs on which this VCPU may run. */