Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/484/?format=api
{ "id": 484, "url": "http://patchwork.ozlabs.org/api/patches/484/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/421706547.03532@bjtu.edu.cn/", "project": { "id": 2, "url": "http://patchwork.ozlabs.org/api/projects/2/?format=api", "name": "Linux PPC development", "link_name": "linuxppc-dev", "list_id": "linuxppc-dev.lists.ozlabs.org", "list_email": "linuxppc-dev@lists.ozlabs.org", "web_url": "https://github.com/linuxppc/wiki/wiki", "scm_url": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git", "webscm_url": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/", "list_archive_url": "https://lore.kernel.org/linuxppc-dev/", "list_archive_url_format": "https://lore.kernel.org/linuxppc-dev/{}/", "commit_url_format": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id={}" }, "msgid": "<421706547.03532@bjtu.edu.cn>", "list_archive_url": "https://lore.kernel.org/linuxppc-dev/421706547.03532@bjtu.edu.cn/", "date": "2008-09-18T02:57:12", "name": "Linuxppc-dev Digest, Vol 49, Issue 89", "commit_ref": null, "pull_url": null, "state": "not-applicable", "archived": true, "hash": "4a2747900ca8181662daed00c2344f02d24bb0ed", "submitter": { "id": 246, "url": "http://patchwork.ozlabs.org/api/people/246/?format=api", "name": "limitjiang", "email": "03212009@bjtu.edu.cn" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/421706547.03532@bjtu.edu.cn/mbox/", "series": [], "comments": "http://patchwork.ozlabs.org/api/patches/484/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/484/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@ozlabs.org>", "X-Original-To": [ "patchwork-incoming@ozlabs.org", "linuxppc-dev@ozlabs.org" ], "Delivered-To": [ "patchwork-incoming@ozlabs.org", "linuxppc-dev@ozlabs.org" ], "Received": [ "from ozlabs.org (localhost [127.0.0.1])\n\tby ozlabs.org (Postfix) with ESMTP id E1075DE1B6\n\tfor <patchwork-incoming@ozlabs.org>;\n\tThu, 18 Sep 2008 13:03:31 +1000 (EST)", "from bjtu.edu.cn (unknown [218.249.29.195])\n\tby ozlabs.org (Postfix) with SMTP id 57CCDDDF75\n\tfor <linuxppc-dev@ozlabs.org>; Thu, 18 Sep 2008 13:03:08 +1000 (EST)", "(eyou anti_spam gateway 3.0); Thu, 18 Sep 2008 10:55:47 +0800", "from 218.249.29.198 by 218.249.29.195 with SMTP;\n\tThu, 18 Sep 2008 10:55:46 +0800" ], "X-Greylist": "delayed 340 seconds by postgrey-1.31 at ozlabs;\n\tThu, 18 Sep 2008 13:03:08 EST", "X-EYOU-SPAMVALUE": "0", "X-EYOU-DEALDRC": "", "Message-ID": [ "<421706547.03532@bjtu.edu.cn>", "<200809181057119397391@bjtu.edu.cn>" ], "X-EYOUMAIL-SMTPAUTH": "03212009@bjtu.edu.cn", "Date": "Thu, 18 Sep 2008 10:57:12 +0800", "From": "\"limitjiang\" <03212009@bjtu.edu.cn>", "To": "\"linuxppc-dev@ozlabs.org\" <linuxppc-dev@ozlabs.org>", "References": "<421703169.29555@bjtu.edu.cn>", "Subject": "Re: Linuxppc-dev Digest, Vol 49, Issue 89", "X-mailer": "Foxmail 6, 10, 201, 22 [cn]", "Mime-Version": [ "1.0", "1.0" ], "X-BeenThere": "linuxppc-dev@ozlabs.org", "X-Mailman-Version": "2.1.11", "Precedence": "list", "List-Id": "Linux on PowerPC Developers Mail List <linuxppc-dev.ozlabs.org>", "List-Unsubscribe": "<https://ozlabs.org/mailman/options/linuxppc-dev>,\n\t<mailto:linuxppc-dev-request@ozlabs.org?subject=unsubscribe>", "List-Archive": "<http://ozlabs.org/pipermail/linuxppc-dev>", "List-Post": "<mailto:linuxppc-dev@ozlabs.org>", "List-Help": "<mailto:linuxppc-dev-request@ozlabs.org?subject=help>", "List-Subscribe": "<https://ozlabs.org/mailman/listinfo/linuxppc-dev>,\n\t<mailto:linuxppc-dev-request@ozlabs.org?subject=subscribe>", "Content-Type": "multipart/mixed; boundary=\"===============2112014134==\"", "Mime-version": [ "1.0", "1.0" ], "Sender": "linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@ozlabs.org", "Errors-To": "linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@ozlabs.org" }, "content": "2008-09-18 \r\n\r\n\r\n\r\nlimitjiang \r\n\r\n\r\n\r\n发件人: linuxppc-dev-request@ozlabs.org \r\n发送时间: 2008-09-18 09:55:11 \r\n收件人: linuxppc-dev@ozlabs.org \r\n抄送: \r\n主题: Linuxppc-dev Digest, Vol 49, Issue 89 \r\n \r\nSend Linuxppc-dev mailing list submissions to\r\nlinuxppc-dev@ozlabs.org\r\n\r\nTo subscribe or unsubscribe via the World Wide Web, visit\r\nhttps://ozlabs.org/mailman/listinfo/linuxppc-dev\r\nor, via email, send a message with subject or body 'help' to\r\nlinuxppc-dev-request@ozlabs.org\r\n\r\nYou can reach the person managing the list at\r\nlinuxppc-dev-owner@ozlabs.org\r\n\r\nWhen replying, please edit your Subject line so it is more specific\r\nthan \"Re: Contents of Linuxppc-dev digest...\"\r\n\r\n\r\nToday's Topics:\r\n\r\n 1. [PATCH v7 2/4] powerpc: Fixes for CONFIG_PTE_64BIT for SMP\r\n support (Kumar Gala)\r\n 2. [PATCH v7 3/4] powerpc/fsl-booke: Fixup 64-bit PTE reading\r\n for SMP support (Kumar Gala)\r\n 3. [PATCH v7 4/4] powerpc/mm: Implement _PAGE_SPECIAL &\r\n pte_special() for 32-bit (Kumar Gala)\r\n\r\n\r\n----------------------------------------------------------------------\r\n\r\nMessage: 1\r\nDate: Wed, 17 Sep 2008 18:00:03 -0500\r\nFrom: Kumar Gala <galak@kernel.crashing.org >\r\nSubject: [PATCH v7 2/4] powerpc: Fixes for CONFIG_PTE_64BIT for SMP\r\nsupport\r\nTo: linuxppc-dev@ozlabs.org\r\nMessage-ID:\r\n<1221692405-19880-2-git-send-email-galak@kernel.crashing.org >\r\n\r\nThere are some minor issues with support 64-bit PTEs on a 32-bit processor\r\nwhen dealing with SMP.\r\n\r\n* We need to order the stores in set_pte_at to make sure the flag word\r\n is set second.\r\n* Change pte_clear to use pte_update so only the flag word is cleared\r\n* Added a check to set_pte_at to clear the pte if it happened to be set.\r\n\r\nSigned-off-by: Kumar Gala <galak@kernel.crashing.org >\r\n---\r\n\r\nChanged the set_pte_at checking to deal with the case that it's called\r\nwith a pte that has pte_present and clearing it w/proper ordering.\r\n\r\n- k\r\n\r\n arch/powerpc/include/asm/highmem.h | 2 +-\r\n arch/powerpc/include/asm/pgtable-ppc32.h | 28 +++++++++++++++++++++++-----\r\n 2 files changed, 24 insertions(+), 6 deletions(-)\r\n\r\n-- \r\n1.5.5.1\r\n\r\n\r\n\r\n------------------------------\r\n\r\n_______________________________________________\r\nLinuxppc-dev mailing list\r\nLinuxppc-dev@ozlabs.org\r\nhttps://ozlabs.org/mailman/listinfo/linuxppc-dev\r\n\r\nEnd of Linuxppc-dev Digest, Vol 49, Issue 89\r\n********************************************", "diff": "diff --git a/arch/powerpc/include/asm/highmem.h b/arch/powerpc/include/asm/highmem.h\r\nindex 5d99b64..91c5895 100644\r\n--- a/arch/powerpc/include/asm/highmem.h\r\n+++ b/arch/powerpc/include/asm/highmem.h\r\n@@ -84,7 +84,7 @@ static inline void *kmap_atomic_prot(struct page *page, enum km_type type, pgpro\r\n #ifdef CONFIG_DEBUG_HIGHMEM\r\n BUG_ON(!pte_none(*(kmap_pte-idx)));\r\n #endif\r\n- set_pte_at(&init_mm, vaddr, kmap_pte-idx, mk_pte(page, prot));\r\n+ __set_pte_at(&init_mm, vaddr, kmap_pte-idx, mk_pte(page, prot));\r\n flush_tlb_page(NULL, vaddr);\r\n\r\n return (void*) vaddr;\r\ndiff --git a/arch/powerpc/include/asm/pgtable-ppc32.h b/arch/powerpc/include/asm/pgtable-ppc32.h\r\nindex 6fe39e3..d1d23b9 100644\r\n--- a/arch/powerpc/include/asm/pgtable-ppc32.h\r\n+++ b/arch/powerpc/include/asm/pgtable-ppc32.h\r\n@@ -517,7 +517,8 @@ extern unsigned long bad_call_to_PMD_PAGE_SIZE(void);\r\n\r\n #define pte_none(pte) ((pte_val(pte) & ~_PTE_NONE_MASK) == 0)\r\n #define pte_present(pte) (pte_val(pte) & _PAGE_PRESENT)\r\n-#define pte_clear(mm,addr,ptep) do { set_pte_at((mm), (addr), (ptep), __pte(0)); } while (0)\r\n+#define pte_clear(mm, addr, ptep) \\\r\n+ do { pte_update(ptep, ~_PAGE_HASHPTE, 0); } while (0)\r\n\r\n #define pmd_none(pmd) (!pmd_val(pmd))\r\n #define pmd_bad(pmd) (pmd_val(pmd) & _PMD_BAD)\r\n@@ -612,9 +613,6 @@ static inline unsigned long pte_update(pte_t *p,\r\n return old;\r\n }\r\n #else /* CONFIG_PTE_64BIT */\r\n-/* TODO: Change that to only modify the low word and move set_pte_at()\r\n- * out of line\r\n- */\r\n static inline unsigned long long pte_update(pte_t *p,\r\n unsigned long clr,\r\n unsigned long set)\r\n@@ -652,16 +650,36 @@ static inline unsigned long long pte_update(pte_t *p,\r\n * On machines which use an MMU hash table we avoid changing the\r\n * _PAGE_HASHPTE bit.\r\n */\r\n-static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,\r\n+\r\n+static inline void __set_pte_at(struct mm_struct *mm, unsigned long addr,\r\n pte_t *ptep, pte_t pte)\r\n {\r\n #if _PAGE_HASHPTE != 0\r\n pte_update(ptep, ~_PAGE_HASHPTE, pte_val(pte) & ~_PAGE_HASHPTE);\r\n+#elif defined(CONFIG_PTE_64BIT) && defined(CONFIG_SMP)\r\n+ __asm__ __volatile__(\"\\\r\n+ stw%U0%X0 %2,%0\\n\\\r\n+ eieio\\n\\\r\n+ stw%U0%X0 %L2,%1\"\r\n+ : \"=m\" (*ptep), \"=m\" (*((unsigned char *)ptep+4))\r\n+ : \"r\" (pte) : \"memory\");\r\n #else\r\n *ptep = pte;\r\n #endif\r\n }\r\n\r\n+static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,\r\n+ pte_t *ptep, pte_t pte)\r\n+{\r\n+#if defined(CONFIG_PTE_64BIT)\r\n+ if (unlikely(pte_present(*ptep))) {\r\n+ pte_clear(mm, addr, ptep);\r\n+ smp_wmb();\r\n+ }\r\n+#endif\r\n+ __set_pte_at(mm, addr, ptep, pte);\r\n+}\r\n+\r\n /*\r\n * 2.6 calls this without flushing the TLB entry; this is wrong\r\n * for our hash-based implementation, we fix that up here.\r\n-- \r\n1.5.5.1\r\n\r\n\r\n\r\n------------------------------\r\n\r\nMessage: 2\r\nDate: Wed, 17 Sep 2008 18:00:04 -0500\r\nFrom: Kumar Gala <galak@kernel.crashing.org >\r\nSubject: [PATCH v7 3/4] powerpc/fsl-booke: Fixup 64-bit PTE reading\r\nfor SMP support\r\nTo: linuxppc-dev@ozlabs.org\r\nMessage-ID:\r\n<1221692405-19880-3-git-send-email-galak@kernel.crashing.org >\r\n\r\nWe need to create a false data dependency to ensure the loads of\r\nthe pte are done in the right order.\r\n\r\nSigned-off-by: Kumar Gala <galak@kernel.crashing.org >\r\n---\r\n arch/powerpc/kernel/head_fsl_booke.S | 26 +++++++++++++++++++++-----\r\n 1 files changed, 21 insertions(+), 5 deletions(-)\r\n\r\ndiff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/kernel/head_fsl_booke.S\r\nindex 3cb52fa..377e0c1 100644\r\n--- a/arch/powerpc/kernel/head_fsl_booke.S\r\n+++ b/arch/powerpc/kernel/head_fsl_booke.S\r\n@@ -579,13 +579,19 @@ interrupt_base:\r\n\r\n FIND_PTE\r\n andc. r13,r13,r11 /* Check permission */\r\n- bne 2f /* Bail if permission mismach */\r\n\r\n #ifdef CONFIG_PTE_64BIT\r\n- lwz r13, 0(r12)\r\n+#ifdef CONFIG_SMP\r\n+ subf r10,r11,r12 /* create false data dep */\r\n+ lwzx r13,r11,r10 /* Get upper pte bits */\r\n+#else\r\n+ lwz r13,0(r12) /* Get upper pte bits */\r\n+#endif\r\n #endif\r\n\r\n- /* Jump to common tlb load */\r\n+ bne 2f /* Bail if permission/valid mismach */\r\n+\r\n+ /* Jump to common tlb load */\r\n b finish_tlb_load\r\n 2:\r\n /* The bailout. Restore registers to pre-exception conditions\r\n@@ -640,10 +646,20 @@ interrupt_base:\r\n\r\n FIND_PTE\r\n andc. r13,r13,r11 /* Check permission */\r\n+\r\n+#ifdef CONFIG_PTE_64BIT\r\n+#ifdef CONFIG_SMP\r\n+ subf r10,r11,r12 /* create false data dep */\r\n+ lwzx r13,r11,r10 /* Get upper pte bits */\r\n+#else\r\n+ lwz r13,0(r12) /* Get upper pte bits */\r\n+#endif\r\n+#endif\r\n+\r\n bne 2f /* Bail if permission mismach */\r\n\r\n #ifdef CONFIG_PTE_64BIT\r\n- lwz r13, 0(r12)\r\n+ lwz r13,0(r12)\r\n #endif\r\n\r\n /* Jump to common TLB load point */\r\n@@ -702,7 +718,7 @@ interrupt_base:\r\n /*\r\n * Both the instruction and data TLB miss get to this\r\n * point to load the TLB.\r\n- * r10 - EA of fault\r\n+ * r10 - available to use\r\n * r11 - TLB (info from Linux PTE)\r\n * r12 - available to use\r\n * r13 - upper bits of PTE (if PTE_64BIT) or available to use\r\n-- \r\n1.5.5.1\r\n\r\n\r\n\r\n------------------------------\r\n\r\nMessage: 3\r\nDate: Wed, 17 Sep 2008 18:00:05 -0500\r\nFrom: Kumar Gala <galak@kernel.crashing.org >\r\nSubject: [PATCH v7 4/4] powerpc/mm: Implement _PAGE_SPECIAL &\r\npte_special() for 32-bit\r\nTo: linuxppc-dev@ozlabs.org\r\nMessage-ID:\r\n<1221692405-19880-4-git-send-email-galak@kernel.crashing.org >\r\n\r\nImplement _PAGE_SPECIAL and pte_special() for 32-bit powerpc. This bit will\r\nbe used by the fast get_user_pages() to differenciate PTEs that correspond\r\nto a valid struct page from special mappings that don't such as IO mappings\r\nobtained via io_remap_pfn_ranges().\r\n\r\nWe currently only implement this on sub-arch that support SMP or will so\r\nin the future (6xx, 44x, FSL-BookE) and not (8xx, 40x).\r\n\r\nSigned-off-by: Kumar Gala <galak@kernel.crashing.org >\r\nAcked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org >\r\n---\r\n arch/powerpc/include/asm/pgtable-ppc32.h | 15 +++++++++++++--\r\n 1 files changed, 13 insertions(+), 2 deletions(-)\r\n\r\ndiff --git a/arch/powerpc/include/asm/pgtable-ppc32.h b/arch/powerpc/include/asm/pgtable-ppc32.h\r\nindex d1d23b9..e8f31a5 100644\r\n--- a/arch/powerpc/include/asm/pgtable-ppc32.h\r\n+++ b/arch/powerpc/include/asm/pgtable-ppc32.h\r\n@@ -261,6 +261,7 @@ extern int icache_44x_need_flush;\r\n #define _PAGE_HWEXEC 0x00000004 /* H: Execute permission */\r\n #define _PAGE_ACCESSED 0x00000008 /* S: Page referenced */\r\n #define _PAGE_DIRTY 0x00000010 /* S: Page dirty */\r\n+#define _PAGE_SPECIAL 0x00000020 /* S: Special page */\r\n #define _PAGE_USER 0x00000040 /* S: User page */\r\n #define _PAGE_ENDIAN 0x00000080 /* H: E bit */\r\n #define _PAGE_GUARDED 0x00000100 /* H: G bit */\r\n@@ -276,6 +277,7 @@ extern int icache_44x_need_flush;\r\n /* ERPN in a PTE never gets cleared, ignore it */\r\n #define _PTE_NONE_MASK 0xffffffff00000000ULL\r\n\r\n+#define __HAVE_ARCH_PTE_SPECIAL\r\n\r\n #elif defined(CONFIG_FSL_BOOKE)\r\n /*\r\n@@ -305,6 +307,7 @@ extern int icache_44x_need_flush;\r\n #define _PAGE_COHERENT 0x00100 /* H: M bit */\r\n #define _PAGE_NO_CACHE 0x00200 /* H: I bit */\r\n #define _PAGE_WRITETHRU 0x00400 /* H: W bit */\r\n+#define _PAGE_SPECIAL 0x00800 /* S: Special page */\r\n\r\n #ifdef CONFIG_PTE_64BIT\r\n /* ERPN in a PTE never gets cleared, ignore it */\r\n@@ -315,6 +318,8 @@ extern int icache_44x_need_flush;\r\n #define _PMD_PRESENT_MASK (PAGE_MASK)\r\n #define _PMD_BAD (~PAGE_MASK)\r\n\r\n+#define __HAVE_ARCH_PTE_SPECIAL\r\n+\r\n #elif defined(CONFIG_8xx)\r\n /* Definitions for 8xx embedded chips. */\r\n #define _PAGE_PRESENT 0x0001 /* Page is valid */\r\n@@ -362,6 +367,7 @@ extern int icache_44x_need_flush;\r\n #define _PAGE_ACCESSED 0x100 /* R: page referenced */\r\n #define _PAGE_EXEC 0x200 /* software: i-cache coherency required */\r\n #define _PAGE_RW 0x400 /* software: user write access allowed */\r\n+#define _PAGE_SPECIAL 0x800 /* software: Special page */\r\n\r\n #define _PTE_NONE_MASK _PAGE_HASHPTE\r\n\r\n@@ -372,6 +378,8 @@ extern int icache_44x_need_flush;\r\n /* Hash table based platforms need atomic updates of the linux PTE */\r\n #define PTE_ATOMIC_UPDATES 1\r\n\r\n+#define __HAVE_ARCH_PTE_SPECIAL\r\n+\r\n #endif\r\n\r\n /*\r\n@@ -404,6 +412,9 @@ extern int icache_44x_need_flush;\r\n #ifndef _PAGE_WRITETHRU\r\n #define _PAGE_WRITETHRU 0\r\n #endif\r\n+#ifndef _PAGE_SPECIAL\r\n+#define _PAGE_SPECIAL 0\r\n+#endif\r\n #ifndef _PMD_PRESENT_MASK\r\n #define _PMD_PRESENT_MASK _PMD_PRESENT\r\n #endif\r\n@@ -534,7 +545,7 @@ static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_RW; }\r\n static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; }\r\n static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; }\r\n static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; }\r\n-static inline int pte_special(pte_t pte) { return 0; }\r\n+static inline int pte_special(pte_t pte) { return pte_val(pte) & _PAGE_SPECIAL; }\r\n\r\n static inline void pte_uncache(pte_t pte) { pte_val(pte) |= _PAGE_NO_CACHE; }\r\n static inline void pte_cache(pte_t pte) { pte_val(pte) &= ~_PAGE_NO_CACHE; }\r\n@@ -553,7 +564,7 @@ static inline pte_t pte_mkdirty(pte_t pte) {\r\n static inline pte_t pte_mkyoung(pte_t pte) {\r\n pte_val(pte) |= _PAGE_ACCESSED; return pte; }\r\n static inline pte_t pte_mkspecial(pte_t pte) {\r\n- return pte; }\r\n+ pte_val(pte) |= _PAGE_SPECIAL; return pte; }\r\n static inline unsigned long pte_pgprot(pte_t pte)\r\n {\r\n return __pgprot(pte_val(pte)) & PAGE_PROT_BITS;\r\n", "prefixes": [] }