Re: pte_val(*pte) as lvalue

2001-07-03 Thread Russell King

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

2001-07-03 Thread Timur Tabi

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

2001-07-03 Thread Russell King

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

2001-07-03 Thread Timur Tabi

** 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

2001-07-03 Thread Timur Tabi

** 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

2001-07-03 Thread Russell King

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

2001-07-03 Thread Timur Tabi

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

2001-07-03 Thread Russell King

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

2001-07-02 Thread Andi Kleen

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

2001-07-02 Thread Timur Tabi

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/



pte_val(*pte) as lvalue

2001-07-02 Thread Timur Tabi

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/



Re: pte_val(*pte) as lvalue

2001-07-02 Thread Andi Kleen

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/