aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* xl: add "check-xl-vif-parse" test scriptMathieu Gagne2012-04-243-0/+211
| | | | | | | | | | | | This test script runs "xl -N network-attach 0 <foobar>" against various rate syntax and checks that the output is as expected. [ Added entries to .hgignore and .gitignore for tools/libxl/tmp.* -iwj ] Signed-off-by: Mathieu Gagne <mgagne@iweb.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
* xl: add support for vif rate limitingMathieu Gagne2012-04-248-2/+213
| | | | | | | | | | | | | | | | | | | | | The `rate` keyword specifies the rate at which the outgoing traffic will be limited to. The default if this keyword is not specified is unlimited. The `rate` keyword supports an optional replenishment interval parameter for specifying the granularity of credit replenishment. It determines the frequency at which the vif transmission credit is replenished. The default interval is 50ms. For example: 'rate=10Mb/s' 'rate=250KB/s' 'rate=1MB/s@20ms' Signed-off-by: Mathieu Gagne <mgagne@iweb.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
* libxl: use qemu-xen with PV guests by defaultStefano Stabellini2012-04-241-5/+28
| | | | | | | | | | qemu-xen offers better disk performances than qemu-xen-traditional because it supports Linux native AIO: use it for PV guests if it is available. Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
* libxc: Replace alloca() with mmap() for large array sizesAravindh Puthiyaparambil2012-04-241-4/+38
| | | | | | | | | | | | | | | | | | | | | Replace alloca() with mmap() for array sizes greater than a page in xc_linux_osdep.c. When mapping in large amounts of pages (in the GB range) from a guest in to Dom0 using xc_map_foreign_bulk(), a segfault occurs in the libxc client application. This is because the pfn array in linux_privcmd_map_foreign_bulk() is being allocated using alloca() and the subsequent memcpy causes the stack to blow. This patch replaces the alloca() with mmap() for pfn array sizes greater than a page. Fix an error print with the correct function name. Do the same for the map array in linux_gnttab_grant_map() Signed-off-by: Aravindh Puthiyaparambil <aravindh@virtuata.com> Acked-by: Andres Lagar-Cavilla <andres@lagarcavilla.org> Acked-by: Ian Campbell <ian.campbell@citrix.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
* Makefile: Some updates to uninstallFabio Fantoni2012-04-231-5/+11
| | | | | Signed-off-by: Fabio Fantoni <fabio.fantoni@heliman.it> Committed-by: Ian Jackson <ian.jackson.citrix.com>
* x86: restore vcpu_destroy_pagetables() call on HVM domain teardown.Tim Deegan2012-04-201-3/+4
| | | | | | | | | HVM vcpus that are using shadow pagetables have valid guest_table fields, which need to be tidied up on domain teardown. Signed-off-by: Tim Deegan <tim@xen.org> Acked-by: Jan Beulich <jbeulich@suse.com> Committed-by: Tim Deegan <tim@xen.org>
* vmx: Allow software (user defined) interrupts to be injected in to the guestAravindh Puthiyaparambil2012-04-202-0/+12
| | | | | | | | | If xc_hvm_inject_trap() is called on a software (user defined) interrupt, it causes the guest to crash with a vmentry failure. The following patch fixes this issue. Signed-off-by: Aravindh Puthiyaparambil <aravindh@virtuata.com> Committed-by: Keir Fraser <keir@xen.org>
* Clean up convoluted hvm_inject_exception() logic.Keir Fraser2012-04-201-19/+8
| | | | Signed-off-by: Keir Fraser <keir@xen.org>
* x86/mm: fix parens in mm lock level checkTim Deegan2012-04-191-1/+1
| | | | | | Signed-off-by: Tim Deegan <tim@xen.org> Acked-by: Andres Lagar-Cavilla <andres@lagarcavilla.org> Committed-by: Tim Deegan <tim@xen.org>
* x86/mm: BUG() rather than panic() on mm lock order violationsTim Deegan2012-04-181-2/+5
| | | | | | | | | That gives us a backtrace showing where the bad lock happens. Reported-by: Andres Lagar-Cavilla <andres@lagarcavilla.org Signed-off-by: Tim Deegan <tim@xen.org> Acked-by: Andres Lagar-Cavilla <andres@lagarcavilla.org> Committed-by: Tim Deegan <tim@xen.org>
* x86/mm/shadow: enclose an OOS function in the proper conditional ifdefAndres Lagar-Cavilla2012-04-181-1/+2
| | | | | | | | Otherwise compilation fails if the feature is disabled. Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org> Acked-By: Gianluca Guida <gianluca.guida@citrix.com> Committed-by: Tim Deegan <tim@xen.org>
* x86/mm/sharing: Clean ups for relinquishing shared pages on destroyAndres Lagar-Cavilla2012-04-187-2/+82
| | | | | | | | | | | | | | | | | | | When a domain is destroyed, its pages are freed in relinquish_resources in a preemptible mode, in the context of a synchronous domctl. P2m entries pointing to shared pages are, however, released during p2m cleanup in an RCU callback, and in non-preemptible mode. This is an O(n) operation for a very large n, which may include actually freeing shared pages for which the domain is the last holder. To improve responsiveness, move this operation to the preemtible portion of domain destruction, during the synchronous domain_kill hypercall. And remove the bulk of the work from the RCU callback. Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org> Acked-by: Tim Deegan <tim@xen.org> Committed-by: Tim Deegan <tim@xen.org>
* mem_access: fix setting default mem_access typeAravindh Puthiyaparambil2012-04-181-2/+3
| | | | | | | | | | | | | | | | | When xc_hvm_set_mem_access(xch, domain_id, default_access, ~0ull, 0) is called, first_pfn=~0ull is a hint to HVMOP_set_mem_access as to what the default mem_access type is for the domain. This call was failing because it was gated by the memory range check in the HVMOP_set_mem_access case statement in do_hvm_op(). The following patch fixes this issue. Signed-off-by: Aravindh Puthiyaparambil <aravindh@virtuata.com> Acked-by: Tim Deegan <tim@xen.org> Committed-by: Tim Deegan <tim@xen.org> --- xen/arch/x86/hvm/hvm.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
* x86/mm: Fix locking on hap enable failureAndres Lagar-Cavilla2012-04-181-1/+2
| | | | | | | | | If enabling hap fails due to out of memory, the locking on the clean up path is broken. Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org> Acked-by: Tim Deegan <tim@xen.org> Committed-by: Tim Deegan <tim@xen.org>
* x86/mem_event: Fix foreign domain flag in grab_slotAndres Lagar-Cavilla2012-04-181-1/+1
| | | | | | Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org> Acked-by: Tim Deegan <tim@xen.org> Committed-by: Tim Deegan <tim@xen.org>
* xl: xl network-attach -N (dry run) optionMathieu Gagne2012-04-172-1/+11
| | | | | | | | Add dryrun for testing and debugging purposes. Signed-off-by: Mathieu Gagne <mgagne@iweb.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
* xl: cleanup indentationMathieu Gagne2012-04-171-4/+4
| | | | | | Signed-off-by: Mathieu Gagne <mgagne@iweb.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
* libxl: Query VNC listening port through QMPAnthony PERARD2012-04-171-0/+59
| | | | | | | | | | Currently `xl vncviewer $dom` does not work because the VNC port is not registered in xenstore when using qemu-upstream. This patch attempted to fix this. Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
* MergeIan Jackson2012-04-175-24/+90
|\
| * x86-64: fix updating of UREGS_rip when converting sysenter to #GPJan Beulich2012-04-171-1/+1
| | | | | | | | | | | | | | | | (I spotted this copy-and-paste mistake only when backporting c/s 25200:80f4113be500 to 4.1 and 4.0.) Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Keir Fraser <keir@xen.org>
| * x86: suppress warning messages on IO-APIC-less systemsJan Beulich2012-04-171-0/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Each call to mp_register_gsi() so far produced two warnings (about not being able to find the corresponding IO-APIC pin). However, we should use the provided information for setting the ELCR correctly (we might want to even do this when there is an IO-APIC, if was absolutely certain that all machines really have this register [and specifically not some other device at the two I/O ports in question]). It is in any case questionable that we allow Dom0 to set this register - it could particularly be the interrupt of a plug-in serial port card that might not work due to this. The problem is that all Dom0 kernels to date do so, hence we can't simply #GP on such an access (which would be the result if we disallowed access to the port as we should have done from the beginning). Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Keir Fraser <keir@xen.org>
| * x86/IO-APIC: adjust an otherwise pretty useless messageJan Beulich2012-04-171-2/+2
| | | | | | | | | | Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Keir Fraser <keir@xen.org>
| * x86/ioapic: Add register level checks to detect bogus io-apic entriesSuresh Siddha2012-04-171-1/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | With the recent changes to clear_IO_APIC_pin() which tries to clear remoteIRR bit explicitly, some of the users started to see "Unable to reset IRR for apic .." messages. Close look shows that these are related to bogus IO-APIC entries which returns all 1s for their io-apic registers. And the above mentioned error messages are benign. But kernel should have ignored such io-apic's in the first place. Check if register 0, 1, 2 of the listed io-apic are all 1s and ignore such io-apic. [original Linux patch:] Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com> Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Keir Fraser <keir@xen.org> Committed-by: Jan Beulich <jbeulich@suse.com>
| * x86-64: fix #GP generation in assembly codeJan Beulich2012-04-173-21/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When guest use of sysenter (64-bit PV guest) or syscall (32-bit PV guest) gets converted into a GP fault (due to no callback having got registered), we must - honor the GP fault handler's request the keep enabled or mask event delivery - not allow TBF_EXCEPTION to remain set past the generation of the (guest) exception in the vCPU's trap_bounce.flags, as that would otherwise allow for the next exception occurring in guest mode, should it happen to get handled in Xen itself, to nevertheless get bounced to the guest kernel. Also, just like compat mode syscall handling already did, native mode sysenter handling should, when converting to #GP, subtract 2 from the RIP present in the frame so that the guest's GP fault handler would see the fault pointing to the offending instruction instead of past it. Finally, since those exception generating code blocks needed to be modified anyway, convert them to make use of UNLIKELY_{START,END}(). Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Keir Fraser <keir@xen.org>
* | tools/libvchan: Remove unwanted debugging codeOlaf Hering2012-04-171-23/+0
|/ | | | | | | | | | | | | | | | -O2 -Wall -Werror triggers these warnings: io.c: In function 'do_send': io.c:196: warning: ignoring return value of 'writev', declared with attribute warn_unused_result io.c: In function 'do_recv': io.c:287: warning: ignoring return value of 'writev', declared with attribute warn_unused_result writev to -1 will always fail, silence the warning by removing the offending (disabled) debug code. Signed-off-by: Olaf Hering <olaf@aepfle.de> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
* gnttab: remove pointless NULL checkJan Beulich2012-04-171-7/+1
| | | | | | | | | | Domains in the domain hash (and hence locatable via the usual lookup functions) can't have a NULL grant table pointer; no other function performs such a check, so remove it from gnttab_prepare_for_transfer() for consistency. Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Keir Fraser <keir@xen.org>
* xsm/flask: clean up auditing outputDaniel De Graaf2012-04-173-9/+18
| | | | | | | | | | | The audit data for normal MMU updates was incorrectly using the RANGE type which presented the data badly in audit messages; add a MEMORY type for this showing the correct names for the fields. This patch also shows the target domain in event channel mapping checks to make debugging those denials easier. Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov> Committed-by: Keir Fraser <keir@xen.org>
* fix build error when enabling lock profileYang Zhang2012-04-171-1/+0
| | | | | Signed-off-by: Yang Zhang <yang.z.zhang@Intel.com> Committed-by: Keir Fraser <keir@xen.org>
* Fix save/restore of guest PAT table in HAP paging mode.Gianluca Guida2012-04-175-24/+89
| | | | | | | | | | | | | | HAP paging mode guests use direct MSR read/write into the VMCS/VMCB for the guest PAT table, while the current save/restore code was accessing only the pat_cr field in hvm_vcpu, used when intercepting the MSR mostly in shadow mode (the Intel scenario is a bit more complicated). This patch fixes this issue creating a new couple of hvm_funcs, get/set_guest_pat, that access the right PAT table based on the paging mode and guest configuration. Signed-off-by: Gianluca Guida <gianluca.guida@citrix.com> Acked-by: Tim Deegan <tim@xen.org> Committed-by: Keir Fraser <keir@xen.org>
* x86/cpuidle: do not flush cache unless entering C3Wei Wang2012-04-161-2/+5
| | | | | | | | | Nor is there a need to disable bus master arbitration in that case. Signed-off-by: Wei Wang <wei.wang2@amd.com> Modified-by: Zhang, Yang Z <yang.z.zhang@intel.com> Signed-off-by: Jan Beulich <jbeulich@suse.com> Committed-by: Jan Beulich <jbeulich@suse.com>
* tools: Revert c/s 25150:b490ef93bad7 tools/libfsimage: include Rules.mk firstGeorge Dunlap2012-04-138-8/+16
| | | | | | | | | | | | | tools/libfsimage/Rules.mk relies on having certain variables set already; if they're not set, the definitions dont' work right. The result was a bunch of empty files and pygrub failing with an uninformative error message. It's likely that this didn't cause anyone problems becasue changing the Makefiles didn't cause a re-build; building from a fresh repo results in completely empty filesystem plugin binaries. Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
* xen: Fix failure paths for xentraceGeorge Dunlap2012-04-121-6/+9
| | | | | | | | | | | | | | Problems this addresses: * After the allocation of t_info fails, the path the code takes tries to free t_info. Jump past that part instead. * The failure code assumes that unused data is zero; but the structure is never initialized. Zero the structure before using it. * The t_info pages are shared with dom0 before we know that the whole operation will succeed, and not un-shared afterwards. Don't share the pages until we know the whole thing will succeed. Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com> Committed-by: Keir Fraser <keir@xen.org>
* tools/blktap2: fix 'make clean'Tim Deegan2012-04-051-1/+1
| | | | | Signed-off-by: Tim Deegan <tim@xen.org> Committed-by: Ian Jackson <ian.jackson.citrix.com>
* x86: fix delta calculation in TSC deadline timer emulationDavid Vrabel2012-04-111-8/+4
| | | | | | | | | | | | | In the virtual LAPIC, correct the delta calculation when emulating the TSC deadline timer. Without this fix, XenServer (which is based on Xen 4.1) does not work when running as an HVM guest. dom0 fails to boot because its timer interrupts are very delayed (by several minutes in some cases). Signed-off-by: David Vrabel <david.vrabel@citrix.com> Acked-by: Jan Beulich <jbeulich@suse.com> Committed-by: Keir Fraser <keir@xen.org>
* libxl: provide STATE_AO_GCIan Jackson2012-04-111-3/+8
| | | | | | | | | Provide a convenience macro for use in ao callback functions, and document that it should be used. Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
* libxl: Protect fds with CLOEXEC even with forking threadsIan Jackson2012-04-116-1/+232
| | | | | | | | | | | | | | | | | | | We introduce a new "carefd" concept, which relates to fds that we care about not being inherited by long-lived children. As yet we do not use this anywhere in libxl. Until all locations in libxl which make such fds are converted, libxl__postfork may not work entirely properly. If these locations do not use O_CLOEXEC (or use calls for which there is no O_CLOEXEC) then multithreaded programs may not work properly. This introduces a new API call libxl_postfork_child_noexec which must be called by applications which make long-running non-execing children. Add the appropriate call to xl's postfork function. Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
* libxl: libxl_event.c:beforepoll_internal, REQUIRE_FDSIan Jackson2012-04-111-26/+56
| | | | | | | | | | | Introduce definition and use of a new function-local macro REQUIRE_FDS to avoid repeatedly spelling out which fds we are interested in. We are going to introduce a new fd for the SIGCHLD self-pipe. Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
* libxl: abolish libxl_ctx_postforkIan Jackson2012-04-115-14/+11
| | | | | | | | | | | | | libxl's task has become too complicated (particularly in the presence of both forking and multithreading) to support reuse of the same libxl_ctx after fork. So abolish libxl_ctx_fork. xl instead simply initialises a new libxl_ctx. Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
* libxl: include <_libxl_paths.h> in libxl_internal.hIan Jackson2012-04-113-4/+2
| | | | | | | | | | | | | | | | | | | | | | Ie, we permit general code in libxl direct access to the manifest constants such as XEN_RUN_DIR. This simplifies their use in (eg) format strings. This might be controversial because it will make it difficult to make any of these runtime-configurable later without changing lots of use sites. But I don't think it's likely we'll want to do that. For the moment, leave existing call sites of all the functions in libxl_paths.c unchanged. The simplified use arrangements can be used in new code and when we update call sites for other reasons. Also correct the dependencies in the Makefile so that _libxl_paths.h is generated before anything that uses libxl_internal.h. Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Signed-off-by: Roger Pau Monne <roger.pau@entel.upc.edu> Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
* libxl: Provide libxl_string_list_lengthIan Jackson2012-04-112-0/+9
| | | | | | Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
* libxl: include <ctype.h> and introduce CTYPE helper macroIan Jackson2012-04-111-0/+20
| | | | | | Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
* libxl: Introduce some convenience macrosIan Jackson2012-04-111-0/+72
| | | | | | | | | | | | | | | | | | | | We introduce: <type> *GCNEW(<type> *var); <type> *GCNEW_ARRAY(<type> *var, ssize_t nmemb); <type> *GCREALLOC_ARRAY(<type> *var, size_t nmemb); char *GCSPRINTF(const char *fmt, ...); void LOG(<xtl_level_suffix>, const char *fmt, ...); void LOGE(<xtl_level_suffix>, const char *fmt, ...); void LOGEV(<xtl_level_suffix>, int errnoval, const char *fmt, ...); all of which expect, in the calling context, libxl__gc *gc; Most of these will find callers in subsequent patches. The exceptions are the orthogonally necessary LOGE and LOGEV, and GCREALLOC_ARRAY. Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
* libxl: Make libxl__zalloc et al tolerate a NULL gcIan Jackson2012-04-112-9/+17
| | | | | | | | | | Arrange that if we pass NULL as a gc, we simply don't register the pointer. This instantly gives us non-gc'ing but error-checking versions of malloc, realloc, vasprintf, etc. Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
* libxl: Crash (more sensibly) on malloc failureIan Jackson2012-04-113-45/+52
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Formally change the libxl memory allocation failure policy to "crash". Previously we had a very uneven approach; much code assumed that libxl__sprintf (for example) would never return NULL, but some code was written more carefully. We think it is unlikely that we will be able to make the library actually robust against allocation failure (since that would be an awful lot of never-tested error paths) and few calling environments will be able to cope anyway. So, instead, adopt the alternative approach: provide allocation functions which never return null, but will crash the whole process instead. Consequently, - New noreturn function libxl__alloc_failed which may be used for printing a vaguely-useful error message, rather than simply dereferencing a null pointer. - libxl__ptr_add now returns void as it crashes on failure. - libxl__zalloc, _calloc, _strdup, _strndup, crash on failure using libxl__alloc_failed. So all the code that uses these can no longer dereference null on malloc failure. While we're at it, make libxl__ptr_add use realloc rather than emulating it with calloc and free, and make it grow the array exponentially rather than linearly. Things left to do: - Remove a lot of now-spurious error handling. - Remove the ERROR_NOMEM error code. Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
* tools: Use PTHREAD_CFLAGS, _LDFLAGS, _LIBSIan Jackson2012-04-114-6/+15
| | | | | | | | | | | Replace all literal occurrences of -lpthread and -pthread in Makefiles by references to PTHREAD_CFLAGS, PTHREAD_LDFLAGS and PTHREAD_LIBS. These are the new variables set by configure, and currently expand to -pthread on the compilation and link lines as is required. Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
* libxl: Use PTHREAD_CFLAGS, LDFLAGS, LIBSIan Jackson2012-04-111-0/+4
| | | | | | | | | This is going to be needed for pthread_atfork. It is a mystery why it hasn't been needed before. Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
* tools: Correct PTHREAD options in config/StdGNU.mkIan Jackson2012-04-117-32/+130
| | | | | | | | | | | | | | | | | | | | | | It is not correct to say -lpthread. The correct option is -pthread, which may have sundry other effects on code generation etc. It needs to be passed both to compilation and linking. Fix the configure test to test -pthread, and plumb the resulting flag through to PTHREAD_{CFLAGS,LDFLAGS} in Tools.mk; also substitute PTHREAD_LIBS (although this will currently always be empty). Remove PTHREAD_LIBS setting from StdGNU.mk. Fix the one user (libxc) to use PTHREAD_{CFLAGS,LDFLAGS} too. There are still some other users in tree which pass -pthread or -lpthread by adding it as a literal to their own compiler options. These will be fixed in a later patch. Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com> Cc: Roger Pau Monne <roger.pau@entel.upc.edu> Acked-by: Roger Pau Monne <roger.pau@entel.upc.edu> Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
* libxl: Fix leak of ctx->lockIan Jackson2012-04-111-4/+13
| | | | | | | | | | | | | A mutex created with pthread_mutex_init, like ctx->lock, may need to be destroyed with pthread_mutex_destroy. Also, previously, if libxl__init_recursive_mutex failed, the nascent ctx would be leaked. Add some comments which will hopefully make these kind of mistakes less likely in future. Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
* libxl: remove poller from list in libxl__poller_getRoger Pau Monne2012-04-111-1/+3
| | | | | | | | | Remove poller from the list once it has been requested. Fixes a double-free bug. Signed-off-by: Roger Pau Monne <roger.pau@citrix.com> Acked-by: Ian Jackson <ian.jackson@citrix.com> Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
* libxl: Fix eventloop_iteration over-lockingIan Jackson2012-04-112-6/+2
| | | | | | | | | | | | | | | | | | | | eventloop_iteration's head comment says that it must be called with the ctx locked exactly once, and this is indeed true, and it's done correctly at both the call sites. However, it takes out the lock an additional time itself. This is wrong because it prevents the unlocks around poll from being effective. This would mean that a multithreaded event-loop using program might suffer from undesired blocking, as one thread trying to enter libxl might end up stalled by another thread waiting for a slow event. So remove those two lock calls. Also add a couple of comments documenting the locking behaviour of libxl__ao_inprogress and libxl__egc_cleanup. Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>