Message ID | 1330954469.2986.5559.camel@triegel.csb |
---|---|
State | New |
Headers | show |
On Mon, Mar 5, 2012 at 2:34 PM, Torvald Riegel <triegel@redhat.com> wrote: > This patch skips execution of memtransfer/memset if there actually isn't > anything to do. Calls to memcpy/memmove/memset with size==0 should be > rare I'd suppose but prior code would still treat this no-op like some > store (ml_wt was particularly bad: it would to acquire _all_ locks in > such a case due to calculating a correct exclusive upper bound anymore). > > OK for trunk? > 4.7 too? Not before 4.7.0 please. Richard.
diff --git a/libitm/dispatch.h b/libitm/dispatch.h index d059c49..6a9e62e 100644 --- a/libitm/dispatch.h +++ b/libitm/dispatch.h @@ -102,11 +102,13 @@ virtual void memtransfer(void *dst, const void* src, size_t size, \ bool may_overlap, ls_modifier dst_mod, ls_modifier src_mod) \ { \ - memtransfer_static(dst, src, size, may_overlap, dst_mod, src_mod); \ + if (size > 0) \ + memtransfer_static(dst, src, size, may_overlap, dst_mod, src_mod); \ } \ virtual void memset(void *dst, int c, size_t size, ls_modifier mod) \ { \ - memset_static(dst, c, size, mod); \ + if (size > 0) \ + memset_static(dst, c, size, mod); \ } #define CREATE_DISPATCH_METHODS_MEM_PV() \