* [tip:x86/urgent 3/3] arch/x86//kernel/cpu/mcheck/mce.c:601:52: note: in expansion of macro 'BIT'
@ 2017-11-16 11:47 kbuild test robot
0 siblings, 0 replies; only message in thread
From: kbuild test robot @ 2017-11-16 11:47 UTC (permalink / raw)
To: Tony Luck
Cc: kbuild-all, linux-kernel, tipbuild, Thomas Gleixner, Borislav Petkov
[-- Attachment #1: Type: text/plain, Size: 3093 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/urgent
head: f1a041552c403949ab3c0902c1030c3a3d186ec1
commit: f1a041552c403949ab3c0902c1030c3a3d186ec1 [3/3] x86/mm, mm/hwpoison: Don't unconditionally unmap kernel 1: 1 pages
config: i386-randconfig-x001-201746 (attached as .config)
compiler: gcc-6 (Debian 6.4.0-9) 6.4.0 20171026
reproduce:
git checkout f1a041552c403949ab3c0902c1030c3a3d186ec1
# save the attached .config to linux build tree
make ARCH=i386
All warnings (new ones prefixed by >>):
In file included from include/linux/kernel.h:11:0,
from include/asm-generic/bug.h:16,
from arch/x86/include/asm/bug.h:82,
from include/linux/bug.h:5,
from include/linux/thread_info.h:12,
from arch/x86//kernel/cpu/mcheck/mce.c:13:
arch/x86//kernel/cpu/mcheck/mce.c: In function 'mce_unmap_kpfn':
include/linux/bitops.h:7:24: warning: left shift count >= width of type [-Wshift-count-overflow]
#define BIT(nr) (1UL << (nr))
^
>> arch/x86//kernel/cpu/mcheck/mce.c:601:52: note: in expansion of macro 'BIT'
decoy_addr = (pfn << PAGE_SHIFT) + (PAGE_OFFSET ^ BIT(63));
^~~
vim +/BIT +601 arch/x86//kernel/cpu/mcheck/mce.c
573
574 /*
575 * Unmap this page from the kernel 1:1 mappings to make sure we don't log
576 * more errors because of speculative access to the page.
577 *
578 * We would like to just call:
579 * set_memory_np((unsigned long)pfn_to_kaddr(pfn), 1);
580 *
581 * but doing that would radically increase the odds of a speculative access
582 * to the poison page because we'd have the virtual address of the kernel
583 * 1:1 mapping sitting around in registers.
584 * Instead we get tricky. We create a non-canonical address that looks
585 * just like the one we want, but has bit 63 flipped. This relies on
586 * set_memory_np() not checking whether we passed a legal address.
587 */
588 static void mce_unmap_kpfn(unsigned long pfn)
589 {
590 unsigned long decoy_addr;
591
592 /*
593 * Build time check to see if we have a spare virtual bit. Don't
594 * want to leave this until run time because most developers don't
595 * have a system that can exercise this code path. This will only
596 * become a problem if/when we move beyond 5-level page tables.
597 *
598 * Hard code "9" here because cpp doesn't grok ilog2(PTRS_PER_PGD)
599 */
600 #if PGDIR_SHIFT + 9 < 63
> 601 decoy_addr = (pfn << PAGE_SHIFT) + (PAGE_OFFSET ^ BIT(63));
602 #else
603 #error "No unused virtual bit available"
604 #endif
605
606 if (set_memory_np(decoy_addr, 1))
607 pr_warn("Could not invalidate pfn=0x%lx from 1:1 map\n", pfn);
608 }
609
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 28672 bytes --]
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2017-11-16 11:36 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-16 11:47 [tip:x86/urgent 3/3] arch/x86//kernel/cpu/mcheck/mce.c:601:52: note: in expansion of macro 'BIT' kbuild test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.