diff options
| author | Greg Kroah-Hartman <gregkh@suse.de> | 2011-11-26 19:46:19 -0800 | 
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-11-26 19:46:48 -0800 | 
| commit | 47b649590dbbea182f854d6470ee1cd59b7b7684 (patch) | |
| tree | a2de3610f9c5e963234cffb35b9d559aab62e164 /arch/s390/include/asm/pgtable.h | |
| parent | 3af5154a869bc278a829bb03e65a709480e821b0 (diff) | |
| parent | caca6a03d365883564885f2c1da3e88dcf65d139 (diff) | |
| download | olio-linux-3.10-47b649590dbbea182f854d6470ee1cd59b7b7684.tar.xz olio-linux-3.10-47b649590dbbea182f854d6470ee1cd59b7b7684.zip  | |
Merge 3.2-rc3 into usb-linus
This pulls in the latest USB bugfixes and helps a few of the drivers
merge nicer in the future due to changes in both branches.
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'arch/s390/include/asm/pgtable.h')
| -rw-r--r-- | arch/s390/include/asm/pgtable.h | 12 | 
1 files changed, 9 insertions, 3 deletions
diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h index 34ede0ea85a..524d23b8610 100644 --- a/arch/s390/include/asm/pgtable.h +++ b/arch/s390/include/asm/pgtable.h @@ -593,6 +593,8 @@ static inline pgste_t pgste_update_all(pte_t *ptep, pgste_t pgste)  	unsigned long address, bits;  	unsigned char skey; +	if (!pte_present(*ptep)) +		return pgste;  	address = pte_val(*ptep) & PAGE_MASK;  	skey = page_get_storage_key(address);  	bits = skey & (_PAGE_CHANGED | _PAGE_REFERENCED); @@ -625,6 +627,8 @@ static inline pgste_t pgste_update_young(pte_t *ptep, pgste_t pgste)  #ifdef CONFIG_PGSTE  	int young; +	if (!pte_present(*ptep)) +		return pgste;  	young = page_reset_referenced(pte_val(*ptep) & PAGE_MASK);  	/* Transfer page referenced bit to pte software bit (host view) */  	if (young || (pgste_val(pgste) & RCP_HR_BIT)) @@ -638,13 +642,15 @@ static inline pgste_t pgste_update_young(pte_t *ptep, pgste_t pgste)  } -static inline void pgste_set_pte(pte_t *ptep, pgste_t pgste) +static inline void pgste_set_pte(pte_t *ptep, pgste_t pgste, pte_t entry)  {  #ifdef CONFIG_PGSTE  	unsigned long address;  	unsigned long okey, nkey; -	address = pte_val(*ptep) & PAGE_MASK; +	if (!pte_present(entry)) +		return; +	address = pte_val(entry) & PAGE_MASK;  	okey = nkey = page_get_storage_key(address);  	nkey &= ~(_PAGE_ACC_BITS | _PAGE_FP_BIT);  	/* Set page access key and fetch protection bit from pgste */ @@ -712,7 +718,7 @@ static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,  	if (mm_has_pgste(mm)) {  		pgste = pgste_get_lock(ptep); -		pgste_set_pte(ptep, pgste); +		pgste_set_pte(ptep, pgste, entry);  		*ptep = entry;  		pgste_set_unlock(ptep, pgste);  	} else  |