From: Javier Malave <javier.malave@narfindustries.com> To: bx@narfindustries.com Cc: Javier Malave <javier.malave@narfindustries.com>, linux-kernel@vger.kernel.org, ah@narfindustries.com Subject: [RFC 2/9] Add x86 specifc files for Popcorn Date: Wed, 29 Apr 2020 15:32:49 -0400 Message-ID: <fdc78e01527580f635640549f8064871f8178a19.1588127445.git.javier.malave@narfindustries.com> (raw) In-Reply-To: <cover.1588127445.git.javier.malave@narfindustries.com> In-Reply-To: <cover.1588127445.git.javier.malave@narfindustries.com> Popcorn Linux is a Linux kernel-based software stack that enables applications to execute, with a shared source base, on distributed hosts. This Popcorn patch adds x86_64 functionality only. Future iterations of Popcorn will support heterogeneous architectures. --- arch/x86/Kconfig | 3 +++ arch/x86/include/asm/pgtable.h | 11 +++++++++++ arch/x86/kernel/Makefile | 1 + arch/x86/mm/fault.c | 18 ++++++++++++++++++ 4 files changed, 33 insertions(+) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 2bbbd4d1b..4ca75c6c3 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -88,6 +88,7 @@ config X86 select ARCH_SUPPORTS_ACPI select ARCH_SUPPORTS_ATOMIC_RMW select ARCH_SUPPORTS_NUMA_BALANCING if X86_64 + select ARCH_SUPPORTS_POPCORN if X86_64 select ARCH_USE_BUILTIN_BSWAP select ARCH_USE_QUEUED_RWLOCKS select ARCH_USE_QUEUED_SPINLOCKS @@ -353,6 +354,8 @@ config PGTABLE_LEVELS default 3 if X86_PAE default 2 +source "kernel/Kconfig.popcorn" + config CC_HAS_SANE_STACKPROTECTOR bool default $(success,$(srctree)/scripts/gcc-x86_64-has-stack-protector.sh $(CC)) if 64BIT diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h index 5e0509b41..7a0171c67 100644 --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h @@ -210,9 +210,13 @@ static inline u64 protnone_mask(u64 val); static inline unsigned long pte_pfn(pte_t pte) { +#ifdef CONFIG_POPCORN + return (pte_val(pte) & PTE_PFN_MASK) >> PAGE_SHIFT; +#else phys_addr_t pfn = pte_val(pte); pfn ^= protnone_mask(pfn); return (pfn & PTE_PFN_MASK) >> PAGE_SHIFT; +#endif } static inline unsigned long pmd_pfn(pmd_t pmd) @@ -602,7 +606,11 @@ static inline u64 flip_protnone_guard(u64 oldval, u64 val, u64 mask); static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) { +#ifndef CONFIG_POPCORN pteval_t val = pte_val(pte), oldval = val; +#else + pteval_t val = pte_val(pte); +#endif /* * Chop off the NX bit (if present), and add the NX portion of @@ -610,8 +618,11 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) */ val &= _PAGE_CHG_MASK; val |= check_pgprot(newprot) & ~_PAGE_CHG_MASK; +#ifndef CONFIG_POPCORN val = flip_protnone_guard(oldval, val, PTE_PFN_MASK); +#endif return __pte(val); + } static inline pmd_t pmd_modify(pmd_t pmd, pgprot_t newprot) diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile index ce1b5cc36..3fb863285 100644 --- a/arch/x86/kernel/Makefile +++ b/arch/x86/kernel/Makefile @@ -133,6 +133,7 @@ obj-$(CONFIG_EFI) += sysfb_efi.o obj-$(CONFIG_PERF_EVENTS) += perf_regs.o obj-$(CONFIG_TRACING) += tracepoint.o +obj-$(CONFIG_POPCORN) += process_server.o obj-$(CONFIG_SCHED_MC_PRIO) += itmt.o obj-$(CONFIG_X86_INTEL_UMIP) += umip.o diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c index 46df4c6aa..14b9755f9 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c @@ -33,6 +33,11 @@ #define CREATE_TRACE_POINTS #include <asm/trace/exceptions.h> +#ifdef CONFIG_POPCORN +#include <popcorn/types.h> +#include <popcorn/vma_server.h> +#endif + /* * Returns 0 if mmiotrace is disabled, or if the fault is not * handled by mmiotrace: @@ -1416,6 +1421,19 @@ void do_user_addr_fault(struct pt_regs *regs, } vma = find_vma(mm, address); +#ifdef CONFIG_POPCORN + /* vma worker should not fault */ + BUG_ON(tsk->is_worker); + + if (distributed_remote_process(tsk)) { + if (!vma || vma->vm_start > address) { + if (vma_server_fetch_vma(tsk, address) == 0) { + /* Replace with updated VMA */ + vma = find_vma(mm, address); + } + } + } +#endif if (unlikely(!vma)) { bad_area(regs, hw_error_code, address); return; -- 2.17.1
next prev parent reply index Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top [not found] <0> 2020-04-29 19:32 ` [RFC 0/9] Popcorn Linux Distributed Thread Execution Javier Malave 2020-04-29 19:32 ` [RFC 1/9] Core Popcorn Changes Javier Malave 2020-04-29 19:32 ` Javier Malave [this message] 2020-04-29 19:32 ` [RFC 3/9] Temporary revert L1TF mitigation for Popcorn Javier Malave 2020-04-29 19:32 ` [RFC 4/9] Popcorn system call additions Javier Malave 2020-04-29 19:32 ` [RFC 5/9] Popcorn Utility Javier Malave 2020-04-29 19:32 ` [RFC 6/9] Process Server for Popcorn Distributed Thread Execution Javier Malave 2020-04-29 19:32 ` [RFC 7/9] Virtual Memory Address Server for " Javier Malave 2020-04-29 19:32 ` [RFC 8/9] Page " Javier Malave 2020-04-29 19:32 ` [RFC 9/9] Add Popcorn Message Layer and socket support Javier Malave 2020-05-07 17:46 ` [RFC 0/9] Popcorn Linux Distributed Thread Execution Pavel Machek
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=fdc78e01527580f635640549f8064871f8178a19.1588127445.git.javier.malave@narfindustries.com \ --to=javier.malave@narfindustries.com \ --cc=ah@narfindustries.com \ --cc=bx@narfindustries.com \ --cc=linux-kernel@vger.kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
LKML Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/lkml/0 lkml/git/0.git git clone --mirror https://lore.kernel.org/lkml/1 lkml/git/1.git git clone --mirror https://lore.kernel.org/lkml/2 lkml/git/2.git git clone --mirror https://lore.kernel.org/lkml/3 lkml/git/3.git git clone --mirror https://lore.kernel.org/lkml/4 lkml/git/4.git git clone --mirror https://lore.kernel.org/lkml/5 lkml/git/5.git git clone --mirror https://lore.kernel.org/lkml/6 lkml/git/6.git git clone --mirror https://lore.kernel.org/lkml/7 lkml/git/7.git git clone --mirror https://lore.kernel.org/lkml/8 lkml/git/8.git git clone --mirror https://lore.kernel.org/lkml/9 lkml/git/9.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 lkml lkml/ https://lore.kernel.org/lkml \ linux-kernel@vger.kernel.org public-inbox-index lkml Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.kernel.vger.linux-kernel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git