From nobody Thu Jun 11 02:45:42 2026 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 71D4234C981 for ; Tue, 9 Jun 2026 14:40:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016030; cv=none; b=EwpdETDkhl8bPDVatsJ43UorI/+W+XJLpl5Fq+CS+GDx+Re5lHykaC53up5w+VD8GaNH033alDljzHakgDOmP4gnp0KI8sp6hfhb17lsOJhCGR/Y7Cf0wQa/bVwLDCjB4PeJAjpL48L5VeY9I4wwcn1zwARp3hq++FVBEgiB0h0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016030; c=relaxed/simple; bh=gzxrUJbtfjWTpc3zGDl9kezrEOn2hVE7sLoZYTUVPlk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dEvCwmUwpTXOD2JBRYJBtOG2bwdLTh0PDNXqt3wYrdpBBjID3/umNcruF6x4IGcfVQl3tVUT52OAXI4rURMSAJkppuJy7AKA9/VmzGyZJGJ6NIgY/WNmf1cxey0AQvf/2g7RsvUmupkel19hSEsrwmJoS/8muVSlbx9oPCOVilU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=is7pXH2q; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="is7pXH2q" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-490c1915793so37967615e9.2 for ; Tue, 09 Jun 2026 07:40:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781016025; x=1781620825; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=xpGnyLvwWq67NnsCJpMBssWvTtwEzrclFBuzAjBljx4=; b=is7pXH2qgAlYWGJJnpMLVEQHJ2qNY2wnYeODNDzBw/ZNAq1z2M/AWtLCofYkVzrJeC jQdBx44PLbS0ZRh/pwzPfCneqslqpJWiSaSjOpy3aEXKL1PWs5iayyNhCB4k7aViJ4aF 85eEGdBE8pJB0EN/JEFP7C7temWa/2FuVkhJlT0pfvbR7ioYI8QXIzQ2kSapShVRNgtQ q5mC1SxYOAkbYFdiTtnh49nd+mvXjqUjJ6u+sBnDWvPSQWkq7gKi77VeRw6kAIcFSZIG +Tja2Y8uVKaHowYwi0LaxjXlSIf20DmW9AkfmwXHtdQyI27owJJ0rHlovh28U96Q6oXQ dpRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781016025; x=1781620825; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=xpGnyLvwWq67NnsCJpMBssWvTtwEzrclFBuzAjBljx4=; b=gVfsNNFvXLc1zsFehJYj3dtxm5Sa+OH3MPc9McW7OfXPKbOpS4+2FkPKrie3B76CFI iOB7Wlt5TCoT7TcESajrWko42Wx8K2/Z5qdxWiH7HggLYR/u38rEL0F4R1IclVh/GNcU 362WmxOkT2UK+eg4+Pu6fccZavTVsgx/ziixXeK2EIA2VtfkjQxe0QdBWs9Suec0CMeK ZE0qod7oZsL5iHdN3oPoEJL9E34lQkjw68qtAaCIkT3vBKM4gyOtwbOM+Nk7EKr+LShg e3dHiWrBXf0wGlAFA+EtzqOOQ4Y6GzIvCYhecDFFtWitUtXugwcWbHvLOyzZpAVl4cCG npmw== X-Forwarded-Encrypted: i=1; AFNElJ9J1wBT0Arwzuf4LjBhnt+WeRhYw98yfpel8BahDkqBIkqH7hs6i/kaURx/j5uRdoww+vqsusa6OCef0WM=@vger.kernel.org X-Gm-Message-State: AOJu0YzkYrZ1jZ+kSpS3Qgm4QxYDlj5sNiby59ig3eT3rXH9cFC3riZl YOrJFEylO8ShaTjTvLr7Cl+8eiSn7DjCLgXMmePXINtXmpLiqJx4wHTQZLiiIqpzHh0= X-Gm-Gg: Acq92OEqdvwdFTW7KRpmNLiaS0Zs6z+EihHveg9kxqUddtseOBQMHtkQnrvJzRKcuoc 9xUVuT8w8PgWsjABIFTaSMBZhYprZUEiHGglu6EQD6OUZQyP5MI+jFNmU2uCCAuLbjpA8vd70q2 lpkD1Zp2pdsgW/Cp2ZSoOid67E8duvLCe2pMD9aNIhdvK3uSTp3DllFwDHeORkvTf+w61dytg7c Z4yj/I7NgdfZmCnpbiiWRzebLixekpdFuTf7mlsUdwiOiMmLB98SqzGFETw7U+NTvFVuTsBT2Vv 3pgNyCxBp77DRb2aAumcmIugw0MGQBg4hPpN/DBYdbJ8Btz/wNrvil1U5xAbE4Kr0nhmabQML0n tPiuOaymdk8LOrva+b6Om5HxEsF5o3TVpWTL1T0tF0hPlwdjk1CC6/Oq0zg5EN/abAJ3K/a9P0n UZH5CL4V/p3DQCdBx7MFDOgx4SYasYNipsaivmPG1SmoM= X-Received: by 2002:a05:600c:4e55:b0:490:b642:ce29 with SMTP id 5b1f17b1804b1-490c25bec84mr329212045e9.8.1781016024695; Tue, 09 Jun 2026 07:40:24 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3c1149sm428411935e9.4.2026.06.09.07.40.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 07:40:23 -0700 (PDT) From: James Clark Date: Tue, 09 Jun 2026 15:40:06 +0100 Subject: [PATCH v5 01/19] perf cs-etm: Queue context packets for frontend Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-james-cs-context-tracking-fix-v5-1-d53a7d096a19@linaro.org> References: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> In-Reply-To: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> To: Suzuki K Poulose , Mike Leach , Leo Yan , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Ian Rogers , Amir Ayupov , Jonathan Corbet , Shuah Khan , Paschalis Mpeis Cc: coresight@lists.linaro.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo , linux-doc@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 PE_CONTEXT elements update the context ID and exception level, but the decoder may still have prior packets cached for frontend processing. Updating the context immediately in the decoder backend can make those cached packets get consumed with the wrong thread or EL state. Add a CS_ETM_CONTEXT packet carrying the TID and EL to the frontend, this keeps context changes ordered with the rest of the packet stream and avoids mismatches when synthesizing samples from cached packets. Separate the memory access function into one for the frontend and one for decoding. The frontend also needs memory access to attach the instruction to samples. Because the frontend does memory access for both previous and current packets, change all the frontend memory access function signatures to take both a tidq and packet. But backend always uses the current backend EL and thread from the tidq. Treat context packets as a boundary for branch sample generation and remove tidq->prev_packet_thread because it's not possible to branch to a different thread, so only tracking the current thread is required for sample generation. Fixes: e573e978fb12 ("perf cs-etm: Inject capabilitity for CoreSight traces= ") Reported-by: Amir Ayupov Closes: https://lore.kernel.org/linux-perf-users/20260515021135.1729028-1-a= aupov@meta.com/ Co-authored-by: James Clark Signed-off-by: Leo Yan Signed-off-by: James Clark --- tools/perf/util/cs-etm-decoder/cs-etm-decoder.c | 21 ++- tools/perf/util/cs-etm.c | 236 ++++++++++++++------= ---- tools/perf/util/cs-etm.h | 8 +- 3 files changed, 163 insertions(+), 102 deletions(-) diff --git a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c b/tools/perf/u= til/cs-etm-decoder/cs-etm-decoder.c index dee3020ceaa9..26940f1f1b0b 100644 --- a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c +++ b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c @@ -402,6 +402,8 @@ cs_etm_decoder__buffer_packet(struct cs_etm_queue *etmq, packet_queue->packet_buffer[et].flags =3D 0; packet_queue->packet_buffer[et].exception_number =3D UINT32_MAX; packet_queue->packet_buffer[et].trace_chan_id =3D trace_chan_id; + packet_queue->packet_buffer[et].el =3D ocsd_EL_unknown; + packet_queue->packet_buffer[et].tid =3D -1; =20 if (packet_queue->packet_count =3D=3D CS_ETM_PACKET_MAX_BUFFER - 1) return OCSD_RESP_WAIT; @@ -449,6 +451,7 @@ cs_etm_decoder__buffer_range(struct cs_etm_queue *etmq, packet->last_instr_type =3D elem->last_i_type; packet->last_instr_subtype =3D elem->last_i_subtype; packet->last_instr_cond =3D elem->last_instr_cond; + packet->el =3D elem->context.exception_level; =20 if (elem->last_i_type =3D=3D OCSD_INSTR_BR || elem->last_i_type =3D=3D OC= SD_INSTR_BR_INDIRECT) packet->last_instr_taken_branch =3D elem->last_instr_exec; @@ -525,7 +528,9 @@ cs_etm_decoder__set_tid(struct cs_etm_queue *etmq, const ocsd_generic_trace_elem *elem, const uint8_t trace_chan_id) { + struct cs_etm_packet *packet; pid_t tid =3D -1; + int ret; =20 /* * Process the PE_CONTEXT packets if we have a valid contextID or VMID. @@ -546,12 +551,18 @@ cs_etm_decoder__set_tid(struct cs_etm_queue *etmq, break; } =20 - if (cs_etm__etmq_set_tid_el(etmq, tid, trace_chan_id, - elem->context.exception_level)) + if (cs_etm__etmq_update_decode_context(etmq, trace_chan_id, + elem->context.exception_level, tid)) return OCSD_RESP_FATAL_SYS_ERR; =20 - if (tid =3D=3D -1) - return OCSD_RESP_CONT; + ret =3D cs_etm_decoder__buffer_packet(etmq, packet_queue, trace_chan_id, + CS_ETM_CONTEXT); + if (ret !=3D OCSD_RESP_CONT && ret !=3D OCSD_RESP_WAIT) + return ret; + + packet =3D &packet_queue->packet_buffer[packet_queue->tail]; + packet->tid =3D tid; + packet->el =3D elem->context.exception_level; =20 /* * A timestamp is generated after a PE_CONTEXT element so make sure @@ -559,7 +570,7 @@ cs_etm_decoder__set_tid(struct cs_etm_queue *etmq, */ cs_etm_decoder__reset_timestamp(packet_queue); =20 - return OCSD_RESP_CONT; + return ret; } =20 static ocsd_datapath_resp_t cs_etm_decoder__gen_trace_elem_printer( diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c index 40c6ddfa8c8d..5e92359f51a7 100644 --- a/tools/perf/util/cs-etm.c +++ b/tools/perf/util/cs-etm.c @@ -85,15 +85,22 @@ struct cs_etm_traceid_queue { u64 period_instructions; size_t last_branch_pos; union perf_event *event_buf; - struct thread *thread; - struct thread *prev_packet_thread; - ocsd_ex_level prev_packet_el; - ocsd_ex_level el; struct branch_stack *last_branch; struct branch_stack *last_branch_rb; struct cs_etm_packet *prev_packet; struct cs_etm_packet *packet; struct cs_etm_packet_queue packet_queue; + + struct thread *decode_thread; + ocsd_ex_level decode_el; + + /* + * The frontend accesses the EL from '[prev_]packet' because it needs + * previous EL for branch and current EL for instruction samples. It's + * not possible to change thread in a single branch sample so no need to + * store or access the thread through the packet. + */ + struct thread *frontend_thread; }; =20 enum cs_etm_format { @@ -614,10 +621,11 @@ static int cs_etm__init_traceid_queue(struct cs_etm_q= ueue *etmq, =20 queue =3D &etmq->etm->queues.queue_array[etmq->queue_nr]; tidq->trace_chan_id =3D trace_chan_id; - tidq->el =3D tidq->prev_packet_el =3D ocsd_EL_unknown; - tidq->thread =3D machine__findnew_thread(&etm->session->machines.host, -1, + tidq->decode_el =3D ocsd_EL_unknown; + tidq->frontend_thread =3D machine__findnew_thread(&etm->session->machines= .host, -1, + queue->tid); + tidq->decode_thread =3D machine__findnew_thread(&etm->session->machines.h= ost, -1, queue->tid); - tidq->prev_packet_thread =3D machine__idle_thread(&etm->session->machines= .host); =20 tidq->packet =3D zalloc(sizeof(struct cs_etm_packet)); if (!tidq->packet) @@ -750,21 +758,10 @@ static void cs_etm__packet_swap(struct cs_etm_auxtrac= e *etm, /* * Swap PACKET with PREV_PACKET: PACKET becomes PREV_PACKET for * the next incoming packet. - * - * Threads and exception levels are also tracked for both the - * previous and current packets. This is because the previous - * packet is used for the 'from' IP for branch samples, so the - * thread at that time must also be assigned to that sample. - * Across discontinuity packets the thread can change, so by - * tracking the thread for the previous packet the branch sample - * will have the correct info. */ tmp =3D tidq->packet; tidq->packet =3D tidq->prev_packet; tidq->prev_packet =3D tmp; - tidq->prev_packet_el =3D tidq->el; - thread__put(tidq->prev_packet_thread); - tidq->prev_packet_thread =3D thread__get(tidq->thread); } } =20 @@ -937,8 +934,8 @@ static void cs_etm__free_traceid_queues(struct cs_etm_q= ueue *etmq) =20 /* Free this traceid_queue from the array */ tidq =3D etmq->traceid_queues[idx]; - thread__zput(tidq->thread); - thread__zput(tidq->prev_packet_thread); + thread__zput(tidq->frontend_thread); + thread__zput(tidq->decode_thread); zfree(&tidq->event_buf); zfree(&tidq->last_branch); zfree(&tidq->last_branch_rb); @@ -1083,47 +1080,43 @@ static u8 cs_etm__cpu_mode(struct cs_etm_queue *etm= q, u64 address, } } =20 -static u32 cs_etm__mem_access(struct cs_etm_queue *etmq, u8 trace_chan_id, - u64 address, size_t size, u8 *buffer, - const ocsd_mem_space_acc_t mem_space) +static u32 __cs_etm__mem_access(struct cs_etm_queue *etmq, + u64 address, size_t size, u8 *buffer, + const ocsd_mem_space_acc_t mem_space, + ocsd_ex_level el, struct thread *thread) { u8 cpumode; u64 offset; int len; struct addr_location al; struct dso *dso; - struct cs_etm_traceid_queue *tidq; int ret =3D 0; =20 if (!etmq) return 0; =20 addr_location__init(&al); - tidq =3D cs_etm__etmq_get_traceid_queue(etmq, trace_chan_id); - if (!tidq) - goto out; =20 /* - * We've already tracked EL along side the PID in cs_etm__set_thread() - * so double check that it matches what OpenCSD thinks as well. It - * doesn't distinguish between EL0 and EL1 for this mem access callback - * so we had to do the extra tracking. Skip validation if it's any of - * the 'any' values. + * We track EL for the frontend and the backend when receiving context + * and range packets. OpenCSD doesn't distinguish between EL0 and EL1 + * for this mem access callback so we had to do the extra tracking. Skip + * validation if it's any of the 'any' values. */ if (!(mem_space =3D=3D OCSD_MEM_SPACE_ANY || mem_space =3D=3D OCSD_MEM_SPACE_N || mem_space =3D=3D OCSD_MEM_SPAC= E_S)) { if (mem_space & OCSD_MEM_SPACE_EL1N) { /* Includes both non secure EL1 and EL0 */ - assert(tidq->el =3D=3D ocsd_EL1 || tidq->el =3D=3D ocsd_EL0); + assert(el =3D=3D ocsd_EL1 || el =3D=3D ocsd_EL0); } else if (mem_space & OCSD_MEM_SPACE_EL2) - assert(tidq->el =3D=3D ocsd_EL2); + assert(el =3D=3D ocsd_EL2); else if (mem_space & OCSD_MEM_SPACE_EL3) - assert(tidq->el =3D=3D ocsd_EL3); + assert(el =3D=3D ocsd_EL3); } =20 - cpumode =3D cs_etm__cpu_mode(etmq, address, tidq->el); + cpumode =3D cs_etm__cpu_mode(etmq, address, el); =20 - if (!thread__find_map(tidq->thread, cpumode, address, &al)) + if (!thread__find_map(thread, cpumode, address, &al)) goto out; =20 dso =3D map__dso(al.map); @@ -1138,7 +1131,7 @@ static u32 cs_etm__mem_access(struct cs_etm_queue *et= mq, u8 trace_chan_id, =20 map__load(al.map); =20 - len =3D dso__data_read_offset(dso, maps__machine(thread__maps(tidq->threa= d)), + len =3D dso__data_read_offset(dso, maps__machine(thread__maps(thread)), offset, buffer, size); =20 if (len <=3D 0) { @@ -1158,6 +1151,30 @@ static u32 cs_etm__mem_access(struct cs_etm_queue *e= tmq, u8 trace_chan_id, return ret; } =20 +static u32 cs_etm__frontend_mem_access(struct cs_etm_queue *etmq, + struct cs_etm_traceid_queue *tidq, + struct cs_etm_packet *packet, + u64 address, size_t size, u8 *buffer) +{ + return __cs_etm__mem_access(etmq, address, size, buffer, 0, packet->el, + tidq->frontend_thread); +} + +static u32 cs_etm__decoder_mem_access(struct cs_etm_queue *etmq, u8 trace_= chan_id, + u64 address, size_t size, u8 *buffer, + const ocsd_mem_space_acc_t mem_space) +{ + struct cs_etm_traceid_queue *tidq; + + tidq =3D cs_etm__etmq_get_traceid_queue(etmq, trace_chan_id); + if (!tidq) + return 0; + + return __cs_etm__mem_access(etmq, address, size, buffer, + mem_space, tidq->decode_el, + tidq->decode_thread); +} + static struct cs_etm_queue *cs_etm__alloc_queue(void) { struct cs_etm_queue *etmq =3D zalloc(sizeof(*etmq)); @@ -1333,12 +1350,13 @@ void cs_etm__reset_last_branch_rb(struct cs_etm_tra= ceid_queue *tidq) } =20 static inline int cs_etm__t32_instr_size(struct cs_etm_queue *etmq, - u8 trace_chan_id, u64 addr) + struct cs_etm_traceid_queue *tidq, + struct cs_etm_packet *packet, u64 addr) { u8 instrBytes[2]; =20 - cs_etm__mem_access(etmq, trace_chan_id, addr, ARRAY_SIZE(instrBytes), - instrBytes, 0); + cs_etm__frontend_mem_access(etmq, tidq, packet, addr, + ARRAY_SIZE(instrBytes), instrBytes); /* * T32 instruction size is indicated by bits[15:11] of the first * 16-bit word of the instruction: 0b11101, 0b11110 and 0b11111 @@ -1371,16 +1389,16 @@ u64 cs_etm__last_executed_instr(const struct cs_etm= _packet *packet) } =20 static inline u64 cs_etm__instr_addr(struct cs_etm_queue *etmq, - u64 trace_chan_id, - const struct cs_etm_packet *packet, + struct cs_etm_traceid_queue *tidq, + struct cs_etm_packet *packet, u64 offset) { if (packet->isa =3D=3D CS_ETM_ISA_T32) { u64 addr =3D packet->start_addr; =20 while (offset) { - addr +=3D cs_etm__t32_instr_size(etmq, - trace_chan_id, addr); + addr +=3D cs_etm__t32_instr_size(etmq, tidq, packet, + addr); offset--; } return addr; @@ -1490,34 +1508,51 @@ cs_etm__get_trace(struct cs_etm_queue *etmq) return etmq->buf_len; } =20 -static void cs_etm__set_thread(struct cs_etm_queue *etmq, - struct cs_etm_traceid_queue *tidq, pid_t tid, - ocsd_ex_level el) +/* + * Convert a raw thread number to a thread struct and assign it to **threa= d. + */ +static int cs_etm__etmq_update_thread(struct cs_etm_queue *etmq, + ocsd_ex_level el, pid_t tid, + struct thread **thread) { struct machine *machine =3D cs_etm__get_machine(etmq, el); =20 + if (!machine || !*thread) + return -EINVAL; + if (tid !=3D -1) { - thread__zput(tidq->thread); - tidq->thread =3D machine__find_thread(machine, -1, tid); + thread__zput(*thread); + *thread =3D machine__find_thread(machine, -1, tid); } =20 /* Couldn't find a known thread */ - if (!tidq->thread) - tidq->thread =3D machine__idle_thread(machine); + if (!*thread) + *thread =3D machine__idle_thread(machine); =20 - tidq->el =3D el; + return 0; } =20 -int cs_etm__etmq_set_tid_el(struct cs_etm_queue *etmq, pid_t tid, - u8 trace_chan_id, ocsd_ex_level el) +/* + * Set the thread and EL of the decode context which is ahead in time of t= he + * frontend context. + */ +int cs_etm__etmq_update_decode_context(struct cs_etm_queue *etmq, + u8 trace_chan_id, + ocsd_ex_level el, pid_t tid) { struct cs_etm_traceid_queue *tidq; + int ret; =20 tidq =3D cs_etm__etmq_get_traceid_queue(etmq, trace_chan_id); if (!tidq) return -EINVAL; =20 - cs_etm__set_thread(etmq, tidq, tid, el); + ret =3D cs_etm__etmq_update_thread(etmq, el, tid, + &tidq->decode_thread); + if (ret) + return ret; + + tidq->decode_el =3D el; return 0; } =20 @@ -1527,8 +1562,8 @@ bool cs_etm__etmq_is_timeless(struct cs_etm_queue *et= mq) } =20 static void cs_etm__copy_insn(struct cs_etm_queue *etmq, - u64 trace_chan_id, - const struct cs_etm_packet *packet, + struct cs_etm_traceid_queue *tidq, + struct cs_etm_packet *packet, struct perf_sample *sample) { /* @@ -1545,14 +1580,14 @@ static void cs_etm__copy_insn(struct cs_etm_queue *= etmq, * cs_etm__t32_instr_size(). */ if (packet->isa =3D=3D CS_ETM_ISA_T32) - sample->insn_len =3D cs_etm__t32_instr_size(etmq, trace_chan_id, + sample->insn_len =3D cs_etm__t32_instr_size(etmq, tidq, packet, sample->ip); /* Otherwise, A64 and A32 instruction size are always 32-bit. */ else sample->insn_len =3D 4; =20 - cs_etm__mem_access(etmq, trace_chan_id, sample->ip, sample->insn_len, - (void *)sample->insn, 0); + cs_etm__frontend_mem_access(etmq, tidq, packet, sample->ip, + sample->insn_len, (void *)sample->insn); } =20 u64 cs_etm__convert_sample_time(struct cs_etm_queue *etmq, u64 cs_timestam= p) @@ -1579,6 +1614,7 @@ static inline u64 cs_etm__resolve_sample_time(struct = cs_etm_queue *etmq, =20 static int cs_etm__synth_instruction_sample(struct cs_etm_queue *etmq, struct cs_etm_traceid_queue *tidq, + struct cs_etm_packet *packet, u64 addr, u64 period) { int ret =3D 0; @@ -1588,23 +1624,23 @@ static int cs_etm__synth_instruction_sample(struct = cs_etm_queue *etmq, =20 perf_sample__init(&sample, /*all=3D*/true); event->sample.header.type =3D PERF_RECORD_SAMPLE; - event->sample.header.misc =3D cs_etm__cpu_mode(etmq, addr, tidq->el); + event->sample.header.misc =3D cs_etm__cpu_mode(etmq, addr, packet->el); event->sample.header.size =3D sizeof(struct perf_event_header); =20 /* Set time field based on etm auxtrace config. */ sample.time =3D cs_etm__resolve_sample_time(etmq, tidq); =20 sample.ip =3D addr; - sample.pid =3D thread__pid(tidq->thread); - sample.tid =3D thread__tid(tidq->thread); + sample.pid =3D thread__pid(tidq->frontend_thread); + sample.tid =3D thread__tid(tidq->frontend_thread); sample.id =3D etmq->etm->instructions_id; sample.stream_id =3D etmq->etm->instructions_id; sample.period =3D period; - sample.cpu =3D tidq->packet->cpu; + sample.cpu =3D packet->cpu; sample.flags =3D tidq->prev_packet->flags; sample.cpumode =3D event->sample.header.misc; =20 - cs_etm__copy_insn(etmq, tidq->trace_chan_id, tidq->packet, &sample); + cs_etm__copy_insn(etmq, tidq, packet, &sample); =20 if (etm->synth_opts.last_branch) sample.branch_stack =3D tidq->last_branch; @@ -1649,15 +1685,15 @@ static int cs_etm__synth_branch_sample(struct cs_et= m_queue *etmq, =20 event->sample.header.type =3D PERF_RECORD_SAMPLE; event->sample.header.misc =3D cs_etm__cpu_mode(etmq, ip, - tidq->prev_packet_el); + tidq->prev_packet->el); event->sample.header.size =3D sizeof(struct perf_event_header); =20 /* Set time field based on etm auxtrace config. */ sample.time =3D cs_etm__resolve_sample_time(etmq, tidq); =20 sample.ip =3D ip; - sample.pid =3D thread__pid(tidq->prev_packet_thread); - sample.tid =3D thread__tid(tidq->prev_packet_thread); + sample.pid =3D thread__pid(tidq->frontend_thread); + sample.tid =3D thread__tid(tidq->frontend_thread); sample.addr =3D cs_etm__first_executed_instr(tidq->packet); sample.id =3D etmq->etm->branches_id; sample.stream_id =3D etmq->etm->branches_id; @@ -1666,8 +1702,7 @@ static int cs_etm__synth_branch_sample(struct cs_etm_= queue *etmq, sample.flags =3D tidq->prev_packet->flags; sample.cpumode =3D event->sample.header.misc; =20 - cs_etm__copy_insn(etmq, tidq->trace_chan_id, tidq->prev_packet, - &sample); + cs_etm__copy_insn(etmq, tidq, tidq->prev_packet, &sample); =20 /* * perf report cannot handle events without a branch stack @@ -1788,7 +1823,6 @@ static int cs_etm__sample(struct cs_etm_queue *etmq, { struct cs_etm_auxtrace *etm =3D etmq->etm; int ret; - u8 trace_chan_id =3D tidq->trace_chan_id; u64 instrs_prev; =20 /* Get instructions remainder from previous packet */ @@ -1874,10 +1908,10 @@ static int cs_etm__sample(struct cs_etm_queue *etmq, * been executed, but PC has not advanced to next * instruction) */ - addr =3D cs_etm__instr_addr(etmq, trace_chan_id, - tidq->packet, offset - 1); + addr =3D cs_etm__instr_addr(etmq, tidq, tidq->packet, + offset - 1); ret =3D cs_etm__synth_instruction_sample( - etmq, tidq, addr, + etmq, tidq, tidq->packet, addr, etm->instructions_sample_period); if (ret) return ret; @@ -1959,7 +1993,7 @@ static int cs_etm__flush(struct cs_etm_queue *etmq, addr =3D cs_etm__last_executed_instr(tidq->prev_packet); =20 err =3D cs_etm__synth_instruction_sample( - etmq, tidq, addr, + etmq, tidq, tidq->prev_packet, addr, tidq->period_instructions); if (err) return err; @@ -2014,7 +2048,7 @@ static int cs_etm__end_block(struct cs_etm_queue *etm= q, addr =3D cs_etm__last_executed_instr(tidq->prev_packet); =20 err =3D cs_etm__synth_instruction_sample( - etmq, tidq, addr, + etmq, tidq, tidq->prev_packet, addr, tidq->period_instructions); if (err) return err; @@ -2051,9 +2085,9 @@ static int cs_etm__get_data_block(struct cs_etm_queue= *etmq) return etmq->buf_len; } =20 -static bool cs_etm__is_svc_instr(struct cs_etm_queue *etmq, u8 trace_chan_= id, - struct cs_etm_packet *packet, - u64 end_addr) +static bool cs_etm__is_svc_instr(struct cs_etm_queue *etmq, + struct cs_etm_traceid_queue *tidq, + struct cs_etm_packet *packet, u64 end_addr) { /* Initialise to keep compiler happy */ u16 instr16 =3D 0; @@ -2075,8 +2109,8 @@ static bool cs_etm__is_svc_instr(struct cs_etm_queue = *etmq, u8 trace_chan_id, * so below only read 2 bytes as instruction size for T32. */ addr =3D end_addr - 2; - cs_etm__mem_access(etmq, trace_chan_id, addr, sizeof(instr16), - (u8 *)&instr16, 0); + cs_etm__frontend_mem_access(etmq, tidq, packet, addr, + sizeof(instr16), (u8 *)&instr16); if ((instr16 & 0xFF00) =3D=3D 0xDF00) return true; =20 @@ -2091,8 +2125,8 @@ static bool cs_etm__is_svc_instr(struct cs_etm_queue = *etmq, u8 trace_chan_id, * +---------+---------+-------------------------+ */ addr =3D end_addr - 4; - cs_etm__mem_access(etmq, trace_chan_id, addr, sizeof(instr32), - (u8 *)&instr32, 0); + cs_etm__frontend_mem_access(etmq, tidq, packet, addr, + sizeof(instr32), (u8 *)&instr32); if ((instr32 & 0x0F000000) =3D=3D 0x0F000000 && (instr32 & 0xF0000000) !=3D 0xF0000000) return true; @@ -2108,8 +2142,8 @@ static bool cs_etm__is_svc_instr(struct cs_etm_queue = *etmq, u8 trace_chan_id, * +-----------------------+---------+-----------+ */ addr =3D end_addr - 4; - cs_etm__mem_access(etmq, trace_chan_id, addr, sizeof(instr32), - (u8 *)&instr32, 0); + cs_etm__frontend_mem_access(etmq, tidq, packet, addr, + sizeof(instr32), (u8 *)&instr32); if ((instr32 & 0xFFE0001F) =3D=3D 0xd4000001) return true; =20 @@ -2125,7 +2159,6 @@ static bool cs_etm__is_svc_instr(struct cs_etm_queue = *etmq, u8 trace_chan_id, static bool cs_etm__is_syscall(struct cs_etm_queue *etmq, struct cs_etm_traceid_queue *tidq, u64 magic) { - u8 trace_chan_id =3D tidq->trace_chan_id; struct cs_etm_packet *packet =3D tidq->packet; struct cs_etm_packet *prev_packet =3D tidq->prev_packet; =20 @@ -2140,7 +2173,7 @@ static bool cs_etm__is_syscall(struct cs_etm_queue *e= tmq, */ if (magic =3D=3D __perf_cs_etmv4_magic) { if (packet->exception_number =3D=3D CS_ETMV4_EXC_CALL && - cs_etm__is_svc_instr(etmq, trace_chan_id, prev_packet, + cs_etm__is_svc_instr(etmq, tidq, prev_packet, prev_packet->end_addr)) return true; } @@ -2178,7 +2211,6 @@ static bool cs_etm__is_sync_exception(struct cs_etm_q= ueue *etmq, struct cs_etm_traceid_queue *tidq, u64 magic) { - u8 trace_chan_id =3D tidq->trace_chan_id; struct cs_etm_packet *packet =3D tidq->packet; struct cs_etm_packet *prev_packet =3D tidq->prev_packet; =20 @@ -2204,7 +2236,7 @@ static bool cs_etm__is_sync_exception(struct cs_etm_q= ueue *etmq, * (SMC, HVC) are taken as sync exceptions. */ if (packet->exception_number =3D=3D CS_ETMV4_EXC_CALL && - !cs_etm__is_svc_instr(etmq, trace_chan_id, prev_packet, + !cs_etm__is_svc_instr(etmq, tidq, prev_packet, prev_packet->end_addr)) return true; =20 @@ -2228,7 +2260,6 @@ static int cs_etm__set_sample_flags(struct cs_etm_que= ue *etmq, { struct cs_etm_packet *packet =3D tidq->packet; struct cs_etm_packet *prev_packet =3D tidq->prev_packet; - u8 trace_chan_id =3D tidq->trace_chan_id; u64 magic; int ret; =20 @@ -2309,11 +2340,11 @@ static int cs_etm__set_sample_flags(struct cs_etm_q= ueue *etmq, if (prev_packet->flags =3D=3D (PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_RETURN | PERF_IP_FLAG_INTERRUPT) && - cs_etm__is_svc_instr(etmq, trace_chan_id, - packet, packet->start_addr)) + cs_etm__is_svc_instr(etmq, tidq, packet, packet->start_addr)) { prev_packet->flags =3D PERF_IP_FLAG_BRANCH | PERF_IP_FLAG_RETURN | PERF_IP_FLAG_SYSCALLRET; + } break; case CS_ETM_DISCONTINUITY: /* @@ -2394,6 +2425,7 @@ static int cs_etm__set_sample_flags(struct cs_etm_que= ue *etmq, PERF_IP_FLAG_RETURN | PERF_IP_FLAG_INTERRUPT; break; + case CS_ETM_CONTEXT: case CS_ETM_EMPTY: default: break; @@ -2469,6 +2501,19 @@ static int cs_etm__process_traceid_queue(struct cs_e= tm_queue *etmq, */ cs_etm__sample(etmq, tidq); break; + case CS_ETM_CONTEXT: + /* + * Update context but don't swap packet. Keep the + * previous one for branch source address info, if + * tracing the kernel the context packet will be emitted + * between two ranges. + */ + ret =3D cs_etm__etmq_update_thread(etmq, tidq->packet->el, + tidq->packet->tid, + &tidq->frontend_thread); + if (ret) + goto out; + break; case CS_ETM_EXCEPTION: case CS_ETM_EXCEPTION_RET: /* @@ -2497,6 +2542,7 @@ static int cs_etm__process_traceid_queue(struct cs_et= m_queue *etmq, } } =20 +out: return ret; } =20 @@ -2620,7 +2666,7 @@ static int cs_etm__process_timeless_queues(struct cs_= etm_auxtrace *etm, if (!tidq) continue; =20 - if (tid =3D=3D -1 || thread__tid(tidq->thread) =3D=3D tid) + if (tid =3D=3D -1 || thread__tid(tidq->frontend_thread) =3D=3D tid) cs_etm__run_per_thread_timeless_decoder(etmq); } else cs_etm__run_per_cpu_timeless_decoder(etmq); @@ -3328,7 +3374,7 @@ static int cs_etm__create_queue_decoders(struct cs_et= m_queue *etmq) */ if (cs_etm_decoder__add_mem_access_cb(etmq->decoder, 0x0L, ((u64) -1L), - cs_etm__mem_access)) + cs_etm__decoder_mem_access)) goto out_free_decoder; =20 zfree(&t_params); diff --git a/tools/perf/util/cs-etm.h b/tools/perf/util/cs-etm.h index aa9bb4a32eca..b81099c2b301 100644 --- a/tools/perf/util/cs-etm.h +++ b/tools/perf/util/cs-etm.h @@ -158,6 +158,7 @@ enum cs_etm_sample_type { CS_ETM_DISCONTINUITY, CS_ETM_EXCEPTION, CS_ETM_EXCEPTION_RET, + CS_ETM_CONTEXT, }; =20 enum cs_etm_isa { @@ -184,6 +185,8 @@ struct cs_etm_packet { u8 last_instr_size; u8 trace_chan_id; int cpu; + int el; + pid_t tid; }; =20 #define CS_ETM_PACKET_MAX_BUFFER 1024 @@ -259,8 +262,9 @@ enum cs_etm_pid_fmt { #include int cs_etm__get_cpu(struct cs_etm_queue *etmq, u8 trace_chan_id, int *cpu); enum cs_etm_pid_fmt cs_etm__get_pid_fmt(struct cs_etm_queue *etmq); -int cs_etm__etmq_set_tid_el(struct cs_etm_queue *etmq, pid_t tid, - u8 trace_chan_id, ocsd_ex_level el); +int cs_etm__etmq_update_decode_context(struct cs_etm_queue *etmq, + u8 trace_chan_id, ocsd_ex_level el, + pid_t tid); bool cs_etm__etmq_is_timeless(struct cs_etm_queue *etmq); void cs_etm__etmq_set_traceid_queue_timestamp(struct cs_etm_queue *etmq, u8 trace_chan_id); --=20 2.34.1 From nobody Thu Jun 11 02:45:42 2026 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D9F25351C06 for ; Tue, 9 Jun 2026 14:40:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016029; cv=none; b=g95gcMoeyJSmdManKSgZ2eupNhKiiYOW47STNt7NK0cQCfv6hCT2Q3SBa+UKLw+ClAxxK6DWyQfL1dCq1VsWVVc+IP/XWnBCyPMt5DQKB47PbzuEXVtdEFr6VjeQq5PW2DuTPrwfO97c04YMlKdD8aqjfMru76rxkY6d84Nkxi0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016029; c=relaxed/simple; bh=/b18pfGcYG5J49852Uf/xpNRcW6fiySK2y+B7W3dtrc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=k3IwnmZFiSLK36RxMvB9h8lc7xs+gDPabt2Sqti7Er2jOiXYHq5yc+w+wm+k2nfiQz/NE5MfCUiRYsPZxbLANc0xSXbs8/+OATH/LiYEAnccosPqGaabw60b0aiM3bLLObsRk+NuN/vVz9tHCFMw8Bbnn2iYYM9UJCPutSDgMQg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=xVLIE3ON; arc=none smtp.client-ip=209.85.128.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="xVLIE3ON" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-490d1e54b3bso19389905e9.1 for ; Tue, 09 Jun 2026 07:40:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781016026; x=1781620826; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=XAiQptcYOlXy/icTduKx1v/eUqigIfQCIUFTgmuIVAI=; b=xVLIE3ONKnmphLnncee56OSAgPKTIIfwT5PDnm8TXvuWUM+EYWQgdfh+AwdCwQgZHE xp+1pGAgoNwVGqm9Fs7p/YILC01+DaR3cYsPTNdZWeV5VowiWHig3wm5YKyVlKO5S7tm Ym0t/r2q2Jj4lfI71wHzKzAx3Fidx5ZQUWYLVzbjR8kJLdWlUFvnGMG2lZG/hupXwkNR FxEYPeOK3G4qZVbTzewH4vUVoKnLG3NpRL4dJanXGuzSdZEOd6fwMC5RfImbXsurBJKM hXNjO//KVr+m9+KlyMSDGk3cifAbSw4hcp4t9UpA6NENx1TiVgN/ucxTqxunIt2r6fVz dung== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781016026; x=1781620826; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=XAiQptcYOlXy/icTduKx1v/eUqigIfQCIUFTgmuIVAI=; b=rMaWKjATtuAO+dK1aoQ6IThLs/ADSxlDm4DT3AEQhjDlpEZMpCtbTjqN3vDl6BMwWc Yn+MuHFKXF+Xo47cziVJYubJ++SYmCXfag5S5K43BVZPuhYoOKMbHiQaJ9xogE8D6bBY czYx0hEN7wjnSA1cjrtsuBnClU9G+uJ1suaH7QUMzafzIKKHlAwyOwM5OYMX/tVmM6Ny q9gq7oLZwoAGk3NRmUuZbm/x5a2CfaTPDMa+n/tWoiJ05X3a/pH81UOty5/emDWADJ9e 8qEP2e9As6NiNQrHPGPwUGlhGqoqErPo09HpOHDCjNxl2leqv5nmxghIbkgS0nKEk+7n Kw4g== X-Forwarded-Encrypted: i=1; AFNElJ/9Tn81gzFyYBOnNPjHJjdNVkjEZeQt7K8krX1CquCtU1PBKYxCpvXsDgD4Uxxurs1wa1IJPE/NSGzcKtU=@vger.kernel.org X-Gm-Message-State: AOJu0Yy8Xkh7JiS4ZhMcnms1faIIklQIZcBwRKaiRhkgqwA0rdw7Vdtl 8ScnJMbgDFAmZQoVMiWmVFsDKW2IRA22i3cfbT2AwY8uQqamNRoZXa3acTWFWY0cQEg= X-Gm-Gg: Acq92OFsrjkYw2Ttx9ykWcW8mz1P5q4/4LaXyE3EcMpy3kAtmS8Bua9Nizmwu3yOvi0 Uhons/9aMhGujkN8DPQvZYu289e4lpJVnIkm+hw3c37H/ntPi0nsHx25i1eHNHJWElTU+YFaGtJ LAn6wfqYGnNLKwlsa5be7YkCWIp78jlEzcQ+R7bd++vqrgFXRcA2y70y27XHrgNfKMxoa/A1+Z8 rsXLdvb9lTRqmJr8oYX00XY2KKmLPUfmSHh6+e4BoHWaCKPYE5KqBwfWsFgAY4RbiFsdwOROlq5 01yNTCxPb9IlQ0/AxIEqhWjFE/tMEr2dz00DfHfvjx+VWkbuq2DTxoSDiZYr/OT1ISZn1BRrRw+ ZLqgm0TN06N9Lr6lT63OiTNBtRu5ap62tcrILnbmNgsm3guL6vuPPgoBNvUUEapepnolUyMiUch /C6S0Thu+skFADEKGlojIxU5xNGPXgk3W26YPK6YuI2NM= X-Received: by 2002:a05:600c:81ca:b0:490:484b:bf41 with SMTP id 5b1f17b1804b1-490c2560445mr297559445e9.6.1781016026211; Tue, 09 Jun 2026 07:40:26 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3c1149sm428411935e9.4.2026.06.09.07.40.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 07:40:25 -0700 (PDT) From: James Clark Date: Tue, 09 Jun 2026 15:40:07 +0100 Subject: [PATCH v5 02/19] perf test: Add workload-ctl option Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-james-cs-context-tracking-fix-v5-2-d53a7d096a19@linaro.org> References: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> In-Reply-To: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> To: Suzuki K Poulose , Mike Leach , Leo Yan , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Ian Rogers , Amir Ayupov , Jonathan Corbet , Shuah Khan , Paschalis Mpeis Cc: coresight@lists.linaro.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo , linux-doc@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 Add a --workload-ctl=3Dfifo:ctl-fifo[,ack-fifo] option for 'perf test -w'. When set, run_workload() opens the named FIFO, writes enable before invoking the builtin workload, writes disable before returning, and waits for ack responses when an ack FIFO is provided to ensure that the workload doesn't run until the events are enabled. This can be used to limit the scope of the recording to only the workload execution and avoid recording Perf setup and teardown code if Perf record is started with events disabled (-D 1). Assisted-by: Codex:GPT-5.5 Signed-off-by: James Clark --- tools/perf/Documentation/perf-test.txt | 12 +++ tools/perf/tests/builtin-test.c | 184 +++++++++++++++++++++++++++++= +++- 2 files changed, 194 insertions(+), 2 deletions(-) diff --git a/tools/perf/Documentation/perf-test.txt b/tools/perf/Documentat= ion/perf-test.txt index 32da0d1fa86a..2f4a91f5b9dc 100644 --- a/tools/perf/Documentation/perf-test.txt +++ b/tools/perf/Documentation/perf-test.txt @@ -69,3 +69,15 @@ OPTIONS =20 --list-workloads:: List the available workloads to use with -w/--workload. + +--record-ctl=3Dfifo:ctl-fifo[,ack-fifo]:: + This option is used to communicate with a perf record session in order + to control the recording scope to only the workload and avoid recording + setup and teardown code. When specifying this option, the same FIFO path + must be specified in the record session via: + + perf record -D -1 --control=3Dfifo:ctl-fifo[,ack-fifo] ... + + Perf test sends 'enable' and 'disable' commands through ctl-fifo to + control event recording. If 'ack-fifo' is provided, the workload runner + waits for an 'ack' response after each command. diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-tes= t.c index b64fc2204f22..86ea427eb0aa 100644 --- a/tools/perf/tests/builtin-test.c +++ b/tools/perf/tests/builtin-test.c @@ -56,6 +56,7 @@ static unsigned int runs_per_test =3D 1; static unsigned int failure_snippet_lines =3D 10; const char *dso_to_test; const char *test_objdump_path =3D "objdump"; +static const char *workload_control; =20 /* * List of architecture specific tests. Not a weak symbol as the array len= gth is @@ -168,6 +169,11 @@ static struct test_workload *workloads[] =3D { #endif }; =20 +struct workload_control { + int ctl_fd; + int ack_fd; +}; + #define workloads__for_each(workload) \ for (unsigned i =3D 0; i < ARRAY_SIZE(workloads) && ({ workload =3D workl= oads[i]; 1; }); i++) =20 @@ -1387,13 +1393,185 @@ static int workloads__fprintf_list(FILE *fp) return printed; } =20 +static int perf_control_open_fifo(struct workload_control *ctl, const char= *str) +{ + char *s, *p; + int ret; + + if (strncmp(str, "fifo:", 5)) + return -EINVAL; + + str +=3D 5; + if (!*str || *str =3D=3D ',') + return -EINVAL; + + s =3D strdup(str); + if (!s) + return -ENOMEM; + + p =3D strchr(s, ','); + if (p) + *p =3D '\0'; + + ctl->ctl_fd =3D open(s, O_WRONLY | O_CLOEXEC); + if (ctl->ctl_fd < 0) { + ret =3D -errno; + pr_err("Failed to open workload control FIFO '%s': %m\n", s); + free(s); + return ret; + } + + if (p && *++p) { + ctl->ack_fd =3D open(p, O_RDONLY | O_CLOEXEC); + if (ctl->ack_fd < 0) { + ret =3D -errno; + pr_err("Failed to open workload control ack FIFO '%s': %m\n", p); + close(ctl->ctl_fd); + ctl->ctl_fd =3D -1; + free(s); + return ret; + } + } + + free(s); + return 0; +} + +static int perf_control_open(struct workload_control *ctl) +{ + int ret; + + if (!workload_control) + return 0; + + ret =3D perf_control_open_fifo(ctl, workload_control); + + if (ret =3D=3D -EINVAL) { + pr_err("Unsupported workload control spec '%s', expected fifo:ctl-fifo[,= ack-fifo]\n", + workload_control); + } + + return ret; +} + +static void perf_control_close(struct workload_control *ctl) +{ + if (ctl->ctl_fd >=3D 0) { + close(ctl->ctl_fd); + ctl->ctl_fd =3D -1; + } + if (ctl->ack_fd >=3D 0) { + close(ctl->ack_fd); + ctl->ack_fd =3D -1; + } +} + +static int perf_control_write_cmd(int fd, const char *cmd) +{ + size_t len =3D strlen(cmd); + ssize_t ret; + + while (len) { + ret =3D write(fd, cmd, len); + if (ret < 0) { + if (errno =3D=3D EINTR) + continue; + pr_err("Failed to write perf control command: %m\n"); + return -1; + } + + if (!ret) { + pr_err("Failed to write perf control command: short write\n"); + return -1; + } + + cmd +=3D ret; + len -=3D ret; + } + + return 0; +} + +static int perf_control_read_ack(int fd) +{ + char buf[16]; + ssize_t ret; + + do { + ret =3D read(fd, buf, sizeof(buf) - 1); + } while (ret < 0 && errno =3D=3D EINTR); + + if (ret < 0) { + pr_err("Failed to read perf control ack: %m\n"); + return -1; + } + + if (!ret) { + pr_err("Unexpected EOF while reading perf control ack\n"); + return -1; + } + + buf[ret] =3D '\0'; + for (ssize_t i =3D 0; i < ret; i++) { + if (buf[i] =3D=3D '\n' || buf[i] =3D=3D '\0') { + buf[i] =3D '\0'; + break; + } + } + + if (strcmp(buf, "ack")) { + pr_err("Unexpected perf control ack: %s\n", buf); + return -1; + } + + return 0; +} + +static int perf_control_send(struct workload_control *ctl, const char *cmd) +{ + if (ctl->ctl_fd < 0) + return 0; + + if (perf_control_write_cmd(ctl->ctl_fd, cmd)) + return -1; + + if (ctl->ack_fd >=3D 0 && perf_control_read_ack(ctl->ack_fd)) + return -1; + + return 0; +} + static int run_workload(const char *work, int argc, const char **argv) { struct test_workload *twl; =20 workloads__for_each(twl) { - if (!strcmp(twl->name, work)) - return twl->func(argc, argv); + struct workload_control ctl =3D { + .ctl_fd =3D -1, + .ack_fd =3D -1, + }; + int control_ret, ret; + + if (strcmp(twl->name, work)) + continue; + + ret =3D perf_control_open(&ctl); + if (ret) + return ret; + + if (perf_control_send(&ctl, "enable\n")) { + perf_control_close(&ctl); + return -1; + } + + ret =3D twl->func(argc, argv); + + control_ret =3D perf_control_send(&ctl, "disable\n"); + perf_control_close(&ctl); + if (control_ret) + return -1; + + return ret; } =20 pr_info("No workload found: %s\n", work); @@ -1486,6 +1664,8 @@ int cmd_test(int argc, const char **argv) OPT_UINTEGER('r', "runs-per-test", &runs_per_test, "Run each test the given number of times, default 1"), OPT_STRING('w', "workload", &workload, "work", "workload to run for testi= ng, use '--list-workloads' to list the available ones."), + OPT_STRING(0, "record-ctl", &workload_control, "fifo:ctl-fifo[,ack-fifo]", + "Write enable to the fifo just before running the workload and disabl= e after, with optional ack from ack-fifo"), OPT_BOOLEAN(0, "list-workloads", &list_workloads, "List the available bui= ltin workloads to use with -w/--workload"), OPT_STRING(0, "dso", &dso_to_test, "dso", "dso to test"), OPT_STRING(0, "objdump", &test_objdump_path, "path", --=20 2.34.1 From nobody Thu Jun 11 02:45:42 2026 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3FCE33451DA for ; Tue, 9 Jun 2026 14:40:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016031; cv=none; b=L5ceo6uhGfHpElPRvb7oK+LKwkYz/LjTsr+bIpM90iK3JyujYrnajhAQ33/PdWNqT6da9XFlfwXPk6MVdSEi5BhZvpoC0WWqGIs0bVt6q9TE65+/w0VVQKFpVCbIiAiFOtiDR37vFg+8bvkMtU2as4XMSL41hUoF6hWR+kR2pLg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016031; c=relaxed/simple; bh=MpqHY1226EZDlsL7AYrF9I24rCLFkLMgGMHa7jjWFqY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GU34kVRHVa2138ilDMINiLVeKbJyyypKIRQG08rxGYEI6R2o7mHTbwsOXcBkianYTVnNiK1cik6GJ+8RI91hy8Br57rmdEZ0crHi6K4oo97K7jAfnre+IaSj1zkAi7LbFWe6P5GTJGE6l8aWwvkuecmYTDiZg2pd+QJUOaUmRB0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=wFMfn8AQ; arc=none smtp.client-ip=209.85.128.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="wFMfn8AQ" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-490ac357c55so61492915e9.1 for ; Tue, 09 Jun 2026 07:40:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781016028; x=1781620828; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=9nUZrv+uXShy5oUjVbWJnHpZlIUPoN1ZejbvjYmlEBM=; b=wFMfn8AQKgwPpf5kmqGxAb0QgWyosBDa1ZDJV7wREiSG4Uf3LdikSWBpt3LPJJpEgd moI0WehV1RUARu8IQjSnqHbxPAg8lxgxSf8rm8OV0UeuZSmj/qGcJA5M62Jrm4Xi+afw Qedi37QSfLty+a4elrO7pRBTgNaHmGZAwyEbvrU6cij/f67fZ4wPwMkWWJSn5w5pwffG 90gsdyOu4+LbL83t5ipiP+pjwbZ3UwLFn2RxxDPcYRUyu8l6XX5waa1uk2C/vxUPW/2r dP9mg6LqIKHEgSaP3B9uop6Vn9rLxXmgLFYGF7KSR7to5q5FIUpGmC6Dj3ZppQ4iyrUy uAAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781016028; x=1781620828; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=9nUZrv+uXShy5oUjVbWJnHpZlIUPoN1ZejbvjYmlEBM=; b=enKi7jELw365Wth4PFNrcUAEPniGM32dmVxa+dbydHb/orQhRBpqggm5wpjuIqMlJ4 34Y622bKWCxh8lc+2XbGfO6AIFFdJPWBDkhgdzgFGt873z8SCYTo1hb4ATZsz+89CuQB C65ApVCLQDTbav13sIIEA6I9z/rFCJwOJUmI24K5vlABAtuXKto5moiO0KTrXTlB3X63 9o2h5RwnkFdb2PP6XeQ60yKcwYarD2t0A7UfRWHCnHbVKfewVUQ18auEkSj1EQt4zPbr qsWzX8tYRvHGsVcnz8zGe07vFmiF5rBHN+YemyPJ8Sw0hOjhZUkDyihdy5uqtG2FIdMG AjHA== X-Forwarded-Encrypted: i=1; AFNElJ+T2B3KR0Fn0XK2DaMVGHHnS6B1A16xJR4QrPGgKWAn6JgzQs/UXAtjZQ0Tap035vCG6Zs7eU/1IyJOtDc=@vger.kernel.org X-Gm-Message-State: AOJu0YzQhQHVV2M+6lvHFTkI2jLk30jXKNQ1dUB/E4ADzCP6LUI9CoND cE+tImlicQj7OvkdduD2qd8IQIB3ZkjzKvUNWiWVh2FBkkxQkrJrSzIqboN9tIAqj9U= X-Gm-Gg: Acq92OFXCLFWpTBbob2C8QvThQvMEu9+SHIQgRpf5QUTpfQwpA71NZPjrb0BQ/pegX3 WfDAW50U/3uFLzhDpMVfe9wDRLcDj68IChbp6uJPiabbOuaAawTfZYeZvHJXKzaXWwPlnrMscvj eNXhY2j8WksJSe4XSihJNJEb/LB0VtU+/2JZqfRzzilkKyzqeoD6Rx9oIes7k5G3IIkYwEwtdaN ILxiPK+aoezQQ/JDZhV4u9mWNgCbxTz+9xT/TCAthLMryX0LxvaOu5yYo21fFoG9l1H75B8ydVE MmzSHu9KeyAYJRpOclLrAg5P7UBrmQvKsVTruiKadp+534Q7NHn4RRl9gmfDL6wnI1GizL0ZTgz ZsB8FeREvLjFzkfUT4+Idrz3F7HVgE5y/LVYOlSILP8IQwY5E+Tb3LKmN5xGVquw1fRHxIW+7HW GLNGML4D6XRng2JyvpzYygGepG5WY2B4qWsMXPjPkUzz4= X-Received: by 2002:a05:600c:35d4:b0:490:b8d3:5dcc with SMTP id 5b1f17b1804b1-490c25e4634mr350034245e9.19.1781016027564; Tue, 09 Jun 2026 07:40:27 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3c1149sm428411935e9.4.2026.06.09.07.40.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 07:40:26 -0700 (PDT) From: James Clark Date: Tue, 09 Jun 2026 15:40:08 +0100 Subject: [PATCH v5 03/19] perf test: Add a workload that forces context switches Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-james-cs-context-tracking-fix-v5-3-d53a7d096a19@linaro.org> References: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> In-Reply-To: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> To: Suzuki K Poulose , Mike Leach , Leo Yan , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Ian Rogers , Amir Ayupov , Jonathan Corbet , Shuah Khan , Paschalis Mpeis Cc: coresight@lists.linaro.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo , linux-doc@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 This workload launches two processes that block when reading and writing to each other forcing the other process to be scheduled for each read/write pair. Signed-off-by: James Clark --- tools/perf/Documentation/perf-test.txt | 7 +- tools/perf/tests/builtin-test.c | 1 + tools/perf/tests/tests.h | 1 + tools/perf/tests/workloads/Build | 1 + tools/perf/tests/workloads/context_switch_loop.c | 110 +++++++++++++++++++= ++++ 5 files changed, 117 insertions(+), 3 deletions(-) diff --git a/tools/perf/Documentation/perf-test.txt b/tools/perf/Documentat= ion/perf-test.txt index 2f4a91f5b9dc..213eb62603eb 100644 --- a/tools/perf/Documentation/perf-test.txt +++ b/tools/perf/Documentation/perf-test.txt @@ -55,15 +55,16 @@ OPTIONS =20 -w:: --workload=3D:: - Run a built-in workload, to list them use '--list-workloads', current one= s include: - noploop, thloop, leafloop, sqrtloop, brstack, datasym and landlock. + Run a built-in workload, to list them use '--list-workloads', current + ones include: noploop, thloop, leafloop, sqrtloop, brstack, datasym, + context_switch_loop and landlock. =20 Used with the shell script regression tests. =20 Some accept an extra parameter: =20 seconds: leafloop, noploop, sqrtloop, thloop - nrloops: brstack + nrloops: brstack, context_switch_loop =20 The datasym and landlock workloads don't accept any. =20 diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-tes= t.c index 86ea427eb0aa..9284f897de3c 100644 --- a/tools/perf/tests/builtin-test.c +++ b/tools/perf/tests/builtin-test.c @@ -163,6 +163,7 @@ static struct test_workload *workloads[] =3D { &workload__traploop, &workload__inlineloop, &workload__jitdump, + &workload__context_switch_loop, =20 #ifdef HAVE_RUST_SUPPORT &workload__code_with_type, diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h index bf8ff7d54727..7cd4da4e96d3 100644 --- a/tools/perf/tests/tests.h +++ b/tools/perf/tests/tests.h @@ -245,6 +245,7 @@ DECLARE_WORKLOAD(landlock); DECLARE_WORKLOAD(traploop); DECLARE_WORKLOAD(inlineloop); DECLARE_WORKLOAD(jitdump); +DECLARE_WORKLOAD(context_switch_loop); =20 #ifdef HAVE_RUST_SUPPORT DECLARE_WORKLOAD(code_with_type); diff --git a/tools/perf/tests/workloads/Build b/tools/perf/tests/workloads/= Build index 0eb6d99528eb..7134a031cb7c 100644 --- a/tools/perf/tests/workloads/Build +++ b/tools/perf/tests/workloads/Build @@ -10,6 +10,7 @@ perf-test-y +=3D landlock.o perf-test-y +=3D traploop.o perf-test-y +=3D inlineloop.o perf-test-y +=3D jitdump.o +perf-test-y +=3D context_switch_loop.o =20 ifeq ($(CONFIG_RUST_SUPPORT),y) perf-test-y +=3D code_with_type.o diff --git a/tools/perf/tests/workloads/context_switch_loop.c b/tools/perf/= tests/workloads/context_switch_loop.c new file mode 100644 index 000000000000..5431af6147e6 --- /dev/null +++ b/tools/perf/tests/workloads/context_switch_loop.c @@ -0,0 +1,110 @@ + +// SPDX-License-Identifier: GPL-2.0 + +#include +#include +#include +#include +#include +#include + +#include "../tests.h" + +static int loops =3D 100; +static char buf; +int context_switch_loop_work =3D 1234; + +#define write_block(fd) \ + do { \ + if (write(fd, &buf, 1) <=3D 0) \ + return 1; \ + } while (0) + +#define read_block(fd) \ + do { \ + if (read(fd, &buf, 1) <=3D 0) \ + return 1; \ + } while (0) + +/* Not static to avoid LTO clobbering the function name */ +int context_switch_loop_proc1(int in_fd, int out_fd); +int context_switch_loop_proc1(int in_fd, int out_fd) +{ + for (int i =3D 0; i < loops; i++) { + read_block(in_fd); + context_switch_loop_work +=3D i * 3; + write_block(out_fd); + } + return 0; +} + +int context_switch_loop_proc2(int in_fd, int out_fd); +int context_switch_loop_proc2(int in_fd, int out_fd) +{ + for (int i =3D 0; i < loops; i++) { + write_block(out_fd); + context_switch_loop_work +=3D i * 7; + read_block(in_fd); + } + return 0; +} + +/* + * Launches two processes that take turns to execute a multiplication N ti= mes + */ +static int context_switch_loop(int argc, const char **argv) +{ + int a_to_b[2], b_to_a[2]; + pid_t proc1_pid; + int status; + int ret; + + if (argc > 0) { + loops =3D atoi(argv[0]); + if (loops < 0) { + fprintf(stderr, "Invalid number of loops: %s\n", argv[0]); + return 1; + } + } + + if (pipe(a_to_b) || pipe(b_to_a)) { + perror("Pipe error"); + return 1; + } + + proc1_pid =3D fork(); + if (proc1_pid < 0) { + perror("Fork error"); + return 1; + } + + if (!proc1_pid) { + close(a_to_b[0]); + close(b_to_a[1]); + prctl(PR_SET_NAME, "proc1", 0, 0, 0); + ret =3D context_switch_loop_proc1(b_to_a[0], a_to_b[1]); + close(a_to_b[1]); + close(b_to_a[0]); + exit(ret); + } + + close(a_to_b[1]); + close(b_to_a[0]); + prctl(PR_SET_NAME, "proc2", 0, 0, 0); + ret =3D context_switch_loop_proc2(a_to_b[0], b_to_a[1]); + close(a_to_b[0]); + close(b_to_a[1]); + + if (ret) { + kill(proc1_pid, SIGKILL); + return ret; + } + + if (waitpid(proc1_pid, &status, 0) !=3D proc1_pid || !WIFEXITED(status) || + WEXITSTATUS(status)) + return 1; + + return 0; +} + +DEFINE_WORKLOAD(context_switch_loop); --=20 2.34.1 From nobody Thu Jun 11 02:45:42 2026 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 126EB352000 for ; Tue, 9 Jun 2026 14:40:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016033; cv=none; b=UJwIgLampwUB2fI8v3l5uhhNQcLjuVDoAzU9TBKQbhjJajPp24QX8dfsyDC2XwCa8QboLXxUGIwnL2clXdfZL2UfBd/wAwI4FW1ZyUspFL1uoTlfLwDl0LFpMmSSFlpsqxHtWQ0T8za3w03lEvzco4JnrXot9l6SiTP6u7szXwo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016033; c=relaxed/simple; bh=dIdyAuGP/OaUVcAMmgROZGX4ROjDm0H45x/4DXdzJEc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HUUxjAaG8ntSllsT+RUHBAtfAunSzsZMQNkjLQgOPQNqgvCKuh8mfIRS5O5mLINXtXD3DUP14XBcOgqSuencP7KXbJ1RNTT29/0nID0bajke5op9FTovQSd1utZZrzOa7QuOJ0DWrKPt/YMy7sh9/vDIv1EyZMLJHHNqEkyHiJM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=ukba1lLx; arc=none smtp.client-ip=209.85.128.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="ukba1lLx" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-490b64c8311so62873875e9.3 for ; Tue, 09 Jun 2026 07:40:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781016029; x=1781620829; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=PmgPHjWVH3cXsk2qRjnjPXugJJfk4bPfhv1qYZzCEfk=; b=ukba1lLxCvaQGy7Am1z2ze4BSX32hKePsH1WBv7K8XkHyX5RCClVKoZUoL30Icuhw9 iE1n0Uu5z7vpRJ8oyNSBEK/uS3xx1UoWIIZS+ntr7cnk5nyUsmFCeKXKAxxAkd18grNN 5pmOEyxyaw3lrWfgnCg1wn+qHLwxuXbd7eCH2vzbwe+VHwQ/50zbuzbXpM9IvZ/EvF01 AHmhBOHsTApJV1B7385N7XYEKKomaIoq0qwPUEblkEExrRF/4TAPG+wul8WNdoti+nJ4 BhjjydJ8YrjH3fmB7+eZM2XeX6aC0FrN8Lb7/KmMcHCow3sCV9naKuCulK9Tr5c9R4Rw T6FA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781016029; x=1781620829; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=PmgPHjWVH3cXsk2qRjnjPXugJJfk4bPfhv1qYZzCEfk=; b=q7XraIdsOrq96HTLAxIJcTYnowIcbxApWVHu2U3CuAcniv5WvOz45GTyF8mXObV7aF vxoZcPHkDaIrvNdcybc79+LrgKPFEUdb9rl+omYGZ96OgSIoY0w1yzDuY+n3d6iHjR7H 98ChnbPwFgPswBSZIAn3AbOsc5I5wn4MVK27wgf2EpHQn3tAb8dK+ChvgB1xNusWPG38 17llyV6qkMyJwrQkz1OzlfjS1/rzQu5elbA1DmvY8CGBmmCCAuE8Hv/jk97ZjCjWztro GYCTCNvObuig0+ZRm06Up3NjExgF0Ibczh55Ip4BJ5+gHPXy80BW5rwnmsgQ8Uj0N7Yq /B/A== X-Forwarded-Encrypted: i=1; AFNElJ/zc6bnU1jTQ5rYxujDIyBTAaOmVP6Ktpq29eOtrXrqrV1KMLaNxbw0CU9wCfDZc8VIg0GJTz7DRwsZk2w=@vger.kernel.org X-Gm-Message-State: AOJu0YzVMzZXcxtLunqz5SRwKfH1aLH/cPknOImyihALAtJ14/4FqwrH imK2EnbijkI2aIwBGdS/339eLIiMa/ktxDxY8XSave0ldsPTEgZWFKlQh7tkG6vNxRE9K2+tdMQ Yv18jMqY= X-Gm-Gg: Acq92OGr1/hCepgZhb1vvFFZi2jgG648jCprErtykgfH35kE7Bmd2Ry7VCOUaWE8gvB BlNmEvmh+BYLmioK08Jg342jInSEEKOTgYdm/qqfAvA9LWxjDnvzzBxFaN+n6pPDn1xKhUnOlY8 3JWB6o5lNdYTwXwI16a1nV8pyUsSwTRgsLew2/uR/ZGbLfz4o3fgjLDF3TYdCmlSIWCcv6xtICv 9x/45nh0A71gtQelYP33pqlK6aRvQ4zlvKPaDOWICwqOL5OUemSo4KkDARJ8NTEh344PiDw7shN ChFlNX7ZQnxsCEZFKgoi2yCryQrs1vFoZFl/kpKfR6tvHrCsNa2WKpM535akzOn2b9VR9IsMsh5 e5AY2zORQMsXrGwkywGUZmCMdWlPmmHKYB+glo+4vLbu+C7J4BJlSorSpmIhV+awbykdiTpoEKG lPPfSkTiq2SFltiDLwQu+u1tuRcm9NsrixVyOp2FQhekw= X-Received: by 2002:a05:600c:5248:b0:490:cb90:3e00 with SMTP id 5b1f17b1804b1-490cb903f1emr190466575e9.14.1781016029071; Tue, 09 Jun 2026 07:40:29 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3c1149sm428411935e9.4.2026.06.09.07.40.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 07:40:28 -0700 (PDT) From: James Clark Date: Tue, 09 Jun 2026 15:40:09 +0100 Subject: [PATCH v5 04/19] perf test cs-etm: Test process attribution Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-james-cs-context-tracking-fix-v5-4-d53a7d096a19@linaro.org> References: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> In-Reply-To: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> To: Suzuki K Poulose , Mike Leach , Leo Yan , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Ian Rogers , Amir Ayupov , Jonathan Corbet , Shuah Khan , Paschalis Mpeis Cc: coresight@lists.linaro.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo , linux-doc@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 Run the context switch workload on one CPU and trace it to test that symbols are attributed to the correct process and that the attribution changes at the exact point that the context switch happened. Reviewed-by: Leo Yan Signed-off-by: James Clark --- .../tests/shell/coresight/context_switch_thread.sh | 69 ++++++++++++++++++= ++++ 1 file changed, 69 insertions(+) diff --git a/tools/perf/tests/shell/coresight/context_switch_thread.sh b/to= ols/perf/tests/shell/coresight/context_switch_thread.sh new file mode 100755 index 000000000000..2b9c44b86c59 --- /dev/null +++ b/tools/perf/tests/shell/coresight/context_switch_thread.sh @@ -0,0 +1,69 @@ +#!/bin/bash -e +# CoreSight context switch thread attribution (exclusive) + +# SPDX-License-Identifier: GPL-2.0 + +# If CoreSight is not available, skip the test +perf list pmu | grep -q cs_etm || exit 2 + +if [ "$(id -u)" !=3D 0 ]; then + # Requires root for "-C 0" in record command + echo "[Skip] No root permission" + exit 2 +fi + +tmpdir=3D$(mktemp -d /tmp/__perf_test.coresight_context_switch.XXXXX) + +cleanup() { + rm -rf "${tmpdir}" + trap - EXIT TERM INT +} + +trap_cleanup() { + cleanup + exit 1 +} +trap trap_cleanup EXIT TERM INT + +check_samples() { + owner_samples=3D$(grep -c "proc1.*context_switch_loop_proc1" "$tmpdir/scr= ipt" || true) + next_samples=3D$(grep -c "proc2.*context_switch_loop_proc2" "$tmpdir/scri= pt" || true) + + if [ "$owner_samples" -eq 0 ] || [ "$next_samples" -eq 0 ]; then + echo "No samples found" + cleanup + exit 1 + fi + + if grep "proc2.*context_switch_loop_proc1" "$tmpdir/script"; then + echo "Thread1 symbol was attributed to proc2" + cleanup + exit 1 + fi + + if grep "proc1.*context_switch_loop_proc2" "$tmpdir/script"; then + echo "Thread2 symbol was attributed to proc1" + cleanup + exit 1 + fi +} + +cf=3D"$tmpdir/ctl" +af=3D"$tmpdir/ack" +mkfifo "$cf" "$af" + +# Pin to one CPU so the two threads alternate running but record into the = same +# trace buffer. Start disabled and use the control FIFO to only record the +# workload and not startup. +perf record -o "$tmpdir/data" -e cs_etm/timestamp=3D0/u -C 0 -D -1 --contr= ol fifo:"$cf","$af" -- \ + taskset --cpu-list 0 perf test --record-ctl fifo:"$cf","$af" \ + -w context_switch_loop > /dev/null 2>&1 + +# Test both instruction and branch sample generation modes. +perf script -i "$tmpdir/data" --itrace=3Di4 -F comm,pid,tid,ip,sym > "$tmp= dir/script" 2>/dev/null +check_samples +perf script -i "$tmpdir/data" --itrace=3Db -F comm,pid,tid,ip,sym > "$tmpd= ir/script" 2>/dev/null +check_samples + +cleanup +exit 0 --=20 2.34.1 From nobody Thu Jun 11 02:45:42 2026 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4E52417C203 for ; Tue, 9 Jun 2026 14:40:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016034; cv=none; b=HJhUCwD8yX8q3XEHb4n5mvwZIo7x5ooc3MIKljOv7ahNAAzdUQ4AlzxN6M4jArP+bblYsXW8iEVa+R1Y73bv+mQ/47N3Cxfgi3MqNEnrF8PB2Bwhu6UIZqAx5bWlKY5bpgRPp+oe+dpHByNZP5zR91UIhZANM7pQ+gzI0gV3ick= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016034; c=relaxed/simple; bh=MJ+K3Rs0bnya53fFL+gZpbiLUdkfojL7f7z2lYvhul8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kHgGllsW5d6ORbDfGm4M5Ss2yfSkBrWftNN6o5jmcqCoAcR8hqjyuae6ZTy9uPK1oQEAWm1Ky0UP5qb8ECQmNAagHEM7TAXDt9IUN/cvuui0LORQ9WKX3JUGvbYTJlEGzyfLDxzqj3YFtl987me+/hIMnZsbPOoZY154+gRF0VE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=PNlUBcrQ; arc=none smtp.client-ip=209.85.128.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="PNlUBcrQ" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-490ace40f4bso65179095e9.3 for ; Tue, 09 Jun 2026 07:40:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781016031; x=1781620831; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=bEOwD57aFV/Xs3z58IqNxAAWjTXC2csM2SlQM9DxCXs=; b=PNlUBcrQHppv9CuEj7e9cTMXxvkNxVMUYQYmnXuWF6847LqAqQ9e8xeYgUev655ZGE AwplK2iq7oRWU8xTIY/ZTTuiBniETyXYWkEsBr5o9NwbG6gs0LZ5fQ7HC1iIRL0QHmJQ N2meS/IL6L75IEJk3hP8SBn30ffabITvPXeILyshyaTvlHUrAzNeJRD8yUqBr+fPVxyK b53/kSPuUHnfwVeAHolAuvW4a1yFh4YQQGKcSMtbca8pSUz4gHHj1C5A/Hw04cXk+oOY DNwAVSIFTP/NDX4pbvCiovqDG6ivQ+2zL1HRCqbYt+euOqoTm9002dG2/5jJfl+iMVyi SOTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781016031; x=1781620831; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=bEOwD57aFV/Xs3z58IqNxAAWjTXC2csM2SlQM9DxCXs=; b=It1hwWfXzN6EDDRk0tJ+k9HSDEhtRDxyNhCwEi6/1GUo5jWjajBKznHHdxdtEuIeXU CXnLZ57LTHPMISL3xzZxvaPsFsFOwjDL5vxXwZFITlJJ5l7Wib6g338yKsWWurU6VKsD cFfSBU/8lJ/umosqlkM373D9JUQi7nNcU4ZiwazlKGERurOJvitl5PVlwhRE4+2lSiPb z+2WX+J4KzQQG/LW3tf7Du7qkHaLlZ7V4k2qhvpZ7LPtNk+OyUYcBk4tpAm+89PYH+fS FU9tjQYYRYu1WjcKmgn1I1ENcm5WkHno3b9XqMp4A4+IYv0SkHqxR0WQA7fGa4PrTgAD 8wqg== X-Forwarded-Encrypted: i=1; AFNElJ99S1CL7aUxej+S6P5mL//3zJmEvrqAIhxdAAIWQxENDXyqOH5oyVH1diUku9FfPT7KWbA/e4/wIhlj/C8=@vger.kernel.org X-Gm-Message-State: AOJu0Ywk8Sn/6TE06dj78ozk6G/o27kH2dUT0Cpwyu7WsyXIJrWMtTAq Yi7zv2NS4cXDAPoLvsnGIa+PFozpB8Phl5yPZBmulLh01pRlUqHzDFTknisUzV+69ME= X-Gm-Gg: Acq92OHLP15yKqOaxmVz8pGk9oeZBCzYyTownU4gXBLuszwrdMLFEBUQwgQeufCGXim 1rjpJXsw6pcOLuRzn57n+vO13jXrP3B03y6jkieUMYp0cKEgMcgbouTpeiU7npNAG4fwxpJgZ55 FkJYRJ+q6Ip8K0OI1Z+krQcJMiJOxESma7IBG58aZMKuoCU72Y0YOeGm9xULgzCuFBSPweaS/DF TVBniPm3yBHdDlmTDJ4GSzjyqYrVU4UaCqDaz2fIsOKI28mScbjgtqYNkb8rUm53yz4ckB0aNKr Y2QBsH5Ksp1kH6zWnbany1+Llrvoo4El5rzmMjvRvLZ1GQ34hfnpT9RSHxX+psSChWO/mUvqHlJ 0ZCUSDz2y3krkOIMvrmz9tD19xar7C1DhW9Z+UKnZjdiRy9qMDv2YqMtm6DZYPsTe4w3zTool+o 4902Ac0Vn7DBbiXzdBjzYgAM+h2/Q+Zm56IbUlkHIKfxk= X-Received: by 2002:a05:600c:a117:b0:490:c2a3:abaf with SMTP id 5b1f17b1804b1-490c2a3abdemr253443555e9.35.1781016030785; Tue, 09 Jun 2026 07:40:30 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3c1149sm428411935e9.4.2026.06.09.07.40.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 07:40:29 -0700 (PDT) From: James Clark Date: Tue, 09 Jun 2026 15:40:10 +0100 Subject: [PATCH v5 05/19] perf test: Add deterministic workload Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-james-cs-context-tracking-fix-v5-5-d53a7d096a19@linaro.org> References: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> In-Reply-To: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> To: Suzuki K Poulose , Mike Leach , Leo Yan , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Ian Rogers , Amir Ayupov , Jonathan Corbet , Shuah Khan , Paschalis Mpeis Cc: coresight@lists.linaro.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo , linux-doc@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 Add a workload that does the same thing every time for testing CPU trace decoding. Reviewed-by: Leo Yan Signed-off-by: James Clark --- tools/perf/Documentation/perf-test.txt | 4 +-- tools/perf/tests/builtin-test.c | 1 + tools/perf/tests/tests.h | 1 + tools/perf/tests/workloads/Build | 2 ++ tools/perf/tests/workloads/deterministic.c | 39 ++++++++++++++++++++++++++= ++++ 5 files changed, 45 insertions(+), 2 deletions(-) diff --git a/tools/perf/Documentation/perf-test.txt b/tools/perf/Documentat= ion/perf-test.txt index 213eb62603eb..c50a4b2d2d29 100644 --- a/tools/perf/Documentation/perf-test.txt +++ b/tools/perf/Documentation/perf-test.txt @@ -57,7 +57,7 @@ OPTIONS --workload=3D:: Run a built-in workload, to list them use '--list-workloads', current ones include: noploop, thloop, leafloop, sqrtloop, brstack, datasym, - context_switch_loop and landlock. + context_switch_loop, deterministic and landlock. =20 Used with the shell script regression tests. =20 @@ -66,7 +66,7 @@ OPTIONS seconds: leafloop, noploop, sqrtloop, thloop nrloops: brstack, context_switch_loop =20 - The datasym and landlock workloads don't accept any. + The datasym, landlock and deterministic workloads don't accept any. =20 --list-workloads:: List the available workloads to use with -w/--workload. diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-tes= t.c index 9284f897de3c..ef7e3f52a383 100644 --- a/tools/perf/tests/builtin-test.c +++ b/tools/perf/tests/builtin-test.c @@ -164,6 +164,7 @@ static struct test_workload *workloads[] =3D { &workload__inlineloop, &workload__jitdump, &workload__context_switch_loop, + &workload__deterministic, =20 #ifdef HAVE_RUST_SUPPORT &workload__code_with_type, diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h index 7cd4da4e96d3..bcfe9c33fc66 100644 --- a/tools/perf/tests/tests.h +++ b/tools/perf/tests/tests.h @@ -246,6 +246,7 @@ DECLARE_WORKLOAD(traploop); DECLARE_WORKLOAD(inlineloop); DECLARE_WORKLOAD(jitdump); DECLARE_WORKLOAD(context_switch_loop); +DECLARE_WORKLOAD(deterministic); =20 #ifdef HAVE_RUST_SUPPORT DECLARE_WORKLOAD(code_with_type); diff --git a/tools/perf/tests/workloads/Build b/tools/perf/tests/workloads/= Build index 7134a031cb7c..90f2d8aa4941 100644 --- a/tools/perf/tests/workloads/Build +++ b/tools/perf/tests/workloads/Build @@ -11,6 +11,7 @@ perf-test-y +=3D traploop.o perf-test-y +=3D inlineloop.o perf-test-y +=3D jitdump.o perf-test-y +=3D context_switch_loop.o +perf-test-y +=3D deterministic.o =20 ifeq ($(CONFIG_RUST_SUPPORT),y) perf-test-y +=3D code_with_type.o @@ -23,3 +24,4 @@ CFLAGS_brstack.o =3D -g -O0 -fno-inline -U_FORTI= FY_SOURCE CFLAGS_datasym.o =3D -g -O0 -fno-inline -U_FORTIFY_SOURCE CFLAGS_traploop.o =3D -g -O0 -fno-inline -U_FORTIFY_SOURCE CFLAGS_inlineloop.o =3D -g -O2 +CFLAGS_deterministic.o =3D -g -O0 -fno-inline -U_FORTIFY_SOURCE diff --git a/tools/perf/tests/workloads/deterministic.c b/tools/perf/tests/= workloads/deterministic.c new file mode 100644 index 000000000000..8a78519fd075 --- /dev/null +++ b/tools/perf/tests/workloads/deterministic.c @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: GPL-2.0 +#include +#include "../tests.h" + +int dt_work =3D 1234; + +static void function1(void) +{ + dt_work +=3D 7; + dt_work +=3D 7; + dt_work +=3D 7; +} + +static void function2(void) +{ + dt_work +=3D 7; + dt_work +=3D 7; + dt_work +=3D 7; +} + +static int deterministic(int argc __maybe_unused, + const char **argv __maybe_unused) +{ + dt_work +=3D 7; + dt_work +=3D 7; + dt_work +=3D 7; + + function1(); + + dt_work +=3D 7; + dt_work +=3D 7; + dt_work +=3D 7; + + function2(); + + return 0; +} + +DEFINE_WORKLOAD(deterministic); --=20 2.34.1 From nobody Thu Jun 11 02:45:42 2026 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CA7CC342514 for ; Tue, 9 Jun 2026 14:40:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016035; cv=none; b=HpFr8WvtMGUv0OZEqbWhGhTF0i5epON8Ye6lbMir0JALIj/U40OQbfPaLhFzPtn6Ae/kGPCU2s8VNEVNdWaTbUBy6yjCMzzIc21R2T2ngLcaP9QvzhCg2voaFbJdFGDJvWDudK3sNwSinLiI68Hnm0akTbeR5CvMH0qWMVSmMZQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016035; c=relaxed/simple; bh=2n7NJ22D4CS+P0i5+qEOUx8FKIjlEa2CLZ8182tHs0s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=D/9kdAPyiITUO4UJfNidrynMwcT805jgTJSOHvm/EQYpCXl51K60EEesIDmzc2Yox/bHAZATFXVViEHoHmCt/YQvXCl97UDshv7VfwBV8j5vha2XZTPS6X73aVzwS5383jqurac0PT9lnzeVupz7Rjr2jAZuae0QGRYx1keBoV0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=aIifUc6k; arc=none smtp.client-ip=209.85.128.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="aIifUc6k" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-490be03d47bso48592155e9.0 for ; Tue, 09 Jun 2026 07:40:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781016032; x=1781620832; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=K+VAHnkL1slPIQmaFlO30PHwtm50BBgiqOE4SfSQTuk=; b=aIifUc6kaUNBSxSrgxySOrH/W1/li3YHbljjE2f46UntvYNq3bGv+0qxjxi1A4kEip 6mOexVW/oNbTpqzDwmh3/aA9iYS31pWmaVesTpWPvilcnjlIdYIU9bqNurKAQpW1D2Us 7us/S9WRtGGw0L8eX05QDFOvfcQK7ifZ6jTnsx2PztrHFrmCTdpxd7X9Jjij5/0PFTWH zXJk3uMpSTMwBCV+zXq2WrMxwQ9qSqeeCTrd6k1+mG+GYkSYmtL9cABXzy+i38XiUaBs cfZwp3GFou/VIItCUnvXyVy+QnGw42Vjx0Fq7+bx9pI51rOMilj871NpPOlpK9O24NDD tzeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781016032; x=1781620832; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=K+VAHnkL1slPIQmaFlO30PHwtm50BBgiqOE4SfSQTuk=; b=itP9wxPZse6rJV0EZgTG2tyvTH7TQo/xMEdTigp4V1fHYNsXOGHdG1b3pYAArgu+pb DGDNlAeXDz94ZTZc2f1ms2hv8ilPK+n+czJwYcCvKrltwmx4QhI5wfD31m0OsSP1otvR yAxsnmXLuyRH9BOWcIY9r1ZY8WCJJnHIV1+CpqphuGi/C7egt8f3DdMlS77yQWNW8w7K engOcs5yaW8x7fxgPWD3WjAyUT4JBVC/x08kn5WBIE0nK8d7rMLrMfnXseJi5EBZtLfA RkHJYRI3HzEuSNxygm5r+geV+iAbGhxkLN26iZtrxEHpVy+bQu+L3yX75uUAGnh6Dy9j p00A== X-Forwarded-Encrypted: i=1; AFNElJ+GI7coLwlw0Pz7btErwU2GQaEq05oo6upmYg+Xn9ViFw6BdDgn3W03RnLTsLDKNmTSXohhyw7VWcE2/To=@vger.kernel.org X-Gm-Message-State: AOJu0Yxo8uDKh7+YBGDP/m0nkLB3usLFZ0IzmDEDU0onVe9gX5jXAf+R dJjf/5ks4giqU4rbVs10Qtk6PN4oAnPoSyAju8JQi/Dkrk+MWPSF6YCe9HWbIqKuZXE= X-Gm-Gg: Acq92OG1WBVqVtaMbAU8ZmuHLkeVgs9jBIIpk+F8BWSB8mhI9lF4bCy9Vl9kuhQ+ZNS asNnDVWV/hz1Z3Lhx0Cj0FtZEW2qLosP6Sy2CYKnua8IzjSFZcTkT26vhQmDd+BhT3HLm11m4oA G5ejIBJaPWnOBmFemCVwFQqeY7+zCUw5b68PRzTWkcS1yHC27zSAPjgXrNGej1NvBFf+EMe0+0p cRCVk/lLDK6DcURMQ7Ji2USkZ5yKK1SRy4TH1QZT8+LD5Wo26mJ7qLmmsMBPNitvtsvF+dKI40U 5k9nMasjiVpzuimM4Lt+6BrKZ+JO8SCmDwgVcxzXp/7ACKhVAfOrviOL89pLSZ5+9OQVG+EEwmD Yopkve2VooFlHsgi9KJ4vI2zK/2vqq/n+BtWF0TMS6t3XgatH39J/LdYpvFufMegNF0Hcl7PVfS iChYJbkeN3Hleyfl1Va0CONYZUEbZd2NUfqmHmbg9JvMo= X-Received: by 2002:a05:600c:3e0a:b0:490:45bb:8dd9 with SMTP id 5b1f17b1804b1-490c259a33emr315867955e9.8.1781016031985; Tue, 09 Jun 2026 07:40:31 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3c1149sm428411935e9.4.2026.06.09.07.40.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 07:40:31 -0700 (PDT) From: James Clark Date: Tue, 09 Jun 2026 15:40:11 +0100 Subject: [PATCH v5 06/19] perf test cs-etm: Replace unroll loop thread with deterministic decode test Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-james-cs-context-tracking-fix-v5-6-d53a7d096a19@linaro.org> References: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> In-Reply-To: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> To: Suzuki K Poulose , Mike Leach , Leo Yan , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Ian Rogers , Amir Ayupov , Jonathan Corbet , Shuah Khan , Paschalis Mpeis Cc: coresight@lists.linaro.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo , linux-doc@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 Testing a long sequence without branches seems like it would be better as a decoder unit test, and this test doesn't test decoding either, so it's not clear what bugs this is trying to catch. The new deterministic workload has somewhat long sequences when built unoptimized, and we can always increase them later if we want to. But now we test that decoding always gives the same result for the same sequence of code which we've never had before. Signed-off-by: James Clark Tested-by: Leo Yan --- tools/perf/tests/shell/coresight/deterministic.sh | 72 ++++++++++++++++++= ++++ .../tests/shell/coresight/unroll_loop_thread_10.sh | 22 ------- 2 files changed, 72 insertions(+), 22 deletions(-) diff --git a/tools/perf/tests/shell/coresight/deterministic.sh b/tools/perf= /tests/shell/coresight/deterministic.sh new file mode 100755 index 000000000000..75d4973056f0 --- /dev/null +++ b/tools/perf/tests/shell/coresight/deterministic.sh @@ -0,0 +1,72 @@ +#!/bin/bash -e +# CoreSight deterministic workload decode (exclusive) + +# SPDX-License-Identifier: GPL-2.0 + +# If CoreSight is not available, skip the test +perf list pmu | grep -q cs_etm || exit 2 + +tmpdir=3D$(mktemp -d /tmp/__perf_test.coresight_deterministic.XXXXX) + +cleanup() { + rm -rf "${tmpdir}" + trap - EXIT TERM INT +} + +trap_cleanup() { + cleanup + exit 1 +} +trap trap_cleanup EXIT TERM INT + +cf=3D"$tmpdir/ctl" +af=3D"$tmpdir/ack" +mkfifo "$cf" "$af" + +# Start disabled and use the control FIFO to only record the workload and = not +# startup. +perf record -o "$tmpdir/data" -e cs_etm//u -D -1 --control fifo:"$cf","$af= " -- \ + perf test --record-ctl fifo:"$cf","$af" -w deterministic > /dev/null 2>&1 + +perf script -i "$tmpdir/data" --itrace=3Di1i -F ip,srcline | \ + grep "deterministic.c" | uniq > "$tmpdir/script" 2>/dev/null + + +# Remove brace lines and call sites as they may not be hit or may have +# extra hits after returning, depending on the compiler. +sed -i \ + -e '/deterministic.c:8$/d' \ + -e '/deterministic.c:12$/d' \ + -e '/deterministic.c:15$/d' \ + -e '/deterministic.c:19$/d' \ + -e '/deterministic.c:23$/d' \ + -e '/deterministic.c:28$/d' \ + -e '/deterministic.c:34$/d' \ + -e '/deterministic.c:36$/d' \ + -e '/deterministic.c:37$/d' \ + "$tmpdir/script" + +cat > "$tmpdir/expected" << EOF + deterministic.c:24 + deterministic.c:25 + deterministic.c:26 + deterministic.c:9 + deterministic.c:10 + deterministic.c:11 + deterministic.c:30 + deterministic.c:31 + deterministic.c:32 + deterministic.c:16 + deterministic.c:17 + deterministic.c:18 +EOF + +if ! diff -q "$tmpdir/script" "$tmpdir/expected"; then + echo "FAIL: line numbers don't match expected: " + head -n 100 "$tmpdir/script" + cleanup + exit 1 +fi + +cleanup +exit 0 diff --git a/tools/perf/tests/shell/coresight/unroll_loop_thread_10.sh b/to= ols/perf/tests/shell/coresight/unroll_loop_thread_10.sh deleted file mode 100755 index cb3e97a0a89f..000000000000 --- a/tools/perf/tests/shell/coresight/unroll_loop_thread_10.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash -e -# CoreSight / Unroll Loop Thread 10 (exclusive) - -# SPDX-License-Identifier: GPL-2.0 -# Carsten Haitzler , 2021 - -TEST=3D"unroll_loop_thread" - -# shellcheck source=3D../lib/coresight.sh -. "$(dirname $0)"/../lib/coresight.sh - -ARGS=3D"10" -DATV=3D"10" -# shellcheck disable=3DSC2153 -DATA=3D"$DATD/perf-$TEST-$DATV.data" - -perf record $PERFRECOPT -o "$DATA" "$BIN" $ARGS - -perf_dump_aux_verify "$DATA" 10 10 10 - -err=3D$? -exit $err --=20 2.34.1 From nobody Thu Jun 11 02:45:42 2026 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3BF5E32B102 for ; Tue, 9 Jun 2026 14:40:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016037; cv=none; b=OS22+a2LWHHQmesY5JKjmSUZYcgOoy4Q6XQELN9aCgH0mrTeE65ndaiOWzbG4UG1WdKbP355YOexFdsIj633yvH3RF07lmJDV8U4eUjF12mXw3L0bdN1IFxOYXubNiNV149gIwZhRw8gXLzYlBxllA9sWzMTYDcbUvexa6YikUQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016037; c=relaxed/simple; bh=eCuV3FuofxqoEQPMj2FadVdPVNUg7XcieFIZyThEq0o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KFR+emtI2r23epeH4UUfIwK4I1J4ex3ewIYxFCZxP2/DWy6Xu7HxeIAKovVVFcDxIB9kzDUmHJJc4r7r6Dz6Y+ACX1VbscUqgkDh9P5Ne74zKoeS+SoR5ozCZz4PediGrTbTO9tuShq7LWFtuW+a32VkygcfDzlOBcKSwi8GUmc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=rq/UcUXO; arc=none smtp.client-ip=209.85.128.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="rq/UcUXO" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-490be29c1c5so71965205e9.2 for ; Tue, 09 Jun 2026 07:40:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781016034; x=1781620834; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=bSy6i0DRlOr9w5Y09gyckl4fi8MxME+0ZH/anot9Owo=; b=rq/UcUXO4nWLSNTgoH8rIYdH51RW0+hrLuUykp6wNs/1xt2qN1xISNzaIrIalJJBV9 dZQMV9ofjJGcDujI1r+Tcj/zHnWFd5igk2kSimX5GFZK00eqNk4QVewzEufBHqQ8dEMf oQsWAz3aK2dnNwjKetucX6WS0hbghcFp9v8q7s8tc9eb0CF/+AOw2n8S2N+CJNlWeC/6 e2TaqtD+jNTqfO/DkCwr4Shw3bdsK+JK/snx12OklIHTFwmdtnrWc0CT5dTlQ/1HrjS8 EMZSs217nljZrzMh3BP16zrVWP0H01v0wzEOpMXguvX61qUO91umM5kVcAJQVf0I2OZz PsQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781016034; x=1781620834; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=bSy6i0DRlOr9w5Y09gyckl4fi8MxME+0ZH/anot9Owo=; b=DXOvNtLQeJC+bgmvjRyu+kQ/6CfyFrDhXxujYMZ1ZwIeCVmIgcIyt0ZNkHHeliFb3E mlhaVDGj5stkJtxLyS48ktVUQ9nZsJ+DNP+4KwZlwFD8gumxFWby09oIeYjV4Kww9wTB RLRMPZq8ewmVRtGuJebBWT1x6LoQGkVsdip3sj3nvo81PnvXXS905XXyKMT9wvXeUUAA /TFfGQRnkBWmJOctj31WJ/se+e88zHdCUciaCe28nJyr8Q7C+G9QxH1QvWzKJaKXp0+j g9UzDfKIWLUobYnL1dtUrKIFfASdLNde781dO8hhRR07RoKJMSJpLyZxfcbE479bGO9r s9TQ== X-Forwarded-Encrypted: i=1; AFNElJ9xuKfg55PlllE4ytedBBKFh/rOmclqJjka36X/nlsviLjU8Xz9hXh9WjdViyljtq9GZzshqmYi7W1C/FE=@vger.kernel.org X-Gm-Message-State: AOJu0Yzs9QycYqzl3n8Eu70WZwusNQ+X63CBhsJxKxsWwxscrsAaaQI/ ZrrMDFH//g8+YVC8gPmBq5aNgO2dGuy8DR9BmdCg1T+iUcN4QVFezmppIHp6mfCnoiU= X-Gm-Gg: Acq92OEnti2kxAD0yI/FMeDw6tdtow22JBq0yv8pnj6kgarQz3rhxB/Uhbzl6l800wE hQDaCBR0+vs1BfpdpuYxb5Or7DKszAj6fO3n+Mi+eea+dWAd8Evte6IvGKVQBRyhC4U7VzIzRjz jw/XTuTBB1xeuF8SD7cloDt0N1P7ZWf1I0hiku+XIfMEw/oc9fhARJaxwWXi6FCFi4x2QHaffbI +WeoFbGRrEufZb3QqBPlP+dAMzU3GQPJx2KN15aEcw6q07+U/b8Q2GAb5PRa1kjxKE1yGzIyeBv PxngsCpXoN0wPYx9WyCbzP6nNPZ4jM1/BFXMC8biAfpQ82mIDKr6HkTMSdFVi419uHwcC9ccLcN OIiROhi0bT317mbA2TmDoEPMJrzGklUMIzuE7++w0/q1MckqouNyYGMHN9WLM/G6qpFHEw9eXp/ 1LptSGeYh8fhmo9QlUySb4MT2Yhx8svmibPVoHw/E+/TI= X-Received: by 2002:a05:600c:8b70:b0:490:ae94:a7e6 with SMTP id 5b1f17b1804b1-490c25c20e0mr322707135e9.24.1781016033565; Tue, 09 Jun 2026 07:40:33 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3c1149sm428411935e9.4.2026.06.09.07.40.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 07:40:32 -0700 (PDT) From: James Clark Date: Tue, 09 Jun 2026 15:40:12 +0100 Subject: [PATCH v5 07/19] perf test cs-etm: Remove asm_pure_loop test Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-james-cs-context-tracking-fix-v5-7-d53a7d096a19@linaro.org> References: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> In-Reply-To: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> To: Suzuki K Poulose , Mike Leach , Leo Yan , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Ian Rogers , Amir Ayupov , Jonathan Corbet , Shuah Khan , Paschalis Mpeis Cc: coresight@lists.linaro.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo , linux-doc@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 It's not obvious what this test is for so remove it. It's not a stress test because it doesn't output lots of data and it's not a functional test because it only looks for raw trace output. It seems to imply that a program written in assembly influences whether trace would be generated by the CPU or not, but the CPU doesn't know what language the program is written in. We already have lots of Coresight tests that test the full pipeline including decoding, and in many more modes of operation than this one, so if no trace was collected they will already fail leaving this one redundant. Reviewed-by: Leo Yan Signed-off-by: James Clark --- tools/perf/tests/shell/coresight/asm_pure_loop.sh | 22 -------------------= --- 1 file changed, 22 deletions(-) diff --git a/tools/perf/tests/shell/coresight/asm_pure_loop.sh b/tools/perf= /tests/shell/coresight/asm_pure_loop.sh deleted file mode 100755 index 0301904b9637..000000000000 --- a/tools/perf/tests/shell/coresight/asm_pure_loop.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash -e -# CoreSight / ASM Pure Loop (exclusive) - -# SPDX-License-Identifier: GPL-2.0 -# Carsten Haitzler , 2021 - -TEST=3D"asm_pure_loop" - -# shellcheck source=3D../lib/coresight.sh -. "$(dirname $0)"/../lib/coresight.sh - -ARGS=3D"" -DATV=3D"out" -# shellcheck disable=3DSC2153 -DATA=3D"$DATD/perf-$TEST-$DATV.data" - -perf record $PERFRECOPT -o "$DATA" "$BIN" $ARGS - -perf_dump_aux_verify "$DATA" 10 10 10 - -err=3D$? -exit $err --=20 2.34.1 From nobody Thu Jun 11 02:45:42 2026 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 91A5835DA79 for ; Tue, 9 Jun 2026 14:40:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016038; cv=none; b=nedCUAt7WQf23mfbaMa5547S3feQ8PETujWTSDoeOlBu+4XqlmQpwFJ14jHUl1P5nHsX+icJlQsSx+zho/mKWFrfYbLEHk7jEAN4Gp+rRhmU2s2Qh8MDaUq5FBoNEC7rblcn2KEeKcbTyZ4KuhhqP5JYMDR+OWdSjhMqq9lRdYw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016038; c=relaxed/simple; bh=F2wNljY7pGDf8SSMy7XsjQ1Brf2XH3gvhmbnZIrOtSU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Y0ZhpdDVaxJs7U80k1G+uz4FTDXnHaYnE8724m2i+NnBv+FDxEWS7tNKK17vv8jLH54izdV4zWL5OWfxB6g9McqmKyOuAh++MzhseVOzsdi3PrugBhwGugM/qZ0B2YnR7llFeS5bUzffC2IQ6ncSra8eutGAOExkIPBp2ssgD7g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=G+jkv2IG; arc=none smtp.client-ip=209.85.128.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="G+jkv2IG" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-490bb83a3f6so46652495e9.0 for ; Tue, 09 Jun 2026 07:40:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781016035; x=1781620835; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=joyQ3Os7Olu2QxTrG0edDw8dpFFKX7es87b0fsuebZM=; b=G+jkv2IGxZbM+X6pyyloDVznQjaTbMebpgK84WLDwMe70DU/FA/IzB3+8Ejh2uNpkV RSaqkXz/azOB22otJnSeQ7noBRhi5tfpwTgUN4tInPb/OOaPEhyH6Cwdhb/VCFluEqni HD6EWjLC6nVOI9jl+MzvBoczycNnKAFHY1bI9MuB72sqQSpAQ/nY0JKgQu2SaebltGv2 1lHHIfM2pG5kzVpYnOGg8fneWhYnYDioUfjAzQ2iY4uxA1Mjt465b666kMhIPHO7FUkb pY9eWEbKl51tea2tEd0vE0cGRaMLS+9CvH68Het2RubQGqT8fcltAPPdn8bExpjimpz3 oong== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781016035; x=1781620835; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=joyQ3Os7Olu2QxTrG0edDw8dpFFKX7es87b0fsuebZM=; b=gnkN6OnRc39cQwrxd7z8gHSW/f1HJFCT/yfgaKyyi3K5p2fPJriNJ52a0a3N1qmsF2 zJpHGQkYjZ0PGHbQAwKKCv155ZsQoE11dTZNjz9YaBb9gG7W9EImDljCUNHnOX6DABH0 jpSnC/F1ePr1Euwl4tl8uXihhNPF+3ekgccXc6izo9LemIcXI2+mjCSti5IvPNI/6c0w 29+VxK/nLKKUEGo+CcnrvXK0xDzBKjMZfEcXEELCwfKmUcXvsHy89by/wfHYllCPi+4G a3Y7HMmY2XVUXoO6M+2ZZVLtJyYSb4VroHPTbN8/EsoDW2qvYzAyZWZjg8j1RZaOYuun 3lLQ== X-Forwarded-Encrypted: i=1; AFNElJ8gCK32+RemgfjVkVlHF7pkmxWErN6k+gU54Ur6fregCZ6qqcMdzS5a5xdpzSCA8rl9EgMyFLRCvoI4iFY=@vger.kernel.org X-Gm-Message-State: AOJu0YyRLYTtDlxgkoLOm0oEdD0CLsy/3dulZt+QbT6Pq3tUEBL6qBKq 5O+ZbhztgZMenulpJpNPdgYxcArwjL5MdBMhm8vOHhQYlCHSJ8kA5+nmM1cCyByilf8= X-Gm-Gg: Acq92OGrTvzTGthHl4CLXd3GeElnzdf5WEXiqhSM5cp6g4zpN12Ci9GoySeOE3npmlE T4FFItmbzpIo4liBgFHYphigXVhzT3w5RMxrxreDrwemj8XHijlfr/KFNO3o8XKS60W74DU3tQc a+1oMkAckTtCxWwLV1Antv7WnZBCfvQ3wa53TfVvsfXSLKG2Id5w9DnWNhsJg7dmk5ytwzWHRVP WfMWqhkKRxDtYWTubl8Xagsjowoqs11ZzWM6Ne0V2p1XhMYYWYlVA7ZXzp/1h2zrRHOCGYCQUDD CdFkLPoc+jYwBPvGQrl+cIlqteA0yd1TVmF7LqiqH3QizNmhJjVW+HNZdukvltzJwZCspnJ3So+ EyNohwUC7WB3hO9Eihq5/tK5qQO7DTOeybtCy8tFEkujHP+ml5vaP2tBY+U0UngBvcy0CFZtacF l2nrpynnVI4D8kBdImf7H6/S943cURRB52Js1AZtXZGVM= X-Received: by 2002:a05:600c:1d0a:b0:48e:5d91:cfe3 with SMTP id 5b1f17b1804b1-490d71ecbe8mr42059245e9.1.1781016034975; Tue, 09 Jun 2026 07:40:34 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3c1149sm428411935e9.4.2026.06.09.07.40.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 07:40:34 -0700 (PDT) From: James Clark Date: Tue, 09 Jun 2026 15:40:13 +0100 Subject: [PATCH v5 08/19] perf test cs-etm: Replace memcpy test with raw dump stress test Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-james-cs-context-tracking-fix-v5-8-d53a7d096a19@linaro.org> References: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> In-Reply-To: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> To: Suzuki K Poulose , Mike Leach , Leo Yan , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Ian Rogers , Amir Ayupov , Jonathan Corbet , Shuah Khan , Paschalis Mpeis Cc: coresight@lists.linaro.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo , linux-doc@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 Like asm_pure_loop, this memcpy test only checks that 10 of each of a few trace packet types occur after recording a lot of trace, which isn't more specific than other existing Coresight tests. Assume it was supposed to be a stress test for dumping and replace it with one that doesn't require a custom binary and checks for a specific amount of raw output. Don't bother checking for packets because the other tests that test decoding will catch issues with malformed data. This also adds coverage for exit snapshot mode which was missing. Signed-off-by: James Clark Tested-by: Leo Yan --- .../tests/shell/coresight/memcpy_thread_16k_10.sh | 22 -------- .../perf/tests/shell/coresight/raw_dump_stress.sh | 65 ++++++++++++++++++= ++++ 2 files changed, 65 insertions(+), 22 deletions(-) diff --git a/tools/perf/tests/shell/coresight/memcpy_thread_16k_10.sh b/too= ls/perf/tests/shell/coresight/memcpy_thread_16k_10.sh deleted file mode 100755 index 1f765d69acc3..000000000000 --- a/tools/perf/tests/shell/coresight/memcpy_thread_16k_10.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash -e -# CoreSight / Memcpy 16k 10 Threads (exclusive) - -# SPDX-License-Identifier: GPL-2.0 -# Carsten Haitzler , 2021 - -TEST=3D"memcpy_thread" - -# shellcheck source=3D../lib/coresight.sh -. "$(dirname $0)"/../lib/coresight.sh - -ARGS=3D"16 10 1" -DATV=3D"16k_10" -# shellcheck disable=3DSC2153 -DATA=3D"$DATD/perf-$TEST-$DATV.data" - -perf record $PERFRECOPT -o "$DATA" "$BIN" $ARGS - -perf_dump_aux_verify "$DATA" 10 10 10 - -err=3D$? -exit $err diff --git a/tools/perf/tests/shell/coresight/raw_dump_stress.sh b/tools/pe= rf/tests/shell/coresight/raw_dump_stress.sh new file mode 100755 index 000000000000..bea70d825596 --- /dev/null +++ b/tools/perf/tests/shell/coresight/raw_dump_stress.sh @@ -0,0 +1,65 @@ +#!/bin/bash -e +# CoreSight raw dump stress (exclusive) + +# SPDX-License-Identifier: GPL-2.0 + +if [ "$(id -u)" !=3D 0 ]; then + # Requires root for larger buffer size + echo "[Skip] No root permission" + exit 2 +fi + +# If CoreSight is not available, skip the test +perf list pmu | grep -q cs_etm || exit 2 + +tmpdir=3D$(mktemp -d /tmp/__perf_test.coresight_raw_dump_stress.XXXXX) + +cleanup() { + rm -r "${tmpdir}" + trap - EXIT TERM INT +} + +trap_cleanup() { + cleanup + exit 1 +} +trap trap_cleanup EXIT TERM INT + +# Use exit snapshot to record 2M of trace to make about 80MB of raw dump d= ata. +echo "Recording..." +perf record -e cs_etm/timestamp=3D0/u -m,2M -Se -o "$tmpdir/data" -- \ + perf test -w brstack 20000 > /dev/null 2>&1 + +# Test raw dump runs to completion but don't decode because that's too slo= w for +# a test +echo "Dumping raw trace..." +perf report --dump-raw-trace -i "$tmpdir/data" 2>/dev/null > "$tmpdir/rawd= ump" + +# Get the size and offset of the first AUXTRACE buffer and the index of th= e last +# packet in the raw dump. +read -r size offset last_idx <<< "$(awk ' + found && /PERF_RECORD_/ { exit } + /PERF_RECORD_AUXTRACE / { found =3D 1; size =3D $7; offset =3D $9; next } + found && /Idx:/ { last_idx =3D $1; gsub(/Idx:|;/, "", last_idx) } + END { if (last_idx) print size, offset, last_idx } +' "$tmpdir/rawdump")" + +# The last Idx minus start offset should equal the size of the buffer if +# everything was dumped. Allow 48 bytes difference to cover 3 frames: curr= ent +# frame length, a partial frame and a final empty one, all of which aren't +# dumped. +# +# TODO: for a single snapshot, offset should always be zero. However, we +# currently output AUX records in snapshot mode when we shouldn't, which +# increments the offset. Allow for that until it's fixed so we can test raw +# dumping. +decode_size=3D$((1 + last_idx - offset)) +if [ "$decode_size" -gt "$((size - 48))" ] && [ "$decode_size" -le "$((siz= e))" ]; then + echo "PASS: AUXTRACE buffer length matches dumped packet index" + cleanup + exit 0 +fi + +echo "FAIL: AUXTRACE buffer length mismatch: size=3D$size offset=3D$offset= last_idx=3D$last_idx decode_size=3D$decode_size" +cleanup +exit 1 --=20 2.34.1 From nobody Thu Jun 11 02:45:42 2026 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F2E8B37E2F2 for ; Tue, 9 Jun 2026 14:40:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016041; cv=none; b=IYMtSqI+xcZcADbz41lNR0FZamsGBTq5i1ayrApbc4Y3a8w318uqJiyQIiDcRyJvQmCMkqBwlVkj9gzWTezi/Sl+qnJaZAOD2ki72nBSxGTASfq9dTYfl0TPiWJark89fNYYkEy/3RCyhuvdb37GGynwF9Xz5Q0c601BOwiiTDA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016041; c=relaxed/simple; bh=WCF37Je8MxyyOE4gwzCHUUj3VQznGEyT8txE/wxHMAU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YXJmqfR5QdYcZjbWE/QKI1yK4Urp+4haJg3hQW7pkHDXb0B9zCgXx2zXLwyNefSxwnzVrBbQYtDUUkyu7Fznvir9pXO1kwGSYFeB/Uw4XV/AZdvdPtS1z3Rw7XuAoJc8Dzz1XNuo2dcoHtuy/sohCcveTqtSAv3gjC4SIHHfTzs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=BWE8ptwy; arc=none smtp.client-ip=209.85.128.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="BWE8ptwy" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-490bb83a3f6so46652735e9.0 for ; Tue, 09 Jun 2026 07:40:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781016036; x=1781620836; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=4f1wgMP8HKBDMVa7qiKIEB8ImxwlPbZld8s+b9RAewo=; b=BWE8ptwyTTxLW+lcRvDNTuEqbrhO8I8a+anTBI533VYwxdhiDCHhEIz4LXkBKKt+Hy 2bdhdhnJakrV65h/KRnpSI7b2yRYQi6RBpmCaPuXgBXMDLIe9BLrNvCgRbzXzwZoWmqm VoNbATd2ZwmAD1Vj1OfHAeUcklOd8yazA+DFaSdBDuz9VGMvFFzzuSISitc6y7A2TCWG TL2IicLqINQOQwSIeYypFhDtaz7QCKgaeO7ZXfBcd+iKx1oR1Cb582EyFTpfilaTvt1R tEJ4hi48YZIzJUHXilDnSMTwOCJvHjh4Puf8YStf2LMmf/mcD/WqzwJpdchXLQ8HL2SB ltPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781016036; x=1781620836; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=4f1wgMP8HKBDMVa7qiKIEB8ImxwlPbZld8s+b9RAewo=; b=VtaNKoCDlmoAb3qMXm2fcEZ91A7T1Y9Bd9yZbHKwqQ8eKLHMktAYfWLMh8FeL9BSEy 5m/lvWCrYfVEv+ypR8fZjgfOiCXFOXgIK27rG95r8uPHrBl0NIDEEq+UcN31zn0w4nPH BEaS2Ksl3UkB3kavrAw45RLqp+okke721Hu5ugcH0oOEKzggEaAnLnLv6GUUtxPpECR1 Hbv5e4LJqcRMdSrNBNxTmvja8/B+K1cdG3nvw2kkG08Itv8iHJUQfaAUWNQWQNThwPev hOSODlxz80Z+ol1EQVd6Dy4UoCGLZKt56rZ+HErlqPaFl7l97Gzz+3GWulHzg/uy+o7g 9Guw== X-Forwarded-Encrypted: i=1; AFNElJ9Mj6/Gbk8HjeNe7UXysERykxdWpQyDidGm4mCtC5P0jkk/me5s5F6RRrQ2pt4e/jq7YQPzITmYqzXwc4k=@vger.kernel.org X-Gm-Message-State: AOJu0YxmP3gerhreZrA8F+njzWKGmauGx0eCIP8vD1KDbX3DgwJ95+rn KYMibZ/iR8MznwrEgyjETQIjrDP868NQ6QJIOnezYn4gS9+0z1wmpuoJfa2zi48olHc= X-Gm-Gg: Acq92OG0amB+ulMGzR2wnXqu6xf3zI5QyOahyrqFSVqeFXny8cJs09rDAHHUobPATwb cMBaIeAIRvfOKVwcs5B9HOSfpU1Zyqm8x8wEaj9J5kKrXdA+IBrxygh1VQWbnZWOL4FWpyNEihF GtFCozuLtqnRiOijQOUyL2EXJiHwGhOnXvnnuNONrxdlHvmTDc4HK0Nccb5T1Loku+OsaCNiJLb DV8+dHdg8mVvZ081+p/f/8PYrVtg/vGfHQb3pG88YY4OnENrEDSREeGl23MhrzlmpP+way9n+ir VRrPNzSVWLhjjMM1nta6V+6oAz4CcSkIWW6bsOWlhh5uiEYqXgaz4lQqR07S3k91+drerGsQKDl Rixk4wHWrK6HlnMWvwKR8T9YmDw8k6ev1+VKEo0CrU5qsZxwctMvTsNLMarj3EuqTi+1RuE8nhC vzF9NA6SIt2hW4vl5wGM7hssINU2wQ3tpLOVY0GCYNqag= X-Received: by 2002:a05:600d:8444:20b0:490:48b7:c1ff with SMTP id 5b1f17b1804b1-490d72239damr30304245e9.17.1781016036424; Tue, 09 Jun 2026 07:40:36 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3c1149sm428411935e9.4.2026.06.09.07.40.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 07:40:35 -0700 (PDT) From: James Clark Date: Tue, 09 Jun 2026 15:40:14 +0100 Subject: [PATCH v5 09/19] perf test: Add named_threads workload Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-james-cs-context-tracking-fix-v5-9-d53a7d096a19@linaro.org> References: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> In-Reply-To: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> To: Suzuki K Poulose , Mike Leach , Leo Yan , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Ian Rogers , Amir Ayupov , Jonathan Corbet , Shuah Khan , Paschalis Mpeis Cc: coresight@lists.linaro.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo , linux-doc@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 Add a workload that runs X threads that run a unique function named "named_threads_thread[x]" which performs a multiplication in a loop for Y loops. Each thread sets its name to "thread[x]". This can be used to test that processor trace decoding handles concurrent threads correctly and the correct symbols and thread names are assigned to samples. Signed-off-by: James Clark --- tools/perf/Documentation/perf-test.txt | 5 +- tools/perf/tests/builtin-test.c | 1 + tools/perf/tests/tests.h | 1 + tools/perf/tests/workloads/Build | 1 + tools/perf/tests/workloads/named_threads.c | 109 +++++++++++++++++++++++++= ++++ 5 files changed, 116 insertions(+), 1 deletion(-) diff --git a/tools/perf/Documentation/perf-test.txt b/tools/perf/Documentat= ion/perf-test.txt index c50a4b2d2d29..81c8525f5946 100644 --- a/tools/perf/Documentation/perf-test.txt +++ b/tools/perf/Documentation/perf-test.txt @@ -57,7 +57,7 @@ OPTIONS --workload=3D:: Run a built-in workload, to list them use '--list-workloads', current ones include: noploop, thloop, leafloop, sqrtloop, brstack, datasym, - context_switch_loop, deterministic and landlock. + context_switch_loop, deterministic, named_threads and landlock. =20 Used with the shell script regression tests. =20 @@ -66,6 +66,9 @@ OPTIONS seconds: leafloop, noploop, sqrtloop, thloop nrloops: brstack, context_switch_loop =20 + 'named_threads' accepts the number of threads and the number of loops to + do in each thread. + The datasym, landlock and deterministic workloads don't accept any. =20 --list-workloads:: diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-tes= t.c index ef7e3f52a383..afc06cec4954 100644 --- a/tools/perf/tests/builtin-test.c +++ b/tools/perf/tests/builtin-test.c @@ -155,6 +155,7 @@ static struct test_suite *generic_tests[] =3D { static struct test_workload *workloads[] =3D { &workload__noploop, &workload__thloop, + &workload__named_threads, &workload__leafloop, &workload__sqrtloop, &workload__brstack, diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h index bcfe9c33fc66..7cedf05be544 100644 --- a/tools/perf/tests/tests.h +++ b/tools/perf/tests/tests.h @@ -237,6 +237,7 @@ struct test_workload workload__##work =3D { \ /* The list of test workloads */ DECLARE_WORKLOAD(noploop); DECLARE_WORKLOAD(thloop); +DECLARE_WORKLOAD(named_threads); DECLARE_WORKLOAD(leafloop); DECLARE_WORKLOAD(sqrtloop); DECLARE_WORKLOAD(brstack); diff --git a/tools/perf/tests/workloads/Build b/tools/perf/tests/workloads/= Build index 90f2d8aa4941..75b377934a0e 100644 --- a/tools/perf/tests/workloads/Build +++ b/tools/perf/tests/workloads/Build @@ -2,6 +2,7 @@ =20 perf-test-y +=3D noploop.o perf-test-y +=3D thloop.o +perf-test-y +=3D named_threads.o perf-test-y +=3D leafloop.o perf-test-y +=3D sqrtloop.o perf-test-y +=3D brstack.o diff --git a/tools/perf/tests/workloads/named_threads.c b/tools/perf/tests/= workloads/named_threads.c new file mode 100644 index 000000000000..d051d41a3cfe --- /dev/null +++ b/tools/perf/tests/workloads/named_threads.c @@ -0,0 +1,109 @@ +// SPDX-License-Identifier: GPL-2.0 +#include +#include +#include +#include +#include +#include +#include +#include "../tests.h" + +#define MAX_THREADS 25 + +static int iterations =3D 500; +int named_threads_work =3D 1234; + +typedef void *(*thread_fn_t)(void *); + +#define DEFINE_THREAD(n) \ +noinline void *named_threads_thread##n(void *arg __maybe_unused) \ +{ \ + pthread_setname_np(pthread_self(), "thread" #n); \ + for (int i =3D 0; i < iterations; i++) \ + named_threads_work +=3D 3; \ + \ + return NULL; \ +} + +#define THREAD_LIST(macro) \ + macro(1) \ + macro(2) \ + macro(3) \ + macro(4) \ + macro(5) \ + macro(6) \ + macro(7) \ + macro(8) \ + macro(9) \ + macro(10) \ + macro(11) \ + macro(12) \ + macro(13) \ + macro(14) \ + macro(15) \ + macro(16) \ + macro(17) \ + macro(18) \ + macro(19) \ + macro(20) \ + macro(21) \ + macro(22) \ + macro(23) \ + macro(24) \ + macro(25) + +#define DECLARE_THREAD(n) void *named_threads_thread##n(void *arg); + +THREAD_LIST(DECLARE_THREAD) +THREAD_LIST(DEFINE_THREAD) + +#define THREAD_ENTRY(n) named_threads_thread##n, + +static thread_fn_t thread_fns[MAX_THREADS] =3D { + THREAD_LIST(THREAD_ENTRY) +}; + +/* + * Creates argv[0] threads that run a unique function named "thread[x]" wh= ich performs + * a multiplication in a loop for argv[1] loops. + */ +static int named_threads(int argc, const char **argv) +{ + pthread_t threads[MAX_THREADS]; + int nr_threads =3D 1; + int err =3D 0; + + if (argc > 0) + nr_threads =3D atoi(argv[0]); + + if (nr_threads <=3D 0 || nr_threads > MAX_THREADS) { + fprintf(stderr, "Error: num threads must be 1 - %d\n", MAX_THREADS); + return 1; + } + + if (argc > 1) + iterations =3D atoi(argv[1]); + + if (iterations < 0) { + fprintf(stderr, "Error: iterations must be non-negative\n"); + return 1; + } + + for (int i =3D 0; i < nr_threads; i++) { + int ret; + + ret =3D pthread_create(&threads[i], NULL, thread_fns[i], NULL); + if (ret) { + fprintf(stderr, "Error: failed to create thread%d: %s\n", + i + 1, strerror(ret)); + return 1; + } + } + + for (int i =3D 0; i < nr_threads; i++) + pthread_join(threads[i], NULL); + + return err; +} + +DEFINE_WORKLOAD(named_threads); --=20 2.34.1 From nobody Thu Jun 11 02:45:42 2026 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2422A35E1A4 for ; Tue, 9 Jun 2026 14:40:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016041; cv=none; b=iVqRkhA+DQEISGhJXKe08OTX+2AUGozlqTR5UwZC9baGtBtXje/r2c1F3T4lLkKU3YCh/QEqrg8gZOjjFojak4CeiNPjU0nX1yONxTgNMO1uy/w6xAoYzCFbFxDsU28SbuutRX21PiwpRKeruhBDU6C7BVUYqi5+0/Rrox42Sa4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016041; c=relaxed/simple; bh=JYW1wo5ab8agRdVZbjqrOWWaceuU0TjELaoVo7f/di4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mlNc0mtqwwiuydHQWsy8XUPmMZG+fkqME3XfQrNlJ7GJ4awSynxlPlxyER9zJ0BqE+lWBnjSAKPTjvuvp0Z49YCIWZ714B2yXndiNPr0Gro9D2SpQUbfiwj1VRKOkIldXCrXtWobZX07lv6jYii5DrMqJWViU9o7fLWV4+83My8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=okF+TBs0; arc=none smtp.client-ip=209.85.128.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="okF+TBs0" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-490bc6a7958so50352375e9.1 for ; Tue, 09 Jun 2026 07:40:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781016037; x=1781620837; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=AWKqHsTkFl2zrGvjPzv1+aBtZDDjn0PHucQTDAlzntI=; b=okF+TBs0J79RQn0PzVO0SjhBO5GMfXX5AIDumpnwGKBQ4kM5lnpJ57LPol8qnITEVQ l3xatgaaNknnpuBjXHqyqgADPYi2q9DXztFR08okzvED48/YwWoU/i6Iu/hn6Q8q9XyE EQEuTj4/9UHDTq+v1xNgFiLgYn2lReUoRELUhITb0d21D6UATTaUk2RZqyCIlpSd6x/1 tyJ7/mdA25diPej/hfoJKXySAvUCaDtJwNMkVErefVKiLBM4zCU7GNvLGJYwtZlNEl6Q LtwSspbtrf0OVlXzm1ByOTryZepLdOlRoMCh8arY4recvd3FYC2JiZ803uNBCQBj0Nu6 tgbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781016037; x=1781620837; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=AWKqHsTkFl2zrGvjPzv1+aBtZDDjn0PHucQTDAlzntI=; b=YCcqHTvVbbxRFGsA0S4mvgvwP8GkfNWVvSaa0B4yGuz7T6Smi5148tHeaPEhJbN7t1 e35YZxNoQm+EXIBuTktb8e6x5QGAj5SDXPO+mtleRVPRE5gkHzsedFGwkPMxj3FA5bu9 30oUlwp65s2bQITYKXESw8Kj0qs+uOgQAXAa8XVFmXOA3NK8Xp9tDsKdTQzldgc0jn8/ KvMxXc1nQhiNSpz+g6dIGUU9mZNbb0MZnlgot5MMEXWJ9Iy2nt/ZtTRGjgPZ5HBnrR9S 8E2j0pgQCYgGyyS+JoqqUHDjUy9hnVSuz6VF5Lc+r/YPDnM7SADHEqyTFwpXon0hfSih eDIw== X-Forwarded-Encrypted: i=1; AFNElJ8vawo1zpWGtvMOgM39igQoC3oLsN9z8koggusqN5DLdvW0ECJUClN4Z8RcQIlbHNLJLfyKQA/x1urxSqA=@vger.kernel.org X-Gm-Message-State: AOJu0Yx8NoppA6x4NKpZGRHdlZBRR0wtN38cC3o1UjGY+J9hoK8hAcJy dYv1MC8U0nFi51kxk8NuQLF0QG9y4wCjt2c8aVKRyYoO+xQibC830PMQ1nDmlqtqklw= X-Gm-Gg: Acq92OGGCPUyxw5KYmeLzqR9MCbutGsIUogim568eqwcfoI4RCK102K8AA264k3fC3y gcESFPTQDYQbtFHgEPgqs8doLRO+eV1ziWhDkNHeGJDKpMPMxMzFjSFoj8Qp080lrDA2ZKp9YEy ury1Y+gq1vqnQS2VROeUC9mTiO3IBegj/aSTOw4LnMBFGtaIwTemQJRG2vfjGyIb2PXCWpkulkr dVg+c8cZ5IFqoIWNd5G8V4TnfQAsgoIpxjfjfmbzUv/RUzHVtmE+Hj2o/GOyMEHhwR+YKbwWnbV lsOj5FTlsqunwU/t3ctHzZUQ56Ro0umLfjvs4HsF/dxG/ILNJk4TrJlCI+q3WjVbgEh7qVNLaFZ 2lWDKDYl21raRnhhOrdBNZRa7Ze1ip6oZamibRcyNoh+6kl5DRFb+ydUCawwwC+O8RjkCAUcOt+ IiGWHgrbydrEYokqdRKyEdNiQk6uw8I0ESWmvEOPxkvLg= X-Received: by 2002:a05:600c:3588:b0:490:4b89:5372 with SMTP id 5b1f17b1804b1-490c2cf5433mr301467195e9.11.1781016037671; Tue, 09 Jun 2026 07:40:37 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3c1149sm428411935e9.4.2026.06.09.07.40.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 07:40:37 -0700 (PDT) From: James Clark Date: Tue, 09 Jun 2026 15:40:15 +0100 Subject: [PATCH v5 10/19] perf test cs-etm: Test decoding for concurrent threads test Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-james-cs-context-tracking-fix-v5-10-d53a7d096a19@linaro.org> References: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> In-Reply-To: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> To: Suzuki K Poulose , Mike Leach , Leo Yan , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Ian Rogers , Amir Ayupov , Jonathan Corbet , Shuah Khan , Paschalis Mpeis Cc: coresight@lists.linaro.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo , linux-doc@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 The thread_loop test only looks for context IDs in the raw trace. There's a lot more that can go wrong when decoding these, so replace it with a test that looks at the final output for matching thread names and symbols. In the future we might use timestamps and context switch events to track threads, so looking at context IDs in the raw trace wouldn't always work. Reviewed-by: Leo Yan Signed-off-by: James Clark Tested-by: Leo Yan --- .../tests/shell/coresight/concurrent_threads.sh | 45 ++++++++++++++++++= ++++ .../shell/coresight/thread_loop_check_tid_10.sh | 23 ----------- .../shell/coresight/thread_loop_check_tid_2.sh | 23 ----------- 3 files changed, 45 insertions(+), 46 deletions(-) diff --git a/tools/perf/tests/shell/coresight/concurrent_threads.sh b/tools= /perf/tests/shell/coresight/concurrent_threads.sh new file mode 100755 index 000000000000..3349fff8c767 --- /dev/null +++ b/tools/perf/tests/shell/coresight/concurrent_threads.sh @@ -0,0 +1,45 @@ +#!/bin/bash -e +# CoreSight concurrent threads (exclusive) + +# SPDX-License-Identifier: GPL-2.0 + +# If CoreSight is not available, skip the test +perf list pmu | grep -q cs_etm || exit 2 + +tmpdir=3D$(mktemp -d /tmp/__perf_test.coresight_concurrent_threads.XXXXX) + +cleanup() { + rm -rf "${tmpdir}" + trap - EXIT TERM INT +} + +trap_cleanup() { + cleanup + exit 1 +} +trap trap_cleanup EXIT TERM INT + +cf=3D"$tmpdir/ctl" +af=3D"$tmpdir/ack" +mkfifo "$cf" "$af" + +nthreads=3D10 + +# Timestamps off to reduce trace size, start disabled and use the control = FIFO +# to only record the workload and not startup. +perf record -o "$tmpdir/data" -e cs_etm/timestamp=3D0/u -D -1 --control fi= fo:"$cf","$af" \ + -- perf test --record-ctl fifo:"$cf","$af" -w named_threads $nthreads 1 >= /dev/null 2>&1 + +perf script -i "$tmpdir/data" > "$tmpdir/script" 2>/dev/null + +# Check all threads were traced and they have the correct thread name and = symbol +for i in $(seq 1 $nthreads); do + if ! grep -q "thread${i} .* named_threads_thread${i}" "$tmpdir/script"; t= hen + echo "Error: thread${i} missing" >&2 + cleanup + exit 1 + fi +done + +cleanup +exit 0 diff --git a/tools/perf/tests/shell/coresight/thread_loop_check_tid_10.sh b= /tools/perf/tests/shell/coresight/thread_loop_check_tid_10.sh deleted file mode 100755 index 7f43a93a2ac2..000000000000 --- a/tools/perf/tests/shell/coresight/thread_loop_check_tid_10.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -e -# CoreSight / Thread Loop 10 Threads - Check TID (exclusive) - -# SPDX-License-Identifier: GPL-2.0 -# Carsten Haitzler , 2021 - -TEST=3D"thread_loop" - -# shellcheck source=3D../lib/coresight.sh -. "$(dirname $0)"/../lib/coresight.sh - -ARGS=3D"10 1" -DATV=3D"check-tid-10th" -# shellcheck disable=3DSC2153 -DATA=3D"$DATD/perf-$TEST-$DATV.data" -STDO=3D"$DATD/perf-$TEST-$DATV.stdout" - -SHOW_TID=3D1 perf record -s $PERFRECOPT -o "$DATA" "$BIN" $ARGS > $STDO - -perf_dump_aux_tid_verify "$DATA" "$STDO" - -err=3D$? -exit $err diff --git a/tools/perf/tests/shell/coresight/thread_loop_check_tid_2.sh b/= tools/perf/tests/shell/coresight/thread_loop_check_tid_2.sh deleted file mode 100755 index a94d2079ed06..000000000000 --- a/tools/perf/tests/shell/coresight/thread_loop_check_tid_2.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -e -# CoreSight / Thread Loop 2 Threads - Check TID (exclusive) - -# SPDX-License-Identifier: GPL-2.0 -# Carsten Haitzler , 2021 - -TEST=3D"thread_loop" - -# shellcheck source=3D../lib/coresight.sh -. "$(dirname $0)"/../lib/coresight.sh - -ARGS=3D"2 20" -DATV=3D"check-tid-2th" -# shellcheck disable=3DSC2153 -DATA=3D"$DATD/perf-$TEST-$DATV.data" -STDO=3D"$DATD/perf-$TEST-$DATV.stdout" - -SHOW_TID=3D1 perf record -s $PERFRECOPT -o "$DATA" "$BIN" $ARGS > $STDO - -perf_dump_aux_tid_verify "$DATA" "$STDO" - -err=3D$? -exit $err --=20 2.34.1 From nobody Thu Jun 11 02:45:42 2026 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A8E9A3EFD2E for ; Tue, 9 Jun 2026 14:40:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016042; cv=none; b=O0dJeYmx/l0VBQrDt8bVdviVjSKir/HP7SiVBOvkADXXdP5wO0RAjj32yOyIIkH+CGSxG7qNbGgF7p5eyUsl+U23NqHPTlBFCdiIpccSaZpuU6KhtkUEEeCba+gqZaVf0nVXx3pQK2iGfYeYmaXFyoCEByr9kefF+7fTM+kvlNU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016042; c=relaxed/simple; bh=zBP33YW94/R1hHZYuHZFRO5gh0N+cAj5cBmAyLWmp6U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=utADR3lOmmVoSnQMuwK7AjXNV37Oe7lpYOhWkzkrG01cyCVpnbfoqVLkX2A+365l3nYmpS4gfgHt6HQZWEEvqID+t8bOSP029T7Yn2bq2QLsr82dc8mnfT6TWk5YKMvAPzG10wv0PQm8jlvIPFIW6ktghLXgqmH9mq/7T0GSf1Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=ON6/WnuJ; arc=none smtp.client-ip=209.85.128.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="ON6/WnuJ" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-490cdae130cso15249495e9.0 for ; Tue, 09 Jun 2026 07:40:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781016039; x=1781620839; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=2h78YxBKDueLh+9yt6/S9EMI77LVr/N7bEn44d3CK8g=; b=ON6/WnuJ+egoWFBEjRQTvWu3qxjBCxHJv3TEjg1K18U7ejrhN1HX3GZ96GNanYW9vZ OgsCLf4J5AmfxBRqwj8YOK+CirU1Xlfr+PKkyshS9w24R0TpL8kgTMqrOUVa9oNzPN8M YjRDFN8IPjok3sA1aIO8Ia6DE3XN3PFSWTiZEu3L0jSoTQIfGUT3tZa6NL5lNwUX9E7c yrNBezgexByfDAYEUF2Pi/JxrTyeYIN5O22ou8bz1oS1tTj9xkfOwnoVFGuSysHA8suZ z0652kZm0jk1VF3Q5UXmjzbaMKBHvfVKUVTtdSsH0Y/MkmZiqqndTWuJTflusNLwi7Ir frpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781016039; x=1781620839; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=2h78YxBKDueLh+9yt6/S9EMI77LVr/N7bEn44d3CK8g=; b=ARboPzwZK9A4na7pT7q9JYlcBdhnDgFpjyoqBeerdL029Yj1vsDuz88zN1eey9Vt7R /Vfp7mVqGDknqZYGsN5LJ7iqFvKcTtGiZYYblkpD7qoQ9mtjQhdCX7p/sXZY2csR7a9O GJxHcdGCp+eRQfD2CTq9Tl1bz441xDHVnufhfVRpSKriCb2fhTbVeZzPm3HlNThm1Wk2 Uj6KC2Go7O6qHsUNJRfFgQp7ohbpi3W690GnkebDX5iR4xypqpVN7aQsZqVyf/MFLyqL 4iRlFRo8xVbWZ7K6eOVBt/yzYmi4IqgUj/Xp01H+HJArcUkOF0kymqw8WvkCV/CMhgkv 4hIA== X-Forwarded-Encrypted: i=1; AFNElJ9+fO8Pp2HqllSZIoQK8PJC62uhoIoa1obDDZMt7CJu0RBC2UKhYfbNAKZEx8e735CLZut0KPHbtIMXgVQ=@vger.kernel.org X-Gm-Message-State: AOJu0YwP1Ic1Kf24RdEln13syyIRHzheRuK2PLKjZo/HR8TDc/JjeN1q kHWS5HxIL5a1FBggDHthNeWdQRgiUB6FSdAOVBrhoKN8mRBI15FFu91DIrazOPU1BBo= X-Gm-Gg: Acq92OGI+pwgpv3tOKhJzQLWYQlp3i944ju1Gpb2ooYiKM/uRqxf6Fds5VX5E+iQ84q jOrm89k4sy+ya+yXFfpQcovgJ5/GJl7XLx4SL6sZr6inJqo0idapz5V6ttlys/idi5/NN2vSFpi zCWNRvSMEzNgyBZo8+gJ+YZju0nJu7umwPYIhQWbOf07nsjPshEVRh5vesAyGDnsd7QjoqWhERI CuYiPLShyiZINvOYL4YumCbEtRxCKdojHPDA89YXMFY0yvuiBHSg2h7EY0WdL7MIorersUMQYpC 5ssinvyVK1UtfLI7NlspTBM7Cu/DlKdzkUjb4qafq8QwKuAyuNGE/KF1vqHU5gH89ql1pTllOL6 c3kQb3u3Fc+QDIsI7fiILbMp+3sqdyaOsYffl83OBJv3GGmHXrmXYzoUH871nIrCnGZ918iPAS9 9yt5ehkE0VszZHoJwx6HBTFdcgCUtOE0hgkGpCPcM5pLQ= X-Received: by 2002:a05:600c:8285:b0:490:b1b8:95f5 with SMTP id 5b1f17b1804b1-490c25c2ae1mr347668055e9.15.1781016039067; Tue, 09 Jun 2026 07:40:39 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3c1149sm428411935e9.4.2026.06.09.07.40.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 07:40:38 -0700 (PDT) From: James Clark Date: Tue, 09 Jun 2026 15:40:16 +0100 Subject: [PATCH v5 11/19] perf test cs-etm: Remove duplicate branch tests Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-james-cs-context-tracking-fix-v5-11-d53a7d096a19@linaro.org> References: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> In-Reply-To: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> To: Suzuki K Poulose , Mike Leach , Leo Yan , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Ian Rogers , Amir Ayupov , Jonathan Corbet , Shuah Khan , Paschalis Mpeis Cc: coresight@lists.linaro.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo , linux-doc@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 We already test branch output in perf script mode, but then retest it in Perf report mode. This is more of a test of Perf itself than Coresight because Perf uses the same samples to generate both outputs. Also we're already testing instruction output in Perf report mode. Remove this test for a speedup. On the systemwide test also remove the Perf report test because systemwide mode records a lot more data so running multiple tests on it has a big runtime impact. Reviewed-by: Leo Yan Signed-off-by: James Clark --- tools/perf/tests/shell/test_arm_coresight.sh | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/tools/perf/tests/shell/test_arm_coresight.sh b/tools/perf/test= s/shell/test_arm_coresight.sh index bbf89e944e7b..39553702c1f3 100755 --- a/tools/perf/tests/shell/test_arm_coresight.sh +++ b/tools/perf/tests/shell/test_arm_coresight.sh @@ -52,17 +52,6 @@ perf_script_branch_samples() { grep -E " +$1 +[0-9]+ .* +branches:(.*:)? +" > /dev/null 2>&1 } =20 -perf_report_branch_samples() { - echo "Looking at perf.data file for reporting branch samples:" - - # Below is an example of the branch samples reporting: - # 73.04% 73.04% touch libc-2.27.so [.] _dl_addr - # 7.71% 7.71% touch libc-2.27.so [.] getenv - # 2.59% 2.59% touch ld-2.27.so [.] strcmp - perf report --stdio -i ${perfdata} 2>&1 | \ - grep -E " +[0-9]+\.[0-9]+% +[0-9]+\.[0-9]+% +$1 " > /dev/null 2>&1 -} - perf_report_instruction_samples() { echo "Looking at perf.data file for instruction samples:" =20 @@ -123,7 +112,6 @@ arm_cs_iterate_devices() { =20 record_touch_file $device_name $2 && perf_script_branch_samples touch && - perf_report_branch_samples touch && perf_report_instruction_samples touch =20 err=3D$? @@ -154,9 +142,7 @@ arm_cs_etm_system_wide_test() { =20 # System-wide mode should include perf samples so test for that # instead of ls - perf_script_branch_samples perf && - perf_report_branch_samples perf && - perf_report_instruction_samples perf + perf_script_branch_samples perf =20 err=3D$? arm_cs_report "CoreSight system wide testing" $err @@ -179,7 +165,6 @@ arm_cs_etm_snapshot_test() { wait $PERFPID =20 perf_script_branch_samples dd && - perf_report_branch_samples dd && perf_report_instruction_samples dd =20 err=3D$? @@ -191,7 +176,6 @@ arm_cs_etm_basic_test() { perf record -o ${perfdata} "$@" -m,8M -- ls > /dev/null 2>&1 =20 perf_script_branch_samples ls && - perf_report_branch_samples ls && perf_report_instruction_samples ls =20 err=3D$? --=20 2.34.1 From nobody Thu Jun 11 02:45:42 2026 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F0B7E3FDC0E for ; Tue, 9 Jun 2026 14:40:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016043; cv=none; b=r19uMiWTs3ywn9TvuRo8dyCJy1gS+b1Lp69smuPpsOM2XMaBW7/UksAzsVAS/XCWwtNV1mZJwNXpRSgGTLYkxXJcautRZE2HUaIxAnuvb2ieB9h7x6PYsT9kcrhMApFJe8smp+ReL1sC4VEW79FvP/05dWHXWYfNaNpCL2EjT8U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016043; c=relaxed/simple; bh=mQidedvPEcBiOBRv8PmX5mxZNEPoVdc1Pz6VHmtCWcY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NDpMMwFIkCIC01ScdFDulXg/EU98F9LE/SD0FYsnNcLWrJZrGG10chVw6j4UmDhIb2ALMxA8VEoZ+rsm1CPiFs3oyC9pTLSqVhqOh8NokD7eqkgTStscc5F5F08wVEf3p5fGdp5impX2Pn/Ak9cO/Jrjki4JoJB4gWQ8A286HNM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=n3ClWf57; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="n3ClWf57" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-490b3e03939so46938875e9.1 for ; Tue, 09 Jun 2026 07:40:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781016040; x=1781620840; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=0r3qOldyDbGy8/U7IZ1oQnEHZB4wfLaYDHPrqBV1zp0=; b=n3ClWf57sd5PkLtEZktzo7G7Ha3uasTL9ORuakvy7SlhxFphoGFmEHhVdkT6F3/NFk 9HWTCh+Lb6AqfYU6OlNvQEYRrNl53croXyykBfwjldoXRp3zXbJr2Tmi+wKdamqUgiFz 1FPyzgDPcKqJMmIaXpL4BgkZbmhZPYSpCrpp9oqhrwLtcNdnPAg5JDLgdDI4hcJMszUB OnX5LyDD0+HPlyWC/A+cRYhJpfvlWet99GGL6vOqxQnmRd8xRyJK4MQrIVYov9N22vVS EITnEBdlH5hxiDZ1QvW0eBhSLQoItoALlR1ZVkXe3DCcMIYzpV9NgSrHxoN8DTwmk6gT 8Skg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781016040; x=1781620840; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=0r3qOldyDbGy8/U7IZ1oQnEHZB4wfLaYDHPrqBV1zp0=; b=mCVZMf00Zgcqxvd94OKFQplPbJ+EXdgtP194G38XYP3tY0WqjdrxKJYsztl6k1I5Dm Ad8+qc+lHV7G0B1rB3gTmrPO5FjphqBTq1UtU4v6YEsR5sCr8xc4RtJgl58yho0uzZPT +RFCjqW9J2fcfn2cYHtclN0wKRwAndvgp7HhJoRlZARkutKMYC8dChQUxaKP9TGLY5XB AdAlpADWFH41LntzPDqKB7KbYXMH6zvTEgdxx0aq4ovqIRkLTnQmvNJmzo2kIzKTjqWg qHKOEL4kZ6waxk1mhgziBrjusJhpGWfHQ7zd8TpKHLYZTjOQeGU3aC1yPPWDNgzNIkgh ezxg== X-Forwarded-Encrypted: i=1; AFNElJ+iyEIw7tdPC07SSgKDLOcZOMhlwL4m+AigGjksj+hzzBgZiDWx88yoFTZfYSKM8vta77V0BEta1692uwo=@vger.kernel.org X-Gm-Message-State: AOJu0Yz0Cvr2m0hPd66ELQGEk2jsS+XZNIIO9/IIMB1c2kJNjkEein87 dKbXdm1B9IQwHRkMV5rtaRhdzpDjTDCO/fZ2zMLvlJXi6frelgzxLukerfHVIAdL5cY= X-Gm-Gg: Acq92OEikrjl9ziAu9R4wOsN1fPutgAoIl7AqsfZFq/dXAw9rgnphT2TsHWjKlrwJzg osB49pJvwfsce+aIlFvkhlFYgK8gFSuV+mZDb0l0Xab1xfv0sRbUMW6JNcAXIbztLQh6BZHZaFa udwsYLKC1KaBkF13xoK+cPhT5DUWIhjkFFYuL0lHgRg5XRHeGFxX1DJwuQwaQzeE+J/Gk/tmvkd 1MbtpDv5YpyYM+dS0bwkaDUZnG2a21xZ4+s7gHSPzz4M25Tq/ufTwNtIZTdcL7iNLXZLJyP7OUL myzRznEynxvk3ZS5ssV13lGzcHb7FuHrO6DpvqWOIxDyk7t2SlVYcHjPo6ukS9XA91V0aYt/SF2 nSTDozjRguhqfALK40lEvFFWvO8cP6t8V2Ts//zzh3DYKIKM3+0yC5/RkcEA5gDSnaRVG7DV1aP EU9/Nda77FtbNfK7ZPRfAeMLlrHcV2EQqi1hNqR2ZszGM= X-Received: by 2002:a05:600c:8519:b0:490:3cf0:8d81 with SMTP id 5b1f17b1804b1-490c2d0e9a2mr256116745e9.13.1781016040481; Tue, 09 Jun 2026 07:40:40 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3c1149sm428411935e9.4.2026.06.09.07.40.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 07:40:39 -0700 (PDT) From: James Clark Date: Tue, 09 Jun 2026 15:40:17 +0100 Subject: [PATCH v5 12/19] perf test cs-etm: Skip if not root Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-james-cs-context-tracking-fix-v5-12-d53a7d096a19@linaro.org> References: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> In-Reply-To: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> To: Suzuki K Poulose , Mike Leach , Leo Yan , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Ian Rogers , Amir Ayupov , Jonathan Corbet , Shuah Khan , Paschalis Mpeis Cc: coresight@lists.linaro.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo , linux-doc@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 Use the common idiom for skipping tests if not running as root, which is required for these tests. Signed-off-by: James Clark --- tools/perf/tests/shell/test_arm_coresight.sh | 6 ++++++ tools/perf/tests/shell/test_arm_coresight_disasm.sh | 6 +++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/tools/perf/tests/shell/test_arm_coresight.sh b/tools/perf/test= s/shell/test_arm_coresight.sh index 39553702c1f3..8ed2c934c87d 100755 --- a/tools/perf/tests/shell/test_arm_coresight.sh +++ b/tools/perf/tests/shell/test_arm_coresight.sh @@ -20,6 +20,12 @@ skip_if_no_cs_etm_event() { =20 skip_if_no_cs_etm_event || exit 2 =20 +if [ "$(id -u)" !=3D 0 ]; then + # Requires root for -C and system wide tests + echo "[Skip] No root permission" + exit 2 +fi + perfdata=3D$(mktemp /tmp/__perf_test.perf.data.XXXXX) file=3D$(mktemp /tmp/temporary_file.XXXXX) =20 diff --git a/tools/perf/tests/shell/test_arm_coresight_disasm.sh b/tools/pe= rf/tests/shell/test_arm_coresight_disasm.sh index 0dfb4fadf531..339ae4831868 100755 --- a/tools/perf/tests/shell/test_arm_coresight_disasm.sh +++ b/tools/perf/tests/shell/test_arm_coresight_disasm.sh @@ -42,7 +42,7 @@ sep=3D"\s\|\s" branch_search=3D"\sbl${sep}b${sep}b.ne${sep}b.eq${sep}cbz\s" =20 ## Test kernel ## -if [ -e /proc/kcore ]; then +if [ "$(id -u)" =3D=3D 0 ] && [ -e /proc/kcore ]; then echo "Testing kernel disassembly" perf record -o ${perfdata} -e cs_etm//k --kcore -- touch $file > /dev/nul= l 2>&1 perf script -i ${perfdata} -s python:${script_path} -- \ @@ -50,8 +50,8 @@ if [ -e /proc/kcore ]; then grep -q -e ${branch_search} ${file} echo "Found kernel branches" else - # kcore is required for correct kernel decode due to runtime code patching - echo "No kcore, skipping kernel test" + # Root and kcore are required for correct kernel decode due to runtime co= de patching + echo "No root or kcore, skipping kernel test" fi =20 ## Test user ## --=20 2.34.1 From nobody Thu Jun 11 02:45:42 2026 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 744F0421EFB for ; Tue, 9 Jun 2026 14:40:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016045; cv=none; b=UzeoOKMNzsDmRtBg5eY/EEM7cMUc0VJ1fLyKEM/xwfeHjFYaU2phsgq/kkydaF/3F7qm+/3RvedDm8E27YMN2ToJS5J7No0Z76jI3iCwAs5OR2qVAP+o4SSM7R3NchohkD9QTezZ6uLUKI3MBimRb04kEwPoRxpDRVunXqicO/c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016045; c=relaxed/simple; bh=JQDAylSrWLAHes5gxsm3uG5xwu2zN9a3IzjF5B5oWaM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oAFH6DHllxhNJHF9u7uNZOYHzQsuH1/wW0a25b7OQccH/cVXWK8y8ALEu+3a3QLmOM3PeFSmoUtqSOuG47tAFriENQJPGGrijmgVnkCbG01ksSnYYUqG/IgX5YRDw90rNcwfR707XHTUjequMaS20nMjyUe+h29p65g9zGgx0is= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=lHw0bl71; arc=none smtp.client-ip=209.85.128.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="lHw0bl71" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-4905529b933so60949525e9.0 for ; Tue, 09 Jun 2026 07:40:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781016042; x=1781620842; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=4tCZA64ZljHdNthuUJI8G+lKrRp8mWLWbXdPVNi3pLg=; b=lHw0bl71HxLMVFISlFRPAPWd2uwMgfWH3mys7MWg2LM9b8ByT6OCJrAbHEcrPV44zg HjyBFnPNCzptN0F8YvIFXoQV6A4vjBLRBr3Uteg3v11Y4XVxWWBEEIk5ZG0gtrzctlte csFcQ8e7Mnwg2HGtNjqGTZPbs9T8xhauwe7lQjjRsBEOENIbLjeWcTXTkwu9vUmgpo10 tOPgVV3mY4UFoRomDIJdYYwRUkkeCrS3ut+2vSD27lIai2wRM8OGDv+vxToqDvMFSxHB 7T3jdvcJI5Rs2MTHGvau0PWk+OKtcHsfErGJps6PpC2j0r1mqo/XTJe+usOKx4v+h5yo MdcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781016042; x=1781620842; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=4tCZA64ZljHdNthuUJI8G+lKrRp8mWLWbXdPVNi3pLg=; b=cOPkC/x7xssbXzPMUBtGCAYx5Rx40jj9e6bcA/rv2CtZuqFU1GqyvzpcB0JOox7qF6 zrj0ybctbMt7su59ZjfdvaZdSDjaUjtAkJ1BlPMFkIeeEq34VPDzoadh0XxStOVpOuvg n3uqp2N8oLirQGRWH/MVMomO0+G12ntLFIsGqO8OUV+ZrVZ9XItGlg16arzMB0Nr7UKN CX1jc9On8YloUNd4BS3FzeIE0SuJR/glMHtAhMWR4XYkeyaC7OxgPsWKg1Y+z8wCYEsu 8ESfeyMQg8PTbi1jqQLufPFDfjwkcbbtK+QV1KIK8ffLrhK0Od1VrzEF9JAuKrZm+qTq udlg== X-Forwarded-Encrypted: i=1; AFNElJ+fhDdJRJxYcQdAl27WJ32DXTl3NEwatF7gg2BvctgbIJgwaNYQSQtbrSq5uz/CRyN3Kn7Iln4Lt7tir28=@vger.kernel.org X-Gm-Message-State: AOJu0YxroC83R8eQCzO+7beLt/eioAz3P1n63BHRLhlzm7bAJRQVr/43 TBe34dKnzjhLUvUT/CXc+TS++IgIaMhSssuIzlS5eFL5ICH1UAMQNxQf3lkqr1IBLfM= X-Gm-Gg: Acq92OFlZO05xacT9gUTF9jJcDkB87oe9UqLWFcrw7JG0ik6IHAqpcZBr53VrrX6fU7 4Xhx5CRZSHnEj/pfLWnNYt9VLI8dUWuO4uj4zMK9L8Al0+zqs/IKZdq/DemMJxGjXRpze/nw2b1 pz8wjW/UZPUMWwozv+8qCRFYK05FVHfcV1G2TjAqE01HvNoEdn/XIFlySVyske1SiKrQUtNe6JU TN16vUQAuTdzun0gzj1uFLDNFBZddxYXZ3KsrFXe38A0nhHzMZomL0g2eOGx7OHFzhfgg4IWaVc 68sRGMwZ4EixFb/25eO1Rt5accXpMUw7l05xW57bjBrvpDfrKP7dMXZOM8jIUQwbr2SCmHfoULX Qn3QBJvMemR5LZzTxYU9yppWtVXY1uDZeulZHhPfmVT9D7LwnPw4e+WmItclh8tsOBuxUzBAmCa 4Ga1c7cGXhYk9W0EH0Tp8M9ydDo6TZ0SE0Zo+UWwUt+D4= X-Received: by 2002:a05:600d:644a:10b0:490:c2a3:1782 with SMTP id 5b1f17b1804b1-490c2a317cemr236651375e9.35.1781016041964; Tue, 09 Jun 2026 07:40:41 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3c1149sm428411935e9.4.2026.06.09.07.40.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 07:40:41 -0700 (PDT) From: James Clark Date: Tue, 09 Jun 2026 15:40:18 +0100 Subject: [PATCH v5 13/19] perf test cs-etm: Reduce snapshot size Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-james-cs-context-tracking-fix-v5-13-d53a7d096a19@linaro.org> References: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> In-Reply-To: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> To: Suzuki K Poulose , Mike Leach , Leo Yan , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Ian Rogers , Amir Ayupov , Jonathan Corbet , Shuah Khan , Paschalis Mpeis Cc: coresight@lists.linaro.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo , linux-doc@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 The default buffer size for root is 4MB which is very slow to decode. We only need a few KB to verify that the dd process is hit so reduce the size to 128KB. Reviewed-by: Leo Yan Signed-off-by: James Clark --- tools/perf/tests/shell/test_arm_coresight.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/tests/shell/test_arm_coresight.sh b/tools/perf/test= s/shell/test_arm_coresight.sh index 8ed2c934c87d..da2f599393e2 100755 --- a/tools/perf/tests/shell/test_arm_coresight.sh +++ b/tools/perf/tests/shell/test_arm_coresight.sh @@ -156,7 +156,7 @@ arm_cs_etm_system_wide_test() { =20 arm_cs_etm_snapshot_test() { echo "Recording trace with snapshot mode" - perf record -o ${perfdata} -e cs_etm// -S \ + perf record -o ${perfdata} -e cs_etm// -S -m,128K \ -- dd if=3D/dev/zero of=3D/dev/null > /dev/null 2>&1 & PERFPID=3D$! =20 --=20 2.34.1 From nobody Thu Jun 11 02:45:42 2026 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B77AD42DFEA for ; Tue, 9 Jun 2026 14:40:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016046; cv=none; b=onylZdDzszosPmsEyyYFcEaaLQ33TEBybo8jr0rwOz6FB5GxzfO4YbuzjL/d0zIQkxcj1TAb38Prr855KUg8/tF8TZjjfJWEoEnxdQs1IqsGMCNZJivZk+E6PbI5X9a8CxQutRj8c3btxxCywOoq30AnC2vrK9vP3dCpYg9EazM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016046; c=relaxed/simple; bh=FSMtqVRVy7D3pvypIs3gLf7OFxrFfmQrY4e2IbRbIqU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dv41qiX6Cul8Zt6RpjhGftZ4OwXAfADSE98sNa+E6+2SE5VdzOXiq3rxEzLB8hDbrC+wV5FnAZIIYkNmcGcBKzBzIY1V2XrNoQvXg7SemVT+GWRrvv87m3jk3Xoyriu0Ftt1FblKG2IErsVgM6GMIqwAHQR+1PbdCQwqT6+lLl4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=z53EiAEP; arc=none smtp.client-ip=209.85.221.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="z53EiAEP" Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-45ef1629ff4so3878747f8f.0 for ; Tue, 09 Jun 2026 07:40:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781016043; x=1781620843; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Ng7BXZAmfD6H6DnpoBma7BIsuVaWOeOAye3IPeJCbwg=; b=z53EiAEP14qyNAbzHYVk4LMZC23WNrFWujlu8v/9L+pEXX31BIN72EBlrDudaAOimC sig/ouiNGs8JU5BPUJAaLWaEUQzVCtICMR0fzHfjYoJRwApxVAqFChL9fci24TeDQJUs bG+dYAKniHeJPQxN8TLxTs5Eu2kTBgLGUBvvWpOC6vc1QTLwocihA7YGzY/SNpRDcDNz 7sf+0DI2c7Wl0U9T03nQXovT7TzMIS6wdtphcN+nQZqxFQO1q+R05Ac3Sx/zZLrniPX2 daZB5gnqUfxGNLyBQV6YGYTGnBd5b5cdxHeFKqE+ZM+fnxoUHthxsgTW8oF2U0lF3Thc YtYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781016043; x=1781620843; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Ng7BXZAmfD6H6DnpoBma7BIsuVaWOeOAye3IPeJCbwg=; b=tFCMBwRSre/gVrL8QjXhWLu26hGM60lSrvPJPze+nsa40ZAFLpEQtFxTBSLW6fih0h 1ItZOkIKf6sDWFMOJJc4+smKGowZzDMxy5Sjm7K+HwUfwlhVIq8u0a7koCfaZtw+GNTt 7hW8s+anpr94OXW1RGEoTvHifM8gsYazq90+T4ICgAgNe3VM4VDyNYgElR0VKZ8KnhhB bIGytivnR4pVSEPjxGfdbvv88AXuBZnfGESpEiA8wbQS2BfEzH1io4cBsAsFtM3JVjDQ iyMCucU3Yh568aESnGXaxlPh1Qowx8I6ge0o3yj9jMVlfAH5A1EefDcPr/x0sfnCMqSr F4Gg== X-Forwarded-Encrypted: i=1; AFNElJ95IFTIhUiqNWi9RDwNhfuXJ/utNhr83hDbQs4r/g+XXgAV+ZCIzf0X6v0kUvfWg4c/zbSb9IowGDZ0bsY=@vger.kernel.org X-Gm-Message-State: AOJu0YwJurkqfcdkZOmkdBKSHR3DENnbc4+rebU+RwDlTFfGgrDBdJ73 gXfJUYfe7vW7XQ1x1AjXIVSlYR27OQoOB507FRsDF5q0AzNkoC1b2aMrizHKJZBLyBI= X-Gm-Gg: Acq92OGe6tObyRcXKfe4z2LqIoGUPr5x4MPb60g31rNHTMN27dd2TSyuj5fQfJuzjkv X+6fW5WIiZ/NuC95TRLVMxeB92vODnafROjxr/UtugDIcUartB/bVPJFBpUrcVOLt7eiE7SpLri M+gs0/Q7QhMEajd0pyDo3LDv7h07/y3qIeVnTaM6NN6HNGGwF5tAVGH0HnEXP/fgn/+CC9ZzIHD WEY4VUb2k+jFDQMld/DH9AvZMRIE8R8G42nVU9pc1JBXKo7rUOdKLrik4hUmgYjhjQ+My1fQEai Xe/qceZyRWJf9f2SVKi2wF8QX0miJ2XD56eIQDQFArygaTyYnhZjj8ocvnoB6NgsiHHi+44lGix dRvJoR+r8mr8fiTlQNeh+lqyQcwgfigEXLKm/bqV3TS11GmHgKgyWcSTVF9O2NftU1sEOMxO/wt Pm/kB9TuYUUAIWT4hXKkMVrutTSGRteJfX+ca/l/4rgZo= X-Received: by 2002:a05:600c:8b0d:b0:490:b9ce:a73c with SMTP id 5b1f17b1804b1-490c55662b1mr334065995e9.31.1781016043268; Tue, 09 Jun 2026 07:40:43 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3c1149sm428411935e9.4.2026.06.09.07.40.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 07:40:42 -0700 (PDT) From: James Clark Date: Tue, 09 Jun 2026 15:40:19 +0100 Subject: [PATCH v5 14/19] perf test cs-etm: Speed up basic test Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-james-cs-context-tracking-fix-v5-14-d53a7d096a19@linaro.org> References: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> In-Reply-To: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> To: Suzuki K Poulose , Mike Leach , Leo Yan , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Ian Rogers , Amir Ayupov , Jonathan Corbet , Shuah Khan , Paschalis Mpeis Cc: coresight@lists.linaro.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo , linux-doc@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 Like the name says, this should be the most basic test possible. Kernel recording is slow and already has coverage on the systemwide test. Perf report output also has coverage elsewhere. 'ls' also produces more trace than 'true'. We only want to test if the combination of recording options works at all, so fix all of these things to make it as fast as possible. Reviewed-by: Leo Yan Signed-off-by: James Clark --- tools/perf/tests/shell/test_arm_coresight.sh | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/tools/perf/tests/shell/test_arm_coresight.sh b/tools/perf/test= s/shell/test_arm_coresight.sh index da2f599393e2..83295a8fe179 100755 --- a/tools/perf/tests/shell/test_arm_coresight.sh +++ b/tools/perf/tests/shell/test_arm_coresight.sh @@ -179,10 +179,9 @@ arm_cs_etm_snapshot_test() { =20 arm_cs_etm_basic_test() { echo "Recording trace with '$*'" - perf record -o ${perfdata} "$@" -m,8M -- ls > /dev/null 2>&1 + perf record -o ${perfdata} "$@" -- true > /dev/null 2>&1 =20 - perf_script_branch_samples ls && - perf_report_instruction_samples ls + perf_script_branch_samples true =20 err=3D$? arm_cs_report "CoreSight basic testing with '$*'" $err @@ -246,12 +245,12 @@ arm_cs_etm_snapshot_test =20 # Test all combinations of per-thread, system-wide and normal mode with # and without timestamps -arm_cs_etm_basic_test -e cs_etm/timestamp=3D0/ --per-thread -arm_cs_etm_basic_test -e cs_etm/timestamp=3D1/ --per-thread -arm_cs_etm_basic_test -e cs_etm/timestamp=3D0/ -a -arm_cs_etm_basic_test -e cs_etm/timestamp=3D1/ -a -arm_cs_etm_basic_test -e cs_etm/timestamp=3D0/ -arm_cs_etm_basic_test -e cs_etm/timestamp=3D1/ +arm_cs_etm_basic_test -e cs_etm/timestamp=3D0/u --per-thread +arm_cs_etm_basic_test -e cs_etm/timestamp=3D1/u --per-thread +arm_cs_etm_basic_test -e cs_etm/timestamp=3D0/u -a +arm_cs_etm_basic_test -e cs_etm/timestamp=3D1/u -a +arm_cs_etm_basic_test -e cs_etm/timestamp=3D0/u +arm_cs_etm_basic_test -e cs_etm/timestamp=3D1/u =20 arm_cs_etm_sparse_cpus_test =20 --=20 2.34.1 From nobody Thu Jun 11 02:45:42 2026 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 55F6C42EED5 for ; Tue, 9 Jun 2026 14:40:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016049; cv=none; b=oXu4I6zemV9Su+qDSBExAW3bKorSHkZ2WAwo38+P+zamzMOWbD4gLzvXehJt4OoT48WdWMzBb6CET2dHDJumnOJXs2jiWkyUutYScA3Fz56OX/gwpp0stsgJvFt/hZ6CKL6SMtAvsmdZG3PsmBl1ZPYE5bikcQNwFjiUZPh1tfU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016049; c=relaxed/simple; bh=tnXwLJk+3jrfZf3wiv2bk4mCHRqijc10jhDY2rcAz4I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qF7nLySBp708K84TDeSnhsbvXLql7Z+F4otTpzDI7yVAay3aIruemuYWaGNka3DPtVYxFUpxvMKj9KfhyvX8TbmqmU4PKRVGvKivRpwexbT3g0fcK2Uo0dLfgMjNDw7xXawPGqxJtApyD5HhL1kBy9UEPQzgGlSLsA8lu2PrabE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=i/V5yqZP; arc=none smtp.client-ip=209.85.128.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="i/V5yqZP" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-490d1e54b3bso19393275e9.1 for ; Tue, 09 Jun 2026 07:40:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781016045; x=1781620845; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=U+cJvB2uJGPF2g+bqqzcTTUqST9B+k6N+J54PLm0kAo=; b=i/V5yqZPE7dautPBshF//TJbp/Gt8wATIgLFnx07eiLx7FRpiqHXaOxrUNdGZZmHcg JP3jS3ZW608Co/jtjc/0RkA9VLam222TrqzRkf/wl4ALtWcFP6Q+Q46ral/r81A1gbLQ 5X5D7qdTZK6jZ3m5XrziJuvA+yTCRouMmlRnvJGlbiMIg48SI94cyGlh4Oh+sGQC4M2y dTc6RlozrUSU4XFwlT4dg8PB9ycLPASJtdRGd5ri39iI/uclm1/X2k1dg0Tj//nrVj7Y SKIIeGEQG/t4NbbgFjl4gWo7W7YbeHYQL2Br/99go6vv/7f63wm0cA88cOQ0w/j5gOad fWkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781016045; x=1781620845; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=U+cJvB2uJGPF2g+bqqzcTTUqST9B+k6N+J54PLm0kAo=; b=jSgzokNPgldzP+Bppm52lwJh4WaipXBSB+8U1k+F2Ai2z4k+htGLBXepGTXehrtIw3 0I1EnvqI/L0tDr0Q8Ma83bHbjy4CdiCoIAF2D4Az9Y99Bbne5MJZhj1WqgeW12C6E5Ar Z6sMsZEblB4J2c+6MzvAa1U88U23vRSOwQyI1Mu1fg6BFNbdFe/TKP8YUGskRQqCataC +4AxeEau3Q/MnGr8IQfEjn6OxAtvV9rdLK7WkzvIx35+jyfXItByeYDTBwPVhiRt/1ba Z7lAw+6KPwbLS0yVZMjJboJ+IYXUCpMdvp69fgUw/3gPyzrnqzNU2LDB4dv7h9L2DDYM DJDg== X-Forwarded-Encrypted: i=1; AFNElJ+zAafzCXQ5U3RAOH0kz9oV1yVyhqHyMA1TCqplJ9UaTBFxgeFl8MBTmq+3DNAjtcQfsT2D8OuYVEWDqnM=@vger.kernel.org X-Gm-Message-State: AOJu0Yzt09nXBbFlcD0KaU2IzXLF0XcFTPEnUl46rXkSQL+I6JLby5sD Q0FMlQssjv2SCOC1k63qlEybBfhtBeWiykv3QD1S9dqI4dtKOHHOCStab+4K5gsYrho= X-Gm-Gg: Acq92OF8dSjPunSl8y+JP2mFnwmHQ770cpyGBeKBlLUxGOB/J5X+AaCg1zFI4DqMBnQ j9ly7idpvXt8TKx+LQiKKVAKrylTRE4g+zEKw6E3g2PKECAsLN5PA7BgPs3YdKW8Egdyj8HYPFw Jn/iVXh/HXjuXIHlm1iIaLX+fVDaFbdXsDZEcdDPsHWWnu0Cm10ZcYNuK1E/vLDHMc66MADH85x FEuZPVgF2HfOz5DL8e4lxsIwboahrSFWxYnBB7qFCGyczLUYWIlc9zpHfvTk2Gnnq0riRBp+5Gj Av0A4qeZjC+9xnkw7/1d8DZznx3uRl8qzFMy5hbJLWp6bYFt1XmL6xvdGjmB3lSJAYL8V+T3Rxr HOdJK5reacRMVBAEq9tkkgZGOku+IAwG9hD6nULKDVyBOpGX1uy1gE2LSnHWhcJMeYuPrkZSHug 9zik97zTmW+iNU/ggn7DYpCkt7ZbkC3zQfWuSvffHcPmY= X-Received: by 2002:a05:600c:c059:10b0:488:b187:3c with SMTP id 5b1f17b1804b1-490c265b439mr253737155e9.14.1781016044462; Tue, 09 Jun 2026 07:40:44 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3c1149sm428411935e9.4.2026.06.09.07.40.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 07:40:43 -0700 (PDT) From: James Clark Date: Tue, 09 Jun 2026 15:40:20 +0100 Subject: [PATCH v5 15/19] perf test cs-etm: Remove unused Coresight workloads Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-james-cs-context-tracking-fix-v5-15-d53a7d096a19@linaro.org> References: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> In-Reply-To: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> To: Suzuki K Poulose , Mike Leach , Leo Yan , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Ian Rogers , Amir Ayupov , Jonathan Corbet , Shuah Khan , Paschalis Mpeis Cc: coresight@lists.linaro.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo , linux-doc@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 These are now unused and had various issues like not working with out of source builds and being slow to compile. Delete them. Signed-off-by: James Clark --- Documentation/trace/coresight/coresight-perf.rst | 78 +----------- MAINTAINERS | 1 - tools/perf/Makefile.perf | 14 +-- tools/perf/tests/shell/coresight/Makefile | 29 ----- .../perf/tests/shell/coresight/Makefile.miniconfig | 14 --- .../tests/shell/coresight/asm_pure_loop/.gitignore | 1 - .../tests/shell/coresight/asm_pure_loop/Makefile | 34 ------ .../shell/coresight/asm_pure_loop/asm_pure_loop.S | 30 ----- .../tests/shell/coresight/memcpy_thread/.gitignore | 1 - .../tests/shell/coresight/memcpy_thread/Makefile | 33 ----- .../shell/coresight/memcpy_thread/memcpy_thread.c | 80 ------------ .../tests/shell/coresight/thread_loop/.gitignore | 1 - .../tests/shell/coresight/thread_loop/Makefile | 33 ----- .../shell/coresight/thread_loop/thread_loop.c | 85 ------------- .../shell/coresight/unroll_loop_thread/.gitignore | 1 - .../shell/coresight/unroll_loop_thread/Makefile | 33 ----- .../unroll_loop_thread/unroll_loop_thread.c | 75 ------------ tools/perf/tests/shell/lib/coresight.sh | 134 -----------------= ---- 18 files changed, 5 insertions(+), 672 deletions(-) diff --git a/Documentation/trace/coresight/coresight-perf.rst b/Documentati= on/trace/coresight/coresight-perf.rst index 30be89320621..0a77741a431e 100644 --- a/Documentation/trace/coresight/coresight-perf.rst +++ b/Documentation/trace/coresight/coresight-perf.rst @@ -112,78 +112,6 @@ Example for triggering AUX pause and resume with PMU e= vent:: Perf test - Verify kernel and userspace perf CoreSight work ----------------------------------------------------------- =20 -When you run perf test, it will do a lot of self tests. Some of those -tests will cover CoreSight (only if enabled and on ARM64). You -generally would run perf test from the tools/perf directory in the -kernel tree. Some tests will check some internal perf support like: - - Check Arm CoreSight trace data recording and synthesized samples - Check Arm SPE trace data recording and synthesized samples - -Some others will actually use perf record and some test binaries that -are in tests/shell/coresight and will collect traces to ensure a -minimum level of functionality is met. The scripts that launch these -tests are in the same directory. These will all look like: - - CoreSight / ASM Pure Loop - CoreSight / Memcpy 16k 10 Threads - CoreSight / Thread Loop 10 Threads - Check TID - etc. - -These perf record tests will not run if the tool binaries do not exist -in tests/shell/coresight/\*/ and will be skipped. If you do not have -CoreSight support in hardware then either do not build perf with -CoreSight support or remove these binaries in order to not have these -tests fail and have them skip instead. - -These tests will log historical results in the current working -directory (e.g. tools/perf) and will be named stats-\*.csv like: - - stats-asm_pure_loop-out.csv - stats-memcpy_thread-16k_10.csv - ... - -These statistic files log some aspects of the AUX data sections in -the perf data output counting some numbers of certain encodings (a -good way to know that it's working in a very simple way). One problem -with CoreSight is that given a large enough amount of data needing to -be logged, some of it can be lost due to the processor not waking up -in time to read out all the data from buffers etc.. You will notice -that the amount of data collected can vary a lot per run of perf test. -If you wish to see how this changes over time, simply run perf test -multiple times and all these csv files will have more and more data -appended to it that you can later examine, graph and otherwise use to -figure out if things have become worse or better. - -This means sometimes these tests fail as they don't capture all the -data needed. This is about tracking quality and amount of data -produced over time and to see when changes to the Linux kernel improve -quality of traces. - -Be aware that some of these tests take quite a while to run, specifically -in processing the perf data file and dumping contents to then examine what -is inside. - -You can change where these csv logs are stored by setting the -PERF_TEST_CORESIGHT_STATDIR environment variable before running perf -test like:: - - export PERF_TEST_CORESIGHT_STATDIR=3D/var/tmp - perf test - -They will also store resulting perf output data in the current -directory for later inspection like:: - - perf-asm_pure_loop-out.data - perf-memcpy_thread-16k_10.data - ... - -You can alter where the perf data files are stored by setting the -PERF_TEST_CORESIGHT_DATADIR environment variable such as:: - - PERF_TEST_CORESIGHT_DATADIR=3D/var/tmp - perf test - -You may wish to set these above environment variables if you wish to -keep the output of tests outside of the current working directory for -longer term storage and examination. +There are a set of Perf tests for CoreSight which can be run with:: + + sudo perf test coresight diff --git a/MAINTAINERS b/MAINTAINERS index b539be153f6a..7efb893edcbb 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2751,7 +2751,6 @@ F: tools/perf/arch/arm/util/cs-etm.h F: tools/perf/arch/arm/util/pmu.c F: tools/perf/tests/shell/*coresight* F: tools/perf/tests/shell/coresight/* -F: tools/perf/tests/shell/lib/*coresight* F: tools/perf/util/cs-etm-decoder/* F: tools/perf/util/cs-etm.* =20 diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf index ab661a1d271c..f29c267bf842 100644 --- a/tools/perf/Makefile.perf +++ b/tools/perf/Makefile.perf @@ -508,16 +508,7 @@ arm64-sysreg-defs-clean: $(Q)$(MAKE) -C $(arm64_gen_sysreg_dir) O=3D$(arm64_gen_sysreg_outdir) \ prefix=3D subdir=3D clean > /dev/null =20 -TESTS_CORESIGHT_DIR :=3D $(srctree)/tools/perf/tests/shell/coresight - -tests-coresight-targets: FORCE - $(Q)$(MAKE) -C $(TESTS_CORESIGHT_DIR) - -tests-coresight-targets-clean: - $(call QUIET_CLEAN, coresight) - $(Q)$(MAKE) -C $(TESTS_CORESIGHT_DIR) O=3D$(OUTPUT) clean >/dev/null - -all: shell_compatibility_test $(ALL_PROGRAMS) $(LANG_BINDINGS) $(OTHER_PRO= GRAMS) tests-coresight-targets +all: shell_compatibility_test $(ALL_PROGRAMS) $(LANG_BINDINGS) $(OTHER_PRO= GRAMS) =20 # Create python binding output directory if not already present $(shell [ -d '$(OUTPUT)python' ] || mkdir -p '$(OUTPUT)python') @@ -896,7 +887,6 @@ install-tests: all install-gtk $(INSTALL) tests/shell/base_report/*.txt '$(DESTDIR_SQ)$(perfexec_instdi= r_SQ)/tests/shell/base_report'; \ $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/shell/co= resight' ; \ $(INSTALL) tests/shell/coresight/*.sh '$(DESTDIR_SQ)$(perfexec_instdir_S= Q)/tests/shell/coresight' - $(Q)$(MAKE) -C tests/shell/coresight install-tests =20 install-bin: install-tools install-tests =20 @@ -939,7 +929,7 @@ endif =20 clean:: $(LIBAPI)-clean $(LIBBPF)-clean $(LIBSUBCMD)-clean $(LIBSYMBOL)-cl= ean $(LIBPERF)-clean \ arm64-sysreg-defs-clean fixdep-clean python-clean bpf-skel-clean \ - tests-coresight-targets-clean pmu-events-clean + pmu-events-clean $(call QUIET_CLEAN, core-objs) $(RM) $(LIBPERF_A) $(OUTPUT)perf-archive \ $(OUTPUT)perf-iostat $(LANG_BINDINGS) $(Q)find $(or $(OUTPUT),.) -name '*.o' -delete -o -name '*.a' -delete -o \ diff --git a/tools/perf/tests/shell/coresight/Makefile b/tools/perf/tests/s= hell/coresight/Makefile deleted file mode 100644 index fa08fd9a5991..000000000000 --- a/tools/perf/tests/shell/coresight/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# Carsten Haitzler , 2021 -include ../../../../../tools/scripts/Makefile.include -include ../../../../../tools/scripts/Makefile.arch -include ../../../../../tools/scripts/utilities.mak - -SUBDIRS =3D \ - asm_pure_loop \ - memcpy_thread \ - thread_loop \ - unroll_loop_thread - -all: $(SUBDIRS) -$(SUBDIRS): - @$(MAKE) -C $@ >/dev/null - -INSTALLDIRS =3D $(SUBDIRS:%=3Dinstall-%) - -install-tests: $(INSTALLDIRS) -$(INSTALLDIRS): - @$(MAKE) -C $(@:install-%=3D%) install-tests >/dev/null - -CLEANDIRS =3D $(SUBDIRS:%=3Dclean-%) - -clean: $(CLEANDIRS) -$(CLEANDIRS): - $(call QUIET_CLEAN, test-$(@:clean-%=3D%)) $(MAKE) -C $(@:clean-%=3D%) cl= ean >/dev/null - -.PHONY: all clean $(SUBDIRS) $(CLEANDIRS) $(INSTALLDIRS) diff --git a/tools/perf/tests/shell/coresight/Makefile.miniconfig b/tools/p= erf/tests/shell/coresight/Makefile.miniconfig deleted file mode 100644 index 5f72a9cb43f3..000000000000 --- a/tools/perf/tests/shell/coresight/Makefile.miniconfig +++ /dev/null @@ -1,14 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only -# Carsten Haitzler , 2021 - -ifndef DESTDIR -prefix ?=3D $(HOME) -endif - -DESTDIR_SQ =3D $(subst ','\'',$(DESTDIR)) -INSTALL =3D install -INSTDIR_SUB =3D tests/shell/coresight - -include ../../../../../scripts/Makefile.include -include ../../../../../scripts/Makefile.arch -include ../../../../../scripts/utilities.mak diff --git a/tools/perf/tests/shell/coresight/asm_pure_loop/.gitignore b/to= ols/perf/tests/shell/coresight/asm_pure_loop/.gitignore deleted file mode 100644 index 468673ac32e8..000000000000 --- a/tools/perf/tests/shell/coresight/asm_pure_loop/.gitignore +++ /dev/null @@ -1 +0,0 @@ -asm_pure_loop diff --git a/tools/perf/tests/shell/coresight/asm_pure_loop/Makefile b/tool= s/perf/tests/shell/coresight/asm_pure_loop/Makefile deleted file mode 100644 index 206849e92bc9..000000000000 --- a/tools/perf/tests/shell/coresight/asm_pure_loop/Makefile +++ /dev/null @@ -1,34 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Carsten Haitzler , 2021 - -include ../Makefile.miniconfig - -# Binary to produce -BIN=3Dasm_pure_loop -# Any linking/libraries needed for the binary - empty if none needed -LIB=3D - -all: $(BIN) - -$(BIN): $(BIN).S -ifdef CORESIGHT -ifeq ($(ARCH),arm64) -# Build line - this is raw asm with no libc to have an always exact binary - $(Q)$(CC) $(BIN).S -nostdlib -static -o $(BIN) $(LIB) -endif -endif - -install-tests: all -ifdef CORESIGHT -ifeq ($(ARCH),arm64) -# Install the test tool in the right place - $(call QUIET_INSTALL, tests) \ - $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/$(INSTDIR_SUB)= /$(BIN)'; \ - $(INSTALL) $(BIN) '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/$(INSTDIR_SUB)/$(= BIN)/$(BIN)' -endif -endif - -clean: - $(Q)$(RM) -f $(BIN) - -.PHONY: all clean install-tests diff --git a/tools/perf/tests/shell/coresight/asm_pure_loop/asm_pure_loop.S= b/tools/perf/tests/shell/coresight/asm_pure_loop/asm_pure_loop.S deleted file mode 100644 index 577760046772..000000000000 --- a/tools/perf/tests/shell/coresight/asm_pure_loop/asm_pure_loop.S +++ /dev/null @@ -1,30 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* Tamas Zsoldos , 2021 */ - -.globl _start -_start: - mov x0, 0x0000ffff - mov x1, xzr -loop: - nop - nop - cbnz x1, noskip - nop - nop - adrp x2, skip - add x2, x2, :lo12:skip - br x2 - nop - nop -noskip: - nop - nop -skip: - sub x0, x0, 1 - cbnz x0, loop - - mov x0, #0 - mov x8, #93 // __NR_exit syscall - svc #0 - -.section .note.GNU-stack, "", @progbits diff --git a/tools/perf/tests/shell/coresight/memcpy_thread/.gitignore b/to= ols/perf/tests/shell/coresight/memcpy_thread/.gitignore deleted file mode 100644 index f8217e56091e..000000000000 --- a/tools/perf/tests/shell/coresight/memcpy_thread/.gitignore +++ /dev/null @@ -1 +0,0 @@ -memcpy_thread diff --git a/tools/perf/tests/shell/coresight/memcpy_thread/Makefile b/tool= s/perf/tests/shell/coresight/memcpy_thread/Makefile deleted file mode 100644 index 2db637eb2c26..000000000000 --- a/tools/perf/tests/shell/coresight/memcpy_thread/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Carsten Haitzler , 2021 -include ../Makefile.miniconfig - -# Binary to produce -BIN=3Dmemcpy_thread -# Any linking/libraries needed for the binary - empty if none needed -LIB=3D-pthread - -all: $(BIN) - -$(BIN): $(BIN).c -ifdef CORESIGHT -ifeq ($(ARCH),arm64) -# Build line - $(Q)$(CC) $(BIN).c -o $(BIN) $(LIB) -endif -endif - -install-tests: all -ifdef CORESIGHT -ifeq ($(ARCH),arm64) -# Install the test tool in the right place - $(call QUIET_INSTALL, tests) \ - $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/$(INSTDIR_SUB)= /$(BIN)'; \ - $(INSTALL) $(BIN) '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/$(INSTDIR_SUB)/$(= BIN)/$(BIN)' -endif -endif - -clean: - $(Q)$(RM) -f $(BIN) - -.PHONY: all clean install-tests diff --git a/tools/perf/tests/shell/coresight/memcpy_thread/memcpy_thread.c= b/tools/perf/tests/shell/coresight/memcpy_thread/memcpy_thread.c deleted file mode 100644 index 7e879217be30..000000000000 --- a/tools/perf/tests/shell/coresight/memcpy_thread/memcpy_thread.c +++ /dev/null @@ -1,80 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -// Carsten Haitzler , 2021 -#include -#include -#include -#include -#include - -struct args { - unsigned long loops; - unsigned long size; - pthread_t th; - void *ret; -}; - -static void *thrfn(void *arg) -{ - struct args *a =3D arg; - unsigned long i, len =3D a->loops; - unsigned char *src, *dst; - - src =3D malloc(a->size * 1024); - dst =3D malloc(a->size * 1024); - if ((!src) || (!dst)) { - printf("ERR: Can't allocate memory\n"); - exit(1); - } - for (i =3D 0; i < len; i++) - memcpy(dst, src, a->size * 1024); - - return NULL; -} - -static pthread_t new_thr(void *(*fn) (void *arg), void *arg) -{ - pthread_t t; - pthread_attr_t attr; - - pthread_attr_init(&attr); - pthread_create(&t, &attr, fn, arg); - return t; -} - -int main(int argc, char **argv) -{ - unsigned long i, len, size, thr; - struct args args[256]; - long long v; - - if (argc < 4) { - printf("ERR: %s [copysize Kb] [numthreads] [numloops (hundreds)]\n", arg= v[0]); - exit(1); - } - - v =3D atoll(argv[1]); - if ((v < 1) || (v > (1024 * 1024))) { - printf("ERR: max memory 1GB (1048576 KB)\n"); - exit(1); - } - size =3D v; - thr =3D atol(argv[2]); - if ((thr < 1) || (thr > 256)) { - printf("ERR: threads 1-256\n"); - exit(1); - } - v =3D atoll(argv[3]); - if ((v < 1) || (v > 40000000000ll)) { - printf("ERR: loops 1-40000000000 (hundreds)\n"); - exit(1); - } - len =3D v * 100; - for (i =3D 0; i < thr; i++) { - args[i].loops =3D len; - args[i].size =3D size; - args[i].th =3D new_thr(thrfn, &(args[i])); - } - for (i =3D 0; i < thr; i++) - pthread_join(args[i].th, &(args[i].ret)); - return 0; -} diff --git a/tools/perf/tests/shell/coresight/thread_loop/.gitignore b/tool= s/perf/tests/shell/coresight/thread_loop/.gitignore deleted file mode 100644 index 6d4c33eaa9e8..000000000000 --- a/tools/perf/tests/shell/coresight/thread_loop/.gitignore +++ /dev/null @@ -1 +0,0 @@ -thread_loop diff --git a/tools/perf/tests/shell/coresight/thread_loop/Makefile b/tools/= perf/tests/shell/coresight/thread_loop/Makefile deleted file mode 100644 index ea846c038e7a..000000000000 --- a/tools/perf/tests/shell/coresight/thread_loop/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Carsten Haitzler , 2021 -include ../Makefile.miniconfig - -# Binary to produce -BIN=3Dthread_loop -# Any linking/libraries needed for the binary - empty if none needed -LIB=3D-pthread - -all: $(BIN) - -$(BIN): $(BIN).c -ifdef CORESIGHT -ifeq ($(ARCH),arm64) -# Build line - $(Q)$(CC) $(BIN).c -o $(BIN) $(LIB) -endif -endif - -install-tests: all -ifdef CORESIGHT -ifeq ($(ARCH),arm64) -# Install the test tool in the right place - $(call QUIET_INSTALL, tests) \ - $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/$(INSTDIR_SUB)= /$(BIN)'; \ - $(INSTALL) $(BIN) '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/$(INSTDIR_SUB)/$(= BIN)/$(BIN)' -endif -endif - -clean: - $(Q)$(RM) -f $(BIN) - -.PHONY: all clean install-tests diff --git a/tools/perf/tests/shell/coresight/thread_loop/thread_loop.c b/t= ools/perf/tests/shell/coresight/thread_loop/thread_loop.c deleted file mode 100644 index 86f3f548b006..000000000000 --- a/tools/perf/tests/shell/coresight/thread_loop/thread_loop.c +++ /dev/null @@ -1,85 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -// Carsten Haitzler , 2021 - -// define this for gettid() -#define _GNU_SOURCE - -#include -#include -#include -#include -#include -#include -#ifndef SYS_gettid -// gettid is 178 on arm64 -# define SYS_gettid 178 -#endif -#define gettid() syscall(SYS_gettid) - -struct args { - unsigned int loops; - pthread_t th; - void *ret; -}; - -static void *thrfn(void *arg) -{ - struct args *a =3D arg; - int i =3D 0, len =3D a->loops; - - if (getenv("SHOW_TID")) { - unsigned long long tid =3D gettid(); - - printf("%llu\n", tid); - } - asm volatile( - "loop:\n" - "add %w[i], %w[i], #1\n" - "cmp %w[i], %w[len]\n" - "blt loop\n" - : /* out */ - : /* in */ [i] "r" (i), [len] "r" (len) - : /* clobber */ - ); - return (void *)(long)i; -} - -static pthread_t new_thr(void *(*fn) (void *arg), void *arg) -{ - pthread_t t; - pthread_attr_t attr; - - pthread_attr_init(&attr); - pthread_create(&t, &attr, fn, arg); - return t; -} - -int main(int argc, char **argv) -{ - unsigned int i, len, thr; - struct args args[256]; - - if (argc < 3) { - printf("ERR: %s [numthreads] [numloops (millions)]\n", argv[0]); - exit(1); - } - - thr =3D atoi(argv[1]); - if ((thr < 1) || (thr > 256)) { - printf("ERR: threads 1-256\n"); - exit(1); - } - len =3D atoi(argv[2]); - if ((len < 1) || (len > 4000)) { - printf("ERR: max loops 4000 (millions)\n"); - exit(1); - } - len *=3D 1000000; - for (i =3D 0; i < thr; i++) { - args[i].loops =3D len; - args[i].th =3D new_thr(thrfn, &(args[i])); - } - for (i =3D 0; i < thr; i++) - pthread_join(args[i].th, &(args[i].ret)); - return 0; -} diff --git a/tools/perf/tests/shell/coresight/unroll_loop_thread/.gitignore= b/tools/perf/tests/shell/coresight/unroll_loop_thread/.gitignore deleted file mode 100644 index 2cb4e996dbf3..000000000000 --- a/tools/perf/tests/shell/coresight/unroll_loop_thread/.gitignore +++ /dev/null @@ -1 +0,0 @@ -unroll_loop_thread diff --git a/tools/perf/tests/shell/coresight/unroll_loop_thread/Makefile b= /tools/perf/tests/shell/coresight/unroll_loop_thread/Makefile deleted file mode 100644 index 6264c4e3abd1..000000000000 --- a/tools/perf/tests/shell/coresight/unroll_loop_thread/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Carsten Haitzler , 2021 -include ../Makefile.miniconfig - -# Binary to produce -BIN=3Dunroll_loop_thread -# Any linking/libraries needed for the binary - empty if none needed -LIB=3D-pthread - -all: $(BIN) - -$(BIN): $(BIN).c -ifdef CORESIGHT -ifeq ($(ARCH),arm64) -# Build line - $(Q)$(CC) $(BIN).c -o $(BIN) $(LIB) -endif -endif - -install-tests: all -ifdef CORESIGHT -ifeq ($(ARCH),arm64) -# Install the test tool in the right place - $(call QUIET_INSTALL, tests) \ - $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/$(INSTDIR_SUB)= /$(BIN)'; \ - $(INSTALL) $(BIN) '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/$(INSTDIR_SUB)/$(= BIN)/$(BIN)' -endif -endif - -clean: - $(Q)$(RM) -f $(BIN) - -.PHONY: all clean install-tests diff --git a/tools/perf/tests/shell/coresight/unroll_loop_thread/unroll_loo= p_thread.c b/tools/perf/tests/shell/coresight/unroll_loop_thread/unroll_loo= p_thread.c deleted file mode 100644 index 8f4e1c985ca3..000000000000 --- a/tools/perf/tests/shell/coresight/unroll_loop_thread/unroll_loop_threa= d.c +++ /dev/null @@ -1,75 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -// Carsten Haitzler , 2021 -#include -#include -#include -#include -#include - -struct args { - pthread_t th; - unsigned int in; - void *ret; -}; - -static void *thrfn(void *arg) -{ - struct args *a =3D arg; - unsigned int i, in =3D a->in; - - for (i =3D 0; i < 10000; i++) { - asm volatile ( -// force an unroll of thia add instruction so we can test long runs of code -#define SNIP1 "add %w[in], %w[in], #1\n" -// 10 -#define SNIP2 SNIP1 SNIP1 SNIP1 SNIP1 SNIP1 SNIP1 SNIP1 SNIP1 SNIP1 SNIP1 -// 100 -#define SNIP3 SNIP2 SNIP2 SNIP2 SNIP2 SNIP2 SNIP2 SNIP2 SNIP2 SNIP2 SNIP2 -// 1000 -#define SNIP4 SNIP3 SNIP3 SNIP3 SNIP3 SNIP3 SNIP3 SNIP3 SNIP3 SNIP3 SNIP3 -// 10000 -#define SNIP5 SNIP4 SNIP4 SNIP4 SNIP4 SNIP4 SNIP4 SNIP4 SNIP4 SNIP4 SNIP4 -// 100000 - SNIP5 SNIP5 SNIP5 SNIP5 SNIP5 SNIP5 SNIP5 SNIP5 SNIP5 SNIP5 - : /* out */ - : /* in */ [in] "r" (in) - : /* clobber */ - ); - } - - return NULL; -} - -static pthread_t new_thr(void *(*fn) (void *arg), void *arg) -{ - pthread_t t; - pthread_attr_t attr; - - pthread_attr_init(&attr); - pthread_create(&t, &attr, fn, arg); - return t; -} - -int main(int argc, char **argv) -{ - unsigned int i, thr; - struct args args[256]; - - if (argc < 2) { - printf("ERR: %s [numthreads]\n", argv[0]); - exit(1); - } - - thr =3D atoi(argv[1]); - if ((thr > 256) || (thr < 1)) { - printf("ERR: threads 1-256\n"); - exit(1); - } - for (i =3D 0; i < thr; i++) { - args[i].in =3D rand(); - args[i].th =3D new_thr(thrfn, &(args[i])); - } - for (i =3D 0; i < thr; i++) - pthread_join(args[i].th, &(args[i].ret)); - return 0; -} diff --git a/tools/perf/tests/shell/lib/coresight.sh b/tools/perf/tests/she= ll/lib/coresight.sh deleted file mode 100644 index 184d62e7e5bd..000000000000 --- a/tools/perf/tests/shell/lib/coresight.sh +++ /dev/null @@ -1,134 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Carsten Haitzler , 2021 - -# This is sourced from a driver script so no need for #!/bin... etc. at the -# top - the assumption below is that it runs as part of sourcing after the -# test sets up some basic env vars to say what it is. - -# This currently works with ETMv4 / ETF not any other packet types at thi -# point. This will need changes if that changes. - -# perf record options for the perf tests to use -PERFRECMEM=3D"-m ,16M" -PERFRECOPT=3D"$PERFRECMEM -e cs_etm//u" - -TOOLS=3D$(dirname $0) -DIR=3D"$TOOLS/$TEST" -BIN=3D"$DIR/$TEST" -# If the test tool/binary does not exist and is executable then skip the t= est -if ! test -x "$BIN"; then exit 2; fi -# If CoreSight is not available, skip the test -perf list pmu | grep -q cs_etm || exit 2 -DATD=3D"." -# If the data dir env is set then make the data dir use that instead of ./ -if test -n "$PERF_TEST_CORESIGHT_DATADIR"; then - DATD=3D"$PERF_TEST_CORESIGHT_DATADIR"; -fi -# If the stat dir env is set then make the data dir use that instead of ./ -STATD=3D"." -if test -n "$PERF_TEST_CORESIGHT_STATDIR"; then - STATD=3D"$PERF_TEST_CORESIGHT_STATDIR"; -fi - -# Called if the test fails - error code 1 -err() { - echo "$1" - exit 1 -} - -# Check that some statistics from our perf -check_val_min() { - STATF=3D"$4" - if test "$2" -lt "$3"; then - echo ", FAILED" >> "$STATF" - err "Sanity check number of $1 is too low ($2 < $3)" - fi -} - -perf_dump_aux_verify() { - # Some basic checking that the AUX chunk contains some sensible data - # to see that we are recording something and at least a minimum - # amount of it. We should almost always see Fn packets in just about - # anything but certainly we will see some trace info and async - # packets - DUMP=3D"$DATD/perf-tmp-aux-dump.txt" - perf report --stdio --dump -i "$1" | \ - grep -o -e I_ATOM_F -e I_ASYNC -e I_TRACE_INFO > "$DUMP" - # Simply count how many of these packets we find to see that we are - # producing a reasonable amount of data - exact checks are not sane - # as this is a lossy process where we may lose some blocks and the - # compiler may produce different code depending on the compiler and - # optimization options, so this is rough just to see if we're - # either missing almost all the data or all of it - ATOM_FX_NUM=3D$(grep -c I_ATOM_F "$DUMP") - ASYNC_NUM=3D$(grep -c I_ASYNC "$DUMP") - TRACE_INFO_NUM=3D$(grep -c I_TRACE_INFO "$DUMP") - rm -f "$DUMP" - - # Arguments provide minimums for a pass - CHECK_FX_MIN=3D"$2" - CHECK_ASYNC_MIN=3D"$3" - CHECK_TRACE_INFO_MIN=3D"$4" - - # Write out statistics, so over time you can track results to see if - # there is a pattern - for example we have less "noisy" results that - # produce more consistent amounts of data each run, to see if over - # time any techinques to minimize data loss are having an effect or - # not - STATF=3D"$STATD/stats-$TEST-$DATV.csv" - if ! test -f "$STATF"; then - echo "ATOM Fx Count, Minimum, ASYNC Count, Minimum, TRACE INFO Count, Mi= nimum" > "$STATF" - fi - echo -n "$ATOM_FX_NUM, $CHECK_FX_MIN, $ASYNC_NUM, $CHECK_ASYNC_MIN, $TRAC= E_INFO_NUM, $CHECK_TRACE_INFO_MIN" >> "$STATF" - - # Actually check to see if we passed or failed. - check_val_min "ATOM_FX" "$ATOM_FX_NUM" "$CHECK_FX_MIN" "$STATF" - check_val_min "ASYNC" "$ASYNC_NUM" "$CHECK_ASYNC_MIN" "$STATF" - check_val_min "TRACE_INFO" "$TRACE_INFO_NUM" "$CHECK_TRACE_INFO_MIN" "$ST= ATF" - echo ", Ok" >> "$STATF" -} - -perf_dump_aux_tid_verify() { - # Specifically crafted test will produce a list of Tread ID's to - # stdout that need to be checked to see that they have had trace - # info collected in AUX blocks in the perf data. This will go - # through all the TID's that are listed as CID=3D0xabcdef and see - # that all the Thread IDs the test tool reports are in the perf - # data AUX chunks - - # The TID test tools will print a TID per stdout line that are being - # tested - TIDS=3D$(cat "$2") - # Scan the perf report to find the TIDs that are actually CID in hex - # and build a list of the ones found - FOUND_TIDS=3D$(perf report --stdio --dump -i "$1" | \ - grep -o "CID=3D0x[0-9a-z]\+" | sed 's/CID=3D//g' | \ - uniq | sort | uniq) - # No CID=3Dxxx found - maybe your kernel is reporting these as - # VMID=3Dxxx so look there - if test -z "$FOUND_TIDS"; then - FOUND_TIDS=3D$(perf report --stdio --dump -i "$1" | \ - grep -o "VMID=3D0x[0-9a-z]\+" | sed 's/VMID=3D//g' | \ - uniq | sort | uniq) - fi - - # Iterate over the list of TIDs that the test says it has and find - # them in the TIDs found in the perf report - MISSING=3D"" - for TID2 in $TIDS; do - FOUND=3D"" - for TIDHEX in $FOUND_TIDS; do - TID=3D$(printf "%i" $TIDHEX) - if test "$TID" -eq "$TID2"; then - FOUND=3D"y" - break - fi - done - if test -z "$FOUND"; then - MISSING=3D"$MISSING $TID" - fi - done - if test -n "$MISSING"; then - err "Thread IDs $MISSING not found in perf AUX data" - fi -} --=20 2.34.1 From nobody Thu Jun 11 02:45:42 2026 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 79F7C436366 for ; Tue, 9 Jun 2026 14:40:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016049; cv=none; b=sAyf6uzNPcpWD6rr6MispaMJT9qRRs2hHhPkUjsIoDuOYtYVlVIJSeyi4pu1XX6OVWuQVlBvHRTB5Ak9zqH3Pvtbiq3DJqW9fNB4JyFNtcV0Zxow/Q7xgaHtC/+yABBzCn7HeQkjzFd/xMZeNWWnNsk3u3o796CJULiAWRRkL5Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016049; c=relaxed/simple; bh=ZLOVVoBWIvoSYAEUTNtbgZWHkQY4f1NrccmUuoSiPY4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=U+w9R5gvdVogbCYEUM/QO99Wcd5HzZXFvncKAYrYFjw08qDtNLQgBSNDmuZWwhX4r/PFWfXq0BmjpE1ltfblHEujJ13Cu+2BuNzMt/gGMJaFM4vJFxgY9laXc+jKxH9ERzbqYFsXriFwYFkCHAexXO1PAc83d9wURM9gh9n3fto= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=RXiuRRIJ; arc=none smtp.client-ip=209.85.128.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="RXiuRRIJ" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-490b64c8311so62877255e9.3 for ; Tue, 09 Jun 2026 07:40:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781016046; x=1781620846; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=95NlgPR4KTlap0RZdRAD+2OgBeEJ40DU9UYZfVmgTrg=; b=RXiuRRIJFB27yKNIWrzQg3UUHsV62VowcDfsm5th/B/dWC31LkFsgUKiEmX8mW8bUX p4/2EvohxxTtzXMIxh81pdApmnQS9MN0y317AyN2vMA5+qoX3P44pSgdQqkpbTH2owS5 dkbzFk3hI2oHktfwTy9HnMjlqjkcF5iy2dNfeqHcVcXErMUec9DDNqzPNmIcJeEG7vOT ZBZhLJ3pesRlcnCRL9roDcS757fNqF3USYDpSQsNJUD/ySx7xw1g4Sxnjk5Rj2vGdJIT TTV3CNrbLO5j063hjt7PIS6kW9/CdZxq0Bo5tqXCeCn1l+di9NqEGip9oW8JKf0GHcmY 8h6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781016046; x=1781620846; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=95NlgPR4KTlap0RZdRAD+2OgBeEJ40DU9UYZfVmgTrg=; b=AjsEpxJdKXU9DXR5Ez8vuInm9w80XYt1DiWdxriKoLEk9lZU+aQA4KCzJ9hZrMVX2I kQXhc+vESQ2ntHylJ1h+sPaqLDnCgI4S87/0Py56mubvOv6VvNTcDInsUWfGk6QUfR14 ulpc5SgZqNwGxF4h1JsIHehK8J7sJzdHJ7sgvG/pW/NwDDBFe2zW5T30vTnDn7J26w6h RKZVykPZ7ZiH67xnkX7Y4qsiBvnA+2de5zT0jeTKNN3ty0SM0PAnwHQKwQYGgqaW9NOI qe7PEqJSXlzYL5laKyo/+25Ye75XDaKG8iEj4eQdby75s7SqA4Ezjvt8hwUoVKI4P5sr JOxA== X-Forwarded-Encrypted: i=1; AFNElJ+RRIoh6ciysKGvQLb9dIp+rvbIZMAG80GHYdJnvT2DmzpJJqdOB+Dm9ChGUF1sVrUKNuWpap5G43C3BDE=@vger.kernel.org X-Gm-Message-State: AOJu0Yz1mUuoV3XQsJgPpOwJpRca6Eyot+FrTNU8dWxxjAlCh8jmVGbT JXS3DWglZZTQvZ7JG0v+5m9TGc7wadZp2X9PkneccFqXqxYg2Gej75n73loxqcLdBNQ= X-Gm-Gg: Acq92OHcaNqR/E+ZIL8i58SPryioNkXO+RboVxFr/Ma7BPuX4600RXGasj3SbSjuN8v MfUcFP+PmtU1bSIbz0dZJmCrVuQuCOIamNVU0+zIJZ1nU9xRGp+FctITWPVZ9Vc6f30GxitQSSl CHacc7eELjKVEhAO1n1ogFviGLG7V6+lKIYZc6m39eGJI9b9J/fRtReJV0EFQ2/BZQp0ZGgDcfo KnVIv5CDtwtKkg8KRFASE4JyU5FbKFyaPldw/+GmQgtAIep9ZxAgG6VfVw21pOgTdqwYOTg8nUF IaCgAHf9L5ZkweLSUmIYXLlKd8p0pjeJHaAVilVl6cO40dDSx4Wpj6J0V1Zv3haail7E5fQQiR8 ZKTpCOX4x9IhBTYYxjVcGS0li7WVnTlT6g/lxwpIhyrk1OmUa8nMHRNwVjm2Xqg6nECE7BqDPKp YHnosvBjA9ylrMlrUc2c6GY7k37LTlXJczCBUCsbBznHoOxyqSqgIyXQ== X-Received: by 2002:a05:600c:3e0a:b0:490:b724:dbe3 with SMTP id 5b1f17b1804b1-490c25a07c4mr317921875e9.8.1781016045935; Tue, 09 Jun 2026 07:40:45 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3c1149sm428411935e9.4.2026.06.09.07.40.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 07:40:45 -0700 (PDT) From: James Clark Date: Tue, 09 Jun 2026 15:40:21 +0100 Subject: [PATCH v5 16/19] perf test cs-etm: Make disassembly test use kcore Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-james-cs-context-tracking-fix-v5-16-d53a7d096a19@linaro.org> References: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> In-Reply-To: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> To: Suzuki K Poulose , Mike Leach , Leo Yan , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Ian Rogers , Amir Ayupov , Jonathan Corbet , Shuah Khan , Paschalis Mpeis Cc: coresight@lists.linaro.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo , linux-doc@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 Hits in modules return empty disassembly with vmlinux as an input to objdump. Make the disassembly test more reliable by always using kcore. And update the comments to say that this is supported by the script. Signed-off-by: James Clark --- tools/perf/scripts/python/arm-cs-trace-disasm.py | 20 ++++++++++-------= --- tools/perf/tests/shell/test_arm_coresight_disasm.sh | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/tools/perf/scripts/python/arm-cs-trace-disasm.py b/tools/perf/= scripts/python/arm-cs-trace-disasm.py index ba208c90d631..8f6fa4a007b4 100755 --- a/tools/perf/scripts/python/arm-cs-trace-disasm.py +++ b/tools/perf/scripts/python/arm-cs-trace-disasm.py @@ -18,29 +18,29 @@ from perf_trace_context import perf_sample_srccode, per= f_config_get =20 # Below are some example commands for using this script. # Note a --kcore recording is required for accurate decode -# due to the alternatives patching mechanism. However this -# script only supports reading vmlinux for disassembly dump, -# meaning that any patched instructions will appear -# as unpatched, but the instruction ranges themselves will -# be correct. In addition to this, source line info comes -# from Perf, and when using kcore there is no debug info. The -# following lists the supported features in each mode: +# due to the alternatives patching mechanism. In addition to this, +# source line info comes from Perf, and when using kcore there is +# no debug info. The following lists the supported features in each mode: # # +-----------+-----------------+------------------+------------------+ # | Recording | Accurate decode | Source line dump | Disassembly dump | # +-----------+-----------------+------------------+------------------+ # | --kcore | yes | no | yes | -# | normal | no | yes | yes | +# | normal | no | yes (inaccurate) | yes (inaccurate) | # +-----------+-----------------+------------------+------------------+ # # Output disassembly with objdump and auto detect vmlinux -# (when running on same machine.) +# (when running on same machine.): # perf script -s scripts/python/arm-cs-trace-disasm.py -d # # Output disassembly with llvm-objdump: # perf script -s scripts/python/arm-cs-trace-disasm.py \ # -- -d llvm-objdump-11 -k path/to/vmlinux # +# Output accurate disassembly by passing kcore to script: +# perf script -s scripts/python/arm-cs-trace-disasm.py \ +# -- -d -k perf.data/kcore_dir/kcore +# # Output only source line and symbols: # perf script -s scripts/python/arm-cs-trace-disasm.py =20 @@ -57,7 +57,7 @@ def int_arg(v): =20 args =3D argparse.ArgumentParser() args.add_argument("-k", "--vmlinux", - help=3D"Set path to vmlinux file. Omit to autodetect if running on sam= e machine") + help=3D"Set path to vmlinux or kcore file. Omit to autodetect if runni= ng on same machine") args.add_argument("-d", "--objdump", nargs=3D"?", const=3Ddefault_objdump(= ), help=3D"Show disassembly. Can also be used to change the objdump path"= ), args.add_argument("-v", "--verbose", action=3D"store_true", help=3D"Enable= debugging log") diff --git a/tools/perf/tests/shell/test_arm_coresight_disasm.sh b/tools/pe= rf/tests/shell/test_arm_coresight_disasm.sh index 339ae4831868..87797d239f76 100755 --- a/tools/perf/tests/shell/test_arm_coresight_disasm.sh +++ b/tools/perf/tests/shell/test_arm_coresight_disasm.sh @@ -46,7 +46,7 @@ if [ "$(id -u)" =3D=3D 0 ] && [ -e /proc/kcore ]; then echo "Testing kernel disassembly" perf record -o ${perfdata} -e cs_etm//k --kcore -- touch $file > /dev/nul= l 2>&1 perf script -i ${perfdata} -s python:${script_path} -- \ - -d --stop-sample=3D30 2> /dev/null > ${file} + -d --stop-sample=3D30 -k ${perfdata}/kcore_dir/kcore 2> /dev/null > ${fi= le} grep -q -e ${branch_search} ${file} echo "Found kernel branches" else --=20 2.34.1 From nobody Thu Jun 11 02:45:42 2026 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EA74C438FF5 for ; Tue, 9 Jun 2026 14:40:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016050; cv=none; b=mmIsZREESn2HKk97q0SMLSbvaQYCVxp8wrYBsJuE69mVbSXS/oTsRwfnR0P/3W9HfCocTT9YJpIAo9KJv1CveUWYxbN0BgQVc0MO9f6eKSOl/zo/fF5Agx+/35uXl4R0YSvvPqKLLbi/WLY8SK06WNPcKCNEtxkcvz1uzMGQ9DU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016050; c=relaxed/simple; bh=wObRJmm3gTlf7wqz3XGbcKcAk4UU+DK+eJvukw9px/Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nyYA70epnxEYom4BEYbws94wqj7EQu74aqYGPjIKlOmxL9V80NSqFoJa9+/hR2OeSlRGi//1CFWk39NdiYaiSX4VMNIPPrjOqwSHkixdoZV9J6z/NsMiwOMTuHONYtAO4JhtIWA4tQKjzbQWgNE1zIvd/Qpt8p9rgMgzUKTBSIY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=F04zP6Oq; arc=none smtp.client-ip=209.85.128.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="F04zP6Oq" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-490b4e1ade7so60875425e9.0 for ; Tue, 09 Jun 2026 07:40:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781016047; x=1781620847; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=VdUeDLTBd8NbSbxSGmF6PVOlpVLflZ1t9lCb20G1ZuE=; b=F04zP6OqT2e5wpfuCvsodg+W7RQc73XZPImtr5g9uCrGpBRNvhq7r7ajRrkr6aQLt8 oyMsLCZLPcK3SbnYwsvj6gYXT/YaHmv2H91tGr/Lcry+5/lleAW0W4sSz8jUUHrkRl5g OIfxIRn14UV162xelR9odKtWj3vnFkA9Qnu5ZaLLghtJT0/SdHAMxbYFq/jTn5wqP9pf EbQgPTlzEUEqJSR0sNhjuWT7AgEiTIHPSE1YQmrKDSeOWivS+GJaIP01Auok2qHiMHvb 2WnknxQOAlH4+tA2Pwr/IvYNFPsADuzXWiMyxiq+qWpArSvbeRivH+2QmEoNnYjSpoxv c5qA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781016047; x=1781620847; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=VdUeDLTBd8NbSbxSGmF6PVOlpVLflZ1t9lCb20G1ZuE=; b=CgwVU1lNCA3bUpAEM1moQARC7eEobyr7GRkUYwTy48yM0u5FdUzOZBytxM3DcNDy+k SCjcUlHx5w6oXO8STgqMdEyUmufYFKOrrNfpPbE3wbY7TtVewl03JgvYCV46QudRWgvD oMgpjHzsr2M2zqzsa0ORTZ/Yb17uaK4jN1TSigCTd1Ct59wgfnVxGad+CqjKeD7objUj 67T0kNhXilYP2f+t7d8AsuwdAFCwRADV4zcgln5Reb+/05CGR43rlpDhGMlkWyk7NfeD zahgKjbb3Sc+hUYOLkvL/n+M5uL6WSQBNeygxqI31Hwjo/apy5834rufF89WBqbb6Kt7 mmew== X-Forwarded-Encrypted: i=1; AFNElJ8n5rXfKQu1KSXczr9DGfdgex8LtcC52lW55U+Vb5zS2tZBxLIYEPVksetZ81arvl0yo0A1JTPIm7EmOBE=@vger.kernel.org X-Gm-Message-State: AOJu0YyiTZp7lRPDaOoFv2HYwrGqosG5UvfX46VLeJyfQoVlTVOoUkJ+ e9WxTIhb2XZaW8kKIw6Z/0/h7PoYRikYoBIPMPdMTixWMhp++6kgiM5tUAwxl7TXyBUAwOpn4BY 8k4oJs9Q= X-Gm-Gg: Acq92OEFCfq2qRrZLWgzoIOxMfWip2P/TpyLPU/3KTIB6sGQ83XM4+Yvj1ARCWccyMh XVLixbysvL1PbPH8wnGr5nl90UtkDts5n+wIMl625qRWL96e9BISc0HMM0XpmmIZDLazozNYx5b SKApYNskPtSwlzq8uCEO5kKPJVGmbNCm3awpjPXsjf5p0sKZerC7hUXEiFKWSUTavdPKMDIdFMk //lAWs/IPXzLVuzibXWUSQuexCn7L6nd7t2QPMFHthOEwXMyMEPL45NgN7Oj3rB++Jom4hE76ka c7WnWQYkhwl1Phwaco/ga+sECciBo0ZKwupzGhufXWMU0rO25NX6HQb/K9F5M94eNq7CCy38Knu akGVVGzR94MMr9boTz99vAOfVD5PFuczMdf/i8YqbxevCd1CDVUjRVLbBeX9OCvXHUzf56qTv9A CN0d6NIAtCXPz6aY+X/e+C99AmhlhixmRaEA25iuhwTNo= X-Received: by 2002:a05:600c:529b:b0:48f:e230:1d12 with SMTP id 5b1f17b1804b1-490c2625f9bmr306873925e9.31.1781016047377; Tue, 09 Jun 2026 07:40:47 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3c1149sm428411935e9.4.2026.06.09.07.40.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 07:40:46 -0700 (PDT) From: James Clark Date: Tue, 09 Jun 2026 15:40:22 +0100 Subject: [PATCH v5 17/19] perf test cs-etm: Add all branch instructions to test Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-james-cs-context-tracking-fix-v5-17-d53a7d096a19@linaro.org> References: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> In-Reply-To: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> To: Suzuki K Poulose , Mike Leach , Leo Yan , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Ian Rogers , Amir Ayupov , Jonathan Corbet , Shuah Khan , Paschalis Mpeis Cc: coresight@lists.linaro.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo , linux-doc@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 If we reduce the number of samples searched to speed up the test, then there will be less chance of hitting one of these branches. Extend the regex to cover all branches so the test will always pass. Reviewed-by: Leo Yan Signed-off-by: James Clark --- tools/perf/tests/shell/test_arm_coresight_disasm.sh | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tools/perf/tests/shell/test_arm_coresight_disasm.sh b/tools/pe= rf/tests/shell/test_arm_coresight_disasm.sh index 87797d239f76..f78dfb6bf73e 100755 --- a/tools/perf/tests/shell/test_arm_coresight_disasm.sh +++ b/tools/perf/tests/shell/test_arm_coresight_disasm.sh @@ -38,8 +38,7 @@ cleanup_files() trap cleanup_files EXIT TERM INT =20 # Ranges start and end on branches, so check for some likely branch instru= ctions -sep=3D"\s\|\s" -branch_search=3D"\sbl${sep}b${sep}b.ne${sep}b.eq${sep}cbz\s" +branch_search=3D'[[:space:]](bl|b(\.(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|g= t|le|al))?|br|blr|ret|cbz|cbnz|tbz|tbnz|svc|eret)([[:space:]]|$)' =20 ## Test kernel ## if [ "$(id -u)" =3D=3D 0 ] && [ -e /proc/kcore ]; then @@ -47,7 +46,7 @@ if [ "$(id -u)" =3D=3D 0 ] && [ -e /proc/kcore ]; then perf record -o ${perfdata} -e cs_etm//k --kcore -- touch $file > /dev/nul= l 2>&1 perf script -i ${perfdata} -s python:${script_path} -- \ -d --stop-sample=3D30 -k ${perfdata}/kcore_dir/kcore 2> /dev/null > ${fi= le} - grep -q -e ${branch_search} ${file} + grep -q -E ${branch_search} ${file} echo "Found kernel branches" else # Root and kcore are required for correct kernel decode due to runtime co= de patching @@ -59,7 +58,7 @@ echo "Testing userspace disassembly" perf record -o ${perfdata} -e cs_etm//u -- touch $file > /dev/null 2>&1 perf script -i ${perfdata} -s python:${script_path} -- \ -d --stop-sample=3D30 2> /dev/null > ${file} -grep -q -e ${branch_search} ${file} +grep -q -E ${branch_search} ${file} echo "Found userspace branches" =20 glb_err=3D0 --=20 2.34.1 From nobody Thu Jun 11 02:45:42 2026 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6325543C05E for ; Tue, 9 Jun 2026 14:40:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016052; cv=none; b=CFLysxHDabXxmhTqZUBsiiQ6aNItpmBCZg6keiaxJ7w+zSuxQtrfxWrFrPXtol9b5AweFUfSGhLdP6gcfj4v74KxlqMJis/fzHxwV9fYhwcZHf9c5rPvFayUt7Cil6YzEVBPWNPHkFzm6AvqhqqXYU3qjzaQjjhaE8qicMpYx1Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016052; c=relaxed/simple; bh=QxiXQQoGhuE0v0FKgjfs2qmeul36mpIzc28JU+Z4ydA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=avDIsQjq/0WMpELBo15YPrbnOPW65hC+AYgbmEWqV2QigTRlH2eFOJJrMAFldmjdwZHNG5/AgQmS1SzYdr2DH1ijgqwYMVYYgK4NE1v2OvbCGTi+zhxNj8Qrq/mtUXhewhph1PLr4UUc7VJNThnVXmtQGe0IRf9o8cNX8Xm8Ti8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=ZdwpKl7e; arc=none smtp.client-ip=209.85.128.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="ZdwpKl7e" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-490ae94a89eso47982605e9.1 for ; Tue, 09 Jun 2026 07:40:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781016049; x=1781620849; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=qIDogTCAxtWe2C3a6zQaBCMJ4/zJw46qDk4EjlSKYTU=; b=ZdwpKl7exdNp/Csonqpi6Xg6/QjeIL+sAMapEscdsQFQl27aXBYA01ivRQQMQX3+0/ n3KMuSajn0vqi7bQM0J0edMkNzh0wEipRHmu7OQd1dmg2UCkkpSP41IqcGFc62hXqnbP yAaZNXYC6DunqCXJzEHbeUPlTlCcKZ+RxLTGKUvUHwrooLYazXmmdqQpdIyq88a9UM6r 0oSelhgLmrQAYJYRz+hfFakGWcQlgzb/PTMZk0Z1QkmqKpczAQsG4hUX1qBowh8DN0GT 5u18eddxNw84lFs1x8ylduJwhg59wTR1I9q+l0MhLcu87mm3dT1mEfCisz/IgCZQjAJC TllQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781016049; x=1781620849; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=qIDogTCAxtWe2C3a6zQaBCMJ4/zJw46qDk4EjlSKYTU=; b=pb+Ss8MtMCCfvUcV1ZGXLLngKTYP2UfOlD5mHV883aioH7FzRIrXLYdTLbx4MpyWGG VEBNR69SBLFSXBN5XFsTWBkmrlX4SV/+iX8Vqd9UplF2GF3KTErausCchNZo/D7YblqJ d5tdx5dbCXMQgeb++mC/hmAij1BWy/YdFz16tZ8C2oP49Uwd3WL0E5n8p5OrdR98fPsO q1W9CqfY/0xriuotCNLvM4uPLXb2ZYxpTkiGZm/ZDH6LiBVcljlWkG4kA2l7mAHb5CKC jf/T4Z7NE81iV2DkadR0SKnZznqcUFcNEJLpebcqxMO5z5/87mlcIxkGhi4cdS3zRv9p GKpw== X-Forwarded-Encrypted: i=1; AFNElJ/tffBg6t8La9qLGCfvzKVwHNkVH4oGL1Cqf1ynLwM+TrY6AO5N1Lkb7QKTdNsjjD7C2GUHbSkrgbiLRFo=@vger.kernel.org X-Gm-Message-State: AOJu0YxzYjPM13If3TMLwgqz8q1UXilzh7l50vAh8ZjEE7KPXJMTr6HU JLpv7NXZWAxqw7slKq5hc5AE1tIsjZN6vUaQWbhCraB9FV7eRkGRXVUer/sxuYzE3DrySdO7r4m FQZOnwPk= X-Gm-Gg: Acq92OEImQNBiHHe+M6xv7l4QwIkJSW4kiek4tDFh/4tBYPhiXETzwk/4x6j8iDduPg KCBF53LNryFfqBcKcSzdoIdyPnRW4E1Z7TL2V7WHcDfrGr6jZ14oxsZM/YIKHQu/5wWW+1MZdJ0 nGNsRFFAEE6cD0fEM7/vogWAm15o0pL+uD62gXV1kKhCSbjh+bW6kb2yLtFIcDDGg6NKLcc/nhH gh9TFDj8E40KTzmDUO+oKoQPVp30gErMHDxq/CojUit12uU57P9JK+dKPYLUxei7/31vXYB1cYp dRpQoJBsNBLWmYN7BoinXOZfSFulP2hgdk2jU1bjDgL/Qsvp1BZ2WpTjPFn++vLnBn7AlOk+IOR YIkEzqywW8IcDousXeGFB7iXedNJUFas1d/cnOMDuV3l/es+qt3VS6h7niwoLKzsRyY3YJ6DeWN wSpMDQOIe9elANQ56jQ4FQ4qlwuh+xD/dvjCAlYEKjOBA= X-Received: by 2002:a05:600c:b93:b0:48a:93f8:dd02 with SMTP id 5b1f17b1804b1-490c4e0414emr326755125e9.14.1781016048776; Tue, 09 Jun 2026 07:40:48 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3c1149sm428411935e9.4.2026.06.09.07.40.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 07:40:48 -0700 (PDT) From: James Clark Date: Tue, 09 Jun 2026 15:40:23 +0100 Subject: [PATCH v5 18/19] perf test cs-etm: Speed up disassembly test Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-james-cs-context-tracking-fix-v5-18-d53a7d096a19@linaro.org> References: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> In-Reply-To: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> To: Suzuki K Poulose , Mike Leach , Leo Yan , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Ian Rogers , Amir Ayupov , Jonathan Corbet , Shuah Khan , Paschalis Mpeis Cc: coresight@lists.linaro.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo , linux-doc@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 We can use exit snapshot to limit the amount of trace to decode here too. Also each call to objdump is quite expensive on kcore so limit it to 2 samples instead of 30. We only want to see if there is no data at all. Reviewed-by: Leo Yan Signed-off-by: James Clark --- tools/perf/tests/shell/test_arm_coresight_disasm.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/perf/tests/shell/test_arm_coresight_disasm.sh b/tools/pe= rf/tests/shell/test_arm_coresight_disasm.sh index f78dfb6bf73e..f2fb1aa92252 100755 --- a/tools/perf/tests/shell/test_arm_coresight_disasm.sh +++ b/tools/perf/tests/shell/test_arm_coresight_disasm.sh @@ -43,9 +43,9 @@ branch_search=3D'[[:space:]](bl|b(\.(eq|ne|cs|cc|mi|pl|vs= |vc|hi|ls|ge|lt|gt|le|al) ## Test kernel ## if [ "$(id -u)" =3D=3D 0 ] && [ -e /proc/kcore ]; then echo "Testing kernel disassembly" - perf record -o ${perfdata} -e cs_etm//k --kcore -- touch $file > /dev/nul= l 2>&1 + perf record -o ${perfdata} -e cs_etm//k --kcore -Se -m,64K -- touch $file= > /dev/null 2>&1 perf script -i ${perfdata} -s python:${script_path} -- \ - -d --stop-sample=3D30 -k ${perfdata}/kcore_dir/kcore 2> /dev/null > ${fi= le} + -d --stop-sample=3D2 -k ${perfdata}/kcore_dir/kcore 2> /dev/null > ${fil= e} grep -q -E ${branch_search} ${file} echo "Found kernel branches" else @@ -55,9 +55,9 @@ fi =20 ## Test user ## echo "Testing userspace disassembly" -perf record -o ${perfdata} -e cs_etm//u -- touch $file > /dev/null 2>&1 +perf record -o ${perfdata} -e cs_etm//u -Se -m,64K -- touch $file > /dev/n= ull 2>&1 perf script -i ${perfdata} -s python:${script_path} -- \ - -d --stop-sample=3D30 2> /dev/null > ${file} + -d --stop-sample=3D2 2> /dev/null > ${file} grep -q -E ${branch_search} ${file} echo "Found userspace branches" =20 --=20 2.34.1 From nobody Thu Jun 11 02:45:42 2026 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C380334DCC7 for ; Tue, 9 Jun 2026 14:40:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016053; cv=none; b=tQENiFJbNda2QfQwSgrRxSphwchA4uGGzqSsCHsrBXndPBcY2gRAOxL90QRgqHjq3z0Uro4Jmcq3+DaTFtQlGyQiwimpMxFNVdJs6kcmqEfb4AkC0766e1U2wFarT9BU2RZQArtS7NOR3V9TE2KWP43v3uKPP7VjN0ztLGH3t+Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781016053; c=relaxed/simple; bh=6om1sNi+g28w6gz9Rvlzv8I2HBpgV5uEGqJP16w3z5E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=H3/zuYkluxHKCdBdzf5Q6+Fd/REVO0LTpN6A8QMtggWr+2rBhnD3Sw6Uodpnawu3a482A4+PCxBlI3KLi0hf+k7kFNiZnInYDoh0pj1aj/2TLQW+OsnZ8OkKFxztk7PXrhs5z3BsgnqngVtmT95VdLxhXRMplPPtHF1OMgdl9oU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=q+i3rnkq; arc=none smtp.client-ip=209.85.128.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="q+i3rnkq" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-490be03d47bso48595365e9.0 for ; Tue, 09 Jun 2026 07:40:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1781016050; x=1781620850; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=gf9ynHBKvgH06k0u+j7iXyYQLRwSGMTUy1wnSW+2ToM=; b=q+i3rnkqFX/4WNNtPGpAIRkLpGxkb/2/A52lm8rPaqFVKMMa/9z8clybplomH4As3R 5rbMMnRCtr9ta/CnbFxBnhRMu2sh8eINFEmONmLmTtPciaDGnzQ65NcDldQA8LGcySLY 25G4zv0ONEeTEqPKNN3m3zl7R4Igo8n1G2hlRYauQYBN7OB3aXZL8Bg9EB/kskoIiM1M slMBfmkA7SkDVHGy7EzXqr0hS+Cr/uGgfkzIlIM/vU05RFBd2jf3Q1YGNBnLawsL1bVl jIqDEJDfaJwhC5j6XhrhZzuwGVSq/6mZLrqVea/mC44f+nCmvmeFUeW6ju8lIX1Q8IZM L5SQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781016050; x=1781620850; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=gf9ynHBKvgH06k0u+j7iXyYQLRwSGMTUy1wnSW+2ToM=; b=V6ydSsz/AZNDD/TLe1o9E3PACTTP3ef3zQyEY+rzd8TGF0DBtDG4qtwvFP0nIE3NuW kapBDQkztV75RRlw73N4wOe05hG8A4xXxGUwqL0lTk7ASIe/TYlvXVnEX2vG2IaBCRRL fwcg+jt+Taq7WzDUnXJFx1idNJlaVYap5eGuyT0kCE0oKvOcxC6uch2/AGykmZrqWEn0 jwHffgMQHuqy0G+21b2tvAOo0m3cgXvPGf27EAsBzQpeuKJtEv+7DPBddsW3vBQ8CGye IKrI8ZtK0+OSsIczT/DOdq5AeZph3BcyQyjjYkV3Pv7qjjGDoGV9iDzj5dQDi955lY3F dNpQ== X-Forwarded-Encrypted: i=1; AFNElJ/W5NMzPwfQaL3SROQ1xBoXKRkELZGB3/ryHwpOF0DkBC8X7wLsIRgAR59ERYgbrRT2Xz07QGOp7GAjcQ0=@vger.kernel.org X-Gm-Message-State: AOJu0Yzt0Xw4Fui4afgZ8oUV28RkXi0S1n68DF2ECi/lt3ucnR6WQE5W xnceUgCOaPdLby5DOgSd/dWiUOXzZtlHBWizWJNRhenfZMeLmBeiKE2wQdu+dmC71Tg= X-Gm-Gg: Acq92OHQQU5QM/fTsak11GjkNJgYbX02cJahD37b2Ah+0xfkbD126cFOvnllGheurKW /kqcddZ6S4NX7vOWlCw/fsiBeLgY5vVb5ITHGvZhMPEuwLGQbBhqRaIv6E2BnV3za1DfpgX8i59 buyr60BdgcKV0zg9f1zhjqJOq/nfOSGsd53cz73Qb79opXIMGjcFj8jU1dJ4Y/ChePEKTHFbHEk 74ucvSWrwBUPvvmYXHt13RDcYFUUOOptbE0Ehfxle9yTQIuoOWFKvaPDGAj8+5kheAmYFDyXnlg FOr0zfatm5yYGCp4lTrbuG0Wel24tcJ/9Ea67WU2dV0p65wIFgk4Wxm2lGS0ELWXbeSl9PedSdr gIaF/V7PiVf1d8AGZbIksMbYwHv5ANrzByDM7WzMkp7VUTiJkcP0oiwsxHJn4c88lvlSFqOoh/A LYu3OVLcLbplV09Tf9RrHAElFGp6M3AkKTKb/9nj/IsRWxwW+Zj56nOQ== X-Received: by 2002:a05:600c:354a:b0:490:44eb:c1e5 with SMTP id 5b1f17b1804b1-490c2607c39mr343398935e9.31.1781016050068; Tue, 09 Jun 2026 07:40:50 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3c1149sm428411935e9.4.2026.06.09.07.40.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 07:40:49 -0700 (PDT) From: James Clark Date: Tue, 09 Jun 2026 15:40:24 +0100 Subject: [PATCH v5 19/19] perf test cs-etm: Move existing tests to coresight folder Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260609-james-cs-context-tracking-fix-v5-19-d53a7d096a19@linaro.org> References: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> In-Reply-To: <20260609-james-cs-context-tracking-fix-v5-0-d53a7d096a19@linaro.org> To: Suzuki K Poulose , Mike Leach , Leo Yan , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Ian Rogers , Amir Ayupov , Jonathan Corbet , Shuah Khan , Paschalis Mpeis Cc: coresight@lists.linaro.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo , linux-doc@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 There is a subfolder for Coresight tests so might as well keep them all in here. Reviewed-by: Leo Yan Signed-off-by: James Clark --- MAINTAINERS | 1 - tools/perf/tests/shell/{ =3D> coresight}/test_arm_coresight.sh | 0 tools/perf/tests/shell/{ =3D> coresight}/test_arm_coresight_disasm.sh | 2 = +- 3 files changed, 1 insertion(+), 2 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 7efb893edcbb..ff8935b459ea 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2749,7 +2749,6 @@ F: tools/perf/arch/arm/util/auxtrace.c F: tools/perf/arch/arm/util/cs-etm.c F: tools/perf/arch/arm/util/cs-etm.h F: tools/perf/arch/arm/util/pmu.c -F: tools/perf/tests/shell/*coresight* F: tools/perf/tests/shell/coresight/* F: tools/perf/util/cs-etm-decoder/* F: tools/perf/util/cs-etm.* diff --git a/tools/perf/tests/shell/test_arm_coresight.sh b/tools/perf/test= s/shell/coresight/test_arm_coresight.sh similarity index 100% rename from tools/perf/tests/shell/test_arm_coresight.sh rename to tools/perf/tests/shell/coresight/test_arm_coresight.sh diff --git a/tools/perf/tests/shell/test_arm_coresight_disasm.sh b/tools/pe= rf/tests/shell/coresight/test_arm_coresight_disasm.sh similarity index 96% rename from tools/perf/tests/shell/test_arm_coresight_disasm.sh rename to tools/perf/tests/shell/coresight/test_arm_coresight_disasm.sh index f2fb1aa92252..ccb90dda2475 100755 --- a/tools/perf/tests/shell/test_arm_coresight_disasm.sh +++ b/tools/perf/tests/shell/coresight/test_arm_coresight_disasm.sh @@ -24,7 +24,7 @@ perfdata_dir=3D$(mktemp -d /tmp/__perf_test.perf.data.XXX= XX) perfdata=3D${perfdata_dir}/perf.data file=3D$(mktemp /tmp/temporary_file.XXXXX) # Relative path works whether it's installed or running from repo -script_path=3D$(dirname "$0")/../../scripts/python/arm-cs-trace-disasm.py +script_path=3D$(dirname "$0")/../../../scripts/python/arm-cs-trace-disasm.= py =20 cleanup_files() { --=20 2.34.1