[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH XEN v2 01/15] docs: Partial toolstack library API/ABI stabilisation



---
DraftB:
  - Feedback from Jan and Andy
  - QEMU usage by functional area
  - Annotated with what things are and users
  - Renamed to docs/misc/toolstack-library-abis.pandoc
  - Change method for gathering symbols to omit static/non-exported
    stuff.
  - Some additional functional classification, and start to annotate
    the underlying interfaces plus known users.
---
 docs/Makefile                           |   2 +-
 docs/misc/toolstack-library-abis.pandoc | 849 ++++++++++++++++++++++++++++++++
 2 files changed, 850 insertions(+), 1 deletion(-)
 create mode 100644 docs/misc/toolstack-library-abis.pandoc

diff --git a/docs/Makefile b/docs/Makefile
index 272292c..79a17f4 100644
--- a/docs/Makefile
+++ b/docs/Makefile
@@ -16,7 +16,7 @@ MARKDOWNSRC-y := $(sort $(shell find misc -name '*.markdown' 
-print))
 
 TXTSRC-y := $(sort $(shell find misc -name '*.txt' -print))
 
-PANDOCSRC-y := $(sort $(shell find specs -name '*.pandoc' -print))
+PANDOCSRC-y := $(sort $(shell find misc specs -name '*.pandoc' -print))
 
 # Documentation targets
 DOC_MAN1 := $(patsubst man/%.pod.1,man1/%.1,$(MAN1SRC-y))
diff --git a/docs/misc/toolstack-library-abis.pandoc 
b/docs/misc/toolstack-library-abis.pandoc
new file mode 100644
index 0000000..c24be81
--- /dev/null
+++ b/docs/misc/toolstack-library-abis.pandoc
@@ -0,0 +1,849 @@
+% Xen toolstack library API/ABIs
+% Ian Campbell <ian.campbell@xxxxxxxxxx>
+% Draft B
+
+# Introduction
+
+The low-level `libxenctrl` library currently has an unstable API and
+ABI and some of the hypervisor interfaces which it exposes are
+similarly unstable.
+
+However several external projects use some of these interfaces (at
+least: qemu and kexec-tools), which presents problems for distros and
+other consumers. In particular the need for spurious rebuilds of those
+components against newer versions of Xen and difficulty supporting
+parallel installation of different versions of Xen (useful during
+upgrade).
+
+This document considers whether parts of `libxenctrl` can be split out
+into new libraries with more useful API and ABI guarantees.
+
+# ABI/API Compatibility Classes
+
+Compatibility opportunities:
+
+* `LAPI` -- Library API
+* `LABI` -- Library ABI
+* `HABI` -- Hypervisor ABI (includes ioctls).
+
+Each can either be Stable (`S`), Unstable (`U`) or don't care (`x`,
+because made moot by higher level interface class, e.g. no real point
+from an application PoV to a Stable HABI behind a unstable LABI).
+
+Stable vs. Unstable is across major hypervisor version bump, always
+aim to be stable across point releases.
+
+For libraries Stable means `SONAME` major component, but forward
+compatible only (i.e. old app on new library works, new app on old
+library may not link due to e.g. new symbols. This is the normal
+SONAME expectation). XXX find a link to the sort of scheme I mean.
+
+`HABI` may include ioctls used to access those ABIs, typically these
+are already required to be stable by the relevant OS maintainers.
+
+A library interface may fall into one of these categories (I expect
+there are others and we may not want any library to use some of even
+these):
+
+* Unstable `LAPI` (`Uxx`)
+    * The Wild West
+    * Current Examples: `libxenctrl`
+
+* Stable `LAPI`, Unstable `LABI` (`SUx`)
+    * Requires application rebuild for a new Xen version, but not
+      application source code changes.
+    * Current Examples: `libxenlight`
+
+* Stable `LAPI`, Stable `LABI`, Unstable `HABI` (`SSU`)
+    * Library can be switched out via dynamic linking across
+      hypervisor upgrade (mechanism TBD, pos. distro specific, e.g.
+      symlink switched on boot). Requires application/daemon restart
+      but not rebuild (but changing hypervisor version involves a
+      reboot anyway).
+    * Current Examples: None??
+
+* Stable `LAPI`, Stable `LABI`, Stable `HABI` (`SSS`)
+    * Applications linked again a library will function against any
+      hypervisor version.
+    * Current Examples: None??
+
+# Goal
+
+Provide `SSU` or `SSS` interfaces for major external consumers of
+current libxenctrl functionality.
+
+Out of scope (for now): `SSU` or `SSS` interfaces for consumers of
+`libxenlight`. Rationale: Lets focus on fixing external consumers of
+libxenctrl first.
+
+# Known 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?)
+
+# `libxenguest`
+
+Uses some of the same sources as `libxenctrl`. Could do with some
+rationalisation of what lives where.
+
+Not a candidate for API/ABI stability at this point.
+
+# Unstable libraries
+
+These libraries do not provide a stable interface and are required to
+be updated in lockstep with the hypervisor.
+
+## `libxenctrl`
+
+Gathered by:
+
+    $ objdump -T tools/libxc/libxenctrl.so| awk '$4 ~ /\.text/ { print $7 }' | 
sort -u
+
+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.
+
+In addition to these there are many inlines in `xenctrl.h`. Where
+possible these should become either private functions or regular
+functions exported by the library.
+
+Notes:
+
+* Things marked "private" are generally defined in `xc_private.h` or
+  are otherwise supposedly internal but leaked.
+* Things marked "external, via ..." are generally expected to be used
+  via `...` (often a macro).
+* There are lots of static functions in the `xc_*` namespace.
+
+### Logging
+
+The following are already logically somewhat separate. They do not
+depend on any underlying Xen functionality.
+
+Interface                     Known external users
+----------------------------- --------------------
+`xtl_createlogger_stdiostream`
+`xtl_level_to_string`
+`xtl_log`
+`xtl_logger_destroy`
+`xtl_logv`
+`xtl_progress`
+`xtl_stdiostream_adjust_flags`
+`xtl_stdiostream_set_minlevel`
+
+### Basic interface
+
+    - xc_interface_close
+    - xc_interface_is_fake
+    - xc_interface_open
+
+### Event channels
+
+Interacting with Event Channels via `__HYPERVISOR_event_channel_op`
+(`EVTCHNOP_*`) or `/dev/xen/evtchn`.
+
+Interface                     Underlying interface             Known external 
users
+----------------------------- -------------------------------- 
--------------------
+`xc_evtchn_bind_interdomain`  `IOCTL_EVTCHN_BIND_INTERDOMAIN`  qemu-pv
+`xc_evtchn_bind_unbound_port` `IOCTL_EVTCHN_BIND_UNBOUND_PORT`
+`xc_evtchn_bind_virq`         `IOCTL_EVTCHN_BIND_VIRQ`
+`xc_evtchn_close`             `close(2)`                       qemu-dm
+`xc_evtchn_fd`
+`xc_evtchn_notify`            `IOCTL_EVTCHN_NOTIFY`            qemu-dm, qemu-pv
+`xc_evtchn_open`              `open(2)`                        qemu-dm, qemu-pv
+`xc_evtchn_pending`           `read(2)`                        qemu-dm, qemu-pv
+`xc_evtchn_unbind`            `IOCTL_EVTCHN_UNBIND`            qemu-pv
+`xc_evtchn_unmask`            `write(2)`                       qemu-dm, qemu-pv
+`xc_evtchn_alloc_unbound`     `EVTCHNOP_alloc_unbound`
+`xc_evtchn_reset`             `EVTCHNOP_reset`
+`xc_evtchn_status`            `EVTCHNOP_status`
+
+### Grant tables
+
+Interacting with Grant Tables via `__HYPERVISOR_grant_table_op`
+(`GNTTABOP_*`) or `/dev/xen/gnt{shr,alloc}`.
+
+Interface                         Underlying interface           Known 
external users
+--------------------------------- ------------------------------ 
--------------------
+`xc_gnttab_map_domain_grant_refs` `IOCTL_GNTDEV_SET_MAX_GRANTS`
+`xc_gnttab_map_grant_ref_notify`  `IOCTL_GNTDEV_MAP_GRANT_REF`
+`xc_gnttab_map_grant_ref`         `IOCTL_GNTDEV_MAP_GRANT_REF`   qemu-pv
+`xc_gnttab_map_grant_refs`        `IOCTL_GNTDEV_SET_MAX_GRANTS`  qemu-pv
+`xc_gnttab_munmap`                `munmap(2)`                    qemu-pv
+`xc_gnttab_open`                  `open(2)`                      qemu-pv
+`xc_gnttab_close`                 `close(2)`                     qemu-pv
+`xc_gnttab_set_max_grants`        `IOCTL_GNTDEV_SET_MAX_GRANTS`
+`xc_gntshr_close`                 `close(2)`
+`xc_gntshr_munmap`                `munmap(2)`
+`xc_gntshr_open`                  `open(2)`
+`xc_gntshr_share_page_notify`     `IOCTL_GNTALLOC_ALLOC_GREF`
+`xc_gntshr_share_pages`           `IOCTL_GNTALLOC_ALLOC_GREF`
+`xc_gnttab_op`                    `__HYPERVISOR_grant_table_op`
+`xc_gnttab_get_version`           `GNTTABOP_get_version`
+`xc_gnttab_map_table_v1`          `GNTTABOP_setup_table`
+`xc_gnttab_map_table_v2`          `GNTTABOP_setup_table`
+
+`xc_*_notify` also use `IOCTL_GNTALLOC_SET_UNMAP_NOTIFY`,
+`IOCTL_GNTALLOC_SET_UNMAP_NOTIFY`, etc
+
+### Hypercalls
+
+#### Making hypercalls
+
+Interface                         Underlying interface           Known 
external users
+--------------------------------- ------------------------------ 
--------------------
+`do_xen_hypercall`                `IOCTL_PRIVCMD_HYPERCALL`      private
+
+#### Wrappers
+
+Interface                         Known in-tree users           Known external 
users
+--------------------------------- ----------------------------- 
--------------------
+`do_memory_op`                    private                       private
+`xc_domctl`                       Save/Restore                  None
+`xc_sysctl`                       xencov, xenmon                None
+
+#### Hypercall buffers
+
+Allocate and manange (and attempt to enforce the use of) memory
+suitable for passing to a hypercall as a GUEST_HANDLE argument.
+
+Interface                           Known in-tree users       Known external 
users
+----------------------------------- ------------------------- 
--------------------
+`xc_hypercall_buffer_array_create`                            kexec-tools
+`xc_hypercall_buffer_array_destroy`                           kexec-tools
+
+The following are external via a corresponding `xc_` function:
+
+Interface                           Known in-tree users          Known 
external users
+----------------------------------- ---------------------------- 
--------------------
+`xc__hypercall_buffer_alloc`        xencov, xenlockprof, xenperf
+`xc__hypercall_buffer_alloc_pages`
+`xc__hypercall_buffer_array_alloc`                               kexec-tools
+`xc__hypercall_buffer_array_get`
+`xc__hypercall_buffer_free`         xencov, xenlockprof, xenperf
+`xc__hypercall_buffer_free_pages`
+
+The following are private:
+
+- `xc__hypercall_bounce_post`
+- `xc__hypercall_bounce_pre`
+- `xc__hypercall_buffer_cache_release`
+
+### Mapping foreign memory
+
+Interface                         Underlying interface           Known 
external users
+--------------------------------- ------------------------------ 
--------------------
+`xc_map_foreign_pages`            `IOCTL_PRIVCMD_MMAP...`        qemu-pv
+`xc_map_foreign_range`            `IOCTL_PRIVCMD_MMAP...`        qemu-dm, and 
qemu-pv
+`xc_map_foreign_ranges`
+`xc_map_foreign_batch`
+`xc_map_foreign_bulk`             `IOCTL_PRIVCMD_MMAPBATCH_V2`   qemu-dm
+`xc_map_foreign_bulk_compat`                                     private
+
+`xc_map_foreign_bulk_compat` is a stub for all not yet converted OSes
+and is used by netbsd & solaris.
+
+### Managing guest memory map
+
+Interface                          Underlying interface           Known 
external users
+---------------------------------  ------------------------------ 
--------------------
+`xc_domain_add_to_physmap`         `XENMEM_add_to_physmap`        qemu-dm
+`xc_domain_populate_physmap`       `XENMEM_populate_physmap`
+`xc_domain_populate_physmap_exact` `XENMEM_populate_physmap`      qemu-dm
+
+### Kexec
+
+Functions specifically for use by kexec tools
+
+Interface                     Underlying interface
+----------------------------- ------------------------------
+`xc_kexec_exec`               `KEXEC_CMD_kexec`
+`xc_kexec_get_range`          `KEXEC_CMD_kexec_get_range`
+`xc_kexec_load`               `KEXEC_CMD_kexec_unload`
+`xc_kexec_unload`             `KEXEC_CMD_kexec_unload`
+
+### Unclassified remains
+
+_Note_: Not everything which belongs in one of the above categorisations has
+        actually been moved to a suitable home.
+
+Symbols:
+
+    - bitmap_64_to_byte
+    - bitmap_byte_to_64
+    - discard_file_cache
+    - read_exact
+    - write_exact
+    - writev_exact
+    - xc_add_mmu_update
+    - xc_alloc_mmu_updates
+    - xc_assign_device
+    - xc_assign_dt_device
+    - xc_availheap
+    - xc_clear_domain_pages
+    - xc_clear_last_error
+    - xc_copy_to_domain_page
+    - xc_core_arch_auto_translated_physmap
+    - xc_core_arch_get_scratch_gpfn
+    - xc_core_arch_gpfn_may_present
+    - xc_core_arch_map_p2m
+    - xc_core_arch_map_p2m_writable
+    - xc_core_arch_memory_map_get
+    - xc_core_shdr_get
+    - xc_core_shdr_set
+    - xc_cpumap_alloc
+    - xc_cpumap_clearcpu
+    - xc_cpumap_setcpu
+    - xc_cpumap_testcpu
+    - xc_cpu_offline
+    - xc_cpu_online
+    - xc_cpupool_addcpu
+    - xc_cpupool_create
+    - xc_cpupool_destroy
+    - xc_cpupool_freeinfo
+    - xc_cpupool_getinfo
+    - xc_cpupool_infofree
+    - xc_cpupool_movedomain
+    - xc_cpupool_removecpu
+    - xc_cputopoinfo
+    - xc_deassign_device
+    - xc_deassign_dt_device
+    - xc_disable_turbo
+    - xc_domain_bind_pt_irq
+    - xc_domain_bind_pt_isa_irq
+    - xc_domain_bind_pt_pci_irq
+    - xc_domain_bind_pt_spi_irq
+    - xc_domain_cacheflush
+    - xc_domain_claim_pages
+    - xc_domain_create
+    - xc_domain_create_config
+    - xc_domain_debug_control
+    - xc_domain_decrease_reservation
+    - xc_domain_decrease_reservation_exact
+    - xc_domain_destroy
+    - xc_domain_disable_migrate
+    - xc_domain_dumpcore
+    - xc_domain_dumpcore_via_callback
+    - xc_domain_get_cpu_usage
+    - xc_domain_get_guest_width
+    - xc_domain_getinfo
+    - xc_domain_getinfolist (`XEN_SYSCTL_getdomaininfolist`). Used by qemu-dm.
+    - xc_domain_get_machine_address_size
+    - xc_domain_get_pod_target
+    - xc_domain_get_tsc_info
+    - xc_domain_hvm_getcontext
+    - xc_domain_hvm_getcontext_partial
+    - xc_domain_hvm_setcontext
+    - xc_domain_increase_reservation
+    - xc_domain_increase_reservation_exact
+    - xc_domain_iomem_permission
+    - xc_domain_ioport_mapping
+    - xc_domain_ioport_permission
+    - xc_domain_irq_permission
+    - xc_domain_maximum_gpfn
+    - xc_domain_max_vcpus
+    - xc_domain_memory_exchange_pages
+    - xc_domain_memory_mapping
+    - xc_domain_node_getaffinity
+    - xc_domain_node_setaffinity
+    - xc_domain_nr_gpfns
+    - xc_domain_p2m_audit
+    - xc_domain_pause
+    - xc_domain_pin_memory_cacheattr (`XEN_DOMCTL_pin_mem_cacheattr`). Used by 
qemu-dm.
+    - xc_domain_resume
+    - xc_domain_send_trigger
+    - xc_domain_set_access_required
+    - xc_domain_setdebugging
+    - xc_domain_sethandle
+    - xc_domain_set_machine_address_size
+    - xc_domain_set_max_evtchn
+    - xc_domain_setmaxmem (`XEN_DOMCTL_max_mem`). Used by qemu-dm.
+    - xc_domain_set_memmap_limit
+    - xc_domain_set_memory_map
+    - xc_domain_set_pod_target
+    - xc_domain_set_target
+    - xc_domain_set_time_offset
+    - xc_domain_set_tsc_info
+    - xc_domain_set_virq_handler
+    - xc_domain_setvnuma
+    - xc_domain_shutdown (`SCHEDOP_remote_shutd`). Used by qemu-dm.
+    - xc_domain_subscribe_for_suspend
+    - xc_domain_suppress_spurious_page_faults
+    - xc_domain_unbind_msi_irq
+    - xc_domain_unbind_pt_irq
+    - xc_domain_unbind_pt_spi_irq
+    - xc_domain_unpause
+    - xc_domain_update_msi_irq
+    - xc_enable_turbo
+    - xc_error_code_to_desc
+    - xc_ffs16
+    - xc_ffs32
+    - xc_ffs64
+    - xc_ffs8
+    - xc_flask_access
+    - xc_flask_add_device
+    - xc_flask_add_iomem
+    - xc_flask_add_ioport
+    - xc_flask_add_pirq
+    - xc_flask_avc_cachestats
+    - xc_flask_avc_hashstats
+    - xc_flask_context_to_sid
+    - xc_flask_del_device
+    - xc_flask_del_iomem
+    - xc_flask_del_ioport
+    - xc_flask_del_pirq
+    - xc_flask_getavc_threshold
+    - xc_flask_getbool_byid
+    - xc_flask_getbool_byname
+    - xc_flask_getenforce
+    - xc_flask_load
+    - xc_flask_op
+    - xc_flask_policyvers
+    - xc_flask_relabel_domain
+    - xc_flask_setavc_threshold
+    - xc_flask_setbool
+    - xc_flask_setenforce
+    - xc_flask_sid_to_context
+    - xc_flush_mmu_updates
+    - xc_get_cpufreq_avgfreq
+    - xc_get_cpufreq_para
+    - xc_get_cpuidle_max_cstate
+    - xc_getcpuinfo
+    - xc_get_cpumap_size
+    - xc_get_device_group
+    - xc_get_hvm_param
+    - xc_get_last_error
+    - xc_get_machine_memory_map. Used by kexec-tools
+    - xc_get_max_cpus. Used by kexec-tools
+    - xc_get_max_nodes
+    - xc_get_mem_access
+    - xc_get_nodemap_size
+    - xc_get_online_cpus
+    - xc_get_pfn_list
+    - xc_get_pfn_type_batch
+    - xc_get_tot_pages
+    - xc_get_vcpu_migration_delay
+    - xc_hvm_create_ioreq_server
+    - xc_hvm_destroy_ioreq_server
+    - xc_hvm_get_ioreq_server_info
+    - xc_hvm_inject_msi (`HVMOP_inject_msi`). Used by qemu-dm.
+    - xc_hvm_inject_trap
+    - xc_hvm_map_io_range_to_ioreq_server
+    - xc_hvm_map_pcidev_to_ioreq_server
+    - xc_hvm_modified_memory (`HVMOP_modified_memory`). Used by qemu-dm.
+    - xc_hvm_param_get
+    - xc_hvm_param_set
+    - xc_hvm_set_ioreq_server_state
+    - xc_hvm_set_isa_irq_level (`HVMOP_set_isa_irq_level`). Used by qemu-dm.
+    - xc_hvm_set_mem_type (`HVMOP_set_mem_type`). Used by qemu-dm.
+    - xc_hvm_set_pci_intx_level (`HVMOP_set_pci_intx_level`). Used by qemu-dm.
+    - xc_hvm_set_pci_link_route (`HVMOP_set_pci_link_route`). Used by qemu-dm.
+    - xc_hvm_track_dirty_vram (`HVMOP_track_dirty_vram`). Used by qemu-dm.
+    - xc_hvm_unmap_io_range_from_ioreq_server
+    - xc_hvm_unmap_pcidev_from_ioreq_server
+    - xc_lockprof_query
+    - xc_lockprof_query_number
+    - xc_lockprof_reset
+    - xc_machphys_mfn_list
+    - xc_make_page_below_4G
+    - xc_map_domain_meminfo
+    - xc_maximum_ram_page
+    - xc_mca_op
+    - xc_mem_access_disable_emulate
+    - xc_mem_access_enable_emulate
+    - xc_memalign
+    - xc_mem_paging_disable
+    - xc_mem_paging_enable
+    - xc_mem_paging_evict
+    - xc_mem_paging_load
+    - xc_mem_paging_nominate
+    - xc_mem_paging_prep
+    - xc_mem_paging_resume
+    - xc_memshr_add_to_physmap
+    - xc_memshr_audit
+    - xc_memshr_control
+    - xc_memshr_debug_gfn
+    - xc_memshr_debug_gref
+    - xc_memshr_domain_resume
+    - xc_memshr_nominate_gfn
+    - xc_memshr_nominate_gref
+    - xc_memshr_ring_disable
+    - xc_memshr_ring_enable
+    - xc_memshr_share_gfns
+    - xc_memshr_share_grefs
+    - xc_mmuext_op
+    - xc_monitor_disable
+    - xc_monitor_enable
+    - xc_monitor_mov_to_msr
+    - xc_monitor_resume
+    - xc_monitor_singlestep
+    - xc_monitor_software_breakpoint
+    - xc_monitor_write_ctrlreg
+    - xc_nodemap_alloc
+    - xc_numainfo
+    - xc_osdep_log
+    - xc_pcitopoinfo
+    - xc_perfc_query
+    - xc_perfc_query_number
+    - xc_perfc_reset
+    - xc_physdev_map_pirq
+    - xc_physdev_map_pirq_msi
+    - xc_physdev_pci_access_modify
+    - xc_physdev_unmap_pirq
+    - xc_physinfo
+    - xc_pm_get_cxstat
+    - xc_pm_get_max_cx
+    - xc_pm_get_max_px
+    - xc_pm_get_pxstat
+    - xc_pm_reset_cxstat
+    - xc_pm_reset_pxstat
+    - xc_psr_cmt_attach
+    - xc_psr_cmt_detach
+    - xc_psr_cmt_enabled
+    - xc_psr_cmt_get_data
+    - xc_psr_cmt_get_domain_rmid
+    - xc_psr_cmt_get_l3_cache_size
+    - xc_psr_cmt_get_l3_event_mask
+    - xc_psr_cmt_get_l3_upscaling_factor
+    - xc_psr_cmt_get_total_rmid
+    - xc_readconsolering
+    - xc_report
+    - xc_report_error
+    - xc_report_progress_single
+    - xc_report_progress_step
+    - xc_reportv
+    - xc_resource_op
+    - xc_sched_arinc653_schedule_get
+    - xc_sched_arinc653_schedule_set
+    - xc_sched_credit2_domain_get
+    - xc_sched_credit2_domain_set
+    - xc_sched_credit_domain_get
+    - xc_sched_credit_domain_set
+    - xc_sched_credit_params_get
+    - xc_sched_credit_params_set
+    - xc_sched_id
+    - xc_sched_rtds_domain_get
+    - xc_sched_rtds_domain_set
+    - xc_sedf_domain_get
+    - xc_sedf_domain_set
+    - xc_send_debug_keys
+    - xc_set_broken_page_p2m
+    - xc_set_cpufreq_gov
+    - xc_set_cpufreq_para
+    - xc_set_cpuidle_max_cstate
+    - xc_set_hvm_param (`HVMOP_set_param`). Used by qemu-dm.
+    - xc_set_mem_access
+    - xc_set_progress_prefix
+    - xc_set_sched_opt_smt
+    - xc_set_vcpu_migration_delay
+    - xc_shadow_control
+    - xc_sharing_freed_pages
+    - xc_sharing_used_frames
+    - xc_strerror
+    - xc_tbuf_disable
+    - xc_tbuf_enable
+    - xc_tbuf_get_size
+    - xc_tbuf_set_cpu_mask
+    - xc_tbuf_set_evt_mask
+    - xc_tbuf_set_size
+    - xc_test_assign_device
+    - xc_test_assign_dt_device
+    - xc_tmem_auth
+    - xc_tmem_control
+    - xc_tmem_control_oid
+    - xc_tmem_restore
+    - xc_tmem_restore_extra
+    - xc_tmem_save
+    - xc_tmem_save_done
+    - xc_tmem_save_extra
+    - xc_translate_foreign_address
+    - xc_unmap_domain_meminfo
+    - xc_vcpu_getaffinity
+    - xc_vcpu_getcontext
+    - xc_vcpu_getinfo
+    - xc_vcpu_setaffinity
+    - xc_vcpu_setcontext
+    - xc_version. Used by kexec-tools
+    - xc_vm_event_control
+    - xc_vm_event_enable
+    - xc_watchdog
+
+## `libxenguest`
+
+Gathered by:
+
+
+    $ objdump -T tools/libxc/libxenguest.so| awk '$4 ~ /\.text/ { print $7 }' 
| sort -u
+
+    - arch_setup_bootearly
+    - arch_setup_bootlate
+    - arch_setup_meminit
+    - cr3_to_mfn
+    - csum_page
+    - dhdr_type_to_str
+    - dump_bad_pseudophysmap_entry
+    - elf_access_ok
+    - elf_access_unsigned
+    - elf_call_log_callback
+    - elf_check_broken
+    - elf_get_ptr
+    - elf_init
+    - elf_is_elfbinary
+    - elf_load_binary
+    - elf_lookup_addr
+    - elf_mark_broken
+    - elf_memcpy_safe
+    - elf_memset_safe
+    - 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_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_parse
+    - elf_xen_parse_features
+    - elf_xen_parse_guest_info
+    - elf_xen_parse_note
+    - handle_tsc_info
+    - lz4_decompress_unknownoutputsize
+    - mfn_in_pseudophysmap
+    - mfn_to_cr3
+    - mfn_to_pfn
+    - pin_table
+    - populate_pfns
+    - read_qemu
+    - rec_type_to_str
+    - write_split_record
+    - write_tsc_info
+    - x86_pv_domain_info
+    - x86_pv_map_m2p
+    - xc_await_suspend
+    - 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_check
+    - 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_gnttab_hvm_seed
+    - xc_dom_gnttab_init
+    - xc_dom_gnttab_seed
+    - xc_dom_kernel_check_size
+    - xc_dom_kernel_file
+    - xc_dom_kernel_max_size
+    - xc_dom_kernel_mem
+    - xc_dom_linux_build
+    - 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_panic_func
+    - xc_dom_parse_image
+    - xc_dom_pfn_to_ptr
+    - xc_dom_pfn_to_ptr_retcount
+    - xc_dom_printf
+    - 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_strdup
+    - xc_dom_try_gunzip
+    - xc_dom_unmap_all
+    - xc_dom_unmap_one
+    - xc_dom_update_guest_p2m
+    - xc_elf_set_logfile
+    - xc_exchange_page
+    - xc_get_bit_size
+    - xc_hvm_build
+    - xc_hvm_build_target_mem
+    - xc_inflate_buffer
+    - xc_linux_build
+    - xc_linux_build_mem
+    - xc_map_m2p
+    - xc_mark_page_offline
+    - xc_mark_page_online
+    - xc_query_page_offline_status
+    - xc_read_image
+    - xc_suspend_evtchn_init_exclusive
+    - xc_suspend_evtchn_init_sane
+    - xc_suspend_evtchn_release
+    - xc_try_lz4_decode
+
+# Consumers of `libxenctrl` functionality
+
+## `qemu`
+
+    $ nm tools/qemu-xen-dir-remote/i386-softmmu/qemu-system-i386 | grep 
\\bU.xc_
+
+    - xc_domain_add_to_physmap
+    - xc_domain_bind_pt_pci_irq
+    - xc_domain_create
+    - xc_domain_destroy
+    - xc_domain_getinfo
+    - xc_domain_ioport_mapping
+    - xc_domain_max_vcpus
+    - xc_domain_memory_mapping
+    - xc_domain_pin_memory_cacheattr
+    - xc_domain_populate_physmap_exact
+    - xc_domain_setmaxmem
+    - xc_domain_shutdown
+    - xc_domain_unbind_msi_irq
+    - xc_domain_unbind_pt_irq
+    - xc_domain_unpause
+    - xc_domain_update_msi_irq
+    - xc_evtchn_alloc_unbound
+    - xc_evtchn_bind_interdomain
+    - xc_evtchn_close
+    - xc_evtchn_fd
+    - xc_evtchn_notify
+    - xc_evtchn_open
+    - xc_evtchn_pending
+    - xc_evtchn_unbind
+    - xc_evtchn_unmask
+    - xc_get_hvm_param
+    - xc_hvm_inject_msi
+    - xc_hvm_modified_memory
+    - xc_hvm_set_isa_irq_level
+    - xc_hvm_set_mem_type
+    - xc_hvm_set_pci_intx_level
+    - xc_hvm_set_pci_link_route
+    - xc_hvm_track_dirty_vram
+    - xc_interface_close
+    - xc_interface_open
+    - xc_linux_build
+    - xc_map_foreign_bulk
+    - xc_map_foreign_pages
+    - xc_map_foreign_range
+    - xc_physdev_map_pirq
+    - xc_physdev_map_pirq_msi
+    - xc_physdev_unmap_pirq
+    - xc_set_hvm_param
+
+### By functional area
+
+As a reference, this is a split of the xc_ calls made by QEMU, based on
+functionality areas:
+
+* Device model
+    * xc_domain_add_to_physmap (`XENMEM_add_to_physmap`)
+    * xc_domain_getinfolist (`XEN_SYSCTL_getdomaininfolist`)
+    * xc_domain_pin_memory_cacheattr (`XEN_DOMCTL_pin_mem_cacheattr`)
+    * xc_domain_populate_physmap_exact (`XENMEM_populate_physmap`)
+    * xc_domain_setmaxmem (`XEN_DOMCTL_max_mem`)
+    * xc_domain_shutdown (`SCHEDOP_remote_shutdown`)
+    * xc_evtchn_bind_interdomain (`IOCTL_EVTCHN_BIND_INTERDOMAIN`)
+    * xc_evtchn_close (`close(2)`)
+    * xc_evtchn_fd
+    * xc_evtchn_notify (`IOCTL_EVTCHN_NOTIFY`)
+    * xc_evtchn_open (`open(2)`)
+    * xc_evtchn_pending (`read(2)`)
+    * xc_evtchn_unmask (`write(2)`)
+    * xc_hvm_inject_msi (`HVMOP_inject_msi`)
+    * xc_hvm_modified_memory (`HVMOP_modified_memory`)
+    * xc_hvm_set_isa_irq_level (`HVMOP_set_isa_irq_level`)
+    * xc_hvm_set_mem_type (`HVMOP_set_mem_type`)
+    * xc_hvm_set_pci_intx_level (`HVMOP_set_pci_intx_level`)
+    * xc_hvm_set_pci_link_route (`HVMOP_set_pci_link_route`)
+    * xc_hvm_track_dirty_vram (`HVMOP_track_dirty_vram`)
+    * xc_interface_close
+    * xc_interface_open
+    * xc_map_foreign_bulk (`IOCTL_PRIVCMD_MMAPBATCH_V2`)
+    * xc_map_foreign_range (`IOCTL_PRIVCMD_MMAP...`)
+    * xc_set_hvm_param (`HVMOP_set_param`)
+* PCI Passthrough
+    * xc_domain_bind_pt_pci_irq
+    * xc_domain_ioport_mapping
+    * xc_domain_memory_mapping
+    * xc_domain_unbind_msi_irq
+    * xc_domain_unbind_pt_irq
+    * xc_domain_update_msi_irq
+    * xc_physdev_map_pirq
+    * xc_physdev_map_pirq_msi
+    * xc_physdev_unmap_pirq
+* PV backends
+    * xc_evtchn_bind_interdomain (`IOCTL_EVTCHN_BIND_INTERDOMAIN`)
+    * xc_evtchn_notify (`IOCTL_EVTCHN_NOTIFY`)
+    * xc_evtchn_open (`open(2)`)
+    * xc_evtchn_pending (`read(2)`)
+    * xc_evtchn_unbind
+    * xc_evtchn_unmask (`write(2)`)
+    * xc_gnttab_close
+    * xc_gnttab_map_grant_ref
+    * xc_gnttab_munmap
+    * xc_gnttab_open
+    * xc_gnttab_set_max_grants
+    * xc_map_foreign_pages (`IOCTL_PRIVCMD_MMAP...`)
+    * xc_map_foreign_range (`IOCTL_PRIVCMD_MMAP...`)
+
+## `kexec-tools`
+
+    - xc__hypercall_buffer_array_alloc
+    - xc_get_machine_memory_map
+    - xc_get_max_cpus
+    - xc_hypercall_buffer_array_create
+    - xc_hypercall_buffer_array_destroy
+    - xc_interface_close
+    - xc_interface_open
+    - xc_kexec_exec
+    - xc_kexec_get_range
+    - xc_kexec_load
+    - xc_kexec_unload
+    - xc_version
-- 
2.1.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.