From: Ian Campbell <ian.campbell@citrix.com>
To: xen-devel <xen-devel@lists.xen.org>,
Wei Liu <wei.liu2@citrix.com>,
Ian Jackson <Ian.Jackson@eu.citrix.com>,
Stefano Stabellini <Stefano.Stabellini@eu.citrix.com>
Subject: Re: RFC/Proposal: Partial `libxenctrl` API/ABI stabilisation
Date: Tue, 19 May 2015 09:53:24 +0100 [thread overview]
Message-ID: <1432025604.12989.19.camel@citrix.com> (raw)
In-Reply-To: <1431963008.4944.80.camel@citrix.com>
On Mon, 2015-05-18 at 16:30 +0100, Ian Campbell wrote:
> % Partial `libxenctrl` API/ABI stabilisation
I really ought to have CC-d the other tools maintainers on this, done
here.
Note there are some minor updates in a reply to Andy Cooper too.
> % Ian Campbell <ian.campbell@citrix.com>
> % Draft A
>
> # 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.
>
> 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.
>
> # 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.
>
> # 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")))`.
>
> 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 (???)
> - xc_interface_open
> - xc_hypercall_buffer_array_create
> - xc_hypercall_buffer_array_destroy
>
> ## `libxenevtchn`
>
> Interacting with `/dev/xen/evtchn`
>
> - xc_evtchn_alloc_unbound
> - xc_evtchn_bind_interdomain
> - xc_evtchn_bind_unbound_port
> - xc_evtchn_bind_virq
> - xc_evtchn_close
> - xc_evtchn_fd
> - xc_evtchn_notify
> - xc_evtchn_open
> - xc_evtchn_pending
> - xc_evtchn_reset
> - xc_evtchn_status
> - xc_evtchn_unbind
> - xc_evtchn_unmask
>
> ## `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
>
> ## `libxendevicemodel`
>
> Functions specifically for use by device model
>
> ## `libxenkexec`
>
> Functions specifically for use by kexec tools
>
> - xc_kexec_exec
> - xc_kexec_get_range
> - xc_kexec_load
> - xc_kexec_unload
>
> ## `libxentoollog`
>
> Logging stuff (already logically separate?)
>
> - xtl_createlogger_stdiostream
> - xtl_level_to_string
> - xtl_log
> - xtl_logger_destroy
> - xtl_logv
> - xtl_progress
> - xtl_stdiostream_adjust_flags
> - xtl_stdiostream_set_minlevel
>
> ## `libxenctrl` (Unclassified remains)
>
> XXX Lots of this should be internal/hidden
>
> - bitmap_64_to_byte
> - bitmap_byte_to_64
> - call_gmon_start
> - deregister_tm_clones
> - discard_file_cache
> - do_domctl
> - do_evtchn_op
> - __do_global_dtors_aux
> - __do_global_dtors_aux_fini_array_entry
> - do_memory_op
> - do_multicall_op
> - do_physdev_op
> - do_platform_op
> - do_sysctl
> - do_sysctl_save
> - do_tmem_op
> - do_xen_hypercall
> - do_xen_version
> - elfnote_dump_core_header
> - elfnote_dump_format_version
> - elfnote_dump_none
> - elfnote_dump_xen_version
> - elfnote_fill_format_version
> - elfnote_fill_xen_version
> - elfnote_init
> - _fini
> - flush_mmu_updates
> - frame_dummy
> - __frame_dummy_init_array_entry
> - _gnttab_map_table
> - hypercall_buffer_cache_alloc
> - hypercall_buffer_cache_free
> - hypercall_buffer_cache_lock
> - hypercall_buffer_cache_unlock
> - _init
> - linux_evtchn_bind_interdomain
> - linux_evtchn_bind_unbound_port
> - linux_evtchn_bind_virq
> - linux_evtchn_close
> - linux_evtchn_fd
> - linux_evtchn_notify
> - linux_evtchn_open
> - linux_evtchn_pending
> - linux_evtchn_unbind
> - linux_evtchn_unmask
> - linux_gntshr_close
> - linux_gntshr_munmap
> - linux_gntshr_open
> - linux_gntshr_share_pages
> - linux_gnttab_close
> - linux_gnttab_grant_map
> - linux_gnttab_munmap
> - linux_gnttab_open
> - linux_gnttab_set_max_grants
> - linux_osdep_init
> - linux_privcmd_alloc_hypercall_buffer
> - linux_privcmd_close
> - linux_privcmd_free_hypercall_buffer
> - linux_privcmd_hypercall
> - linux_privcmd_map_foreign_batch
> - linux_privcmd_map_foreign_bulk
> - linux_privcmd_map_foreign_range
> - linux_privcmd_map_foreign_ranges
> - linux_privcmd_open
> - local_file_dump
> - modify_returncode
> - progress_erase
> - read_exact
> - register_tm_clones
> - retry_paged
> - stdiostream_destroy
> - stdiostream_message
> - stdiostream_progress
> - stdiostream_vmessage
> - tbuf_enable
> - VALGRIND_PRINTF
> - VALGRIND_PRINTF_BACKTRACE
> - write_exact
> - writev_exact
> - xc_add_mmu_update
> - xc_alloc_mmu_updates
> - xc_assign_device
> - xc_assign_dt_device
> - xc_availheap
> - _xc_clean_errbuf
> - xc_clear_domain_pages
> - xc_clear_last_error
> - xc_copy_to_domain_page
> - xc_core_arch_auto_translated_physmap
> - xc_core_arch_context_get_shdr
> - xc_core_arch_get_scratch_gpfn
> - xc_core_arch_gpfn_may_present
> - xc_core_arch_map_p2m
> - xc_core_arch_map_p2m_rw
> - xc_core_arch_map_p2m_writable
> - xc_core_arch_memory_map_get
> - xc_core_ehdr_init
> - xc_core_shdr_free
> - xc_core_shdr_get
> - xc_core_shdr_init
> - xc_core_shdr_set
> - xc_core_strtab_free
> - xc_core_strtab_get
> - xc_core_strtab_init
> - 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_add_to_physmap
> - xc_domain_bind_pt_irq
> - xc_domain_bind_pt_irq_int
> - 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
> - 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
> - xc_domain_pod_target
> - xc_domain_populate_physmap
> - xc_domain_populate_physmap_exact
> - xc_domain_resume
> - xc_domain_resume_any
> - xc_domain_resume_cooperative
> - 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
> - 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
> - 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_irq_int
> - xc_domain_unbind_pt_spi_irq
> - xc_domain_unpause
> - xc_domain_update_msi_irq
> - xc_domctl
> - xc_enable_turbo
> - xc_error_code_to_desc
> - xc_ffs16
> - xc_ffs32
> - xc_ffs64
> - xc_ffs8
> - xc_flask_access
> - xc_flask_add
> - 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
> - 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
> - xc_get_max_cpus
> - 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
> - xc_hvm_inject_trap
> - xc_hvm_map_io_range_to_ioreq_server
> - xc_hvm_map_pcidev_to_ioreq_server
> - xc_hvm_modified_memory
> - xc_hvm_param_deprecated_check
> - xc_hvm_param_get
> - xc_hvm_param_set
> - xc_hvm_set_ioreq_server_state
> - 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_hvm_unmap_io_range_from_ioreq_server
> - xc_hvm_unmap_pcidev_from_ioreq_server
> - xc__hypercall_bounce_post
> - xc__hypercall_bounce_pre
> - xc__hypercall_buffer_alloc
> - xc__hypercall_buffer_alloc_pages
> - xc__hypercall_buffer_array_alloc
> - xc__hypercall_buffer_array_get
> - xc__hypercall_buffer_cache_release
> - xc__hypercall_buffer_free
> - xc__hypercall_buffer_free_pages
> - _xc_init_errbuf
> - xc_interface_close
> - xc_interface_close_common
> - xc_interface_is_fake
> - xc_interface_open
> - xc_interface_open_common
> - xc_lockprof_query
> - xc_lockprof_query_number
> - xc_lockprof_reset
> - xc_machphys_mfn_list
> - xc_make_page_below_4G
> - xc_map_domain_meminfo
> - xc_map_foreign_batch
> - xc_map_foreign_batch_single
> - xc_map_foreign_bulk
> - xc_map_foreign_bulk_compat
> - xc_map_foreign_pages
> - xc_map_foreign_range
> - xc_map_foreign_ranges
> - 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_memop
> - 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_memop
> - 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_cr0
> - xc_monitor_mov_to_cr3
> - xc_monitor_mov_to_cr4
> - xc_monitor_mov_to_msr
> - xc_monitor_resume
> - xc_monitor_singlestep
> - xc_monitor_software_breakpoint
> - xc_nodemap_alloc
> - xc_numainfo
> - xc_osdep_get_info
> - xc_osdep_log
> - xc_osdep_put
> - xc_osdep_type_name
> - xc_pcitopoinfo
> - xc_perfc_query
> - xc_perfc_query_number
> - xc_perfc_reset
> - xc_pfn_to_mfn
> - 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_resource_op_multi
> - xc_resource_op_one
> - 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
> - 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_sysctl
> - 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_restore_new_pool
> - xc_tmem_save
> - xc_tmem_save_done
> - xc_tmem_save_extra
> - xc_tmem_uuid_parse
> - 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
> - xc_vm_event_control
> - xc_vm_event_enable
> - xc_watchdog
> - xc_interface_close_common
> - xc_interface_open_common
>
> # Symbols used by 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_gnttab_close
> - xc_gnttab_map_grant_ref
> - xc_gnttab_map_grant_refs
> - xc_gnttab_munmap
> - xc_gnttab_open
> - xc_gnttab_set_max_grants
> - 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
>
> # Symbols used by kexec
>
> - 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
>
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
next prev parent reply other threads:[~2015-05-19 8:53 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-18 15:30 RFC/Proposal: Partial `libxenctrl` API/ABI stabilisation Ian Campbell
2015-05-18 15:55 ` Andrew Cooper
2015-05-19 8:52 ` Ian Campbell
2015-05-18 16:06 ` Jan Beulich
2015-05-19 8:40 ` Ian Campbell
2015-05-19 8:48 ` Jan Beulich
2015-05-19 9:48 ` Ian Campbell
2015-05-19 8:53 ` Ian Campbell [this message]
2015-05-20 17:37 ` Stefano Stabellini
2015-05-21 9:01 ` Ian Campbell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1432025604.12989.19.camel@citrix.com \
--to=ian.campbell@citrix.com \
--cc=Ian.Jackson@eu.citrix.com \
--cc=Stefano.Stabellini@eu.citrix.com \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.