mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 19:51:31 -04:00
Bug-fixes:
- Early bootup issue found on DL380 machines
- Fix for the timer interrupt not being processed right away.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.13 (GNU/Linux)
iQEcBAABAgAGBQJRZbq0AAoJEFjIrFwIi8fJTnsIAIWYw7g9j0T9gijc/t5wEZrK
KpPBITlGFAeM7liEaUh5X5M2B86tBoI77uV5EGCvDDwth+FD5WsgeMesxV9KlMdj
vbWLGubJpmd8zy6Q1f/T3LsxGHGCjz8jASeN7YTPRdBqITOQDqXjj2VC/4n7AQCh
Le3ml3A/NZTZMiz2PK8lDzjpzY2lDgrIloevahVoYLe8Jxg2aW5JTaZQg7oPA6ir
lqC1Sgju6RDKR0kmPmM8wl5TOIMCkrygriP62B+Ww9wl9HlS+X5/JlK3zVj0vJXo
oxNyDKEK96M54oO5t/v7qzdfX2Xj+S/6JPZOlegCWGClS9rQoK3uDBZupGLiAh8=
=jaNW
-----END PGP SIGNATURE-----
Merge tag 'stable/for-linus-3.9-rc6-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen
Pull Xen fixes from Konrad Rzeszutek Wilk:
"Two bug-fixes:
- Early bootup issue found on DL380 machines
- Fix for the timer interrupt not being processed right awaym leading
to quite delayed time skew on certain workloads"
* tag 'stable/for-linus-3.9-rc6-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
xen/mmu: On early bootup, flush the TLB when changing RO->RW bits Xen provided pagetables.
xen/events: Handle VIRQ_TIMER before any other hardirq in event loop.
This commit is contained in:
commit
722aacb285
2 changed files with 23 additions and 8 deletions
|
|
@ -1316,7 +1316,7 @@ static void __xen_evtchn_do_upcall(void)
|
|||
{
|
||||
int start_word_idx, start_bit_idx;
|
||||
int word_idx, bit_idx;
|
||||
int i;
|
||||
int i, irq;
|
||||
int cpu = get_cpu();
|
||||
struct shared_info *s = HYPERVISOR_shared_info;
|
||||
struct vcpu_info *vcpu_info = __this_cpu_read(xen_vcpu);
|
||||
|
|
@ -1324,6 +1324,8 @@ static void __xen_evtchn_do_upcall(void)
|
|||
|
||||
do {
|
||||
xen_ulong_t pending_words;
|
||||
xen_ulong_t pending_bits;
|
||||
struct irq_desc *desc;
|
||||
|
||||
vcpu_info->evtchn_upcall_pending = 0;
|
||||
|
||||
|
|
@ -1335,6 +1337,17 @@ static void __xen_evtchn_do_upcall(void)
|
|||
* selector flag. xchg_xen_ulong must contain an
|
||||
* appropriate barrier.
|
||||
*/
|
||||
if ((irq = per_cpu(virq_to_irq, cpu)[VIRQ_TIMER]) != -1) {
|
||||
int evtchn = evtchn_from_irq(irq);
|
||||
word_idx = evtchn / BITS_PER_LONG;
|
||||
pending_bits = evtchn % BITS_PER_LONG;
|
||||
if (active_evtchns(cpu, s, word_idx) & (1ULL << pending_bits)) {
|
||||
desc = irq_to_desc(irq);
|
||||
if (desc)
|
||||
generic_handle_irq_desc(irq, desc);
|
||||
}
|
||||
}
|
||||
|
||||
pending_words = xchg_xen_ulong(&vcpu_info->evtchn_pending_sel, 0);
|
||||
|
||||
start_word_idx = __this_cpu_read(current_word_idx);
|
||||
|
|
@ -1343,7 +1356,6 @@ static void __xen_evtchn_do_upcall(void)
|
|||
word_idx = start_word_idx;
|
||||
|
||||
for (i = 0; pending_words != 0; i++) {
|
||||
xen_ulong_t pending_bits;
|
||||
xen_ulong_t words;
|
||||
|
||||
words = MASK_LSBS(pending_words, word_idx);
|
||||
|
|
@ -1372,8 +1384,7 @@ static void __xen_evtchn_do_upcall(void)
|
|||
|
||||
do {
|
||||
xen_ulong_t bits;
|
||||
int port, irq;
|
||||
struct irq_desc *desc;
|
||||
int port;
|
||||
|
||||
bits = MASK_LSBS(pending_bits, bit_idx);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue