From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 42428 invoked by alias); 26 Oct 2015 08:25:34 -0000 Mailing-List: contact systemtap-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: systemtap-owner@sourceware.org Received: (qmail 42419 invoked by uid 89); 26 Oct 2015 08:25:33 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.1 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD autolearn=no version=3.3.2 X-HELO: mail.windriver.com Received: from mail.windriver.com (HELO mail.windriver.com) (147.11.1.11) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Mon, 26 Oct 2015 08:25:31 +0000 Received: from ALA-HCA.corp.ad.wrs.com (ala-hca.corp.ad.wrs.com [147.11.189.40]) by mail.windriver.com (8.15.2/8.15.1) with ESMTPS id t9Q8PTYf011871 (version=TLSv1 cipher=AES128-SHA bits=128 verify=FAIL); Mon, 26 Oct 2015 01:25:29 -0700 (PDT) Received: from [128.224.162.133] (128.224.162.133) by ALA-HCA.corp.ad.wrs.com (147.11.189.50) with Microsoft SMTP Server (TLS) id 14.3.248.2; Mon, 26 Oct 2015 01:25:28 -0700 Subject: Re: [PATCH 1/1] stp: rt: replace spin_lock with stp style lock and use STP_ALLOC_FLAGS To: Santosh Shukla References: <1445499965-23777-1-git-send-email-yanjun.zhu@windriver.com> <562895D7.7000505@windriver.com> <562DD054.1000604@windriver.com> CC: From: yzhu1 Message-ID: <562DE378.90701@windriver.com> Date: Mon, 26 Oct 2015 08:25:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux i686; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: <562DD054.1000604@windriver.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2015-q4/txt/msg00059.txt.bz2 On 10/26/2015 03:03 PM, yzhu1 wrote: > Hi, Santosh > > Thanks for your review. > > Do you mean that I do systemtap's autotest / regression test? > > If so, would you like to let me know how to make > systemtap's autotest / regression test ? I am glad to make such tests. Hi, Santosh Sorry, I mean that the backtrace will not appear and the whole systemtap can work well after this patch is applied to systemtap. That is, the whole systemtap can pass our autotest / regression tests. The tester and I can confirm the above. And I do not know systemtap's autotest / regression tests in systemtap software. If the systemtap's autotest / regression tests exists in systemtap software, please let me know how to make this systemtap's autotest / regression test. Thanks a lot. Zhu Yanjun > > Best Regards! > Zhu Yanjun > > On 10/23/2015 12:04 PM, Santosh Shukla wrote: >> Looks Ok to me. >> >> But I like to know systemtap's autotest / regression test is fine or >> not? Pl. run that regression test and let us know the feedback. >> >> If regression passes then >> >> Reviewed-by : Santosh Shukla >> >> Next time pl. add me in to list incase you want me to review -rt aware >> stap patches. >> >> Thanks. >> >> On Thu, Oct 22, 2015 at 1:22 PM, yzhu1 wrote: >>> Hi, Shukla >>> >>> I am a beginner. To fix bug, I made this patch. Please comment it. >>> >>> Thanks a lot. >>> Zhu Yanjun >>> >>> On 10/22/2015 03:46 PM, Zhu Yanjun wrote: >>>> -rt mode spin lock lead to __might_sleep calltrace. >>>> Replacing spin lock with stp type raw lock and >>>> changing STP_ALLOC_SLEEP_FLAGS to STP_ALLOC_FLAGS solves the problem. >>>> >>>> Call Trace: >>>> [] dump_stack+0x19/0x1b >>>> [] __might_sleep+0xef/0x160 >>>> [] rt_spin_lock+0x20/0x50 >>>> [] d_path+0x79/0x1a0 >>>> [] __stp_get_mm_path.constprop.79+0x49/0x90 >>>> [stap_f5bb3e3c9b162aab5a51afc2375fe9cf_2073] >>>> [] >>>> __stp_utrace_attach_match_tsk.isra.53+0x7b/0x1b0 >>>> [stap_f5bb3e3c9b162aab5a51afc2375fe9cf_2073] >>>> [] __stp_utrace_task_finder_report_exec+0x3c/0x50 >>>> [stap_f5bb3e3c9b162aab5a51afc2375fe9cf_2073] >>>> [] utrace_report_exec+0xb9/0x100 >>>> [stap_f5bb3e3c9b162aab5a51afc2375fe9cf_2073] >>>> [] search_binary_handler+0x332/0x380 >>>> [] do_execve_common.isra.24+0x55c/0x640 >>>> [] do_execve+0x18/0x20 >>>> [] SyS_execve+0x32/0x50 >>>> [] stub_execve+0x69/0xa0 >>>> >>>> Signed-off-by: Zhu Yanjun >>>> --- >>>> runtime/linux/alloc.c | 27 ++++++++++++++++----------- >>>> 1 file changed, 16 insertions(+), 11 deletions(-) >>>> >>>> diff --git a/runtime/linux/alloc.c b/runtime/linux/alloc.c >>>> index 7e7e5ce..914cf2b 100644 >>>> --- a/runtime/linux/alloc.c >>>> +++ b/runtime/linux/alloc.c >>>> @@ -12,6 +12,7 @@ >>>> #define _STAPLINUX_ALLOC_C_ >>>> #include >>>> +#include "stp_helper_lock.h" >>>> static int _stp_allocated_net_memory = 0; >>>> /* Default, and should be "safe" from anywhere. */ >>>> @@ -19,7 +20,11 @@ static int _stp_allocated_net_memory = 0; >>>> & ~__GFP_WAIT) >>>> /* May only be used in context that can sleep. __GFP_NORETRY is to >>>> suppress the oom-killer from kicking in. */ >>>> +#ifndef CONFIG_PREEMPT_RT_FULL >>>> #define STP_ALLOC_SLEEP_FLAGS (GFP_KERNEL | __GFP_NORETRY) >>>> +#else >>>> +#define STP_ALLOC_SLEEP_FLAGS STP_ALLOC_FLAGS >>>> +#endif >>>> /* #define DEBUG_MEM */ >>>> /* >>>> @@ -40,7 +45,7 @@ static int _stp_allocated_net_memory = 0; >>>> static int _stp_allocated_memory = 0; >>>> #ifdef DEBUG_MEM >>>> -static DEFINE_SPINLOCK(_stp_mem_lock); >>>> +static STP_DEFINE_SPINLOCK(_stp_mem_lock); >>>> #define MEM_MAGIC 0xc11cf77f >>>> #define MEM_FENCE_SIZE 32 >>>> @@ -108,9 +113,9 @@ static void *_stp_mem_debug_setup(void *addr, >>>> size_t >>>> size, enum _stp_memtype typ >>>> m->type = type; >>>> m->len = size; >>>> m->addr = addr; >>>> - spin_lock(&_stp_mem_lock); >>>> + stp_spin_lock(&_stp_mem_lock); >>>> list_add(p, &_stp_mem_list); >>>> - spin_unlock(&_stp_mem_lock); >>>> + stp_spin_unlock(&_stp_mem_lock); >>>> return addr; >>>> } >>>> @@ -122,9 +127,9 @@ static void _stp_mem_debug_percpu(struct >>>> _stp_mem_entry *m, void *addr, size_t s >>>> m->type = MEM_PERCPU; >>>> m->len = size; >>>> m->addr = addr; >>>> - spin_lock(&_stp_mem_lock); >>>> + stp_spin_lock(&_stp_mem_lock); >>>> list_add(p, &_stp_mem_list); >>>> - spin_unlock(&_stp_mem_lock); >>>> + stp_spin_unlock(&_stp_mem_lock); >>>> } >>>> static void _stp_mem_debug_free(void *addr, enum _stp_memtype >>>> type) >>>> @@ -133,7 +138,7 @@ static void _stp_mem_debug_free(void *addr, enum >>>> _stp_memtype type) >>>> struct list_head *p, *tmp; >>>> struct _stp_mem_entry *m = NULL; >>>> - spin_lock(&_stp_mem_lock); >>>> + stp_spin_lock(&_stp_mem_lock); >>>> list_for_each_safe(p, tmp, &_stp_mem_list) { >>>> m = list_entry(p, struct _stp_mem_entry, list); >>>> if (m->addr == addr) { >>>> @@ -142,7 +147,7 @@ static void _stp_mem_debug_free(void *addr, enum >>>> _stp_memtype type) >>>> break; >>>> } >>>> } >>>> - spin_unlock(&_stp_mem_lock); >>>> + stp_spin_unlock(&_stp_mem_lock); >>>> if (!found) { >>>> printk("SYSTEMTAP ERROR: Free of unallocated >>>> memory %p >>>> type=%s\n", >>>> addr, _stp_malloc_types[type].free); >>>> @@ -184,7 +189,7 @@ static void _stp_mem_debug_validate(void *addr) >>>> struct list_head *p, *tmp; >>>> struct _stp_mem_entry *m = NULL; >>>> - spin_lock(&_stp_mem_lock); >>>> + stp_spin_lock(&_stp_mem_lock); >>>> list_for_each_safe(p, tmp, &_stp_mem_list) { >>>> m = list_entry(p, struct _stp_mem_entry, list); >>>> if (m->addr == addr) { >>>> @@ -192,7 +197,7 @@ static void _stp_mem_debug_validate(void *addr) >>>> break; >>>> } >>>> } >>>> - spin_unlock(&_stp_mem_lock); >>>> + stp_spin_unlock(&_stp_mem_lock); >>>> if (!found) { >>>> printk("SYSTEMTAP ERROR: Couldn't validate memory >>>> %p\n", >>>> addr); >>>> @@ -551,7 +556,7 @@ static void _stp_mem_debug_done(void) >>>> struct list_head *p, *tmp; >>>> struct _stp_mem_entry *m; >>>> - spin_lock(&_stp_mem_lock); >>>> + stp_spin_lock(&_stp_mem_lock); >>>> list_for_each_safe(p, tmp, &_stp_mem_list) { >>>> m = list_entry(p, struct _stp_mem_entry, list); >>>> list_del(p); >>>> @@ -583,7 +588,7 @@ static void _stp_mem_debug_done(void) >>>> } >>>> } >>>> done: >>>> - spin_unlock(&_stp_mem_lock); >>>> + stp_spin_unlock(&_stp_mem_lock); >>>> return; >>>> >>> > >