[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] RFC/Proposal: Partial `libxenctrl` API/ABI stabilisation
On Mon, 2015-05-18 at 16:55 +0100, Andrew Cooper wrote: > On 18/05/15 16:30, Ian Campbell wrote: > > # Major External Consumers of `libxenctrl` > > > > * qemu > > * kexec tools > > * in guest tools e.g. users of `libxenstore`, `libvchan`, and by > > extension `grant table` and `event channel` functionality. NB: > > `libxenstore` is already `SSU` or `SSS` (XXX?) > > > > # `libxenctrl` symbols > > > > Gathered by: > > > > nm tools/libxc/libxenctrl.so | grep ' [Tt] ' | cut -f 3 -d \ | sort -u > > > > `libxenctrl` today exposes many symbols which look to be internal. We > > should consider also reducing that set by using > > `__attribute__((visibility("hidden")))`. > > Don't forget libxenguest.so which is built sharing some of the same > source. I suspect that quite a few of the libxenctrl symbols could move to I added a similar section listing things exported by libxenguest. I don't think libxenguest needs API/ABI stability adding to it at this point, but it could certainly do with some rationalisation regarding the split with libxenctrl and the use of its services. > > The following proposes some functional groupings via some proposed > > split library names. In some cases we may also wish to consider > > replacing an API with one which can be properly maintained going > > forwards. e.g.: > > > > - perhaps replacing domctl's used by qemu with new stable > > hypercall ABIs and reflecting that in new library APIs. > > - perhaps exposing more constrained versions of some broad interfaces > > for external users. > > > > XXX: Change `xc_*` namespacing as well as library names? > > > > ## `libxenhypercall` > > > > Core open/close interface, "make a hypercall" functionality, hypercall > > buffers. > > > > All other libraries likely depend on this. Applications do as well in > > order to access open/close interface at least. > > > > - xc_interface_close > > - xc_interface_is_fake (???) > > This is used when running something wanting libxc on a non xen system. > e.g. readnotes which invokes the Xen elf parsing on a binary, but > doesn't have any actual hypervisor interaction. The ??? was whether this needs to be a stable symbol or not. I suspect it may as well be regardless of whether it needs to be. > > > - xc_interface_open > > - xc_hypercall_buffer_array_create > > - xc_hypercall_buffer_array_destroy > > There are surely more than this when it comes to hypercall buffers? Yes. From the introduction to the document: XXX: I haven't yet done a full pass over the list of symbols in libxenctrl to categorise them and decide where they belong. I thought I would get some early feedback first and just picked a few representative examples for each library. > One issue I have found with libxc in general is that a surprising > quantity of code is in static inlines in header files, which ends up > moving into the includee's code. (I had a particular problem with > do_domctl() and the Xen Interface Version for a project I did a while back) Yes. I think where possible we should either make these private or expose them via non-inline functions, I don't think anything really needs to be inlined. > > ## `libxengnttab` > > > > Interacting with `/dev/xen/gnt{shr,alloc}` > > > > XXX two libs or one? > > > > - xc_gntshr_close > > - xc_gntshr_munmap > > - xc_gntshr_open > > - xc_gntshr_share_page_notify > > - xc_gntshr_share_pages > > - xc_gnttab_close > > - xc_gnttab_get_version > > - xc_gnttab_map_domain_grant_refs > > - xc_gnttab_map_grant_ref > > - xc_gnttab_map_grant_ref_notify > > - xc_gnttab_map_grant_refs > > - xc_gnttab_map_table_v1 > > - xc_gnttab_map_table_v2 > > - xc_gnttab_munmap > > - xc_gnttab_op > > - xc_gnttab_open > > - xc_gnttab_set_max_grants > > One probably, given how small it would be. I agree. My current diff vs. draft A is below, I'll await a bit more feedback before posting a proper update. Ian. diff --git a/docs/misc/libxenctrl-functions.pandoc b/docs/misc/libxenctrl-functions.pandoc index ef5ec49..56d93fd 100644 --- a/docs/misc/libxenctrl-functions.pandoc +++ b/docs/misc/libxenctrl-functions.pandoc @@ -89,6 +89,13 @@ libxenctrl first. extension `grant table` and `event channel` functionality. NB: `libxenstore` is already `SSU` or `SSS` (XXX?) +# `libxenguest` + +Uses some of the same sources as `libxenctrl`. Could do with some +rationalisation of what lives where. + +Not a candidate for API/ABI stabilith at this point. + # `libxenctrl` symbols Gathered by: @@ -97,7 +104,7 @@ Gathered by: `libxenctrl` today exposes many symbols which look to be internal. We should consider also reducing that set by using -`__attribute__((visibility("hidden")))`. +`__attribute__((visibility("hidden")))` or a version script. The following proposes some functional groupings via some proposed split library names. In some cases we may also wish to consider @@ -111,6 +118,10 @@ forwards. e.g.: XXX: Change `xc_*` namespacing as well as library names? +In additition to these there are many inlines in `xenctrl.h`. Where +possible these should become either private functions or regular +functions exported by the library. + ## `libxenhypercall` Core open/close interface, "make a hypercall" functionality, hypercall @@ -120,7 +131,7 @@ All other libraries likely depend on this. Applications do as well in order to access open/close interface at least. - xc_interface_close - - xc_interface_is_fake (???) + - xc_interface_is_fake - xc_interface_open - xc_hypercall_buffer_array_create - xc_hypercall_buffer_array_destroy @@ -147,8 +158,6 @@ Interacting with `/dev/xen/evtchn` Interacting with `/dev/xen/gnt{shr,alloc}` -XXX two libs or one? - - xc_gntshr_close - xc_gntshr_munmap - xc_gntshr_open @@ -627,6 +636,399 @@ XXX Lots of this should be internal/hidden - xc_interface_close_common - xc_interface_open_common +# `libxenguest` symbols + +Gathered by: + + $ nm tools/libxc/libxenguest.so | grep ' [Tt] ' | cut -f 3 -d \ | sort -u + + - add_full_page + - add_to_batch + - alloc_magic_pages + - alloc_str + - alloc_superpage_mfns + - amd_xc_cpuid_policy + - analysis_phase + - apply_batch + - arch_setup_bootearly + - arch_setup_bootlate + - arch_setup_meminit + - backup_ptes + - bitmap_alloc + - bitmap_clear + - bitmap_or + - bitmap_size + - buffer_qemu + - buffer_tail + - buffer_tail_hvm + - buffer_tail_pv + - build_assertions + - build_hvm_info + - call_gmon_start + - canonicalize_pagetable + - change_pte + - check_elf_kernel + - check_magic + - check_mmio_hole + - clear_bit + - clear_page + - __clear_pte + - clear_pte + - compat_buffer_qemu + - compress_page + - copy_mfns_from_guest + - count_pgtables + - count_pgtables_x86_32_pae + - count_pgtables_x86_64 + - cpuid + - cr3_to_mfn + - csum_page + - deregister_tm_clones + - dhdr_type_to_str + - do_domctl + - __do_global_dtors_aux + - __do_global_dtors_aux_fini_array_entry + - dump_bad_pseudophysmap_entry + - dump_qemu + - elf_access_ok + - elf_access_unsigned + - ELF_ADVANCE_DEST + - elf_call_log_callback + - elf_check_broken + - elf_get_ptr + - elf_init + - elf_is_elfbinary + - elf_load_binary + - elf_load_bsdsyms + - elf_load_image + - elf_lookup_addr + - elf_mark_broken + - elf_memcpy_safe + - elf_memcpy_unchecked + - elf_memmove_unchecked + - elf_memset_safe + - elf_memset_unchecked + - elf_note_desc + - elf_note_name + - elf_note_next + - elf_note_numeric + - elf_note_numeric_array + - elf_parse_binary + - elf_parse_bsdsyms + - elf_phdr_by_index + - elf_phdr_count + - elf_phdr_is_loadable + - elf_ptrval_in_range + - elf_round_up + - elf_section_end + - elf_section_name + - elf_section_start + - elf_segment_end + - elf_segment_start + - elf_set_log + - elf_shdr_by_index + - elf_shdr_by_name + - elf_shdr_count + - elf_strfmt + - elf_strval + - elf_sym_by_index + - elf_sym_by_name + - elf_xen_addr_calc_check + - elf_xen_feature_get + - elf_xen_feature_set + - elf_xen_note_check + - elf_xen_parse + - elf_xen_parse_features + - elf_xen_parse_guest_info + - elf_xen_parse_note + - elf_xen_parse_notes + - enable_logdirty + - expand_p2m + - find_table + - _fini + - flush_batch + - frame_dummy + - __frame_dummy_init_array_entry + - fstat + - __fstat + - get_cache_page + - get_platform_info + - get_suspend_file + - get_unaligned_le16 + - get_unaligned_le32 + - handle_hvm_context + - handle_hvm_params + - handle_page_data + - handle_qemu + - handle_shared_info + - handle_toolstack + - handle_tsc_info + - handle_x86_pv_info + - handle_x86_pv_p2m_frames + - handle_x86_pv_vcpu_blob + - _init + - intel_xc_cpuid_policy + - invalidate_cache_page + - is_page_exchangable + - launch_vm + - le16_to_cpup + - le32_to_cpup + - llgettimeofday + - loadelfimage + - loadmodules + - load_p2m_frame_list + - lock_suspend_event + - log_callback + - lz4_decompress_unknownoutputsize + - lz4_uncompress_unknownoutputsize + - map_and_save_p2m_table + - map_frame_list_list + - map_grant_table_frames + - map_p2m + - map_shinfo + - merge_pte + - mfn_in_pseudophysmap + - mfn_to_cr3 + - mfn_to_pfn + - modules_init + - move_l3_below_4G + - noncached_write + - normalise_pagetable + - nr_page_tables + - outbuf_flush + - outbuf_free + - outbuf_hardwrite + - outbuf_init + - outbuf_write + - pagebuf_free + - pagebuf_get + - pagebuf_get_one + - pagebuf_init + - pfn_is_populated + - pfn_set_populated + - pfn_to_mfn + - pin_pagetables + - pin_table + - populate_pfns + - print_mem + - print_stats + - process_page_data + - process_start_info + - process_vcpu_basic + - process_vcpu_extended + - process_vcpu_msrs + - process_vcpu_xsave + - pte_to_frame + - rdexact + - read_headers + - read_record + - rec_type_to_str + - register_arch_hooks + - register_loader + - register_tm_clones + - restore + - save + - save_tsc_info + - send_all_pages + - send_domain_memory_live + - send_domain_memory_nonlive + - send_some_pages + - set_bit + - setup_guest + - setup_hypercall_page + - setup_pgtables_x86_32_pae + - setup_pgtables_x86_64 + - shared_info_x86_32 + - shared_info_x86_64 + - start_info_x86_32 + - start_info_x86_64 + - stat + - __stat + - suspend_and_state + - suspend_domain + - tailbuf_free + - tailbuf_free_hvm + - tailbuf_free_pv + - test_bit + - tv_delta + - tv_to_us + - uncanonicalize_pagetable + - unlock_suspend_event + - update_guest_p2m + - update_progress_string + - __update_pte + - update_pte + - update_vcpu_context + - VALGRIND_PRINTF + - VALGRIND_PRINTF_BACKTRACE + - vcpu_x86_32 + - vcpu_x86_64 + - write_all_vcpu_information + - write_batch + - write_buffer + - write_compressed + - write_end_record + - write_headers + - write_hvm_context + - write_hvm_params + - write_one_vcpu_basic + - write_one_vcpu_extended + - write_one_vcpu_msrs + - write_one_vcpu_xsave + - write_record + - write_shared_info + - write_split_record + - write_toolstack + - write_tsc_info + - write_uncached + - write_x86_pv_info + - write_x86_pv_p2m_frames + - x86_compat + - x86_hvm_cleanup + - x86_hvm_end_of_stream + - x86_hvm_localise_page + - x86_hvm_normalise_page + - x86_hvm_pfn_is_valid + - x86_hvm_pfn_to_gfn + - x86_hvm_process_record + - x86_hvm_set_gfn + - x86_hvm_set_page_type + - x86_hvm_setup + - x86_hvm_start_of_stream + - x86_hvm_stream_complete + - x86_pv_cleanup + - x86_pv_domain_info + - x86_pv_end_of_stream + - x86_pv_localise_page + - x86_pv_map_m2p + - x86_pv_normalise_page + - x86_pv_pfn_is_valid + - x86_pv_pfn_to_gfn + - x86_pv_process_record + - x86_pv_set_gfn + - x86_pv_set_page_type + - x86_pv_setup + - x86_pv_start_of_stream + - x86_pv_stream_complete + - x86_shadow + - xc_await_suspend + - xc_clear_domain_page + - xc_compression_add_page + - xc_compression_compress_pages + - xc_compression_create_context + - xc_compression_free_context + - xc_compression_reset_pagebuf + - xc_compression_uncompress_page + - xc_cpuid_apply_policy + - xc_cpuid_brand_get + - xc_cpuid_check + - xc_cpuid_config_xsave + - xc_cpuid_do_domctl + - xc_cpuid_hvm_policy + - xc_cpuid_policy + - xc_cpuid_pv_policy + - xc_cpuid_set + - xc_cpuid_to_str + - xc_domain_get_native_protocol + - xc_domain_restore + - xc_domain_restore2 + - xc_domain_save + - xc_domain_save2 + - xc_dom_allocate + - xc_dom_alloc_page + - xc_dom_alloc_segment + - xc_dom_boot_domU_map + - xc_dom_boot_image + - xc_dom_boot_mem_init + - xc_dom_boot_xen_init + - xc_dom_build_image + - xc_dom_check_gzip + - xc_dom_compat_check + - xc_dom_devicetree_file + - xc_dom_devicetree_max_size + - xc_dom_devicetree_mem + - xc_dom_do_gunzip + - xc_dom_feature_translated + - xc_dom_find_arch_hooks + - xc_dom_find_loader + - xc_dom_free_all + - xc_dom_gnttab_hvm_seed + - xc_dom_gnttab_init + - xc_dom_gnttab_seed + - xc_dom_gnttab_setup + - xc_dom_guest_type + - xc_dom_kernel_check_size + - xc_dom_kernel_file + - xc_dom_kernel_max_size + - xc_dom_kernel_mem + - xc_dom_linux_build + - xc_dom_load_bin_kernel + - xc_dom_load_bzimage_kernel + - xc_dom_load_elf_kernel + - xc_dom_load_elf_symtab + - xc_dom_loginit + - xc_dom_log_memory_footprint + - xc_dom_malloc + - xc_dom_malloc_filemap + - xc_dom_malloc_page_aligned + - xc_dom_mem_init + - xc_dom_p2m_guest + - xc_dom_p2m_host + - xc_dom_panic_func + - xc_dom_parse_bin_kernel + - xc_dom_parse_bzimage_kernel + - xc_dom_parse_elf_kernel + - xc_dom_parse_image + - xc_dom_pfn_to_ptr + - xc_dom_pfn_to_ptr_retcount + - xc_dom_printf + - xc_dom_probe_bin_kernel + - xc_dom_probe_bzimage_kernel + - xc_dom_probe_elf_kernel + - xc_dom_rambase_init + - xc_dom_ramdisk_check_size + - xc_dom_ramdisk_file + - xc_dom_ramdisk_max_size + - xc_dom_ramdisk_mem + - xc_dom_register_arch_hooks + - xc_dom_register_external + - xc_dom_register_loader + - xc_dom_release + - xc_dom_seg_to_ptr + - xc_dom_seg_to_ptr_pages + - xc_dom_strdup + - xc_dom_try_gunzip + - xc_dom_unmap_all + - xc_dom_unmap_one + - xc_dom_update_guest_p2m + - xc_dom_vaddr_to_ptr + - xc_elf_set_logfile + - xc_exchange_page + - xc_get_bit_size + - xc_hvm_build + - xc_hvm_build_target_mem + - xc_inflate_buffer + - xc_is_page_granted_v1 + - xc_is_page_granted_v2 + - xc_linux_build + - xc_linux_build_internal + - xc_linux_build_mem + - xc_map_m2p + - xc_mark_page_offline + - xc_mark_page_online + - xc_pfn_to_mfn + - xc_query_page_offline_status + - xc_read_image + - xc_suspend_evtchn_init_exclusive + - xc_suspend_evtchn_init_sane + - xc_suspend_evtchn_release + - xc_try_bzip2_decode + - xc_try_lz4_decode + - _xc_try_lzma_decode + - xc_try_lzma_decode + - xc_try_lzo1x_decode + - xc_try_xz_decode + # Symbols used by qemu $ nm tools/qemu-xen-dir-remote/i386-softmmu/qemu-system-i386 | grep \\bU.xc_ _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |