Loading arch/x86/xen/multicalls.c +6 −6 Original line number Diff line number Diff line Loading @@ -189,10 +189,10 @@ struct multicall_space __xen_mc_entry(size_t args) unsigned argidx = roundup(b->argidx, sizeof(u64)); BUG_ON(preemptible()); BUG_ON(b->argidx > MC_ARGS); BUG_ON(b->argidx >= MC_ARGS); if (b->mcidx == MC_BATCH || (argidx + args) > MC_ARGS) { (argidx + args) >= MC_ARGS) { mc_stats_flush(b->mcidx == MC_BATCH ? FL_SLOTS : FL_ARGS); xen_mc_flush(); argidx = roundup(b->argidx, sizeof(u64)); Loading @@ -206,7 +206,7 @@ struct multicall_space __xen_mc_entry(size_t args) ret.args = &b->args[argidx]; b->argidx = argidx + args; BUG_ON(b->argidx > MC_ARGS); BUG_ON(b->argidx >= MC_ARGS); return ret; } Loading @@ -216,7 +216,7 @@ struct multicall_space xen_mc_extend_args(unsigned long op, size_t size) struct multicall_space ret = { NULL, NULL }; BUG_ON(preemptible()); BUG_ON(b->argidx > MC_ARGS); BUG_ON(b->argidx >= MC_ARGS); if (b->mcidx == 0) return ret; Loading @@ -224,14 +224,14 @@ struct multicall_space xen_mc_extend_args(unsigned long op, size_t size) if (b->entries[b->mcidx - 1].op != op) return ret; if ((b->argidx + size) > MC_ARGS) if ((b->argidx + size) >= MC_ARGS) return ret; ret.mc = &b->entries[b->mcidx - 1]; ret.args = &b->args[b->argidx]; b->argidx += size; BUG_ON(b->argidx > MC_ARGS); BUG_ON(b->argidx >= MC_ARGS); return ret; } Loading drivers/xen/events.c +9 −9 Original line number Diff line number Diff line Loading @@ -626,6 +626,9 @@ int xen_allocate_pirq_gsi(unsigned gsi) * * Note: We don't assign an event channel until the irq actually started * up. Return an existing irq if we've already got one for the gsi. * * Shareable implies level triggered, not shareable implies edge * triggered here. */ int xen_bind_pirq_gsi_to_irq(unsigned gsi, unsigned pirq, int shareable, char *name) Loading Loading @@ -664,16 +667,13 @@ int xen_bind_pirq_gsi_to_irq(unsigned gsi, pirq_query_unmask(irq); /* We try to use the handler with the appropriate semantic for the * type of interrupt: if the interrupt doesn't need an eoi * (pirq_needs_eoi returns false), we treat it like an edge * triggered interrupt so we use handle_edge_irq. * As a matter of fact this only happens when the corresponding * physical interrupt is edge triggered or an msi. * type of interrupt: if the interrupt is an edge triggered * interrupt we use handle_edge_irq. * * On the other hand if the interrupt needs an eoi (pirq_needs_eoi * returns true) we treat it like a level triggered interrupt so we * use handle_fasteoi_irq like the native code does for this kind of * On the other hand if the interrupt is level triggered we use * handle_fasteoi_irq like the native code does for this kind of * interrupts. * * Depending on the Xen version, pirq_needs_eoi might return true * not only for level triggered interrupts but for edge triggered * interrupts too. In any case Xen always honors the eoi mechanism, Loading @@ -681,7 +681,7 @@ int xen_bind_pirq_gsi_to_irq(unsigned gsi, * hasn't received an eoi yet. Therefore using the fasteoi handler * is the right choice either way. */ if (pirq_needs_eoi(irq)) if (shareable) irq_set_chip_and_handler_name(irq, &xen_pirq_chip, handle_fasteoi_irq, name); else Loading Loading
arch/x86/xen/multicalls.c +6 −6 Original line number Diff line number Diff line Loading @@ -189,10 +189,10 @@ struct multicall_space __xen_mc_entry(size_t args) unsigned argidx = roundup(b->argidx, sizeof(u64)); BUG_ON(preemptible()); BUG_ON(b->argidx > MC_ARGS); BUG_ON(b->argidx >= MC_ARGS); if (b->mcidx == MC_BATCH || (argidx + args) > MC_ARGS) { (argidx + args) >= MC_ARGS) { mc_stats_flush(b->mcidx == MC_BATCH ? FL_SLOTS : FL_ARGS); xen_mc_flush(); argidx = roundup(b->argidx, sizeof(u64)); Loading @@ -206,7 +206,7 @@ struct multicall_space __xen_mc_entry(size_t args) ret.args = &b->args[argidx]; b->argidx = argidx + args; BUG_ON(b->argidx > MC_ARGS); BUG_ON(b->argidx >= MC_ARGS); return ret; } Loading @@ -216,7 +216,7 @@ struct multicall_space xen_mc_extend_args(unsigned long op, size_t size) struct multicall_space ret = { NULL, NULL }; BUG_ON(preemptible()); BUG_ON(b->argidx > MC_ARGS); BUG_ON(b->argidx >= MC_ARGS); if (b->mcidx == 0) return ret; Loading @@ -224,14 +224,14 @@ struct multicall_space xen_mc_extend_args(unsigned long op, size_t size) if (b->entries[b->mcidx - 1].op != op) return ret; if ((b->argidx + size) > MC_ARGS) if ((b->argidx + size) >= MC_ARGS) return ret; ret.mc = &b->entries[b->mcidx - 1]; ret.args = &b->args[b->argidx]; b->argidx += size; BUG_ON(b->argidx > MC_ARGS); BUG_ON(b->argidx >= MC_ARGS); return ret; } Loading
drivers/xen/events.c +9 −9 Original line number Diff line number Diff line Loading @@ -626,6 +626,9 @@ int xen_allocate_pirq_gsi(unsigned gsi) * * Note: We don't assign an event channel until the irq actually started * up. Return an existing irq if we've already got one for the gsi. * * Shareable implies level triggered, not shareable implies edge * triggered here. */ int xen_bind_pirq_gsi_to_irq(unsigned gsi, unsigned pirq, int shareable, char *name) Loading Loading @@ -664,16 +667,13 @@ int xen_bind_pirq_gsi_to_irq(unsigned gsi, pirq_query_unmask(irq); /* We try to use the handler with the appropriate semantic for the * type of interrupt: if the interrupt doesn't need an eoi * (pirq_needs_eoi returns false), we treat it like an edge * triggered interrupt so we use handle_edge_irq. * As a matter of fact this only happens when the corresponding * physical interrupt is edge triggered or an msi. * type of interrupt: if the interrupt is an edge triggered * interrupt we use handle_edge_irq. * * On the other hand if the interrupt needs an eoi (pirq_needs_eoi * returns true) we treat it like a level triggered interrupt so we * use handle_fasteoi_irq like the native code does for this kind of * On the other hand if the interrupt is level triggered we use * handle_fasteoi_irq like the native code does for this kind of * interrupts. * * Depending on the Xen version, pirq_needs_eoi might return true * not only for level triggered interrupts but for edge triggered * interrupts too. In any case Xen always honors the eoi mechanism, Loading @@ -681,7 +681,7 @@ int xen_bind_pirq_gsi_to_irq(unsigned gsi, * hasn't received an eoi yet. Therefore using the fasteoi handler * is the right choice either way. */ if (pirq_needs_eoi(irq)) if (shareable) irq_set_chip_and_handler_name(irq, &xen_pirq_chip, handle_fasteoi_irq, name); else Loading