Home
last modified time | relevance | path

Searched defs:vm (Results 1 – 25 of 237) sorted by relevance

12345678910

/Linux-v5.15/tools/testing/selftests/kvm/lib/
Dkvm_util.c105 int vm_enable_cap(struct kvm_vm *vm, struct kvm_enable_cap *cap) in vm_enable_cap()
129 int vcpu_enable_cap(struct kvm_vm *vm, uint32_t vcpu_id, in vcpu_enable_cap()
144 void vm_enable_dirty_ring(struct kvm_vm *vm, uint32_t ring_size) in vm_enable_dirty_ring()
154 static void vm_open(struct kvm_vm *vm, int perm) in vm_open()
224 struct kvm_vm *vm; in vm_create() local
349 struct kvm_vm *vm; in vm_create_with_vcpus() local
438 void kvm_vm_get_dirty_log(struct kvm_vm *vm, int slot, void *log) in kvm_vm_get_dirty_log()
448 void kvm_vm_clear_dirty_log(struct kvm_vm *vm, int slot, void *log, in kvm_vm_clear_dirty_log()
461 uint32_t kvm_vm_reset_dirty_ring(struct kvm_vm *vm) in kvm_vm_reset_dirty_ring()
486 userspace_mem_region_find(struct kvm_vm *vm, uint64_t start, uint64_t end) in userspace_mem_region_find()
[all …]
/Linux-v5.15/tools/testing/selftests/kvm/lib/aarch64/
Dprocessor.c19 static uint64_t page_align(struct kvm_vm *vm, uint64_t v) in page_align()
24 static uint64_t pgd_index(struct kvm_vm *vm, vm_vaddr_t gva) in pgd_index()
32 static uint64_t pud_index(struct kvm_vm *vm, vm_vaddr_t gva) in pud_index()
43 static uint64_t pmd_index(struct kvm_vm *vm, vm_vaddr_t gva) in pmd_index()
54 static uint64_t pte_index(struct kvm_vm *vm, vm_vaddr_t gva) in pte_index()
60 static uint64_t pte_addr(struct kvm_vm *vm, uint64_t entry) in pte_addr()
66 static uint64_t ptrs_per_pgd(struct kvm_vm *vm) in ptrs_per_pgd()
72 static uint64_t __maybe_unused ptrs_per_pte(struct kvm_vm *vm) in ptrs_per_pte()
77 void virt_pgd_alloc(struct kvm_vm *vm) in virt_pgd_alloc()
88 static void _virt_pg_map(struct kvm_vm *vm, uint64_t vaddr, uint64_t paddr, in _virt_pg_map()
[all …]
/Linux-v5.15/drivers/virtio/
Dvirtio_mem.c268 static int register_virtio_mem_device(struct virtio_mem *vm) in register_virtio_mem_device()
287 static void unregister_virtio_mem_device(struct virtio_mem *vm) in unregister_virtio_mem_device()
318 static unsigned long virtio_mem_phys_to_bb_id(struct virtio_mem *vm, in virtio_mem_phys_to_bb_id()
327 static uint64_t virtio_mem_bb_id_to_phys(struct virtio_mem *vm, in virtio_mem_bb_id_to_phys()
336 static unsigned long virtio_mem_phys_to_sb_id(struct virtio_mem *vm, in virtio_mem_phys_to_sb_id()
348 static void virtio_mem_bbm_set_bb_state(struct virtio_mem *vm, in virtio_mem_bbm_set_bb_state()
366 static enum virtio_mem_bbm_bb_state virtio_mem_bbm_get_bb_state(struct virtio_mem *vm, in virtio_mem_bbm_get_bb_state()
375 static int virtio_mem_bbm_bb_states_prepare_next_bb(struct virtio_mem *vm) in virtio_mem_bbm_bb_states_prepare_next_bb()
415 static void virtio_mem_sbm_set_mb_state(struct virtio_mem *vm, in virtio_mem_sbm_set_mb_state()
432 static uint8_t virtio_mem_sbm_get_mb_state(struct virtio_mem *vm, in virtio_mem_sbm_get_mb_state()
[all …]
/Linux-v5.15/drivers/gpu/drm/i915/gt/
Dintel_gtt.c15 struct drm_i915_gem_object *alloc_pt_lmem(struct i915_address_space *vm, int sz) in alloc_pt_lmem()
45 struct drm_i915_gem_object *alloc_pt_dma(struct i915_address_space *vm, int sz) in alloc_pt_dma()
66 int map_pt_dma(struct i915_address_space *vm, struct drm_i915_gem_object *obj) in map_pt_dma()
80 int map_pt_dma_locked(struct i915_address_space *vm, struct drm_i915_gem_object *obj) in map_pt_dma_locked()
94 void __i915_vm_close(struct i915_address_space *vm) in __i915_vm_close()
120 int i915_vm_lock_objects(struct i915_address_space *vm, in i915_vm_lock_objects()
133 void i915_address_space_fini(struct i915_address_space *vm) in i915_address_space_fini()
148 struct i915_address_space *vm = in i915_vm_resv_release() local
157 struct i915_address_space *vm = in __i915_vm_release() local
168 struct i915_address_space *vm = in i915_vm_release() local
[all …]
Dgen8_ppgtt.c150 static unsigned int gen8_pd_top_count(const struct i915_address_space *vm) in gen8_pd_top_count()
158 gen8_pdp_for_page_index(struct i915_address_space * const vm, const u64 idx) in gen8_pdp_for_page_index()
169 gen8_pdp_for_page_address(struct i915_address_space * const vm, const u64 addr) in gen8_pdp_for_page_address()
174 static void __gen8_ppgtt_cleanup(struct i915_address_space *vm, in __gen8_ppgtt_cleanup()
192 static void gen8_ppgtt_cleanup(struct i915_address_space *vm) in gen8_ppgtt_cleanup()
203 static u64 __gen8_ppgtt_clear(struct i915_address_space * const vm, in __gen8_ppgtt_clear()
261 static void gen8_ppgtt_clear(struct i915_address_space *vm, in gen8_ppgtt_clear()
276 static void __gen8_ppgtt_alloc(struct i915_address_space * const vm, in __gen8_ppgtt_alloc()
345 static void gen8_ppgtt_alloc(struct i915_address_space *vm, in gen8_ppgtt_alloc()
361 static void __gen8_ppgtt_foreach(struct i915_address_space *vm, in __gen8_ppgtt_foreach()
[all …]
Dintel_ppgtt.c15 struct i915_page_table *alloc_pt(struct i915_address_space *vm) in alloc_pt()
51 struct i915_page_directory *alloc_pd(struct i915_address_space *vm) in alloc_pd()
69 void free_px(struct i915_address_space *vm, struct i915_page_table *pt, int lvl) in free_px()
179 void ppgtt_bind_vma(struct i915_address_space *vm, in ppgtt_bind_vma()
203 void ppgtt_unbind_vma(struct i915_address_space *vm, struct i915_vma *vma) in ppgtt_unbind_vma()
215 int i915_vm_alloc_pt_stash(struct i915_address_space *vm, in i915_vm_alloc_pt_stash()
260 int i915_vm_map_pt_stash(struct i915_address_space *vm, in i915_vm_map_pt_stash()
277 void i915_vm_free_pt_stash(struct i915_address_space *vm, in i915_vm_free_pt_stash()
Dintel_ggtt.c208 static void gen8_ggtt_insert_page(struct i915_address_space *vm, in gen8_ggtt_insert_page()
223 static void gen8_ggtt_insert_entries(struct i915_address_space *vm, in gen8_ggtt_insert_entries()
259 static void gen6_ggtt_insert_page(struct i915_address_space *vm, in gen6_ggtt_insert_page()
280 static void gen6_ggtt_insert_entries(struct i915_address_space *vm, in gen6_ggtt_insert_entries()
310 static void nop_clear_range(struct i915_address_space *vm, in nop_clear_range()
315 static void gen8_ggtt_clear_range(struct i915_address_space *vm, in gen8_ggtt_clear_range()
336 static void bxt_vtd_ggtt_wa(struct i915_address_space *vm) in bxt_vtd_ggtt_wa()
349 struct i915_address_space *vm; member
365 static void bxt_vtd_ggtt_insert_page__BKL(struct i915_address_space *vm, in bxt_vtd_ggtt_insert_page__BKL()
377 struct i915_address_space *vm; member
[all …]
Dintel_gtt.h310 struct i915_address_space vm; member
353 struct i915_address_space vm; member
358 #define i915_is_ggtt(vm) ((vm)->is_ggtt) argument
359 #define i915_is_dpt(vm) ((vm)->is_dpt) argument
360 #define i915_is_ggtt_or_dpt(vm) (i915_is_ggtt(vm) || i915_is_dpt(vm)) argument
366 i915_vm_is_4lvl(const struct i915_address_space *vm) in i915_vm_is_4lvl()
372 i915_vm_has_scratch_64K(struct i915_address_space *vm) in i915_vm_has_scratch_64K()
378 i915_vm_has_cache_coloring(struct i915_address_space *vm) in i915_vm_has_cache_coloring()
384 i915_vm_to_ggtt(struct i915_address_space *vm) in i915_vm_to_ggtt()
392 i915_vm_to_ppgtt(struct i915_address_space *vm) in i915_vm_to_ppgtt()
[all …]
/Linux-v5.15/tools/testing/selftests/kvm/lib/s390x/
Dprocessor.c14 void virt_pgd_alloc(struct kvm_vm *vm) in virt_pgd_alloc()
37 static uint64_t virt_alloc_region(struct kvm_vm *vm, int ri) in virt_alloc_region()
50 void virt_pg_map(struct kvm_vm *vm, uint64_t gva, uint64_t gpa) in virt_pg_map()
89 vm_paddr_t addr_gva2gpa(struct kvm_vm *vm, vm_vaddr_t gva) in addr_gva2gpa()
114 static void virt_dump_ptes(FILE *stream, struct kvm_vm *vm, uint8_t indent, in virt_dump_ptes()
128 static void virt_dump_region(FILE *stream, struct kvm_vm *vm, uint8_t indent, in virt_dump_region()
150 void virt_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent) in virt_dump()
158 void vm_vcpu_add_default(struct kvm_vm *vm, uint32_t vcpuid, void *guest_code) in vm_vcpu_add_default()
189 void vcpu_args_set(struct kvm_vm *vm, uint32_t vcpuid, unsigned int num, ...) in vcpu_args_set()
209 void vcpu_dump(FILE *stream, struct kvm_vm *vm, uint32_t vcpuid, uint8_t indent) in vcpu_dump()
[all …]
/Linux-v5.15/drivers/gpu/drm/i915/selftests/
Dmock_gtt.c27 static void mock_insert_page(struct i915_address_space *vm, in mock_insert_page()
35 static void mock_insert_entries(struct i915_address_space *vm, in mock_insert_entries()
41 static void mock_bind_ppgtt(struct i915_address_space *vm, in mock_bind_ppgtt()
51 static void mock_unbind_ppgtt(struct i915_address_space *vm, in mock_unbind_ppgtt()
56 static void mock_cleanup(struct i915_address_space *vm) in mock_cleanup()
60 static void mock_clear_range(struct i915_address_space *vm, in mock_clear_range()
95 static void mock_bind_ggtt(struct i915_address_space *vm, in mock_bind_ggtt()
103 static void mock_unbind_ggtt(struct i915_address_space *vm, in mock_unbind_ggtt()
/Linux-v5.15/drivers/gpu/drm/amd/amdgpu/
Damdgpu_vm.c102 int amdgpu_vm_set_pasid(struct amdgpu_device *adev, struct amdgpu_vm *vm, in amdgpu_vm_set_pasid()
136 static inline void amdgpu_vm_eviction_lock(struct amdgpu_vm *vm) in amdgpu_vm_eviction_lock()
142 static inline int amdgpu_vm_eviction_trylock(struct amdgpu_vm *vm) in amdgpu_vm_eviction_trylock()
151 static inline void amdgpu_vm_eviction_unlock(struct amdgpu_vm *vm) in amdgpu_vm_eviction_unlock()
269 struct amdgpu_vm *vm = vm_bo->vm; in amdgpu_vm_bo_evicted() local
362 struct amdgpu_vm *vm, in amdgpu_vm_bo_base_init()
435 struct amdgpu_vm *vm, uint64_t start, in amdgpu_vm_pt_start()
561 struct amdgpu_vm *vm, in amdgpu_vm_pt_first_dfs()
612 #define for_each_amdgpu_vm_pt_dfs_safe(adev, vm, start, cursor, entry) \ argument
628 void amdgpu_vm_get_pd_bo(struct amdgpu_vm *vm, in amdgpu_vm_get_pd_bo()
[all …]
/Linux-v5.15/tools/testing/selftests/kvm/x86_64/
Duserspace_msr_exit_test.c398 static void run_guest(struct kvm_vm *vm) in run_guest()
406 static void check_for_guest_assert(struct kvm_vm *vm) in check_for_guest_assert()
418 static void process_rdmsr(struct kvm_vm *vm, uint32_t msr_index) in process_rdmsr()
453 static void process_wrmsr(struct kvm_vm *vm, uint32_t msr_index) in process_wrmsr()
484 static void process_ucall_done(struct kvm_vm *vm) in process_ucall_done()
501 static uint64_t process_ucall(struct kvm_vm *vm) in process_ucall()
529 static void run_guest_then_process_rdmsr(struct kvm_vm *vm, uint32_t msr_index) in run_guest_then_process_rdmsr()
535 static void run_guest_then_process_wrmsr(struct kvm_vm *vm, uint32_t msr_index) in run_guest_then_process_wrmsr()
541 static uint64_t run_guest_then_process_ucall(struct kvm_vm *vm) in run_guest_then_process_ucall()
547 static void run_guest_then_process_ucall_done(struct kvm_vm *vm) in run_guest_then_process_ucall_done()
[all …]
Dvmx_set_nested_state_test.c30 void test_nested_state(struct kvm_vm *vm, struct kvm_nested_state *state) in test_nested_state()
35 void test_nested_state_expect_errno(struct kvm_vm *vm, in test_nested_state_expect_errno()
48 void test_nested_state_expect_einval(struct kvm_vm *vm, in test_nested_state_expect_einval()
54 void test_nested_state_expect_efault(struct kvm_vm *vm, in test_nested_state_expect_efault()
89 void test_vmx_nested_state(struct kvm_vm *vm) in test_vmx_nested_state()
247 void disable_vmx(struct kvm_vm *vm) in disable_vmx()
265 struct kvm_vm *vm; in main() local
Dset_boot_cpu_id.c41 static void test_set_boot_busy(struct kvm_vm *vm) in test_set_boot_busy()
50 static void run_vcpu(struct kvm_vm *vm, uint32_t vcpuid) in run_vcpu()
85 struct kvm_vm *vm; in create_vm() local
99 static void add_x86_vcpu(struct kvm_vm *vm, uint32_t vcpuid, bool bsp_code) in add_x86_vcpu()
109 struct kvm_vm *vm; in run_vm_bsp() local
128 struct kvm_vm *vm; in check_set_bsp_busy() local
Demulator_error_test.c31 static void run_guest(struct kvm_vm *vm) in run_guest()
60 static void process_exit_on_emulation_error(struct kvm_vm *vm) in process_exit_on_emulation_error()
103 static void do_guest_assert(struct kvm_vm *vm, struct ucall *uc) in do_guest_assert()
109 static void check_for_guest_assert(struct kvm_vm *vm) in check_for_guest_assert()
120 static void process_ucall_done(struct kvm_vm *vm) in process_ucall_done()
137 static uint64_t process_ucall(struct kvm_vm *vm) in process_ucall()
171 struct kvm_vm *vm; in main() local
Dplatform_info_test.c38 static void set_msr_platform_info_enabled(struct kvm_vm *vm, bool enable) in set_msr_platform_info_enabled()
48 static void test_msr_platform_info_enabled(struct kvm_vm *vm) in test_msr_platform_info_enabled()
68 static void test_msr_platform_info_disabled(struct kvm_vm *vm) in test_msr_platform_info_disabled()
82 struct kvm_vm *vm; in main() local
/Linux-v5.15/drivers/virt/acrn/
Dirqfd.c33 struct acrn_vm *vm; member
44 struct acrn_vm *vm = irqfd->vm; in acrn_irqfd_inject() local
66 struct acrn_vm *vm; in hsm_irqfd_shutdown_work() local
82 struct acrn_vm *vm; in hsm_irqfd_wakeup() local
111 static int acrn_irqfd_assign(struct acrn_vm *vm, struct acrn_irqfd *args) in acrn_irqfd_assign()
178 static int acrn_irqfd_deassign(struct acrn_vm *vm, in acrn_irqfd_deassign()
201 int acrn_irqfd_config(struct acrn_vm *vm, struct acrn_irqfd *args) in acrn_irqfd_config()
213 int acrn_irqfd_init(struct acrn_vm *vm) in acrn_irqfd_init()
225 void acrn_irqfd_deinit(struct acrn_vm *vm) in acrn_irqfd_deinit()
Dioeventfd.c43 static void acrn_ioeventfd_shutdown(struct acrn_vm *vm, struct hsm_ioeventfd *p) in acrn_ioeventfd_shutdown()
52 static bool hsm_ioeventfd_is_conflict(struct acrn_vm *vm, in hsm_ioeventfd_is_conflict()
76 static int acrn_ioeventfd_assign(struct acrn_vm *vm, in acrn_ioeventfd_assign()
147 static int acrn_ioeventfd_deassign(struct acrn_vm *vm, in acrn_ioeventfd_deassign()
173 static struct hsm_ioeventfd *hsm_ioeventfd_match(struct acrn_vm *vm, u64 addr, in hsm_ioeventfd_match()
232 int acrn_ioeventfd_config(struct acrn_vm *vm, struct acrn_ioeventfd *args) in acrn_ioeventfd_config()
244 int acrn_ioeventfd_init(struct acrn_vm *vm) in acrn_ioeventfd_init()
263 void acrn_ioeventfd_deinit(struct acrn_vm *vm) in acrn_ioeventfd_deinit()
Dmm.c18 static int modify_region(struct acrn_vm *vm, struct vm_memory_region_op *region) in modify_region()
51 int acrn_mm_region_add(struct acrn_vm *vm, u64 user_gpa, u64 service_gpa, in acrn_mm_region_add()
84 int acrn_mm_region_del(struct acrn_vm *vm, u64 user_gpa, u64 size) in acrn_mm_region_del()
107 int acrn_vm_memseg_map(struct acrn_vm *vm, struct acrn_vm_memmap *memmap) in acrn_vm_memseg_map()
130 int acrn_vm_memseg_unmap(struct acrn_vm *vm, struct acrn_vm_memmap *memmap) in acrn_vm_memseg_unmap()
155 int acrn_vm_ram_map(struct acrn_vm *vm, struct acrn_vm_memmap *memmap) in acrn_vm_ram_map()
292 void acrn_vm_all_ram_unmap(struct acrn_vm *vm) in acrn_vm_all_ram_unmap()
Dioreq.c39 static int ioreq_complete_request(struct acrn_vm *vm, u16 vcpu, in ioreq_complete_request()
93 int acrn_ioreq_request_default_complete(struct acrn_vm *vm, u16 vcpu) in acrn_ioreq_request_default_complete()
212 void acrn_ioreq_request_clear(struct acrn_vm *vm) in acrn_ioreq_request_clear()
317 static bool handle_cf8cfc(struct acrn_vm *vm, in handle_cf8cfc()
386 static struct acrn_ioreq_client *find_ioreq_client(struct acrn_vm *vm, in find_ioreq_client()
420 struct acrn_ioreq_client *acrn_ioreq_client_create(struct acrn_vm *vm, in acrn_ioreq_client_create()
473 struct acrn_vm *vm = client->vm; in acrn_ioreq_client_destroy() local
502 static int acrn_ioreq_dispatch(struct acrn_vm *vm) in acrn_ioreq_dispatch()
551 struct acrn_vm *vm; in ioreq_dispatcher() local
601 int acrn_ioreq_init(struct acrn_vm *vm, u64 buf_vma) in acrn_ioreq_init()
[all …]
/Linux-v5.15/drivers/gpu/drm/lima/
Dlima_vm.c18 struct lima_vm *vm; member
35 static void lima_vm_unmap_range(struct lima_vm *vm, u32 start, u32 end) in lima_vm_unmap_range()
47 static int lima_vm_map_page(struct lima_vm *vm, dma_addr_t pa, u32 va) in lima_vm_map_page()
77 lima_vm_bo_find(struct lima_vm *vm, struct lima_bo *bo) in lima_vm_bo_find()
91 int lima_vm_bo_add(struct lima_vm *vm, struct lima_bo *bo, bool create) in lima_vm_bo_add()
155 void lima_vm_bo_del(struct lima_vm *vm, struct lima_bo *bo) in lima_vm_bo_del()
185 u32 lima_vm_get_va(struct lima_vm *vm, struct lima_bo *bo) in lima_vm_get_va()
202 struct lima_vm *vm; in lima_vm_create() local
237 struct lima_vm *vm = container_of(kref, struct lima_vm, refcount); in lima_vm_release() local
254 void lima_vm_print(struct lima_vm *vm) in lima_vm_print()
[all …]
/Linux-v5.15/sound/pci/ctxfi/
Dctvmem.c30 get_vm_block(struct ct_vm *vm, unsigned int size, struct ct_atc *atc) in get_vm_block()
75 static void put_vm_block(struct ct_vm *vm, struct ct_vm_block *block) in put_vm_block()
124 ct_vm_map(struct ct_vm *vm, struct snd_pcm_substream *substream, int size) in ct_vm_map()
152 static void ct_vm_unmap(struct ct_vm *vm, struct ct_vm_block *block) in ct_vm_unmap()
164 ct_get_ptp_phys(struct ct_vm *vm, int index) in ct_get_ptp_phys()
171 struct ct_vm *vm; in ct_vm_create() local
215 void ct_vm_destroy(struct ct_vm *vm) in ct_vm_destroy()
/Linux-v5.15/tools/testing/selftests/kvm/lib/x86_64/
Dprocessor.c177 void virt_pgd_alloc(struct kvm_vm *vm) in virt_pgd_alloc()
189 static void *virt_get_pte(struct kvm_vm *vm, uint64_t pt_pfn, uint64_t vaddr, in virt_get_pte()
198 static struct pageUpperEntry *virt_create_upper_pte(struct kvm_vm *vm, in virt_create_upper_pte()
231 void __virt_pg_map(struct kvm_vm *vm, uint64_t vaddr, uint64_t paddr, in __virt_pg_map()
280 void virt_pg_map(struct kvm_vm *vm, uint64_t vaddr, uint64_t paddr) in virt_pg_map()
285 static struct pageTableEntry *_vm_get_page_table_entry(struct kvm_vm *vm, int vcpuid, in _vm_get_page_table_entry()
361 uint64_t vm_get_page_table_entry(struct kvm_vm *vm, int vcpuid, uint64_t vaddr) in vm_get_page_table_entry()
368 void vm_set_page_table_entry(struct kvm_vm *vm, int vcpuid, uint64_t vaddr, in vm_set_page_table_entry()
377 void virt_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent) in virt_dump()
472 static void kvm_seg_fill_gdt_64bit(struct kvm_vm *vm, struct kvm_segment *segp) in kvm_seg_fill_gdt_64bit()
[all …]
/Linux-v5.15/drivers/gpu/drm/radeon/
Dradeon_vm.c130 struct radeon_vm *vm, in radeon_vm_get_bos()
179 struct radeon_vm *vm, int ring) in radeon_vm_grab_id()
238 struct radeon_vm *vm, in radeon_vm_flush()
270 struct radeon_vm *vm, in radeon_vm_fence()
294 struct radeon_bo_va *radeon_vm_bo_find(struct radeon_vm *vm, in radeon_vm_bo_find()
321 struct radeon_vm *vm, in radeon_vm_bo_add()
453 struct radeon_vm *vm = bo_va->vm; in radeon_vm_bo_set_addr() local
641 struct radeon_vm *vm) in radeon_vm_update_page_directory()
815 struct radeon_vm *vm, in radeon_vm_update_ptes()
886 static void radeon_vm_fence_pts(struct radeon_vm *vm, in radeon_vm_fence_pts()
[all …]
/Linux-v5.15/tools/testing/selftests/kvm/
Dset_memory_region_test.c57 struct kvm_vm *vm = data; in vcpu_worker() local
118 struct kvm_vm *vm; in spawn_vm() local
183 struct kvm_vm *vm; in test_move_memory_region() local
263 struct kvm_vm *vm; in test_delete_memory_region() local
313 struct kvm_vm *vm; in test_zero_memory_regions() local
332 static int test_memory_region_add(struct kvm_vm *vm, void *mem, uint32_t slot, in test_memory_region_add()
355 struct kvm_vm *vm; in test_add_max_memory_regions() local

12345678910