Home
last modified time | relevance | path

Searched defs:pfn (Results 1 – 25 of 401) sorted by relevance

12345678910>>...17

/linux/arch/x86/xen/
H A Dp2m.c127 static inline unsigned p2m_top_index(unsigned long pfn) in p2m_top_index() argument
133 static inline unsigned p2m_mid_index(unsigned long pfn) in p2m_mid_index() argument
170 static void p2m_init_identity(unsigned long *p2m, unsigned long pfn) in p2m_init_identity() argument
209 unsigned long pfn, mfn; xen_build_mfn_list_list() local
287 unsigned long pfn; xen_build_dynamic_phys_to_machine() local
303 xen_p2m_elem_type(unsigned long pfn) xen_p2m_elem_type() argument
324 unsigned long pfn; xen_rebuild_p2m_list() local
425 get_phys_to_machine(unsigned long pfn) get_phys_to_machine() argument
521 xen_alloc_p2m_entry(unsigned long pfn) xen_alloc_p2m_entry() argument
622 unsigned long pfn; set_phys_range_identity() local
639 __set_phys_to_machine(unsigned long pfn,unsigned long mfn) __set_phys_to_machine() argument
667 set_phys_to_machine(unsigned long pfn,unsigned long mfn) set_phys_to_machine() argument
700 unsigned long mfn, pfn; set_foreign_p2m_mapping() local
777 unsigned long pfn = page_to_pfn(pages[i]); clear_foreign_p2m_mapping() local
810 unsigned long pfn, mfn, end_pfn; xen_do_remap_nonram() local
896 unsigned long pfn, first_pfn; p2m_dump_show() local
[all...]
H A Dmmu_pv.c380 unsigned long pfn = mfn_to_pfn(mfn); in pte_mfn_to_pfn() local
395 unsigned long pfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT; in pte_pfn_to_mfn() local
725 xen_do_pin(unsigned level,unsigned long pfn) xen_do_pin() argument
742 unsigned long pfn = page_to_pfn(page); xen_pin_page() local
872 unsigned long pfn = page_to_pfn(page); xen_unpin_page() local
1051 pin_pagetable_pfn(unsigned cmd,unsigned long pfn) pin_pagetable_pfn() argument
1509 unsigned long pfn; xen_make_pte_init() local
1530 xen_alloc_pte_init(struct mm_struct * mm,unsigned long pfn) xen_alloc_pte_init() argument
1540 xen_alloc_pmd_init(struct mm_struct * mm,unsigned long pfn) xen_alloc_pmd_init() argument
1550 xen_release_pte_init(unsigned long pfn) xen_release_pte_init() argument
1556 xen_release_pmd_init(unsigned long pfn) xen_release_pmd_init() argument
1561 __pin_pagetable_pfn(unsigned cmd,unsigned long pfn) __pin_pagetable_pfn() argument
1574 __set_pfn_prot(unsigned long pfn,pgprot_t prot) __set_pfn_prot() argument
1586 xen_alloc_ptpage(struct mm_struct * mm,unsigned long pfn,unsigned level) xen_alloc_ptpage() argument
1614 xen_alloc_pte(struct mm_struct * mm,unsigned long pfn) xen_alloc_pte() argument
1619 xen_alloc_pmd(struct mm_struct * mm,unsigned long pfn) xen_alloc_pmd() argument
1625 xen_release_ptpage(unsigned long pfn,unsigned level) xen_release_ptpage() argument
1646 xen_release_pte(unsigned long pfn) xen_release_pte() argument
1651 xen_release_pmd(unsigned long pfn) xen_release_pmd() argument
1656 xen_alloc_pud(struct mm_struct * mm,unsigned long pfn) xen_alloc_pud() argument
1661 xen_release_pud(unsigned long pfn) xen_release_pud() argument
1696 unsigned long pfn = __pa(addr) >> PAGE_SHIFT; set_page_prot_flags() local
1943 unsigned long p2m_pfn, p2m_pfn_end, n_frames, pfn, pfn_end; xen_relocate_p2m() local
2462 xen_pfn_t *pfn; global() member
2494 xen_remap_pfn(struct vm_area_struct * vma,unsigned long addr,xen_pfn_t * pfn,int nr,int * err_ptr,pgprot_t prot,unsigned int domid,bool no_translate) xen_remap_pfn() argument
[all...]
/linux/arch/x86/include/asm/
H A Dpgalloc.h22 static inline void paravirt_alloc_pte(struct mm_struct *mm, unsigned long pfn) {} in paravirt_alloc_pte() argument
23 static inline void paravirt_alloc_pmd(struct mm_struct *mm, unsigned long pfn) {} in paravirt_alloc_pmd() argument
24 static inline void paravirt_alloc_pmd_clone(unsigned long pfn, unsigned long clonepfn, in paravirt_alloc_pmd_clone() argument
26 static inline void paravirt_alloc_pud(struct mm_struct *mm, unsigned long pfn) {} in paravirt_alloc_pud() argument
27 static inline void paravirt_alloc_p4d(struct mm_struct *mm, unsigned long pfn) {} in paravirt_alloc_p4d() argument
28 static inline void paravirt_release_pte(unsigned long pfn) {} in paravirt_release_pte() argument
29 static inline void paravirt_release_pmd(unsigned long pfn) {} in paravirt_release_pmd() argument
30 static inline void paravirt_release_pud(unsigned long pfn) {} in paravirt_release_pud() argument
31 static inline void paravirt_release_p4d(unsigned long pfn) {} in paravirt_release_p4d() argument
79 unsigned long pfn in pmd_populate() local
[all...]
H A Dparavirt.h99 static inline void notify_page_enc_status_changed(unsigned long pfn, in notify_page_enc_status_changed() argument
331 static inline void paravirt_alloc_pte(struct mm_struct *mm, unsigned long pfn) in paravirt_alloc_pte() argument
335 static inline void paravirt_release_pte(unsigned long pfn) in paravirt_release_pte() argument
340 static inline void paravirt_alloc_pmd(struct mm_struct *mm, unsigned long pfn) in paravirt_alloc_pmd() argument
345 static inline void paravirt_release_pmd(unsigned long pfn) in paravirt_release_pmd() argument
350 paravirt_alloc_pud(struct mm_struct * mm,unsigned long pfn) paravirt_alloc_pud() argument
354 paravirt_release_pud(unsigned long pfn) paravirt_release_pud() argument
359 paravirt_alloc_p4d(struct mm_struct * mm,unsigned long pfn) paravirt_alloc_p4d() argument
364 paravirt_release_p4d(unsigned long pfn) paravirt_release_p4d() argument
[all...]
/linux/include/asm-generic/
H A Dmemory_model.h18 #define __pfn_to_page(pfn) (mem_map + ((pfn) - ARCH_PFN_OFFSET)) argument
26 static inline int pfn_valid(unsigned long pfn) in pfn_valid() argument
35 #define for_each_valid_pfn(pfn, start_pfn, end_pfn) \ argument
46 __pfn_to_page(pfn) global() argument
60 __pfn_to_page(pfn) global() argument
71 __pfn_to_phys(pfn) global() argument
[all...]
/linux/arch/riscv/include/asm/
H A Dpgalloc.h21 unsigned long pfn = virt_to_pfn(pte); in pmd_populate_kernel() local
29 unsigned long pfn = virt_to_pfn(page_address(pte)); in pmd_populate() local
37 unsigned long pfn = virt_to_pfn(pmd); in pud_populate() local
45 unsigned long pfn = virt_to_pfn(pud); in p4d_populate() local
55 unsigned long pfn = virt_to_pfn(pud); in p4d_populate_safe() local
65 unsigned long pfn = virt_to_pfn(p4d); pgd_populate() local
75 unsigned long pfn = virt_to_pfn(p4d); pgd_populate_safe() local
[all...]
/linux/mm/
H A Dsparse.c179 static void subsection_mask_set(unsigned long *map, unsigned long pfn, in subsection_mask_set() argument
188 void __init subsection_map_init(unsigned long pfn, unsigned long nr_pages) in subsection_map_init() argument
211 subsection_map_init(unsigned long pfn,unsigned long nr_pages) subsection_map_init() argument
219 unsigned long pfn; memory_present() local
417 __populate_section_memmap(unsigned long pfn,unsigned long nr_pages,int nid,struct vmem_altmap * altmap,struct dev_pagemap * pgmap) __populate_section_memmap() argument
553 unsigned long pfn = section_nr_to_pfn(pnum); sparse_init_nid() local
633 unsigned long pfn; online_mem_sections() local
651 unsigned long pfn; offline_mem_sections() local
670 populate_section_memmap(unsigned long pfn,unsigned long nr_pages,int nid,struct vmem_altmap * altmap,struct dev_pagemap * pgmap) populate_section_memmap() argument
677 depopulate_section_memmap(unsigned long pfn,unsigned long nr_pages,struct vmem_altmap * altmap) depopulate_section_memmap() argument
694 clear_subsection_map(unsigned long pfn,unsigned long nr_pages) clear_subsection_map() argument
721 fill_subsection_map(unsigned long pfn,unsigned long nr_pages) fill_subsection_map() argument
743 populate_section_memmap(unsigned long pfn,unsigned long nr_pages,int nid,struct vmem_altmap * altmap,struct dev_pagemap * pgmap) populate_section_memmap() argument
751 depopulate_section_memmap(unsigned long pfn,unsigned long nr_pages,struct vmem_altmap * altmap) depopulate_section_memmap() argument
787 clear_subsection_map(unsigned long pfn,unsigned long nr_pages) clear_subsection_map() argument
797 fill_subsection_map(unsigned long pfn,unsigned long nr_pages) fill_subsection_map() argument
819 section_deactivate(unsigned long pfn,unsigned long nr_pages,struct vmem_altmap * altmap) section_deactivate() argument
868 section_activate(int nid,unsigned long pfn,unsigned long nr_pages,struct vmem_altmap * altmap,struct dev_pagemap * pgmap) section_activate() argument
966 sparse_remove_section(unsigned long pfn,unsigned long nr_pages,struct vmem_altmap * altmap) sparse_remove_section() argument
[all...]
H A Dpage_ext.c170 unsigned long pfn = page_to_pfn(page); in lookup_page_ext() local
250 unsigned long pfn = page_to_pfn(page); in lookup_page_ext() local
283 static int __meminit init_section_page_ext(unsigned long pfn, int nid) in init_section_page_ext() argument
337 __free_page_ext(unsigned long pfn) __free_page_ext() argument
359 __invalidate_page_ext(unsigned long pfn) __invalidate_page_ext() argument
375 unsigned long start, end, pfn; online_page_ext() local
397 unsigned long start, end, pfn; offline_page_ext() local
450 unsigned long pfn; page_ext_init() local
507 page_ext_lookup(unsigned long pfn) page_ext_lookup() argument
[all...]
H A Dmemory-failure.c79 void num_poisoned_pages_inc(unsigned long pfn) in num_poisoned_pages_inc() argument
85 void num_poisoned_pages_sub(unsigned long pfn, long i) in num_poisoned_pages_sub() argument
350 static int kill_proc(struct to_kill *tk, unsigned long pfn, int flags) in kill_proc() argument
527 unsigned long pfn, int flags) in kill_procs() argument
745 unsigned long pfn; global() member
758 unsigned long pfn = 0; check_hwpoisoned_entry() local
781 unsigned long pfn; check_hwpoisoned_pmd_entry() local
875 kill_accessing_process(struct task_struct * p,unsigned long pfn,int flags) kill_accessing_process() argument
986 truncate_error_folio(struct folio * folio,unsigned long pfn,struct address_space * mapping) truncate_error_folio() argument
1302 update_per_node_mf_stats(unsigned long pfn,enum mf_result result) update_per_node_mf_stats() argument
1339 action_result(unsigned long pfn,enum mf_action_page_type type,enum mf_result result) action_result() argument
1355 page_action(struct page_state * ps,struct page * p,unsigned long pfn) page_action() argument
1574 unmap_poisoned_folio(struct folio * folio,unsigned long pfn,bool must_kill) unmap_poisoned_folio() argument
1631 hwpoison_user_mappings(struct folio * folio,struct page * p,unsigned long pfn,int flags) hwpoison_user_mappings() argument
1691 identify_page_state(unsigned long pfn,struct page * p,unsigned long page_flags) identify_page_state() argument
1733 unmap_and_kill(struct list_head * to_kill,unsigned long pfn,struct address_space * mapping,pgoff_t index,int flags) unmap_and_kill() argument
1767 mf_generic_kill_procs(unsigned long long pfn,int flags,struct dev_pagemap * pgmap) mf_generic_kill_procs() argument
2021 __get_huge_page_for_hwpoison(unsigned long pfn,int flags,bool * migratable_cleared) __get_huge_page_for_hwpoison() argument
2074 try_memory_failure_hugetlb(unsigned long pfn,int flags,int * hugetlb) try_memory_failure_hugetlb() argument
2143 try_memory_failure_hugetlb(unsigned long pfn,int flags,int * hugetlb) try_memory_failure_hugetlb() argument
2155 put_ref_page(unsigned long pfn,int flags) put_ref_page() argument
2163 memory_failure_dev_pagemap(unsigned long pfn,int flags,struct dev_pagemap * pgmap) memory_failure_dev_pagemap() argument
2202 kill_procs_now(struct page * p,unsigned long pfn,int flags,struct folio * folio) kill_procs_now() argument
2236 memory_failure(unsigned long pfn,int flags) memory_failure() argument
2443 unsigned long pfn; global() member
2472 memory_failure_queue(unsigned long pfn,int flags) memory_failure_queue() argument
2536 unpoison_pr_info(fmt,pfn,rs) global() argument
2554 unpoison_memory(unsigned long pfn) unpoison_memory() argument
2671 unsigned long pfn = page_to_pfn(page); soft_offline_in_use_page() local
2776 soft_offline_page(unsigned long pfn,int flags) soft_offline_page() argument
[all...]
H A Dpage_isolation.c38 unsigned long pfn; in has_unmovable_pages() local
276 __first_valid_page(unsigned long pfn, unsigned long nr_pages) in __first_valid_page() argument
319 unsigned long pfn; isolate_single_pageblock() local
478 unsigned long pfn; start_isolate_page_range() local
527 unsigned long pfn; undo_isolate_page_range() local
549 __test_page_isolated_in_pageblock(unsigned long pfn,unsigned long end_pfn,enum pb_isolate_mode mode) __test_page_isolated_in_pageblock() argument
600 unsigned long pfn, flags; test_pages_isolated() local
[all...]
H A Dmemory_hotplug.c319 static int check_pfn_span(unsigned long pfn, unsigned long nr_pages) in check_pfn_span() argument
346 struct page *pfn_to_online_page(unsigned long pfn) in pfn_to_online_page() argument
389 __add_pages(int nid,unsigned long pfn,unsigned long nr_pages,struct mhp_params * params) __add_pages() argument
459 unsigned long pfn; find_biggest_section_pfn() local
482 unsigned long pfn; shrink_zone_span() local
553 unsigned long pfn, cur_nr_pages; remove_pfn_range_from_zone() local
593 __remove_pages(unsigned long pfn,unsigned long nr_pages,struct vmem_altmap * altmap) __remove_pages() argument
661 unsigned long pfn; online_pages_range() local
727 section_taint_zone_device(unsigned long pfn) section_taint_zone_device() argument
734 section_taint_zone_device(unsigned long pfn) section_taint_zone_device() argument
966 auto_movable_zone_for_pfn(int nid,struct memory_group * group,unsigned long pfn,unsigned long nr_pages) auto_movable_zone_for_pfn() argument
1090 mhp_init_memmap_on_memory(unsigned long pfn,unsigned long nr_pages,struct zone * zone,bool mhp_off_inaccessible) mhp_init_memmap_on_memory() argument
1130 mhp_deinit_memmap_on_memory(unsigned long pfn,unsigned long nr_pages) mhp_deinit_memmap_on_memory() argument
1153 online_pages(unsigned long pfn,unsigned long nr_pages,struct zone * zone,struct memory_group * group) online_pages() argument
1755 unsigned long pfn; scan_movable_pages() local
1797 unsigned long pfn; do_migrate_range() local
1900 unsigned long pfn, managed_pages, system_ram_pages = 0; offline_pages() local
[all...]
H A Dmm_init.c581 void __meminit __init_single_page(struct page *page, unsigned long pfn, in __init_single_page() argument
616 static int __meminit __early_pfn_to_nid(unsigned long pfn, in __early_pfn_to_nid() argument
635 int __meminit early_pfn_to_nid(unsigned long pfn) in early_pfn_to_nid() argument
672 __init_page_from_nid(unsigned long pfn,int nid) __init_page_from_nid() argument
699 early_page_initialised(unsigned long pfn,int nid) early_page_initialised() argument
712 defer_init(int nid,unsigned long pfn,unsigned long end_pfn) defer_init() argument
748 __init_deferred_page(unsigned long pfn,int nid) __init_deferred_page() argument
758 early_page_initialised(unsigned long pfn,int nid) early_page_initialised() argument
763 defer_init(int nid,unsigned long pfn,unsigned long end_pfn) defer_init() argument
768 __init_deferred_page(unsigned long pfn,int nid) __init_deferred_page() argument
773 init_deferred_page(unsigned long pfn,int nid) init_deferred_page() argument
787 unsigned long pfn; reserve_bootmem_region() local
805 overlap_memmap_init(unsigned long zone,unsigned long * pfn) overlap_memmap_init() argument
852 unsigned long pfn; init_unavailable_range() local
881 unsigned long pfn, end_pfn = start_pfn + size; memmap_init_range() local
1007 __init_zone_device_page(struct page * page,unsigned long pfn,unsigned long zone_idx,int nid,struct dev_pagemap * pgmap) __init_zone_device_page() argument
1091 unsigned long pfn, end_pfn = head_pfn + nr_pages; memmap_init_compound() local
1117 unsigned long pfn, end_pfn = start_pfn + nr_pages; memmap_init_zone_device() local
1989 deferred_free_pages(unsigned long pfn,unsigned long nr_pages) deferred_free_pages() argument
2036 deferred_init_pages(struct zone * zone,unsigned long pfn,unsigned long end_pfn) deferred_init_pages() argument
2551 memblock_free_pages(struct page * page,unsigned long pfn,unsigned int order) memblock_free_pages() argument
[all...]
H A Dpage_idle.c34 static struct folio *page_idle_get_folio(unsigned long pfn) in page_idle_get_folio() argument
125 unsigned long pfn, end_pfn; in page_idle_bitmap_read() local
170 unsigned long pfn, end_pfn; page_idle_bitmap_write() local
[all...]
/linux/arch/arm/mm/
H A Dflush.c38 static void flush_pfn_alias(unsigned long pfn, unsigned long vaddr) in flush_pfn_alias() argument
52 static void flush_icache_alias(unsigned long pfn, unsigned long vaddr, unsigned long len) in flush_icache_alias() argument
98 void flush_cache_pages(struct vm_area_struct *vma, unsigned long user_addr, unsigned long pfn, unsigned int nr) in flush_cache_pages() argument
115 #define flush_pfn_alias(pfn,vaddr) do { } while (0) argument
116 #define flush_icache_alias(pfn,vaddr,len) do { } while (0) argument
255 unsigned long start, offset, pfn; in __flush_dcache_aliases() local
287 unsigned long pfn; __sync_icache_dcache() local
384 unsigned long pfn; __flush_anon_page() local
[all...]
H A Dfault-armv.c37 unsigned long pfn, pte_t *ptep) in do_adjust_pte() argument
65 unsigned long pfn, bool need_lock) in adjust_pte() argument
125 unsigned long addr, pte_t *ptep, unsigned long pfn) in make_coherent() argument
190 unsigned long pfn in update_mmu_cache_range() local
[all...]
/linux/include/linux/
H A Dpageblock-flags.h78 #define pageblock_align(pfn) ALIGN((pfn), pageblock_nr_pages) argument
79 #define pageblock_aligned(pfn) IS_ALIGNED((pfn), pageblock_nr_pages) argument
80 #define pageblock_start_pfn(pfn) ALIGN_DOWN((pfn), pageblock_nr_pages) argument
81 #define pageblock_end_pfn(pfn) ALIGN((pfn) + 1, pageblock_nr_pages) argument
[all...]
/linux/include/xen/arm/
H A Dpage.h15 #define phys_to_machine_mapping_valid(pfn) (1) argument
47 static inline unsigned long pfn_to_gfn(unsigned long pfn) in pfn_to_gfn() argument
58 static inline unsigned long pfn_to_bfn(unsigned long pfn) in pfn_to_bfn() argument
107 set_phys_to_machine(unsigned long pfn,unsigned long mfn) set_phys_to_machine() argument
[all...]
/linux/scripts/gdb/linux/
H A Dmm.py138 def pfn_to_section_nr(self, pfn): argument
144 def __pfn_to_section(self, pfn): argument
147 def pfn_to_section(self, pfn): argument
150 def subsection_map_index(self, pfn): argument
153 def pfn_section_valid(self, ms, pfn): argument
170 pfn_valid(self, pfn) global() argument
221 PFN_PHYS(self, pfn) global() argument
233 __pfn_to_phys(self, pfn) global() argument
251 pfn_to_kaddr(self, pfn) global() argument
266 pfn_to_page(self, pfn) global() argument
[all...]
/linux/arch/x86/kernel/
H A Dcrash_dump_64.c15 static ssize_t __copy_oldmem_page(struct iov_iter *iter, unsigned long pfn, in __copy_oldmem_page() argument
38 ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn, size_t csize, in copy_oldmem_page() argument
49 ssize_t copy_oldmem_page_encrypted(struct iov_iter *iter, unsigned long pfn, in copy_oldmem_page_encrypted() argument
H A Dcrash_dump_32.c15 static inline bool is_crashed_pfn_valid(unsigned long pfn) in is_crashed_pfn_valid() argument
31 ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn, size_t csize, in copy_oldmem_page() argument
/linux/arch/x86/virt/svm/
H A Dsev.c672 static struct rmpentry_raw *get_raw_rmpentry(u64 pfn) in get_raw_rmpentry() argument
701 static int get_rmpentry(u64 pfn, struct rmpentry *e) in get_rmpentry() argument
737 static int __snp_lookup_rmpentry(u64 pfn, struct rmpentry *e, int *level) in __snp_lookup_rmpentry() argument
763 int snp_lookup_rmpentry(u64 pfn, boo argument
783 dump_rmpentry(u64 pfn) dump_rmpentry() argument
863 psmash(u64 pfn) psmash() argument
910 adjust_direct_map(u64 pfn,int rmp_level) adjust_direct_map() argument
972 rmpupdate(u64 pfn,struct rmp_state * state) rmpupdate() argument
1005 rmp_make_private(u64 pfn,u64 gpa,enum pg_level level,u32 asid,bool immutable) rmp_make_private() argument
1021 rmp_make_shared(u64 pfn,enum pg_level level) rmp_make_shared() argument
1032 snp_leak_pages(u64 pfn,unsigned int npages) snp_leak_pages() argument
[all...]
/linux/arch/arm/xen/
H A Dp2m.c23 unsigned long pfn; member
64 unsigned long __pfn_to_mfn(unsigned long pfn) in __pfn_to_mfn() argument
150 __set_phys_to_machine_multi(unsigned long pfn,unsigned long mfn,unsigned long nr_pages) __set_phys_to_machine_multi() argument
199 __set_phys_to_machine(unsigned long pfn,unsigned long mfn) __set_phys_to_machine() argument
[all...]
/linux/arch/sh/include/asm/
H A Dmmzone.h8 static inline int pfn_to_nid(unsigned long pfn) in pfn_to_nid() argument
19 static inline struct pglist_data *pfn_to_pgdat(unsigned long pfn) in pfn_to_pgdat() argument
/linux/arch/arm64/kernel/
H A Dhibernate.c91 int pfn_is_nosave(unsigned long pfn) in pfn_is_nosave() argument
220 static int save_tags(struct page *page, unsigned long pfn) in save_tags() argument
258 unsigned long pfn, max_zone_pfn; in swsusp_mte_save_tags() local
305 unsigned long pfn = xa_state.xa_index; swsusp_mte_restore_tags() local
[all...]
/linux/fs/proc/
H A Dkcore.c79 int __init register_mem_pfn_is_ram(int (*fn)(unsigned long pfn)) in register_mem_pfn_is_ram() argument
87 static int pfn_is_ram(unsigned long pfn) in pfn_is_ram() argument
163 unsigned long pfn = __pa(ent->addr) >> PAGE_SHIFT; in get_sparsemem_vmemmap_info() local
202 kclist_add_private(unsigned long pfn, unsigned long nr_pages, void *arg) in kclist_add_private() argument
487 unsigned long pfn; read_kcore_iter() local
[all...]

12345678910>>...17