Re: pte_val(*pte) as lvalue
On Tue, Jul 03, 2001 at 01:50:05PM -0500, Timur Tabi wrote: > Russell King wrote: > >Can I ask what the nature of the PTE modification is, and where you > >are making this modification? > > > I've written a hack which enables PAT (Page Address Translation) for a > particular page: Firstly, I'll say I'm no x86 expert by any means. However, it may be better to extend the pte bit handling functions in include/asm-i386/pgtable.h to include the bits you need to handle. (eg, see how pte_mkwrite and pte_wrprotect are implemented.) This is probably the cleanest way of handling these bits. -- Russell King ([EMAIL PROTECTED])The developer of ARM Linux http://www.arm.linux.org.uk/personal/aboutme.html - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: pte_val(*pte) as lvalue
Russell King wrote: >Can I ask what the nature of the PTE modification is, and where you >are making this modification? > I've written a hack which enables PAT (Page Address Translation) for a particular page: void set_pte_pat(pte_t *pte, unsigned long pat_index) { unsigned long p = pte_val(*pte); p &= ~(_PAGE_PROTNONE | _PAGE_PCD | _PAGE_PWT);// zero-out the relevant bits if (pat_index & 4) p |= _PAGE_PROTNONE; if (pat_index & 2) p |= _PAGE_PCD; if (pat_index & 1) p |= _PAGE_PWT; #if CONFIG_X86_PAE pte->pte_high = 0; pte->pte_low = p; #else pte_val(*pte) = p; #endif -- Timur Tabi Interactive Silicon - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: pte_val(*pte) as lvalue
On Tue, Jul 03, 2001 at 01:32:36PM -0500, Timur Tabi wrote: > ** Reply to message from Andi Kleen <[EMAIL PROTECTED]> on 03 Jul 2001 01:33:42 +0200 > > set_pte(pte, mk_pte( ... )) > > I'm not sure how to use mk_pte. The first parameter is a struct page *, > which I don't have. All I'm doing is modifying the PTE value. I don't > want to "make" another one. set_pte is the only way you can guarantee that the architecture implementation gets to do what it needs to do with the PTE value before stuffing it into the PTE tables. Can I ask what the nature of the PTE modification is, and where you are making this modification? -- Russell King ([EMAIL PROTECTED])The developer of ARM Linux http://www.arm.linux.org.uk/personal/aboutme.html - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: pte_val(*pte) as lvalue
** Reply to message from Andi Kleen <[EMAIL PROTECTED]> on 03 Jul 2001 01:33:42 +0200 > Timur Tabi <[EMAIL PROTECTED]> writes: > > > > > What is the accepted way to assign an integer to a pte that works in 2.2 and > > 2.4? > > set_pte(pte, mk_pte( ... )) I'm not sure how to use mk_pte. The first parameter is a struct page *, which I don't have. All I'm doing is modifying the PTE value. I don't want to "make" another one. -- Timur Tabi - [EMAIL PROTECTED] Interactive Silicon - http://www.interactivesi.com - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: pte_val(*pte) as lvalue
Timur Tabi <[EMAIL PROTECTED]> writes: > > What is the accepted way to assign an integer to a pte that works in 2.2 and > 2.4? set_pte(pte, mk_pte( ... )) -Andi - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
pte_val(*pte) as lvalue
In my driver, I have this code: unsigned long p = pte_val(*pte); [set some bits in "p"] pte_val(*pte) = p; This works fine in 2.2, and 2.4 when PAE support is disabled. When PAE support is enabled, it doesn't work, because the pte_val macro can no longer be an lvalue. What is the accepted way to assign an integer to a pte that works in 2.2 and 2.4? -- Timur Tabi - [EMAIL PROTECTED] Interactive Silicon - http://www.interactivesi.com - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/