From patchwork Mon Oct 24 14:42:43 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Siddhesh Poyarekar X-Patchwork-Id: 16760 Received: (qmail 84616 invoked by alias); 24 Oct 2016 14:43:06 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 84600 invoked by uid 89); 24 Oct 2016 14:43:05 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.1 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE, SPF_NEUTRAL autolearn=no version=3.3.2 spammy=sk:memory_, LIBC_PROBE, libc_probe, consistently X-HELO: homiemail-a45.g.dreamhost.com From: Siddhesh Poyarekar To: libc-alpha@sourceware.org Subject: [PATCH 1/6] Static inline functions for mallopt helpers Date: Mon, 24 Oct 2016 20:12:43 +0530 Message-Id: <1477320168-23397-2-git-send-email-siddhesh@sourceware.org> In-Reply-To: <1477320168-23397-1-git-send-email-siddhesh@sourceware.org> References: <1477320168-23397-1-git-send-email-siddhesh@sourceware.org> Make mallopt helper functions for each mallopt parameter so that it can be called consistently in other areas, like setting tunables. * malloc/malloc.c (do_set_mallopt_check): New function. (do_set_mmap_threshold): Likewise. (do_set_mmaps_max): Likewise. (do_set_top_pad): Likewise. (do_set_perturb_byte): Likewise. (do_set_trim_threshold): Likewise. (do_set_arena_max): Likewise. (do_set_arena_test): Likewise. (__libc_mallopt): Use them. --- malloc/malloc.c | 126 +++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 92 insertions(+), 34 deletions(-) diff --git a/malloc/malloc.c b/malloc/malloc.c index a849901..0011a6d 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -4723,6 +4723,90 @@ __malloc_stats (void) /* ------------------------------ mallopt ------------------------------ */ +static inline int +__always_inline +do_set_mallopt_check (int32_t value) +{ + LIBC_PROBE (memory_mallopt_check_action, 2, value, check_action); + check_action = value; + return 1; +} + +static inline int +__always_inline +do_set_mmap_threshold (size_t value) +{ + if (value <= HEAP_MAX_SIZE / 2) + { + LIBC_PROBE (memory_mallopt_mmap_threshold, 3, value, mp_.mmap_threshold, + mp_.no_dyn_threshold); + mp_.mmap_threshold = value; + mp_.no_dyn_threshold = 1; + return 1; + } + return 0; +} + +static inline int +__always_inline +do_set_mmaps_max (int32_t value) +{ + LIBC_PROBE (memory_mallopt_mmap_max, 3, value, mp_.n_mmaps_max, + mp_.no_dyn_threshold); + mp_.n_mmaps_max = value; + mp_.no_dyn_threshold = 1; + return 1; +} + +static inline int +__always_inline +do_set_top_pad (size_t value) +{ + LIBC_PROBE (memory_mallopt_top_pad, 3, value, mp_.top_pad, + mp_.no_dyn_threshold); + mp_.top_pad = value; + mp_.no_dyn_threshold = 1; + return 1; +} + +static inline int +__always_inline +do_set_perturb_byte (int32_t value) +{ + LIBC_PROBE (memory_mallopt_perturb, 2, value, perturb_byte); + perturb_byte = value; + return 1; +} + +static inline int +__always_inline +do_set_trim_threshold (size_t value) +{ + LIBC_PROBE (memory_mallopt_trim_threshold, 3, value, mp_.trim_threshold, + mp_.no_dyn_threshold); + mp_.trim_threshold = value; + mp_.no_dyn_threshold = 1; + return 1; +} + +static inline int +__always_inline +do_set_arena_max (size_t value) +{ + LIBC_PROBE (memory_mallopt_arena_max, 2, value, mp_.arena_max); + mp_.arena_max = value; + return 1; +} + +static inline int +__always_inline +do_set_arena_test (size_t value) +{ + LIBC_PROBE (memory_mallopt_arena_test, 2, value, mp_.arena_test); + mp_.arena_test = value; + return 1; +} + int __libc_mallopt (int param_number, int value) @@ -4751,63 +4835,37 @@ __libc_mallopt (int param_number, int value) break; case M_TRIM_THRESHOLD: - LIBC_PROBE (memory_mallopt_trim_threshold, 3, value, - mp_.trim_threshold, mp_.no_dyn_threshold); - mp_.trim_threshold = value; - mp_.no_dyn_threshold = 1; + do_set_trim_threshold (value); break; case M_TOP_PAD: - LIBC_PROBE (memory_mallopt_top_pad, 3, value, - mp_.top_pad, mp_.no_dyn_threshold); - mp_.top_pad = value; - mp_.no_dyn_threshold = 1; + do_set_top_pad (value); break; case M_MMAP_THRESHOLD: - /* Forbid setting the threshold too high. */ - if ((unsigned long) value > HEAP_MAX_SIZE / 2) - res = 0; - else - { - LIBC_PROBE (memory_mallopt_mmap_threshold, 3, value, - mp_.mmap_threshold, mp_.no_dyn_threshold); - mp_.mmap_threshold = value; - mp_.no_dyn_threshold = 1; - } + res = do_set_mmap_threshold (value); break; case M_MMAP_MAX: - LIBC_PROBE (memory_mallopt_mmap_max, 3, value, - mp_.n_mmaps_max, mp_.no_dyn_threshold); - mp_.n_mmaps_max = value; - mp_.no_dyn_threshold = 1; + do_set_mmaps_max (value); break; case M_CHECK_ACTION: - LIBC_PROBE (memory_mallopt_check_action, 2, value, check_action); - check_action = value; + do_set_mallopt_check (value); break; case M_PERTURB: - LIBC_PROBE (memory_mallopt_perturb, 2, value, perturb_byte); - perturb_byte = value; + do_set_perturb_byte (value); break; case M_ARENA_TEST: if (value > 0) - { - LIBC_PROBE (memory_mallopt_arena_test, 2, value, mp_.arena_test); - mp_.arena_test = value; - } + do_set_arena_test (value); break; case M_ARENA_MAX: if (value > 0) - { - LIBC_PROBE (memory_mallopt_arena_max, 2, value, mp_.arena_max); - mp_.arena_max = value; - } + do_set_arena_test (value); break; } __libc_lock_unlock (av->mutex);