Subversion Repositories Kolibri OS

Rev

Rev 6934 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6934 Rev 6936
Line 67... Line 67...
67
 
67
 
68
#define pte_clear(mm, addr, ptep)	native_pte_clear(mm, addr, ptep)
68
#define pte_clear(mm, addr, ptep)	native_pte_clear(mm, addr, ptep)
Line 69... Line 69...
69
#define pmd_clear(pmd)			native_pmd_clear(pmd)
69
#define pmd_clear(pmd)			native_pmd_clear(pmd)
70
 
-
 
71
#define pte_update(mm, addr, ptep)              do { } while (0)
-
 
72
#define pte_update_defer(mm, addr, ptep)        do { } while (0)
-
 
Line 73... Line 70...
73
#define pmd_update(mm, addr, ptep)              do { } while (0)
70
 
74
#define pmd_update_defer(mm, addr, ptep)        do { } while (0)
71
#define pte_update(mm, addr, ptep)              do { } while (0)
Line 75... Line 72...
75
 
72
 
Line 163... Line 160...
163
{
160
{
164
	return pmd_flags(pte) & _PAGE_PSE;
161
	return pmd_flags(pte) & _PAGE_PSE;
165
}
162
}
Line 166... Line 163...
166
 
163
 
167
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
-
 
168
static inline int pmd_trans_splitting(pmd_t pmd)
-
 
169
{
-
 
170
	return pmd_val(pmd) & _PAGE_SPLITTING;
-
 
171
}
-
 
172
 
164
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
173
static inline int pmd_trans_huge(pmd_t pmd)
165
static inline int pmd_trans_huge(pmd_t pmd)
174
{
166
{
175
	return pmd_val(pmd) & _PAGE_PSE;
167
	return (pmd_val(pmd) & (_PAGE_PSE|_PAGE_DEVMAP)) == _PAGE_PSE;
Line 176... Line 168...
176
}
168
}
177
 
169
 
178
static inline int has_transparent_hugepage(void)
170
static inline int has_transparent_hugepage(void)
179
{
171
{
-
 
172
	return cpu_has_pse;
-
 
173
}
-
 
174
 
-
 
175
#ifdef __HAVE_ARCH_PTE_DEVMAP
-
 
176
static inline int pmd_devmap(pmd_t pmd)
-
 
177
{
-
 
178
	return !!(pmd_val(pmd) & _PAGE_DEVMAP);
180
	return cpu_has_pse;
179
}
Line 181... Line 180...
181
}
180
#endif
182
#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
181
#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
183
 
182
 
Line 253... Line 252...
253
static inline pte_t pte_mkspecial(pte_t pte)
252
static inline pte_t pte_mkspecial(pte_t pte)
254
{
253
{
255
	return pte_set_flags(pte, _PAGE_SPECIAL);
254
	return pte_set_flags(pte, _PAGE_SPECIAL);
256
}
255
}
Line -... Line 256...
-
 
256
 
-
 
257
static inline pte_t pte_mkdevmap(pte_t pte)
-
 
258
{
-
 
259
	return pte_set_flags(pte, _PAGE_SPECIAL|_PAGE_DEVMAP);
-
 
260
}
257
 
261
 
258
static inline pmd_t pmd_set_flags(pmd_t pmd, pmdval_t set)
262
static inline pmd_t pmd_set_flags(pmd_t pmd, pmdval_t set)
259
{
263
{
Line 260... Line 264...
260
	pmdval_t v = native_pmd_val(pmd);
264
	pmdval_t v = native_pmd_val(pmd);
Line 272... Line 276...
272
static inline pmd_t pmd_mkold(pmd_t pmd)
276
static inline pmd_t pmd_mkold(pmd_t pmd)
273
{
277
{
274
	return pmd_clear_flags(pmd, _PAGE_ACCESSED);
278
	return pmd_clear_flags(pmd, _PAGE_ACCESSED);
275
}
279
}
Line -... Line 280...
-
 
280
 
-
 
281
static inline pmd_t pmd_mkclean(pmd_t pmd)
-
 
282
{
-
 
283
	return pmd_clear_flags(pmd, _PAGE_DIRTY);
-
 
284
}
276
 
285
 
277
static inline pmd_t pmd_wrprotect(pmd_t pmd)
286
static inline pmd_t pmd_wrprotect(pmd_t pmd)
278
{
287
{
279
	return pmd_clear_flags(pmd, _PAGE_RW);
288
	return pmd_clear_flags(pmd, _PAGE_RW);
Line 280... Line 289...
280
}
289
}
281
 
290
 
282
static inline pmd_t pmd_mkdirty(pmd_t pmd)
291
static inline pmd_t pmd_mkdirty(pmd_t pmd)
283
{
292
{
Line -... Line 293...
-
 
293
	return pmd_set_flags(pmd, _PAGE_DIRTY | _PAGE_SOFT_DIRTY);
-
 
294
}
-
 
295
 
-
 
296
static inline pmd_t pmd_mkdevmap(pmd_t pmd)
-
 
297
{
284
	return pmd_set_flags(pmd, _PAGE_DIRTY | _PAGE_SOFT_DIRTY);
298
	return pmd_set_flags(pmd, _PAGE_DEVMAP);
285
}
299
}
286
 
300
 
287
static inline pmd_t pmd_mkhuge(pmd_t pmd)
301
static inline pmd_t pmd_mkhuge(pmd_t pmd)
Line 463... Line 477...
463
static inline int pte_present(pte_t a)
477
static inline int pte_present(pte_t a)
464
{
478
{
465
	return pte_flags(a) & (_PAGE_PRESENT | _PAGE_PROTNONE);
479
	return pte_flags(a) & (_PAGE_PRESENT | _PAGE_PROTNONE);
466
}
480
}
Line -... Line 481...
-
 
481
 
-
 
482
#ifdef __HAVE_ARCH_PTE_DEVMAP
-
 
483
static inline int pte_devmap(pte_t a)
-
 
484
{
-
 
485
	return (pte_flags(a) & _PAGE_DEVMAP) == _PAGE_DEVMAP;
-
 
486
}
-
 
487
#endif
467
 
488
 
468
#define pte_accessible pte_accessible
489
#define pte_accessible pte_accessible
469
static inline bool pte_accessible(struct mm_struct *mm, pte_t a)
490
static inline bool pte_accessible(struct mm_struct *mm, pte_t a)
470
{
491
{
471
	if (pte_flags(a) & _PAGE_PRESENT)
492
	if (pte_flags(a) & _PAGE_PRESENT)
Line 729... Line 750...
729
 * has not been done using the set_pte / clear_pte interfaces.  It is used by
750
 * has not been done using the set_pte / clear_pte interfaces.  It is used by
730
 * shadow mode hypervisors to resynchronize the shadow page tables.  Kernel PTE
751
 * shadow mode hypervisors to resynchronize the shadow page tables.  Kernel PTE
731
 * updates should either be sets, clears, or set_pte_atomic for P->P
752
 * updates should either be sets, clears, or set_pte_atomic for P->P
732
 * transitions, which means this hook should only be called for user PTEs.
753
 * transitions, which means this hook should only be called for user PTEs.
733
 * This hook implies a P->P protection or access change has taken place, which
754
 * This hook implies a P->P protection or access change has taken place, which
734
 * requires a subsequent TLB flush.  The notification can optionally be delayed
755
 * requires a subsequent TLB flush.
735
 * until the TLB flush event by using the pte_update_defer form of the
-
 
736
 * interface, but care must be taken to assure that the flush happens while
-
 
737
 * still holding the same page table lock so that the shadow and primary pages
-
 
738
 * do not become out of sync on SMP.
-
 
739
 */
756
 */
740
#define pte_update(mm, addr, ptep)		do { } while (0)
757
#define pte_update(mm, addr, ptep)		do { } while (0)
741
#define pte_update_defer(mm, addr, ptep)	do { } while (0)
-
 
742
#endif
758
#endif
Line 743... Line 759...
743
 
759
 
744
/*
760
/*
745
 * We only update the dirty/accessed state if we set
761
 * We only update the dirty/accessed state if we set
Line 814... Line 830...
814
#define __HAVE_ARCH_PMDP_CLEAR_YOUNG_FLUSH
830
#define __HAVE_ARCH_PMDP_CLEAR_YOUNG_FLUSH
815
extern int pmdp_clear_flush_young(struct vm_area_struct *vma,
831
extern int pmdp_clear_flush_young(struct vm_area_struct *vma,
816
				  unsigned long address, pmd_t *pmdp);
832
				  unsigned long address, pmd_t *pmdp);
Line 817... Line -...
817
 
-
 
818
 
-
 
819
#define __HAVE_ARCH_PMDP_SPLITTING_FLUSH
-
 
820
extern void pmdp_splitting_flush(struct vm_area_struct *vma,
-
 
821
				 unsigned long addr, pmd_t *pmdp);
833
 
822
 
834
 
823
#define __HAVE_ARCH_PMD_WRITE
835
#define __HAVE_ARCH_PMD_WRITE
824
static inline int pmd_write(pmd_t pmd)
836
static inline int pmd_write(pmd_t pmd)
825
{
837
{
Line 826... Line 838...
826
	return pmd_flags(pmd) & _PAGE_RW;
838
	return pmd_flags(pmd) & _PAGE_RW;
827
}
839
}
828
 
840
 
829
#define __HAVE_ARCH_PMDP_HUGE_GET_AND_CLEAR
841
#define __HAVE_ARCH_PMDP_HUGE_GET_AND_CLEAR
830
static inline pmd_t pmdp_huge_get_and_clear(struct mm_struct *mm, unsigned long addr,
842
static inline pmd_t pmdp_huge_get_and_clear(struct mm_struct *mm, unsigned long addr,
831
				       pmd_t *pmdp)
-
 
832
{
-
 
833
	pmd_t pmd = native_pmdp_get_and_clear(pmdp);
843
				       pmd_t *pmdp)
Line 834... Line 844...
834
	pmd_update(mm, addr, pmdp);
844
{
835
	return pmd;
845
	return native_pmdp_get_and_clear(pmdp);
836
}
846
}
837
 
847
 
838
#define __HAVE_ARCH_PMDP_SET_WRPROTECT
848
#define __HAVE_ARCH_PMDP_SET_WRPROTECT
839
static inline void pmdp_set_wrprotect(struct mm_struct *mm,
-
 
840
				      unsigned long addr, pmd_t *pmdp)
849
static inline void pmdp_set_wrprotect(struct mm_struct *mm,
Line 841... Line 850...
841
{
850
				      unsigned long addr, pmd_t *pmdp)
842
	clear_bit(_PAGE_BIT_RW, (unsigned long *)pmdp);
851
{
843
	pmd_update(mm, addr, pmdp);
852
	clear_bit(_PAGE_BIT_RW, (unsigned long *)pmdp);