The patch titled Subject: arch/x86/platform/uv/tlb_uv.c: fix incorrect tlb flush all issue has been added to the -mm tree. Its filename is arch-x86-platform-uv-tlb_uvc-fix-incorrect-tlb-flush-all-issue.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Alex Shi <alex.shi@xxxxxxxxx> Subject: arch/x86/platform/uv/tlb_uv.c: fix incorrect tlb flush all issue The flush tlb optimization code has a logical issue on the UV platform. It doesn't flush the full range at all, since it simply ignores its 'end' parameter (and hence also the "all" indicator) in uv_flush_tlb_others(). This patch fixes this issue, but is untested due to lack of hardware. Reported-by: Jan Beulich <jbeulich@xxxxxxxx> Signed-off-by: Alex Shi <alex.shi@xxxxxxxxx> Cc: Jack Steiner <steiner@xxxxxxx> Cc: Ingo Molnar <mingo@xxxxxxx> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Cc: "H. Peter Anvin" <hpa@xxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- arch/x86/include/asm/uv/uv_bau.h | 6 ++++-- arch/x86/platform/uv/tlb_uv.c | 14 ++++++++------ 2 files changed, 12 insertions(+), 8 deletions(-) diff -puN arch/x86/include/asm/uv/uv_bau.h~arch-x86-platform-uv-tlb_uvc-fix-incorrect-tlb-flush-all-issue arch/x86/include/asm/uv/uv_bau.h --- a/arch/x86/include/asm/uv/uv_bau.h~arch-x86-platform-uv-tlb_uvc-fix-incorrect-tlb-flush-all-issue +++ a/arch/x86/include/asm/uv/uv_bau.h @@ -225,8 +225,10 @@ struct bau_local_cpumask { * The payload is software-defined for INTD transactions */ struct bau_msg_payload { - unsigned long address; /* signifies a page or all - TLB's of the cpu */ + unsigned long start; /* start address to flush TLB + of the cpu */ + unsigned long end; /* end address to flush TLB + of the cpu */ /* 64 bits */ unsigned short sending_cpu; /* filled in by sender */ /* 16 bits */ diff -puN arch/x86/platform/uv/tlb_uv.c~arch-x86-platform-uv-tlb_uvc-fix-incorrect-tlb-flush-all-issue arch/x86/platform/uv/tlb_uv.c --- a/arch/x86/platform/uv/tlb_uv.c~arch-x86-platform-uv-tlb_uvc-fix-incorrect-tlb-flush-all-issue +++ a/arch/x86/platform/uv/tlb_uv.c @@ -280,12 +280,12 @@ static void bau_process_message(struct m /* * This must be a normal message, or retry of a normal message */ - if (msg->address == TLB_FLUSH_ALL) { + if (msg->end == 0) { + __flush_tlb_one(msg->start); + stat->d_onetlb++; + } else { local_flush_tlb(); stat->d_alltlb++; - } else { - __flush_tlb_one(msg->address); - stat->d_onetlb++; } stat->d_requestee++; @@ -1034,7 +1034,8 @@ static int set_distrib_bits(struct cpuma * globally purge translation cache of a virtual address or all TLB's * @cpumask: mask of all cpu's in which the address is to be removed * @mm: mm_struct containing virtual address range - * @va: virtual address to be removed (or TLB_FLUSH_ALL for all TLB's on cpu) + * @start: start virtual address to be removed from TLB + * @end: end virtual address to be remove from TLB * @cpu: the current cpu * * This is the entry point for initiating any UV global TLB shootdown. @@ -1113,7 +1114,8 @@ const struct cpumask *uv_flush_tlb_other record_send_statistics(stat, locals, hubs, remotes, bau_desc); - bau_desc->payload.address = start; + bau_desc->payload.start = start; + bau_desc->payload.end = end; bau_desc->payload.sending_cpu = cpu; /* * uv_flush_send_and_wait returns 0 if all cpu's were messaged, _ Patches currently in -mm which might be from alex.shi@xxxxxxxxx are linux-next.patch arch-x86-platform-uv-tlb_uvc-fix-incorrect-tlb-flush-all-issue.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html