Home
last modified time | relevance | path

Searched refs:pte (Results 1 – 25 of 369) sorted by relevance

12345678910>>...15

/linux/arch/mips/include/asm/
H A Dpgtable.h45 extern void __update_cache(unsigned long address, pte_t pte);
111 # define pte_none(pte) (!(((pte).pte_high) & ~_PAGE_GLOBAL)) argument
113 # define pte_none(pte) (!(((pte).pte_low | (pte).pte_high) & ~_PAGE_GLOBAL)) argument
116 #define pte_present(pte) ((pte).pte_low & _PAGE_PRESENT) argument
117 #define pte_no_exec(pte) ((pte).pte_low & _PAGE_NO_EXEC) argument
119 static inline void set_pte(pte_t *ptep, pte_t pte) argument
121 ptep->pte_high = pte.pte_high;
123 ptep->pte_low = pte.pte_low;
126 if (pte.pte_high & _PAGE_GLOBAL) {
128 if (pte.pte_low & _PAGE_GLOBAL) {
[all …]
/linux/arch/m68k/include/asm/
H A Dmcf_pgtable.h105 static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) in pte_modify() argument
107 pte_val(pte) = (pte_val(pte) & CF_PAGE_CHG_MASK) | pgprot_val(newprot); in pte_modify()
108 return pte; in pte_modify()
118 #define __pte_page(pte) ((void *) (pte_val(pte) & PAGE_MASK)) argument
121 static inline int pte_none(pte_t pte) in pte_none() argument
123 return !pte_val(pte); in pte_none()
126 static inline int pte_present(pte_t pte) in pte_present() argument
128 return pte_val(pte) & CF_PAGE_VALID; in pte_present()
137 #define pte_page(pte) virt_to_page(__pte_page(pte)) argument
158 static inline int pte_read(pte_t pte) in pte_read() argument
[all …]
H A Dsun3_pgtable.h85 static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) in pte_modify() argument
87 pte_val(pte) = (pte_val(pte) & SUN3_PAGE_CHG_MASK) | pgprot_val(newprot); in pte_modify()
88 return pte; in pte_modify()
93 #define __pte_page(pte) \ argument
94 (__va ((pte_val (pte) & SUN3_PAGE_PGNUM_MASK) << PAGE_SHIFT))
101 static inline int pte_none (pte_t pte) { return !pte_val (pte); } in pte_none() argument
102 static inline int pte_present (pte_t pte) { return pte_val (pte) & SUN3_PAGE_VALID; } in pte_present() argument
109 #define pte_pfn(pte) (pte_val(pte) & SUN3_PAGE_PGNUM_MASK) argument
113 #define pte_page(pte) virt_to_page(__pte_page(pte)) argument
140 static inline int pte_write(pte_t pte) { return pte_val(pte) & SUN3_PAGE_WRITEABLE; } in pte_write() argument
[all …]
H A Dmotorola_pgtable.h90 static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) in pte_modify() argument
92 pte_val(pte) = (pte_val(pte) & _PAGE_CHG_MASK) | pgprot_val(newprot); in pte_modify()
93 return pte; in pte_modify()
106 #define __pte_page(pte) ((unsigned long)__va(pte_val(pte) & PAGE_MASK)) argument
111 #define pte_none(pte) (!pte_val(pte)) argument
112 #define pte_present(pte) (pte_val(pte) & (_PAGE_PRESENT | _PAGE_PROTNONE)) argument
116 #define pte_page(pte) virt_to_page(__va(pte_val(pte))) argument
117 #define pte_pfn(pte) (pte_val(pte) >> PAGE_SHIFT) argument
152 static inline int pte_write(pte_t pte) { return !(pte_val(pte) & _PAGE_RONLY); } in pte_write() argument
153 static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } in pte_dirty() argument
[all …]
/linux/arch/hexagon/include/asm/
H A Dpgtable.h136 #define pte_mkhuge(pte) __pte((pte_val(pte) & ~0x3) | HVM_HUGEPAGE_SIZE) argument
143 extern void sync_icache_dcache(pte_t pte);
145 #define pte_present_exec_user(pte) \ argument
146 ((pte_val(pte) & (_PAGE_EXECUTE | _PAGE_USER)) == \
228 static inline int pte_none(pte_t pte) in pte_none() argument
230 return pte_val(pte) == _NULL_PTE; in pte_none()
236 static inline int pte_present(pte_t pte) in pte_present() argument
238 return pte_val(pte) & _PAGE_PRESENT; in pte_present()
248 static inline pte_t pte_mkold(pte_t pte) in pte_mkold() argument
250 pte_val(pte) &= ~_PAGE_ACCESSED; in pte_mkold()
[all …]
/linux/arch/microblaze/include/asm/
H A Dpgtable.h221 #define pte_none(pte) ((pte_val(pte) & ~_PTE_NONE_MASK) == 0) argument
222 #define pte_present(pte) (pte_val(pte) & _PAGE_PRESENT) argument
245 static inline int pte_read(pte_t pte) { return pte_val(pte) & _PAGE_USER; } in pte_read() argument
246 static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_RW; } in pte_write() argument
247 static inline int pte_exec(pte_t pte) { return pte_val(pte) & _PAGE_EXEC; } in pte_exec() argument
248 static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } in pte_dirty() argument
249 static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } in pte_young() argument
251 static inline void pte_uncache(pte_t pte) { pte_val(pte) |= _PAGE_NO_CACHE; } in pte_uncache() argument
252 static inline void pte_cache(pte_t pte) { pte_val(pte) &= ~_PAGE_NO_CACHE; } in pte_cache() argument
254 static inline pte_t pte_rdprotect(pte_t pte) \ in pte_rdprotect() argument
[all …]
/linux/arch/arm/include/asm/
H A Dpgtable.h61 #define pte_ERROR(pte) __pte_error(__FILE__, __LINE__, pte) argument
168 #define pte_pfn(pte) ((pte_val(pte) & PHYS_MASK) >> PAGE_SHIFT) argument
171 #define pte_page(pte) pfn_to_page(pte_pfn(pte)) argument
176 #define pte_isset(pte, val) ((u32)(val) == (val) ? pte_val(pte) & (val) \ argument
177 : !!(pte_val(pte) & (val)))
178 #define pte_isclear(pte, val) (!(pte_val(pte) & (val))) argument
180 #define pte_none(pte) (!pte_val(pte)) argument
181 #define pte_present(pte) (pte_isset((pte), L_PTE_PRESENT)) argument
182 #define pte_valid(pte) (pte_isset((pte), L_PTE_VALID)) argument
183 #define pte_accessible(mm, pte) (mm_tlb_flush_pending(mm) ? pte_present(pte) : pte_valid(pte)) argument
[all …]
/linux/arch/openrisc/include/asm/
H A Dpgtable.h217 static inline int pte_read(pte_t pte) { return pte_val(pte) & _PAGE_READ; } in pte_read() argument
218 static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_WRITE; } in pte_write() argument
219 static inline int pte_exec(pte_t pte) { return pte_val(pte) & _PAGE_EXEC; } in pte_exec() argument
220 static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } in pte_dirty() argument
221 static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } in pte_young() argument
223 static inline pte_t pte_wrprotect(pte_t pte) in pte_wrprotect() argument
225 pte_val(pte) &= ~(_PAGE_WRITE); in pte_wrprotect()
226 return pte; in pte_wrprotect()
229 static inline pte_t pte_rdprotect(pte_t pte) in pte_rdprotect() argument
231 pte_val(pte) &= ~(_PAGE_READ); in pte_rdprotect()
[all …]
/linux/arch/nios2/include/asm/
H A Dpgtable.h87 static inline int pte_write(pte_t pte) \ in pte_write() argument
88 { return pte_val(pte) & _PAGE_WRITE; } in pte_write()
89 static inline int pte_dirty(pte_t pte) \ in pte_dirty() argument
90 { return pte_val(pte) & _PAGE_DIRTY; } in pte_dirty()
91 static inline int pte_young(pte_t pte) \ in pte_young() argument
92 { return pte_val(pte) & _PAGE_ACCESSED; } in pte_young()
105 static inline int pte_none(pte_t pte) in pte_none() argument
107 return !(pte_val(pte) & ~(_PAGE_GLOBAL|0xf)); in pte_none()
110 static inline int pte_present(pte_t pte) \ in pte_present() argument
111 { return pte_val(pte) & _PAGE_PRESENT; } in pte_present()
[all …]
/linux/arch/powerpc/include/asm/nohash/
H A Dpgtable.h35 static inline unsigned long pte_huge_size(pte_t pte) in pte_huge_size() argument
153 static inline pte_t pte_mkwrite_novma(pte_t pte) in pte_mkwrite_novma() argument
158 return __pte(pte_val(pte) | _PAGE_RW); in pte_mkwrite_novma()
162 static inline pte_t pte_mkdirty(pte_t pte) in pte_mkdirty() argument
164 return __pte(pte_val(pte) | _PAGE_DIRTY); in pte_mkdirty()
167 static inline pte_t pte_mkyoung(pte_t pte) in pte_mkyoung() argument
169 return __pte(pte_val(pte) | _PAGE_ACCESSED); in pte_mkyoung()
173 static inline pte_t pte_wrprotect(pte_t pte) in pte_wrprotect() argument
175 return __pte(pte_val(pte) & ~_PAGE_WRITE); in pte_wrprotect()
180 static inline pte_t pte_mkexec(pte_t pte) in pte_mkexec() argument
[all …]
/linux/arch/csky/include/asm/
H A Dpgtable.h36 #define pte_none(pte) (!(pte_val(pte) & ~_PAGE_GLOBAL)) argument
37 #define pte_present(pte) (pte_val(pte) & _PAGE_PRESENT) argument
42 #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) argument
85 static inline void set_pte(pte_t *p, pte_t pte) in set_pte() argument
87 *p = pte; in set_pte()
141 static inline int pte_read(pte_t pte) in pte_read() argument
143 return pte.pte_low & _PAGE_READ; in pte_read()
146 static inline int pte_write(pte_t pte) in pte_write() argument
148 return (pte).pte_low & _PAGE_WRITE; in pte_write()
151 static inline int pte_dirty(pte_t pte) in pte_dirty() argument
[all …]
/linux/arch/sparc/include/asm/
H A Dpgtable_64.h233 pte_t pte = pfn_pte(page_nr, pgprot); in pfn_pmd() local
235 return __pmd(pte_val(pte)); in pfn_pmd()
241 static inline unsigned long pte_pfn(pte_t pte) in pte_pfn() argument
254 : "r" (pte_val(pte)), in pte_pfn()
262 static inline pte_t pte_modify(pte_t pte, pgprot_t prot) in pte_modify() argument
317 return __pte((pte_val(pte) & mask) | (pgprot_val(prot) & ~mask)); in pte_modify()
323 pte_t pte = __pte(pmd_val(pmd)); in pmd_modify() local
325 pte = pte_modify(pte, newprot); in pmd_modify()
327 return __pmd(pte_val(pte)); in pmd_modify()
361 static inline unsigned long pte_dirty(pte_t pte) in pte_dirty() argument
[all …]
H A Dpgtable_32.h148 static inline int pte_present(pte_t pte) in pte_present() argument
150 return ((pte_val(pte) & SRMMU_ET_MASK) == SRMMU_ET_PTE); in pte_present()
153 static inline int pte_none(pte_t pte) in pte_none() argument
155 return !pte_val(pte); in pte_none()
212 static inline int pte_write(pte_t pte) in pte_write() argument
214 return pte_val(pte) & SRMMU_WRITE; in pte_write()
217 static inline int pte_dirty(pte_t pte) in pte_dirty() argument
219 return pte_val(pte) & SRMMU_DIRTY; in pte_dirty()
222 static inline int pte_young(pte_t pte) in pte_young() argument
224 return pte_val(pte) & SRMMU_REF; in pte_young()
[all …]
/linux/arch/alpha/include/asm/
H A Dpgtable.h192 #define pte_pfn(pte) (pte_val(pte) >> PFN_PTE_SHIFT) argument
194 #define pte_page(pte) pfn_to_page(pte_pfn(pte)) argument
197 pte_t pte; \
199 pte_val(pte) = (page_to_pfn(page) << 32) | pgprot_val(pgprot); \
200 pte; \
204 { pte_t pte; pte_val(pte) = (PHYS_TWIDDLE(physpfn) << 32) | pgprot_val(pgprot); return pte; } in pfn_pte() local
206 extern inline pte_t pte_modify(pte_t pte, pgprot_t newprot) in pte_modify() argument
207 { pte_val(pte) = (pte_val(pte) & _PAGE_CHG_MASK) | pgprot_val(newprot); return pte; } in pte_modify()
231 extern inline int pte_none(pte_t pte) { return !pte_val(pte); } in pte_none() argument
232 extern inline int pte_present(pte_t pte) { return pte_val(pte) & _PAGE_VALID; } in pte_present() argument
[all …]
/linux/drivers/iommu/intel/
H A Dpasid.c242 struct pasid_entry *pte; in intel_pasid_tear_down_entry() local
246 pte = intel_pasid_get_entry(dev, pasid); in intel_pasid_tear_down_entry()
247 if (WARN_ON(!pte)) { in intel_pasid_tear_down_entry()
252 if (!pasid_pte_is_present(pte)) { in intel_pasid_tear_down_entry()
253 if (!pasid_pte_is_fault_disabled(pte)) { in intel_pasid_tear_down_entry()
254 WARN_ON(READ_ONCE(pte->val[0]) != 0); in intel_pasid_tear_down_entry()
265 pasid_clear_entry(pte); in intel_pasid_tear_down_entry()
272 did = pasid_get_domain_id(pte); in intel_pasid_tear_down_entry()
273 pgtt = pasid_pte_get_pgtt(pte); in intel_pasid_tear_down_entry()
278 clflush_cache_range(pte, sizeof(*pte)); in intel_pasid_tear_down_entry()
[all …]
/linux/arch/xtensa/include/asm/
H A Dpgtable.h235 # define pte_none(pte) (pte_val(pte) == (_PAGE_CA_INVALID | _PAGE_USER)) argument
237 # define pte_present(pte) ((pte_val(pte) & _PAGE_CA_MASK) != _PAGE_CA_INVALID) argument
239 # define pte_present(pte) \ argument
240 (((pte_val(pte) & _PAGE_CA_MASK) != _PAGE_CA_INVALID) \
241 || ((pte_val(pte) & _PAGE_ATTRIB_MASK) == _PAGE_NONE))
251 static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_WRITABLE; } in pte_write() argument
252 static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } in pte_dirty() argument
253 static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } in pte_young() argument
255 static inline pte_t pte_wrprotect(pte_t pte) in pte_wrprotect() argument
256 { pte_val(pte) &= ~(_PAGE_WRITABLE | _PAGE_HW_WRITE); return pte; } in pte_wrprotect()
[all …]
/linux/arch/powerpc/include/asm/book3s/32/
H A Dpgtable.h365 #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) >> 3 }) argument
368 static inline int pte_swp_exclusive(pte_t pte) in pte_swp_exclusive() argument
370 return pte_val(pte) & _PAGE_SWP_EXCLUSIVE; in pte_swp_exclusive()
373 static inline pte_t pte_swp_mkexclusive(pte_t pte) in pte_swp_mkexclusive() argument
375 return __pte(pte_val(pte) | _PAGE_SWP_EXCLUSIVE); in pte_swp_mkexclusive()
378 static inline pte_t pte_swp_clear_exclusive(pte_t pte) in pte_swp_clear_exclusive() argument
380 return __pte(pte_val(pte) & ~_PAGE_SWP_EXCLUSIVE); in pte_swp_clear_exclusive()
384 static inline bool pte_read(pte_t pte) in pte_read() argument
386 return !!(pte_val(pte) & _PAGE_READ); in pte_read()
389 static inline bool pte_write(pte_t pte) in pte_write() argument
[all …]
/linux/include/asm-generic/
H A Dhugetlb.h13 static inline unsigned long huge_pte_write(pte_t pte) in huge_pte_write() argument
15 return pte_write(pte); in huge_pte_write()
18 static inline unsigned long huge_pte_dirty(pte_t pte) in huge_pte_dirty() argument
20 return pte_dirty(pte); in huge_pte_dirty()
23 static inline pte_t huge_pte_mkwrite(pte_t pte) in huge_pte_mkwrite() argument
25 return pte_mkwrite_novma(pte); in huge_pte_mkwrite()
29 static inline pte_t huge_pte_wrprotect(pte_t pte) in huge_pte_wrprotect() argument
31 return pte_wrprotect(pte); in huge_pte_wrprotect()
35 static inline pte_t huge_pte_mkdirty(pte_t pte) in huge_pte_mkdirty() argument
37 return pte_mkdirty(pte); in huge_pte_mkdirty()
[all …]
/linux/arch/arm64/mm/
H A Dcontpte.c50 pte_t *ptep, pte_t pte) in contpte_convert() argument
59 pte = pfn_pte(ALIGN_DOWN(pte_pfn(pte), CONT_PTES), pte_pgprot(pte)); in contpte_convert()
65 pte = pte_mkdirty(pte); in contpte_convert()
68 pte = pte_mkyoung(pte); in contpte_convert()
73 __set_ptes(mm, start_addr, start_ptep, pte, CONT_PTES); in contpte_convert()
77 pte_t *ptep, pte_t pte) in __contpte_try_fold() argument
111 page = pte_page(pte); in __contpte_try_fold()
121 pfn = ALIGN_DOWN(pte_pfn(pte), CONT_PTES); in __contpte_try_fold()
122 prot = pte_pgprot(pte_mkold(pte_mkclean(pte))); in __contpte_try_fold()
135 pte = pte_mkcont(pte); in __contpte_try_fold()
[all …]
/linux/drivers/iommu/
H A Dio-pgtable-dart.c66 #define iopte_deref(pte, d) __va(iopte_to_paddr(pte, d)) argument
83 dart_iopte pte; in paddr_to_iopte() local
89 pte = paddr >> APPLE_DART2_PADDR_SHIFT; in paddr_to_iopte()
90 pte &= APPLE_DART2_PADDR_MASK; in paddr_to_iopte()
92 return pte; in paddr_to_iopte()
95 static phys_addr_t iopte_to_paddr(dart_iopte pte, in iopte_to_paddr() argument
101 return pte & APPLE_DART1_PADDR_MASK; in iopte_to_paddr()
104 paddr = pte & APPLE_DART2_PADDR_MASK; in iopte_to_paddr()
124 dart_iopte pte = prot; in dart_init_pte() local
135 pte |= FIELD_PREP(APPLE_DART_PTE_SUBPAGE_START, 0); in dart_init_pte()
[all …]
/linux/arch/x86/mm/pat/
H A Dcpa-test.c39 static int pte_testbit(pte_t pte) in pte_testbit() argument
41 return pte_flags(pte) & _PAGE_SOFTW1; in pte_testbit()
60 pte_t *pte; in print_split() local
62 pte = lookup_address(addr, &level); in print_split()
63 if (!pte) { in print_split()
73 if ((pte_val(*pte) & _PAGE_PRESENT) && !(pte_val(*pte) & _PAGE_PSE)) { in print_split()
76 addr, level, (u64)pte_val(*pte)); in print_split()
85 if (!(pte_val(*pte) & _PAGE_NX)) { in print_split()
121 pte_t *pte, pte0; in pageattr_test() local
148 pte = NULL; in pageattr_test()
[all …]
/linux/arch/powerpc/kvm/
H A Dbook3s_pr_papr.c92 unsigned long pte[2]; in kvmppc_h_pr_remove() local
98 if (copy_from_user(pte, (void __user *)pteg, sizeof(pte))) in kvmppc_h_pr_remove()
100 pte[0] = be64_to_cpu((__force __be64)pte[0]); in kvmppc_h_pr_remove()
101 pte[1] = be64_to_cpu((__force __be64)pte[1]); in kvmppc_h_pr_remove()
104 if ((pte[0] & HPTE_V_VALID) == 0 || in kvmppc_h_pr_remove()
105 ((flags & H_AVPN) && (pte[0] & ~0x7fUL) != avpn) || in kvmppc_h_pr_remove()
106 ((flags & H_ANDCOND) && (pte[0] & avpn) != 0)) in kvmppc_h_pr_remove()
113 rb = compute_tlbie_rb(pte[0], pte[1], pte_index); in kvmppc_h_pr_remove()
117 kvmppc_set_gpr(vcpu, 4, pte[0]); in kvmppc_h_pr_remove()
118 kvmppc_set_gpr(vcpu, 5, pte[1]); in kvmppc_h_pr_remove()
[all …]
/linux/arch/riscv/include/asm/
H A Dpgtable.h294 static inline unsigned long pte_napot(pte_t pte) in pte_napot() argument
296 return pte_val(pte) & _PAGE_NAPOT; in pte_napot()
299 static inline pte_t pte_mknapot(pte_t pte, unsigned int order) in pte_mknapot() argument
305 return __pte((pte_val(pte) & napot_mask) | napot_bit | _PAGE_NAPOT); in pte_mknapot()
312 static inline unsigned long pte_napot(pte_t pte) in pte_napot() argument
320 static inline unsigned long pte_pfn(pte_t pte) in pte_pfn() argument
322 unsigned long res = __page_val_to_pfn(pte_val(pte)); in pte_pfn()
324 if (has_svnapot() && pte_napot(pte)) in pte_pfn()
344 static inline int pte_present(pte_t pte) in pte_present() argument
346 return (pte_val(pte) & (_PAGE_PRESENT | _PAGE_PROT_NONE)); in pte_present()
[all …]
/linux/arch/loongarch/include/asm/
H A Dkvm_mmu.h26 typedef int (*kvm_pte_ops)(kvm_pte_t *pte, phys_addr_t addr, kvm_ptw_ctx *ctx);
55 static inline int kvm_pte_write(kvm_pte_t pte) { return pte & _PAGE_WRITE; } in kvm_pte_write() argument
56 static inline int kvm_pte_dirty(kvm_pte_t pte) { return pte & _PAGE_DIRTY; } in kvm_pte_dirty() argument
57 static inline int kvm_pte_young(kvm_pte_t pte) { return pte & _PAGE_ACCESSED; } in kvm_pte_young() argument
58 static inline int kvm_pte_huge(kvm_pte_t pte) { return pte & _PAGE_HUGE; } in kvm_pte_huge() argument
60 static inline kvm_pte_t kvm_pte_mkyoung(kvm_pte_t pte) in kvm_pte_mkyoung() argument
62 return pte | _PAGE_ACCESSED; in kvm_pte_mkyoung()
65 static inline kvm_pte_t kvm_pte_mkold(kvm_pte_t pte) in kvm_pte_mkold() argument
67 return pte & ~_PAGE_ACCESSED; in kvm_pte_mkold()
70 static inline kvm_pte_t kvm_pte_mkdirty(kvm_pte_t pte) in kvm_pte_mkdirty() argument
[all …]
/linux/arch/riscv/mm/
H A Dhugetlbpage.c18 pte_t pte = ptep_get(ptep); in huge_ptep_get() local
20 if (pte_dirty(pte)) in huge_ptep_get()
23 if (pte_young(pte)) in huge_ptep_get()
36 pte_t *pte = NULL; in huge_pte_alloc() local
52 pte = (pte_t *)pud; in huge_pte_alloc()
58 pte = huge_pmd_share(mm, vma, addr, pud); in huge_pte_alloc()
60 pte = (pte_t *)pmd_alloc(mm, pud, addr); in huge_pte_alloc()
70 pte = pte_alloc_huge(mm, pmd, addr & napot_cont_mask(order)); in huge_pte_alloc()
76 if (pte) { in huge_pte_alloc()
77 pte_t pteval = ptep_get_lockless(pte); in huge_pte_alloc()
[all …]

12345678910>>...15