From nobody Mon Jun 8 04:25:37 2026 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (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 A6FC83ED103 for ; Tue, 2 Jun 2026 14:27:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410446; cv=none; b=A28INGl9VOHhiao5Y9z+d9dsm8EfC7fvH4rjE5od+O4CigSsx3i+bjMC1fmK7p/3H5nVDuJopUdq1EkVvKAnszwwQfr7ZBCnPGnk3mQtzy2WAhofYGoHYgDadc8WdbgCh7kKiduVBJs5RXk8Vr5GnmFx8gooWNFXChSb5jilv5E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410446; c=relaxed/simple; bh=Vl92W3LOUasAueaQsEQFKwb+NmryD65enG/U9yYHys4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lyPQQPZm/4NYQ/JkS+Pl+PTyQtgjXa4ArnRjhZFC5Rd+CyslKHnX461lxdBzVeW618rwIHZ1gobrOASqzNc71ssS+RYkcXiue5kU9IPvI8lhjvKOH/sBlrIJ/6UN7xfnEsHM30IT/nieWSC4E3QZuqDCaeWSuNmH9rCX6Yq5f/k= 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=GmjMnSvY; arc=none smtp.client-ip=209.85.128.46 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="GmjMnSvY" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-4906238c62eso94112545e9.3 for ; Tue, 02 Jun 2026 07:27:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780410442; x=1781015242; 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=aSekr0kFLTlGKHPmZvH58SQr542f0w2o/7qGpieEimE=; b=GmjMnSvYwHL9Mfhg3Ux0L3PAyZvM0iR3rm6a5EMKLsEMY0/2Oy9ZfkdyHJkkzs4Lgs d9o0K3yubx8XtF08TQ2XAHLiFLHLWFiGDdzCpWqck5pFFcR3LhSv3ioUXNmplLMES0+b 7D1Q4k5Xzudv3081jx7y5qH56z3bdxvL00jbndWQOz9/3at04JJh9hSVTYtOGMxgLMlx BwRuEPFtATCVIU55oizWaEtQwu9i8Z2wHHv/uFpYqRiXgQkE7iwtMIiz3j71V2F+0NtO ffjt+tIfTNDgtdTb/Uh5bkAS75FlkMTkK8cMper19qw8ivYyJGiXDzgkWYfYAkiIiYnb sgCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780410442; x=1781015242; 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=aSekr0kFLTlGKHPmZvH58SQr542f0w2o/7qGpieEimE=; b=nF8wlPCekEAJ5Opi4oAg1ZhmTbLZJTZ3706VDQuAivgQrfOfIoPaOA5gi4HgnXh2rR V/XCay+8Sfw3gHV8kpm4qUVO4mn2k5M4/dbWbaAlATFXONv/ezp4oaifwoTV4jeSsR9r Vbv3SSkpBFI6P0NuNwWTU4Ay6YHPmZfXaUi1bv0lrsORwjNQYSocZ1jNRuTygxoH39Ad sYV7BtbERFnz2TktTPqpJwHA1qWd+mEoSPpd+D+mqt21/TwoWVHYjdfX1t5UlMQdWKv0 9nG8LrDgFlh4qMe2jLW+2ofk2sg5JQcIz8UXZ7MrKmwQ29kaWl1bXdTdHzSfAVcSL6/V h99g== X-Forwarded-Encrypted: i=1; AFNElJ+of9mL/VPySXKSWypKZYWqVqzS/sYl0wnaqNa+5RC5sg/iEvMOZYGJXx1Ya+TcdWw/DUsdkpXeMr5jJbc=@vger.kernel.org X-Gm-Message-State: AOJu0Yz9lzwqudGXslshgbs5J0ACUZaCEkCbACoY7KpRAabHfECrWgYK JioYy3qXP2zvHGzCM3/FC5OLLVI2wDp4mrlStBFmw8Ils0AGphbmCbCzgu6OtzcgIr0= X-Gm-Gg: Acq92OFQxTfm++5Gg7px7Lstz+zY3JgfomP0Vkr8msUl9OS//8PRGu2uUY9pgB1sipa Trd3IEGkB5kCM7/S4YGeVVnV61z5YEx7ihHqPFP2kojLb/LnacC331aqjqSFQqtBZ2TvB6P0SC/ ozw3fx4MZ9x7tSOgLvy8qaIAS4x350nXVf3J7FL7/2onkKIeTNErDr9kpYh20QfMYg/DfULMyaj Ue4DARiCbn2TJBrDF5HFZEeWAgB2knJ0KVL6JGgiVVluC5ezlZQQGAX7OrhgCuKRMuNyhtByhBO 14ZNlvhjzeGxkwmvZwfbyKryrkfUVLyJAi/V/VPAgbcMtv6NMTqDPgA6qG97XiFoVLlFaoje8cd 2ygfCPBADFsPA1b6B9iw0aBgqACLbE+k9s40L+6BYn4NC3urfFVt1uhjhrCIhNpbrSfJ4aK60af oDAox3IadOXRAL6/VGNLP0zMm34lG7UfZcywYm5y90SSs= X-Received: by 2002:a05:600c:a111:b0:490:4b89:535f with SMTP id 5b1f17b1804b1-490a2915ce2mr217910975e9.8.1780410442004; Tue, 02 Jun 2026 07:27:22 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b0e18e1csm66771965e9.4.2026.06.02.07.27.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 07:27:21 -0700 (PDT) From: James Clark Date: Tue, 02 Jun 2026 15:26:43 +0100 Subject: [PATCH v2 01/18] 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: <20260602-james-cs-context-tracking-fix-v2-1-85b5ce6f55c6@linaro.org> References: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@linaro.org> In-Reply-To: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@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 | 233 +++++++++++++++-----= ---- tools/perf/util/cs-etm.h | 8 +- 3 files changed, 165 insertions(+), 97 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..524e2a6feba8 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,12 @@ 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) @@ -751,20 +760,16 @@ 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. + * Track Exception levels for both the previous and current + * packets. This is because the previous packet's address is + * used for the 'from' IP for branch samples, so the previous EL + * must also be used so that sample shows it originates from the + * correct EL. Branches can't branch to a different thread, so + * no need to track the previous thread. */ 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 +942,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 +1088,44 @@ 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've already tracked EL along side the PID in + * cs_etm__etmq_set_[decode/frontend]_tid_el() so double check that it + * matches what OpenCSD thinks as well. 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 +1140,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 +1160,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 +1359,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 +1398,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 +1517,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 +1571,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 +1589,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) @@ -1588,15 +1632,15 @@ 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, tidq->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; @@ -1604,7 +1648,7 @@ static int cs_etm__synth_instruction_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->packet, &sample); + cs_etm__copy_insn(etmq, tidq, tidq->packet, &sample); =20 if (etm->synth_opts.last_branch) sample.branch_stack =3D tidq->last_branch; @@ -1649,15 +1693,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 +1710,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 +1831,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,8 +1916,8 @@ 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, etm->instructions_sample_period); @@ -2051,9 +2093,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 +2117,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 +2133,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 +2150,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 +2167,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 +2181,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 +2219,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 +2244,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 +2268,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 +2348,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 +2433,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 +2509,18 @@ 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 bran= ch + * source address info, if tracing the kernel the context will be updat= ed + * between two branches. + */ + 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 +2549,7 @@ static int cs_etm__process_traceid_queue(struct cs_et= m_queue *etmq, } } =20 +out: return ret; } =20 @@ -2620,7 +2673,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 +3381,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 Mon Jun 8 04:25:37 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 6F6BA4014A0 for ; Tue, 2 Jun 2026 14:27:24 +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=1780410446; cv=none; b=moGu2eHKQi/cmQf1A20EW7QGZVrT1F36OiDyayRO15YtyxLkZMrwO/Be5XLA248LP/Q7IbGKjge/tH0Vf+zrk9FUUpXSdabqERoTrDnS0uP1ihTlvID+bqnoDS/Efy2gDhXkr98mCvLwG9349YnpN8wgBueSt6chEH+3eVzCGeQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410446; c=relaxed/simple; bh=iUT08tpOWo4H1iSAdC58DZud+aEDvbyMcevKs0Feyvs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ql6dPgC+chpNGTRJevaO3PLKuh4CYWCjMTzIpYsgqWNPB+CYIRTBGYxkAuBpkOif+j6FEU5Kv/vHPFjLvXuv85at9kib5v1Z+2tmzh2s2HETr0eSpVqQQJqFP6+pF1FzE+znrSvgjwoz92a8MIRSaQBh1N1ETk36a7E9+78donM= 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=syovjOSA; 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="syovjOSA" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-4908b92904fso62214195e9.0 for ; Tue, 02 Jun 2026 07:27:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780410443; x=1781015243; 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=llwCw9245m15z/1KE/XxuBnoFO7VC0s0+/Pa/E5PIbw=; b=syovjOSAFuIey8dfdrXYavZMGfgs9M33I4JcutVRnTdSuAMsJL6v71BnF+pgQhhDsH q318yxP0HOwpWXu/o5ghPitk9QIKUpJp7w/D/DUdUTaKGR7UW/os3/fEj4mMqJUaa7xI BG95OZ03vbe+i/6j0Wm55zPEOA70M8EwQRSgxO2f/MIpEHBJYJPfyiydbMSq2tAEbtnR 5DYWTpx4eCzqbjl++QoSxWwPJwuWtcKonfjLr8wUMVHylEFZ6mqKkSToaXaS330Sv/zH XofzFpUhEzIrnzQOdu3BOQSNHvX9s3W49+54HPnTfMlry0AZdbB6JdwKNNNUVBY4WIAJ p2TA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780410443; x=1781015243; 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=llwCw9245m15z/1KE/XxuBnoFO7VC0s0+/Pa/E5PIbw=; b=aIYhhUOTM0wOl/k2zEibthiNldF31RnVzBR9PhSkmXAfprRmoW8KFDJPPefJ9rNW6U ybtLsLk+/61xbFUa+7fMWTZnlcOFaUPGmswXGOC4PTK+4xRcMOVbpCA/2oy2MPmNeONN WgfCXOSrOyLyAhLB67CiJ4vn0mfMpq0gRJnSM0jCahKCFlOLE/TP7GqXZmgEzZ5o+TxJ KcReEJlDTUWExjnbEOYPMneCP3drBpKnbSs23uIrJhNYxweq9dZLNggf86gdIf25rBpG bTcwqOGOZ4LY3wTiIsniG07FCRIVW0BHddn6fIxZr/jxhA9RazUC4RQotNOXPji23FkX 5b+Q== X-Forwarded-Encrypted: i=1; AFNElJ+8HOuZPEuKyRh5mP4Bu1ubGlBdtbo/+ZTIKxlhcZINCy6GLQ0smLg/6Wbf8EZxbfqIIrnTSLecTK1OdlE=@vger.kernel.org X-Gm-Message-State: AOJu0Yx+6mN18k26+NGRc4/FN17Fe0Eb+8IxwkUB2Q4n5dq/1xsa13dq LEDf3vAjfUZyxpIDDfyHeFqWOXLIOixOoWWhP5GwQF67htydqpt6szlT7cSnZpvmwPM= X-Gm-Gg: Acq92OGD2sW0oN/c/VBSUS75TEqkpW5tJ09Vy+0UAHvIhr4eWb3v/yb4JXiIP1hdPnl F791kXDUiEMfONwiknoRPdNzDKp+B1N6hs8M3yRt3LN6yDVXvpfXtfIgmRlC0KOlvJBtqgUwXI4 LOg5FSSbeYCi6NZAreFtK6TQgaX//t9fHWwL71A5rzh2d/l6rm1SWFnQsAaPJxwPiELn2zvOnjO SlSvAi+BsmjN4Cz5PjOnlqCJ4OAiE0iU5M/hN7BJXs58nDN9gRuod3AEiJC0tZn352u5CUe9I0a lrfcEHAO1wWVYW9glsAbo+FyZSl3pRpLHdLyqq9+luzHtZX8t/OMpMSVYU1wNAbDMBwY0S6+0Mu VJn8CiTkrbBHrPQH6jzdinAnDZFoFrXN8seC5ra1PN9hEoG+QQgaSzaBjRouwLpLN0c1Cr7v4dk sJNjoQ2cjbPF4lBPEC026Ad67J+/PT89ESuVXQrrjyQe4= X-Received: by 2002:a05:600c:c098:b0:489:1c32:210d with SMTP id 5b1f17b1804b1-490a2923cbbmr237213885e9.15.1780410442987; Tue, 02 Jun 2026 07:27:22 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b0e18e1csm66771965e9.4.2026.06.02.07.27.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 07:27:22 -0700 (PDT) From: James Clark Date: Tue, 02 Jun 2026 15:26:44 +0100 Subject: [PATCH v2 02/18] 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: <20260602-james-cs-context-tracking-fix-v2-2-85b5ce6f55c6@linaro.org> References: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@linaro.org> In-Reply-To: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@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 | 6 ++ tools/perf/tests/builtin-test.c | 184 +++++++++++++++++++++++++++++= +++- 2 files changed, 188 insertions(+), 2 deletions(-) diff --git a/tools/perf/Documentation/perf-test.txt b/tools/perf/Documentat= ion/perf-test.txt index 32da0d1fa86a..1faf30d4a7be 100644 --- a/tools/perf/Documentation/perf-test.txt +++ b/tools/perf/Documentation/perf-test.txt @@ -69,3 +69,9 @@ OPTIONS =20 --list-workloads:: List the available workloads to use with -w/--workload. + +--workload-ctl=3Dfifo:ctl-fifo[,ack-fifo]:: + Write 'enable' to ctl-fifo before running the workload and 'disable' + before returning. If ack-fifo is provided, the workload runner waits for + an 'ack' response after each command. This scopes the recording to only + the workload if used with 'perf record -D 1 --control ...'. diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-tes= t.c index f2c135891477..d5df3efdce3b 100644 --- a/tools/perf/tests/builtin-test.c +++ b/tools/perf/tests/builtin-test.c @@ -50,6 +50,7 @@ static bool sequential; static unsigned int runs_per_test =3D 1; 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 @@ -161,6 +162,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 @@ -711,13 +717,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 '%s': %m\n", cmd); + return -1; + } + + if (!ret) { + pr_err("Failed to write perf control command '%s': short write\n", cmd); + 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); @@ -799,6 +977,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, "workload-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 Mon Jun 8 04:25:37 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 6CDA4401A06 for ; Tue, 2 Jun 2026 14:27:25 +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=1780410447; cv=none; b=IxYG11T54ITnl4TwWmbA6+LQKwTTA02wXZ76wZ12p8AuNvkbQlhA9G9LTdF8iLH3pRlJ255h4FLAQDgHfARQsHstwCY+souWJE/k/8xfG1maQBPlO2QZzTQfJ+6x1coujcaTAEcX24ZQkf7q4AkeM7B70RGBcgudV+xHp0/9/Es= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410447; c=relaxed/simple; bh=nhbvUtvVfJ4XCxkw1g44IbixuAqwQ8Swfcda4PtYylk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SW4/oS7+X2XdjEeVmNHl8tvC4JXEXUzv9OFaIOFQ/l7Sa5/kjyhK1J7FtL+4eZj+60LnFMg87sUIqgbJf0yMTlMZ8n3jKy4z7abn42GhRIdNjnPMTx7lTM1/2N0WHm7BwdXMs5Vgo9tX/UYjQ0JzAwsJrMBg9xKT4/If3i3nPck= 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=dJ2UfuQI; 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="dJ2UfuQI" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-490ace40f4bso23603625e9.3 for ; Tue, 02 Jun 2026 07:27:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780410444; x=1781015244; 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=2AzHCCZdh7j2BBDmmO5WAtLEfltvQL21ELilOv+mRsY=; b=dJ2UfuQI2FggK7kFLlp1OrCDE2KPorv1zZiHEuIZHc0bZHAls0sZPrb8iRVkEkM0BR I28TlQ1tUc0FRZSpp4VZtjokmPL8gab5ynRs+9q+b2zGBevkgHXxo3FQ0RWsbj7BMOK5 5xI38d+RS4TcL7jNkJBZf8jswSg4G2bajA+TmQiQ2EqwyeFlIdrVEATimXO/v+jmvfEJ 1BCazO1DRd8B+NTvaKJ6fRWiSVnhcm1ZnFidZl/aBUxtA4/xEcZGyKfN/bW0nRigfCgh AaUeJoIOW2/liGJaJZc9u+s9mnyrFMla3WV0smh93ipOm5G/2Itw/rxnikQgmQ6gqa00 GvCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780410444; x=1781015244; 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=2AzHCCZdh7j2BBDmmO5WAtLEfltvQL21ELilOv+mRsY=; b=aCCUK2Koi4zqbWB7+WBKnsI0CrNOwWhQhx4z1O6Q3+SErByrmbFp3o/eaZjCa4gcv5 YOJHy3JfR/NuVTp+G4R+OBg6KRuIgfbUHZ1dZ7c/xciEg+ng5P9C8JMQx1EzSkKdhzbi DS0eZ3vZ6oPFQqNDyswF1n/uPjwwZ0CtsdYsumFNeqp5fI7IpqGN18NXRkkZrQL2xigP SBNmcLi3A7xuwDKOZqsO5xITQ/jmvDzZ6TmzV2hqNcDUIju3jxLn5PUSb5vJixnLqg84 He/Fc/5VMuDJonct1bTc4wJ61k/UTDOzX5+3cEt3TazLRS7Dq/pYtY/j1Vt4uN4O2oX1 Desg== X-Forwarded-Encrypted: i=1; AFNElJ+9YE6NeDXrlDjfEC/e079nHGzMWAgvQ4hLFy2GrQqY8L2Hc1Zzlq2sVJJeq1f5ot+no8Ctiq9YLrLOpsE=@vger.kernel.org X-Gm-Message-State: AOJu0YyG99Ko9wpU1KGdqAOhWARzMj/z5jxG1cvdYYJ4RPteCJrmR2XD gwFnK9aFpoJUCwW2TknDRS9ROfhlNt2qEBARMiwdZhjtOJiM6mWuMe4YDe+FaG7JW5g= X-Gm-Gg: Acq92OHoTdqvyRdeBdbtJ8kmUvWRsD/06/SX2AVyW5wsSibK1sOSD+cj6wvLJgmEpG2 fG2SaeRfSiBA7BqK+bji9xIeoM5ZeLYBI4XuAY0c4UQEW/H6ukLPel2ib04jg2DMKjCeArumdig 4nlPjDcvH/aAnhSx9jbcSB0cbgpkbPLV9QSuGfW+TXmeH1r1D/jMe36EDAHxHPnYqFEflWeMBUI y4o280uxIu22k5HBs8QWY7AMcl9l0kqDVU+SGpsiUeEZsjUHDBOYaSZ6GIj+I0S2xR7I8nzc5Eh li5CElczlWVaQ8gYATRLwkUkUHsmyjCvVLTXwbmBYno/srFz4r6ZmDc9spTm6fFkfsv4PxOMDBJ sAMs4K/YJlHd5eea9OXrFSVvU36W7lJnrvi7TbF6GmL45XHcp9a1SjlnzoO1F12tyOodB4XHu2A zBrxu/SaqHK2bJhQVrC4EdURCqzyQnls8cIWarrYGTd4s= X-Received: by 2002:a05:600c:8b57:b0:490:3c15:7146 with SMTP id 5b1f17b1804b1-490a5013670mr251592175e9.19.1780410443909; Tue, 02 Jun 2026 07:27:23 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b0e18e1csm66771965e9.4.2026.06.02.07.27.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 07:27:23 -0700 (PDT) From: James Clark Date: Tue, 02 Jun 2026 15:26:45 +0100 Subject: [PATCH v2 03/18] 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: <20260602-james-cs-context-tracking-fix-v2-3-85b5ce6f55c6@linaro.org> References: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@linaro.org> In-Reply-To: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@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 | 95 ++++++++++++++++++++= ++++ 5 files changed, 102 insertions(+), 3 deletions(-) diff --git a/tools/perf/Documentation/perf-test.txt b/tools/perf/Documentat= ion/perf-test.txt index 1faf30d4a7be..9c0d7ac2bc64 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 d5df3efdce3b..1057ee836c30 100644 --- a/tools/perf/tests/builtin-test.c +++ b/tools/perf/tests/builtin-test.c @@ -156,6 +156,7 @@ static struct test_workload *workloads[] =3D { &workload__landlock, &workload__traploop, &workload__inlineloop, + &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 ee00518bf36f..79f50bacfc94 100644 --- a/tools/perf/tests/tests.h +++ b/tools/perf/tests/tests.h @@ -242,6 +242,7 @@ DECLARE_WORKLOAD(datasym); DECLARE_WORKLOAD(landlock); DECLARE_WORKLOAD(traploop); DECLARE_WORKLOAD(inlineloop); +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 2ef97f7affce..3bda6da04a35 100644 --- a/tools/perf/tests/workloads/Build +++ b/tools/perf/tests/workloads/Build @@ -9,6 +9,7 @@ perf-test-y +=3D datasym.o perf-test-y +=3D landlock.o perf-test-y +=3D traploop.o perf-test-y +=3D inlineloop.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..73bfcaeff5b0 --- /dev/null +++ b/tools/perf/tests/workloads/context_switch_loop.c @@ -0,0 +1,95 @@ +// 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) \ + exit(1); \ + } while (0) + +#define read_block(fd) \ + do { \ + if (read(fd, &buf, 1) <=3D 0) \ + exit(1); \ + } while (0) + +/* Not static to avoid LTO clobbering the function name */ +void context_switch_loop_proc1(int in_fd, int out_fd); +noinline void 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); + } +} + +void context_switch_loop_proc2(int in_fd, int out_fd); +noinline void 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); + } +} + +/* + * 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; + + 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); + context_switch_loop_proc1(b_to_a[0], a_to_b[1]); + exit(0); + } + + prctl(PR_SET_NAME, "proc2", 0, 0, 0); + context_switch_loop_proc2(a_to_b[0], b_to_a[1]); + + 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 Mon Jun 8 04:25:37 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 66E64401A25 for ; Tue, 2 Jun 2026 14:27:26 +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=1780410448; cv=none; b=aVcOtKxfGpCn7l0KyY3mBHlkZRaxziRBcOqxdOiHTYUBJOJetZ1LjIgSRp5mNi5PGy7GEphDUHB6cSzjNruEULUBxaPiTn8/CJmDlCJHFTimJrWNGclw0fWV9ZXNNgbf2sjMd+1lR3dPMU+kQu49hwBoSrT4opZtO1gtnv7GtlU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410448; c=relaxed/simple; bh=iQVBxA25lW6A4uA0ACC2OMef9MHB9JOIgp6xmgt6rqE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EPH/qrPTnIGCTZc1XA+Nuy4kaP5Kpizyn5HY8H5XTiuFgZJeVx6TgC+AUhQv1EiqvK8XGS295ke3DrcvFGcB52wcZhTC1Vps3h9/alLpdhs3veQ0+fhpT1fAfENB6fi38KbQdBOg29+mYoZKPoxby7GV/HBJcK8lvMofG8eoOZ8= 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=RsODVOfK; 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="RsODVOfK" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-490b4e1ade7so475305e9.0 for ; Tue, 02 Jun 2026 07:27:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780410445; x=1781015245; 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=EO8/K9YxgiEJpvhD7v23MJuqc72Imxv7cQ7m/8nhtl0=; b=RsODVOfK7+urt0xrwfplJ6JRMaAK5fT2cft5LMm5P5iBYv3lBdzHp+hbwoet+/sBFk IgBMiKpc6/Eh6BlL/HPjoYIBMsd9WbomeqyNiYPFGaiEFEQHKwEtg7R0QENCjHJV4t4c 0zqa45vYMZBPz5rTZAxcQBGIzaJOM/9AEuyVfD1q/Zk2qt1ZzgH3EwR8ONe+yfDLk/87 HlqD//9XBhVqXV9df4UBYLKil4ujWanLPxPkgRfepylLCiZr3qBeyZIO4viuH7L3pAlg mj6EM0anjbmENuZ5QtH9BHLCxbgwK/yCNMOjWTGpU5VQ6g14f50akZd9izEiGpkGRaZH GGBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780410445; x=1781015245; 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=EO8/K9YxgiEJpvhD7v23MJuqc72Imxv7cQ7m/8nhtl0=; b=YJc4EMKqGzxejfVClUIWlPFVVDrRW/6fDRp7SF1EZPVJkQKwBaXpaz6W1oCdfNc1kB LBMxy9bVyoB4zIw93/ocX6gviINGMbmFKmnZJ0FxvPG9Ktx79hZQzQFBcKXuhKpeqKoi /9Oc3pEJWjCvzaDKSIC+o5SeZpw7h2mIgYpeSGXGjnQR8r0qjBirJZfCuRQTWfVRAaCo 200qyVXmk2gRv7jNCTrFhKHUiyNuJF09z2zM66cP3P5kWaWIJiG9i/9bXOhDCvzyvvp2 zhF0v/+lfMisTcMDHaCBI/aND8HOjKwfVFwaOCRkflF5f3GWFeQ2Xkbl67FteZkUzNWz SOUw== X-Forwarded-Encrypted: i=1; AFNElJ//cqeHKAaQ5mL9NvIbuDsR3psipoHGRPsB0BHZqLsoYr3uVdswuy+OvIZx9G84L16Lx80Tfsi7KaLU090=@vger.kernel.org X-Gm-Message-State: AOJu0YzUThWWnV0TLUw81U8XBltSgUiSF9AcVyUOTYjOwNjZBcjTPytv kLBR20E3Pmi+cMyakAtu9Fzs0H9zV5is5dzdRYVcqC3BeZrg+H9RYQgWVMvRzWgOvs4= X-Gm-Gg: Acq92OH3Zvq8M4+zfq6o5Vft4pMDZQ58JuXMff1LfI/YIQqeeHxmFLaQ4/e4k17eIrw 6j+61R/R1E970QvCGZNelV+8FJvJ0hN9wxfagmQFd4zWYRt5Iuct59eudPh58UAms8q60p0dLX6 rWoXTkSaGohAIUTOBp0jCPdfhtkQa5Y6jnFhSTMQTV/uzhaoJmDqngrFrNGg76ptnpz7uawrOyn Brai3TPmeWjj1Ta7UQ0wdXQr23Ptpi1LOOxGxygJ9m/zHXzoUnOhLqyHAFj5B4eq1HyU6ctcTtL ralfMwOypchSg8jMXkuiS9yFdIjkZdxEOubYMmZ0Drolve/csVrTDBy0cJPpdMHd/HrNOuw0t3m oBJpwI25zXxlEvu/ze5ul2Lt1k2M/864O/2TYeweJhzud1qg7AuFSuS6w6/5ggn0SNcDo0qpPUx cqDYsFA4LhI9kDvSSiku/AqASh02W5VataBTe8Jl/o1TM= X-Received: by 2002:a05:600c:4755:b0:490:3cb4:f1b3 with SMTP id 5b1f17b1804b1-490a293322dmr279955285e9.16.1780410444873; Tue, 02 Jun 2026 07:27:24 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b0e18e1csm66771965e9.4.2026.06.02.07.27.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 07:27:24 -0700 (PDT) From: James Clark Date: Tue, 02 Jun 2026 15:26:46 +0100 Subject: [PATCH v2 04/18] 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: <20260602-james-cs-context-tracking-fix-v2-4-85b5ce6f55c6@linaro.org> References: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@linaro.org> In-Reply-To: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@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. Signed-off-by: James Clark Reviewed-by: Leo Yan --- .../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..0992c35a329d --- /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 --workload-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 Mon Jun 8 04:25:37 2026 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (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 758744028C3 for ; Tue, 2 Jun 2026 14:27:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410449; cv=none; b=PIJlxb5wQvaB7ig7OjhaWhq2u+H+tZq4Fr5oeOBO4TsODHgk3Ga+IOnHcmbc3oiyAVNKdyTkFIn1c1a3LWogUz6FWNAGto3lzsP7B0OfkoJPQp9jt2sEuJ7zImRxrMePudPGeihkLPHdhyZ95PsfoMnF/YET96xlZSXxpK58Wwo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410449; c=relaxed/simple; bh=Y3ovDeG6DYqHIOpqufJpffsbkAWawjQU3JUtWwMMc/Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=iaTPS89zEaR4Pv/gA4v6UpbE2gJAYrtutO0PQNq8Stmd2HSKR+H0mKLJ4lPOhM+vwwVxuHPx6mlZtOxCVlJzaNgHQnRvR+ZVaOUamjsrHb8FvaSxpbZ3xLl/BF9nefgtZSeSeenfClqXiaNGyfD/HbRWDO1R0l4rQO5uVsiHThA= 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=ttVOeSX7; arc=none smtp.client-ip=209.85.128.53 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="ttVOeSX7" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-490ace40f4bso23604245e9.3 for ; Tue, 02 Jun 2026 07:27:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780410446; x=1781015246; 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=iP8ZCKyvgePemhrrS7zpcp0nGfW5k/Rg5tcocHv0s7U=; b=ttVOeSX7NyNuPCgOtN4TAiNtd+aVRb5XFUfzYGqEyjlQFcAg7GiOdla5q+EYr7ki+p cboeWxYbuLRueMzuPTElPj2S75sWO/NcpUbqi7pOab8LaBSIMlrGfWKbiDvEzVmDbqE2 KEdGaWuFyHHDcN/bjn/8grmPpiWZ5CtZ3Eq7fctj6jdh6c8Du98h9FFIiy4lM58Hng/2 +Oa+qIhQvXEYflmfrug/6oRUP+woe9lx6aZWvl1QVWTzqucVtgC4jG0YRobp9AxKU+lw VkZSIGdP4vgmZDlKQzsj1MqnMozov3EIMcuK08qaAazu5V/T2CO2NGbGGRUsUuQVZha0 DoNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780410446; x=1781015246; 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=iP8ZCKyvgePemhrrS7zpcp0nGfW5k/Rg5tcocHv0s7U=; b=n2w4S1VG79zNv+rlAaRlIy5RJqXRZrP0GFcFnwJ//yay8s/KAJqNu/3ixxECEqtnIW 3fGkbJkGXzZCvrfNXa9odslVRdmxccIWWMDE3B/XS4LxfSOvdnuCk+y30YfgifGWUgpu ZjmrrPDPBK/+cXn8VuTKvTgZxAcB8A6uefp0NNrXfFsFm/K5Z66b3STktroFrGancpng oXQ//q36YfgJyEZaWP3u6v0n78p/58Fx6AuaXuxtzH8CWVFmcTygdjEEuBnb1ZFEIntK Bl43JDKW5cs7CaWsifjD15qBngoOd1iyMgcFAvqR90dO57LS5FqSpNEhOSW43rWywUN8 LWcg== X-Forwarded-Encrypted: i=1; AFNElJ+vN63NVQN7L4bcC3SPDxOMmIQPMh4zqh/WYMj3k11qvRExPCnAhna4ZSfBLZHUKlKv7FrKQmh13uud5iA=@vger.kernel.org X-Gm-Message-State: AOJu0YywQwm0ftBeLieqFvmkmuWUhYQDLy1iz8ftdUhk4f7vRbXcZxf/ d/1kUHXV8nwtLPaOQEOdjrfTo1lhw4L2ZrjhmkT21pnYpqSS9l9bEB+FKYZGzzp34Z0= X-Gm-Gg: Acq92OEnhODir2t8fBkaOoAVg+Z6hHYeOY2gykE+7s/ekVeIvbXTOsytjK1uu96+sNs QbZrth0+1xBh8FKEvDi9ZGCqWSvtcn9opjab7Sdj9X2FclPuThxpGV1pehX3/dDXtGPAyo2jTMQ fmtvXHS9cDq7mJpQIvyscY+oquek+E4GibBn/F21/ucjjC/ZmtJN7E+9MCePLdGf/SWf7xBusCq hX3MJKEC8VBC+hbD9UN8+5StytTWheNT4J0KRhMON0C+ye2kCQUZg+5xUl2ImV0STqCadgFIxzw /1m4KBELRgshSdM7Jyf736f8Biz4OOFszr7kqXVYudjBV+AWss2RDQhW5k6S8r9WJWl5/YXflZ4 Tu2xsCNwnOr1hPcIzIhHupZ1Qb1tIWa2snY6fAK3jprUCzMvMwBA+z7+fOeGpMlGhO6SF2u4HxP MX2n+/Da1OhvJqZSLYDDeNa/TreDY88faa2R4aroFG5SUaSbicD0p0ow== X-Received: by 2002:a05:600c:8a0d:20b0:48a:906b:14ca with SMTP id 5b1f17b1804b1-490a293dcaamr208050385e9.20.1780410445848; Tue, 02 Jun 2026 07:27:25 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b0e18e1csm66771965e9.4.2026.06.02.07.27.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 07:27:25 -0700 (PDT) From: James Clark Date: Tue, 02 Jun 2026 15:26:47 +0100 Subject: [PATCH v2 05/18] 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: <20260602-james-cs-context-tracking-fix-v2-5-85b5ce6f55c6@linaro.org> References: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@linaro.org> In-Reply-To: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@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. Signed-off-by: James Clark Reviewed-by: Leo Yan --- 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 9c0d7ac2bc64..7ec70c054cac 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 1057ee836c30..3c6d3de98be9 100644 --- a/tools/perf/tests/builtin-test.c +++ b/tools/perf/tests/builtin-test.c @@ -157,6 +157,7 @@ static struct test_workload *workloads[] =3D { &workload__traploop, &workload__inlineloop, &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 79f50bacfc94..f8bba2d68769 100644 --- a/tools/perf/tests/tests.h +++ b/tools/perf/tests/tests.h @@ -243,6 +243,7 @@ DECLARE_WORKLOAD(landlock); DECLARE_WORKLOAD(traploop); DECLARE_WORKLOAD(inlineloop); 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 3bda6da04a35..599a37c87878 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 context_switch_loop.o +perf-test-y +=3D deterministic.o =20 ifeq ($(CONFIG_RUST_SUPPORT),y) perf-test-y +=3D code_with_type.o @@ -22,3 +23,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 diff --git a/tools/perf/tests/workloads/deterministic.c b/tools/perf/tests/= workloads/deterministic.c new file mode 100644 index 000000000000..3caea8564043 --- /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 noinline void function1(void) +{ + dt_work *=3D 7; + dt_work *=3D 7; + dt_work *=3D 7; +} + +static noinline 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 Mon Jun 8 04:25:37 2026 Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.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 64681402B8C for ; Tue, 2 Jun 2026 14:27:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410450; cv=none; b=lqYkrVHYr7eTKN2qKrfHy4ph+ybd10irpWGjeelt4/axJoqkTyURJ6p6N+0bpaNvAw9zDnZIaaBr+dPsQvzR8kW4196zEUxIvSqQ0NKzBCLBsIa2zyXzEy6zWQNhNVWycOynLnkkVaRpRIChPivJQSHJ9zbnn7W1pybC4SAgfwM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410450; c=relaxed/simple; bh=ESmfjIh7MN23IeBJPxwPdBU7xBIa18aM//caXhGjZcM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ER4SQ32Yetw1h/HUQoMI5kZo+5tmpTNFXnV2kq0UhZJV64YmP1c06vuqWIccoi7jRasPgx9bzJzIUR2B6r2l6w76bU4BrVKRlG8val9J/UkV3WvrOTwbv6/xEdJ3BHwZ+Zposn6Ncq/v5r4XZVcwZU2TWpEMZ90qKB8Ppdb7egI= 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=nKb6xbwj; arc=none smtp.client-ip=209.85.221.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="nKb6xbwj" Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-45f3cf907ceso1533617f8f.2 for ; Tue, 02 Jun 2026 07:27:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780410447; x=1781015247; 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=pXjR0tiVSlnNG0AciIMM1oZd4f63sbXFpo0GMT42zX4=; b=nKb6xbwj3tP8iZMpReZNNT6dFQ54cs+fIsXJZzkzEpY/L9cznx0sOzeoS/3ITOlc1B 73QsScaMkcLsA0Dro4o9UWHyKZPKZb3ba9yTo8rPrzY1VAbqwayCwOvm0sEJSl3iO5HN OAlbVFU8fqgufRBsw7s73OIDFakRQJAJEdkEiVOsgFPpnnbG3S6lyNDGsf27E/dQa85n PacYZcthUKtgIvSPJLX0GDBeGSxH00Yafn0kvj9BHRG0otz+jUn93XbW1Gg2p2OpqJA8 0P0+Xf1fMuVxG1zJsKTRO8EEqN0OUNsEGaac8zEm0DgQuOHf/nx/Yq0jA5PKMWJpshQ2 10MQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780410447; x=1781015247; 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=pXjR0tiVSlnNG0AciIMM1oZd4f63sbXFpo0GMT42zX4=; b=Vn9hx7RbthHTwPM13HqHZip1RWBfcqG/7Jmr4VSGjCO6vApz93TO1nZPhzZuZVOtKq paPctSRg4SXcjcRFaps6/k05oeQhV/tA4J6+OnGaINMsTRcqQGaA8l4LWBDY8GmrZB0Q WC7Pp3sgrcLEIYfvdtg2XVG6o5gwFJLtCij2QY7kTqA0erwl6ikpKnb7FCpgcikNtDEL b8CHbKEOAzAxg7NzUZmPG2EbgftaTV4MF78L1lHEITDOp9KQn2Cikhy8Xouk4lFu2W8R gT3OLYjy/TRo8UMQZy4MTIMEFkZIgPcq5/TWna7Pv9ztuAA5GGq77W3aPPF3VEWjdZyi SbkA== X-Forwarded-Encrypted: i=1; AFNElJ9mrdt2yBOcVYX9zyAfKTH216iCK5RlogyuODaSDhQNft/1xBcgCysF2lMH3dcaWz4fW7jN6vSE66eLin0=@vger.kernel.org X-Gm-Message-State: AOJu0Yw0CMYR7AZ3D+2wgk2eoty7WpMZMfA5da0c4V05ISwQvOOdbebw m0UeA/4nE4qLKEh/5X5NgdYEixjel7Ltn7ewRCWedkhbviVKNXVOj49ZqVyRHx13qcs= X-Gm-Gg: Acq92OECnJf2q8RA/rfaQ1lxTw0WU2wDvK6gmMoMoivTCD8ZgHqYEQnEY0qqQgkYebP URQBXf4gjcpq2SsHKqrXM2iiOFle33p3deHg+CojaKr93Wo1z4pHC30bUt9E8nz0g8akYIrV2RA VaED20Kxw/7zl8zDKqUrETF3EBOblHVp4fzm3PJSqD48KBRAG734w/oaCAtWnGNgfCrvzZ8n2vI NPyV95XUVdCTALxE9/GrXEY2T6ZnBRU72k4MEbNoX9xxVyloJMlQgS5RmYfjhjYhAEcMVVW4SN7 3HMXYOGBclzedbqpRA6wCsH8iK0yHWnS8/T5UEN5w/sdbX7tLcJ9b+Ix04iJv/+KHMQuSzCCjIe guKdO8gPtBr/RC6Sf4rs8IPnWeM01Wr/E4Bo6OuivGl+V+LCjIULhdDG5gtbGmM4yDrHCQqTPX0 +1eSHyOYe2E84967suC/Bc3vRP7OyI0pHJvx2k3lSEytM= X-Received: by 2002:a05:600c:6098:b0:490:b1b8:95f5 with SMTP id 5b1f17b1804b1-490b1b89725mr62646115e9.15.1780410446812; Tue, 02 Jun 2026 07:27:26 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b0e18e1csm66771965e9.4.2026.06.02.07.27.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 07:27:26 -0700 (PDT) From: James Clark Date: Tue, 02 Jun 2026 15:26:48 +0100 Subject: [PATCH v2 06/18] 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: <20260602-james-cs-context-tracking-fix-v2-6-85b5ce6f55c6@linaro.org> References: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@linaro.org> In-Reply-To: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@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 --- tools/perf/tests/shell/coresight/deterministic.sh | 71 ++++++++++++++++++= ++++ .../tests/shell/coresight/unroll_loop_thread_10.sh | 22 ------- 2 files changed, 71 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..52e033fd6b82 --- /dev/null +++ b/tools/perf/tests/shell/coresight/deterministic.sh @@ -0,0 +1,71 @@ +#!/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 --workload-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 open brace lines as they may not be hit depending on the compiler +sed -i \ + -e '/deterministic.c:8$/d' \ + -e '/deterministic.c:15$/d' \ + -e '/deterministic.c:23$/d' \ + "$tmpdir/script" + +cat > "$tmpdir/expected" << EOF + deterministic.c:24 + deterministic.c:25 + deterministic.c:26 + deterministic.c:28 + deterministic.c:9 + deterministic.c:10 + deterministic.c:11 + deterministic.c:12 + deterministic.c:30 + deterministic.c:31 + deterministic.c:32 + deterministic.c:34 + deterministic.c:16 + deterministic.c:17 + deterministic.c:18 + deterministic.c:19 + deterministic.c:36 + deterministic.c:37 +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 Mon Jun 8 04:25:37 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 A0F9A403EB8 for ; Tue, 2 Jun 2026 14:27:29 +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=1780410451; cv=none; b=Ka9WKaJGJ03DMya05Rhtue4LFL5cz0L1RejbaVI8pjPfHYUOhdtgK2egX3O92PyVfqD6mFGlGulpsrH2rzfSxDGOaOtiUW2Jxit5FItD/uGxmn3CZMNVTWQ/T6Ik7BrFchUv+i9Kt0l+62nsuVDx1I2WwqRjGKBkHBoW2XFiclM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410451; c=relaxed/simple; bh=Bet7dcog4cI1OWFbkgHySPvLYRaBjOEAmnyguA5dwLY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OuhrCwigyNB7jnKqw2xmTKyEa8uf6+hubxsW6HcHlaIYV/nZpET/Zb5LDy8BhgoxpMgm13Fy1TkOUodDSG/4oSRSdnnCxTdshNkHnoAaxzhOxuX9MjIs9uGmrQaeAYnMumyB0HvtIo1vVKwZBGtrsWyU9e4bbL/aGYB1nhmQJJY= 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=m+UWT5a8; 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="m+UWT5a8" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-49050bfe053so84434835e9.3 for ; Tue, 02 Jun 2026 07:27:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780410448; x=1781015248; 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=8mOc2t8dZN0s1J71IBgMzN0QR+1naOVex0M+qvmJCq0=; b=m+UWT5a8AlVJdNCu9Jy9CkfyuxE1Gtxud27XnSUmIGzuUq9zMv1YR4Ueta2++5TpUW zzuyBTLATZKNFhu4w/6RFyzuEXJ8onmxob2W9xpo87iuIbFWOm1nlSmmFrGDK+w1mo1g 7jU/kuf/+62k7BQHAGU6W5qLwkZqOxp1ltfYGoKYe/DYxbAvcDGICavPA5NzccFZ/hx0 d7Vf+3rl3ZWD1mJ05W+/TH+y4SLzmuLw23PIZPaUdfMqWQEYpatCSFeidFEeCty1jzbi OTawsX1sIYFAlyJnLizMLeCUNI2/kjSyGpXX2esQy/Gt3W+0A7Fjaeykl2Mq9XHRNvU6 vyqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780410448; x=1781015248; 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=8mOc2t8dZN0s1J71IBgMzN0QR+1naOVex0M+qvmJCq0=; b=qoYqVs9S4E/xFVMVF+k+9Mn0fdyTiUeU9QZITt6OKSqqtfqBUhhWE+6nvSdDkkI7WE uGRYbjg0MMc7BVwMOCDK/eifsedeM0kDpVdA6Hz8yEhdV9YpFxkY65SOOalsNxOG12kD p9eDgb/6rIleFn5zTdkZYjWyhQyHYPY9EXPAfY1SOsScyDjhNB/dkc+l+nJFNP+ll3Hq NqY5U67jD08mXCXVLeSHI4Ul6i/iKH98UEgy+7Piugcpx/yYOTkmvG6e+qH501IrByi7 AeVi/Qc+zKavMB/hch5vB5Y1ws1TNNsiQQ4abyIrqaKD6k1dagTCikGTlGQwt/Ss6qTq 6gkw== X-Forwarded-Encrypted: i=1; AFNElJ/Q/eqTRHkfrHq6OtW7nnixK9pMHl4jowM8jmCY0ZV5zeadEiFmbhxSIZ8H40pb/ny4sLpj3Tx3uqViDiY=@vger.kernel.org X-Gm-Message-State: AOJu0Ywm+ucbxvtTVP7hxFzSA8Mt4R9pDpiI4Lnfod5/yq9yV2VDCVU/ 7R30F2Z+LPKnOWGAw22+ejykyj5bOYO35cBxgVfFSUtCUK2cDPZeB7g3m6g8lZA7TRU= X-Gm-Gg: Acq92OGbSMPrsgg2lPWKvrgk1cWKZq9BkqkQopvjpXL8BOR0t817gsC065fQRCgHMko KDvW1GL5tF1FUlgeDJ9luiCFt2wFe2A7nni6d2h36VGkpEdxlzzQrgwi07FO3qk2sgiCjBLYKWZ hi5t4Y1fbq1uaxheDt99cjzRfjvNd24NT9XbDp+Wr19nKy75jjAFHAR27xdDc3Gl2OxxmgWqZvq eMJRMs2HYTOaI9CK1KJcufEF/ZK5IHyqOeU+uxzRbDGcd5AijWPd6ekXhZpuQdozM5HqzT7phoo OTZHYxUfYbBXNuth3IGp6xWTxYO95mNxFBCz7PvpkiGVPPHsDrcRNWM+eT7cboPIHoWKZTIXOIB Qx/KxTpVaa6ApdvuSI6/xD/7MhHgp/tDZnjuy+xef4c5JAs9Ip+kooZQqQh1JYcGK2D0BNu7qGu PvgAk0XZ/Sx2r8U01kH9pgYIeYflRPATVJGCNBEMyMoHA= X-Received: by 2002:a05:600c:4715:b0:48f:be94:d82c with SMTP id 5b1f17b1804b1-490a293bcaamr257657365e9.19.1780410447898; Tue, 02 Jun 2026 07:27:27 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b0e18e1csm66771965e9.4.2026.06.02.07.27.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 07:27:27 -0700 (PDT) From: James Clark Date: Tue, 02 Jun 2026 15:26:49 +0100 Subject: [PATCH v2 07/18] 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: <20260602-james-cs-context-tracking-fix-v2-7-85b5ce6f55c6@linaro.org> References: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@linaro.org> In-Reply-To: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@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. Signed-off-by: James Clark Reviewed-by: Leo Yan --- 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 Mon Jun 8 04:25:37 2026 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (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 8AA3C407579 for ; Tue, 2 Jun 2026 14:27:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410453; cv=none; b=aXJK9PGn4O0NJGpPnbxQULA/+4VnGhXeJH2xc3nV7vz1T7Vhy5GvcBciamSKlQMrYkHmRhjc0+tZeK+w6jDYYWEo9KED1cjrLDpOY/TZJSr77HuHVn9d7jGE7uU0wW1Te9swKBOp+VT6gsWTIqnn8J/1LFIrkcChQ6Zv7EMlFYQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410453; c=relaxed/simple; bh=M0DBrbePhZZ9AcxL0wzd3eII2+Wy6jGLW0uhbY83wV0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CL47gWi1brm4C/P/Bm165I0TjoTlV3Qx4XYklkeKBakJfo2wxKXfMJLgNkLfhNAQnJ7dASBmNqvNdDoq9z26K7D1Id+t+wNYqht4r5lyTWJGgO+uwRcxSRYkFccPSNhKZj5OFkrVsWEn/TIBe0nXyoOzZfIir59XmXlHg497Qf0= 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=fCNqifA2; arc=none smtp.client-ip=209.85.128.46 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="fCNqifA2" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-49050ff7cbdso106034155e9.2 for ; Tue, 02 Jun 2026 07:27:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780410449; x=1781015249; 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=K8cRFQhUyrwRmvsS4WIe5Iy8r1Z7mMJ0S3vhGU6hRi4=; b=fCNqifA2Ge+bh4ToY7XRKEK3wTL6XYlEV9uEXFDiSOfCwk7lNWu15611po8+uz4lLj 0S9gtJT/wh9LWjC5zYfWpUE67iRmcsiJ8RoBR5lMod2wFMIuWYkPWq7t3Cyp9ZJ4dqGC UmrBgezcOCXLMxDMr7rLf3TIdEZVcPAY3viA9jp14+jPM3c5giejEiFgUPwPxgyVFu7m FSrNxdaxfRalFsDjc600CZP27SryRw9T27XSx3rOXiq1qQVbMDhid0qLiUVzdWa/NeKH S1KfVqYqMfwzrEzoYE0vBmErINtl6nyh52sbF41GOydNGdFARMd17PLEE38QnW37GOKi nHrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780410449; x=1781015249; 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=K8cRFQhUyrwRmvsS4WIe5Iy8r1Z7mMJ0S3vhGU6hRi4=; b=j0Zma+Hj2DnDu+M6QXEn4tjumVQ6JXOK35LEHoGlVpIdGP+11wQYTsQXHLkUKJWMHG lLhaHEaZdk0OqjB8SAqCu7IxdRR2gP93sUadlpsT/acKW2myeY09q+ok0W23aJX1dXqV EIzVqMwKDFTNShbYxDOUFkbpeTTC/EPpyYsP8ncAn6Ncu7bvcvt55jpVQ+0hWqADUarq Gpe69ZwGzcX0SPaiSWN0CTL4ZfE9EA0eFa5UDccyqv09/JYzgmYiy8kGP9ifojKg0dtg cQ290vD+fNYAdjKHWK6VRcAKTPfZ0THMsP1lb/1GNYWDLuUDQuIAXW+GNCY4pmFI2iHq LSng== X-Forwarded-Encrypted: i=1; AFNElJ+m9sGaRFRt+RtHOIWXwHk7FHjUrqw6BcuDy2nXUJTBeKN0R/3BBWjzGu5BU+LarLZNT6Xt45pMTejA47U=@vger.kernel.org X-Gm-Message-State: AOJu0Ywk9CU/9bxE3LZvFLH1Yu92IdvWsLZo1YisSzTZs6qCFqFWvpP9 qvKd+6jjJIL0/OX5fqIH7sSn4iukmJhvKR8N82d7a1jB4rliNolQ/aBZvwHTH1tqKgE= X-Gm-Gg: Acq92OHuQeDtYBlbDYtsvmFZsxjnVqSOJ/FvPlLW4UAR4egxhqW6A5lgxmnh6qwv3wf wdPvFhHMyBm0TQV0bsooLWJdB8GGM9sAp4TkmcniHszVAzybmBG+9jnfXj0So6iLabzs0+OhrdR xJWezP6Vt9YFJ4oEHR5zs2GO/iKC3r7hiJpURM8lj0hkpP5W8YU2fK7efLn4DU79Nu3EC17DVQq i0SoOgpavOcGhCSm0845ZugOpVP+CGBdAtqHWLqvdGgGJs/TSJ7BlZOuVjDWGoqvWHKeNR1qI/c s9QOhEydDpeCQzQYobdvE6+2ziZKpqStUbfkToXIOsgF1IUqpZQkHT6FTrcJbqnBpUzTjpdEXJt 3rkKlEtdUXYkOhXbCiQIu/yYovNxp6kOiES3cadODWcICrf+5BKwssYrpCAAKT0kqiHkvV/SpRA jKD6QpmaeQIR3eedSP7C/Dj7WxCAn/7L9nP35QUxzmuqc= X-Received: by 2002:a05:600c:c108:b0:48f:d612:3c4a with SMTP id 5b1f17b1804b1-490a2923a71mr217561125e9.1.1780410448893; Tue, 02 Jun 2026 07:27:28 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b0e18e1csm66771965e9.4.2026.06.02.07.27.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 07:27:28 -0700 (PDT) From: James Clark Date: Tue, 02 Jun 2026 15:26:50 +0100 Subject: [PATCH v2 08/18] 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: <20260602-james-cs-context-tracking-fix-v2-8-85b5ce6f55c6@linaro.org> References: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@linaro.org> In-Reply-To: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@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 --- .../tests/shell/coresight/memcpy_thread_16k_10.sh | 22 --------- .../perf/tests/shell/coresight/raw_dump_stress.sh | 54 ++++++++++++++++++= ++++ 2 files changed, 54 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..eb5a5e5e1be6 --- /dev/null +++ b/tools/perf/tests/shell/coresight/raw_dump_stress.sh @@ -0,0 +1,54 @@ +#!/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" +err=3D$? + +if [ $err -ne 0 ]; then + echo "FAIL: perf report failed with error code $err" + cleanup + exit 1 +fi + +size=3D$(stat -c%s "$tmpdir/rawdump") +if [ $size -gt $((50 * 1024 * 1024)) ]; then + echo "PASS: Raw dump file is larger than 50MB" + cleanup + exit 0 +fi + +echo "FAIL: Got less than 50MB (${size} bytes)" +cleanup +exit 1 --=20 2.34.1 From nobody Mon Jun 8 04:25:37 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 6A44A407CD0 for ; Tue, 2 Jun 2026 14:27:31 +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=1780410453; cv=none; b=iZ2HyhCZeiJYJmEW9d+rWBHKpTHHvFFQ9/7sxMOkeS0A3RL5COlnCTSF4mIbNWpU9sSe3MOhjfzNRlDIzJtuHHoHaiBlNAVxR5QmHVw4n93Iuu6g/Vmw6rnt+mrAa5hnC+3ZE0yyxM8hhwjptCEc9pCeeEGtUS5Nge3BZzCkasM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410453; c=relaxed/simple; bh=WLH4cINrrVBixvMSWcM5m8NSt3CkPZQErqsTHkkdWTs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pLnuS2/y/m0uLC05giC+VCoj7sB/YD6a4dnzDB8IsCk451z2GZME9lF5IMqr+ogxRf8A4jZuZwjYsoY56lXfe6Xkn80kqKIVT0f7nEaIJGBmiUxkH2Fkb6Qaz25JBDah/Cqt/1i2cKPLbLL6P4jNvwi4jM6e2P+KUV9Wyc7Ql+8= 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=oVCyHgB6; 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="oVCyHgB6" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-490aebf33e9so10569585e9.3 for ; Tue, 02 Jun 2026 07:27:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780410450; x=1781015250; 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=JHk81hDI2gaCho27XBexwyVVmXUcvCJnAHjowmiTXsU=; b=oVCyHgB6cjaT2Piuu+3kIcuXNlCYUFAMCPXs7GHqpEWIafv1mNXaOoRcxlblNI+KAB xnZvh5dsbUruZXKouNwprYdujhNgnAu2kYDEVdmC7MgntrBNyTP7F4qBDxGubXFrtmFk jOJ28kxFOAZOzvzNzGbPzP7kz6RVDLtbM+sA1hYiihokLIH8sNu0ZZ6xnIv/pS9uEEif 64GDwOspoKNgmkHSVCozI6mF2pz8a7jMi92ZBkdZ681f4uffMWeoqqdlc3osshZ5+S6M gwZmlxkvt8vFAPH8dPQmkMiPs2TSSyYrxp3pJwy7HSPTyk9LqRyoKYOZwvCjX3BEmvxL O2SQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780410450; x=1781015250; 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=JHk81hDI2gaCho27XBexwyVVmXUcvCJnAHjowmiTXsU=; b=fHcWcAU6tqqEBmcD0zRg4itwoCuSeCxiqcdxPjFpxgS9S0TUeQwACpeDgZzYB4+vt5 KJ1V1mshYxIEzk5tqhiFeDpi/recaGAstl6XvIpjIYkx5ZLHBuY3zJCb+PhUJRmAk3wy D530bH/Yp8E8v3vkHWoHOrYuoUhk2TdyCOZsKOhtb0xH5i5a+Wkd0boFfNPG/8G9h7Bc JkebsEDQHDixyVULZqxs48CZ5/01K5TcCcKSlINEZBY6awZU2oPm8A4udjuZ1GGS24kC 6aB9prHNMIID3fsNF9rlLzsLlmgLKaTLQoDcPP2qVFhza3/hGmuZxVMd6LfuE7AjXspc TseA== X-Forwarded-Encrypted: i=1; AFNElJ/Yvz5MKfFY1cHTdyIIjnCSD2IhskhOWfFBeUk3vsk2+K6x6bZK5Rlu3J2AoNrTGxW8JrrrwZnC+0U0BxA=@vger.kernel.org X-Gm-Message-State: AOJu0YwMi+tE2/Pwzc0hYWpS5i2rIqPSFA28udZnK3I8VPo0hCipn4rw pUCRgldUZCfuWmd3SVI+gZH8akJvzN+lGT/wZLejQiTUZ33bFuLM4RqSL5l3t8FupGk= X-Gm-Gg: Acq92OGX8m/sZyHwTez9y9bcjZl7HfIhulDCfEvX1q+xlFqIG9XPwh4pGZhFoo93qty kFIP3GWl1r6rzks/IJV2xdss2F+qbABwde1uyJITqkcyx90JyRsTVsRs8JDlOls5RYlEQ4FoOi8 l9hvblL1sXR3AwwMXBMyjvNQptYk4BK0/JjZ6rDZLac6ibOuHKX9gZFoFFjBdJcZzK5DLbN6xw0 GEzkaw/omyFCYkKNDixCadt7irf8YpNkotEyhpal4hvQYTi1uZyNECrlkI1dkbI3MzVTpklMM26 mvpyPOWh7bIj1Ugb+/MnhiCnEGFokSSIiQ+ZpA47qTsXAaNMmLwaT1rU2qL3uEZPs35s2QP2NMZ c/E+6vYtFVqRRc0qK9xahogbmByMGI0aIWrvqRRTFXtn1LiVjh3JDkZuZBy3cI7diMBC7JQ0waW OXjHb2tBXEpT2I2yFCXb79sYjgyblbT738y2V0d7gFWmE= X-Received: by 2002:a05:600c:5544:b0:48e:6db3:ff33 with SMTP id 5b1f17b1804b1-490a29438camr230654865e9.14.1780410449854; Tue, 02 Jun 2026 07:27:29 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b0e18e1csm66771965e9.4.2026.06.02.07.27.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 07:27:29 -0700 (PDT) From: James Clark Date: Tue, 02 Jun 2026 15:26:51 +0100 Subject: [PATCH v2 09/18] 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: <20260602-james-cs-context-tracking-fix-v2-9-85b5ce6f55c6@linaro.org> References: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@linaro.org> In-Reply-To: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@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 7ec70c054cac..778c37f6efdb 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 3c6d3de98be9..e5b6707bb119 100644 --- a/tools/perf/tests/builtin-test.c +++ b/tools/perf/tests/builtin-test.c @@ -149,6 +149,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 f8bba2d68769..ef3c3a269132 100644 --- a/tools/perf/tests/tests.h +++ b/tools/perf/tests/tests.h @@ -235,6 +235,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 599a37c87878..81f5516f0767 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..dc8070a98df4 --- /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 Mon Jun 8 04:25:37 2026 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (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 81A2F40910A for ; Tue, 2 Jun 2026 14:27:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410454; cv=none; b=CgE2gQ2d2YSKnEAM8BF43jcluL+1G+3JlHeN5FNgxW7BIPsP+KPPlKdcK59mZ9OY3ksluNl+qrdLWfkG8e9KFJCWcexEfzBU/ZRffvTzY0dmZvXN4qYpFEDDn9q2//Au/xvG4rycNYj2eq8sK6lVFqzhKn3kkH33bMNr/Nnlr+Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410454; c=relaxed/simple; bh=+NVyoMoDiCeBbRcKsQIV0kaH0gzBxCHgeoMNyjllUrQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Ry6qRfDVdaiB6Jl/JUL8b1xobDt7e4VAN1ijGI9eXNmw4V5Z/Blil9N+3x7Fa/V5FEXLLg5ZtjcfsKBEK4p1yzAR4h44izELZ3L7bCp3hi8x/St/kBnNAcARPqw5AoJc0EqYxzFvE939T6NDWJHDUoHNefAxcRaPVS2Lr5QTHnY= 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=hiGN6NE/; arc=none smtp.client-ip=209.85.128.45 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="hiGN6NE/" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-490b4e1ade7so476925e9.0 for ; Tue, 02 Jun 2026 07:27:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780410451; x=1781015251; 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=lBRnQlPosMN+k8SaoyM/0M+4oXOyWiGOMBDGTHkddk8=; b=hiGN6NE/8UOnpNIeNZPU13Iw2+1JZVGF0S3NWww55GJTk1tA4BHhHGUF5xzvGm0uKc UnapDNLw/2dk/Xr/7PS5qBlbURcM50krcq6v6nDE6O4AUfxJxZfUYM6veiADPGNyECV/ k0wCrnOqKuITzFIOGThwwqKVIKB/8D/mUB+FQYhena3oMaOtWgbaT6vEdg7WQkoLtcxP M+BOhKFdMhibKq+VgY92g80Sf5ep5Bh6CTGlOSDHhYtBA3ny7OUFtG8d2zDPF7QXJYD2 c4UbpohN8KmBSYBuIuJaA2iefcPzX91UEbRfiF2onwpyoo6TUYZdVKjKw98PDM98HYMM jyMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780410451; x=1781015251; 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=lBRnQlPosMN+k8SaoyM/0M+4oXOyWiGOMBDGTHkddk8=; b=JXNmY1VvBWzZlxukwwJH3TCN3SM82Oef8yP2n+cUAgStKwj1/K7vnEfhY7AlO1DCMs 4bVlYNlQDusCDgvMXvUQEhWkLVZ73yO2RswHzz/vVQuQwymQAIfJ1ZktskEzd27mmh1d Jza5op0eJADPKpq/m4Rq/hwYR9WzeKqlTaUGQS3UhKsnJ1A1H+yZW3Ju4+dZMG8QshRw QV++AUJCUH62geQOmOm/gzu/kVTIYKWthaunCC7MQdCczgU/Or/LVD1RB/tUWnnnY0cA NAiM+KH+T1eTc4aOXSBdOFN2xcvup4CTcnQidHWP2rJ+nN3uxrYSSE9IvboWOCqjYLQP M+SQ== X-Forwarded-Encrypted: i=1; AFNElJ8Cw2PwzclUto1/V1vBGXc309A4CqZzUbeXNGhTyIW3wcJowu7/8nF+J/oqP/G3vbdUJ44rgXMIiL9B/AE=@vger.kernel.org X-Gm-Message-State: AOJu0YxZ2eR2lx/kTn2/XVEYPe31LWuc5tax+Z9ZZjXd9FV95Bjy/OW+ NDB3/9LsEMTh1gSfd7IAxzP48JCVdRiOnxPeJUCkuUSmyL3fAequpPZQPfbkAgb71gA= X-Gm-Gg: Acq92OGDpr1IeLHUMkiBUEXxG4P2OND0u6zbFjRwouUW+6homlXzxSM5ZD9ECP+kUrn u6/XuPyJP1PsTeCZH3Iq4JKnTyPUAUT6QEHodDIScehM1hNDPa1K/5K0+4aeA5BPy16+pxxEJUh pgjJVze1zFCbGrfIEXNd/x2z1b0A064RB/EylPYMnOIURR6OYDb8yRdNLkKXEKzWF3OzGojE1QI a3T3brOJDIf1CCE2CV6S/w+uJ9Kt58SA40F1DQaN/UTQqjFoo25cNW0+cCVm6aqREsYW0dVlBJ5 s6yEQfNrvNLODufYLf4Btwkl1uyUJKKwqDHMtVxeGY4jhj86kQcb6ZZULIWyW/DcRIY7MhJsG/v pRnPBQUNT6fNUqkvwOGpwUP3DvHMCUrbGrVrzn89jyMLhm9NDVXUgbZxr79cFWXchzzFrERiKrF oh6njwce0McbR4he+UvYTG7G4BxHYSdd4Teb4L5njAA0w= X-Received: by 2002:a05:600d:6454:20b0:490:9ea0:c11f with SMTP id 5b1f17b1804b1-490a2904d8amr208279205e9.5.1780410450823; Tue, 02 Jun 2026 07:27:30 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b0e18e1csm66771965e9.4.2026.06.02.07.27.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 07:27:30 -0700 (PDT) From: James Clark Date: Tue, 02 Jun 2026 15:26:52 +0100 Subject: [PATCH v2 10/18] 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: <20260602-james-cs-context-tracking-fix-v2-10-85b5ce6f55c6@linaro.org> References: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@linaro.org> In-Reply-To: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@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. Signed-off-by: James Clark Reviewed-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..bf34d4ee77a6 --- /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 --workload-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 Mon Jun 8 04:25:37 2026 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (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 A7D3C40961F for ; Tue, 2 Jun 2026 14:27:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410455; cv=none; b=HCFnQgI26EsxazKQCiT6N3d4Gww07lYzy+P0olLXsAyOMRvHafe1mPQcLm3mtonMkpuUuueOtuKZl3EA97cWrpBbiJ9Xe9sFN1uuvRD2NYnvNzC+b9xdmq3FyuXaLX7Ka2Dw0S+3hghhZlF/4A29AMBYbwBTokRRPdHCl5l1tWo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410455; c=relaxed/simple; bh=9enISHoiXpOz8s2RakEzsEgzydQ2idPEqLuLbBe/Vcg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kpMKaCVBKfLIGiE6YenaSWdCKJbsk6xWQVgKszk/+k4E4dbsbrLYXBYBfCCY2mSMUNrXT5QLWq2ZOfyxDEZebrmZHBlaghpw2C5HR+ByfXb6MX/TClLpU3MmDUh0jebXCPIeDJr5poXflmWFE0Q6wSdBERD6jxqB9/uUys/jWoo= 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=anpQeUL4; arc=none smtp.client-ip=209.85.221.51 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="anpQeUL4" Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-45ef189aa1cso3678419f8f.0 for ; Tue, 02 Jun 2026 07:27:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780410452; x=1781015252; 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=LF0PDpNJdViJ4rDQR90Xrs3wAgx6it7cgbXceeXKEJ4=; b=anpQeUL4NbO22RoTXlywDuafpuenDkF6/ApG08KELM854ZQ1CZbVJ4nm6RUVHH6mDP 2zDEgfmxL2OnGmthPRIv3uJGtFGSGn22dKM7R4lRSJjQQLWwZZttWKa/hPLVMLEnPadr zV4RDJQV8VXEwqllFiSSslUimgWhk1r1RyBgVqfHQ2HSOHVgU6gbSofEkZ+WnSu0hv1e a/YGSnIb5QIMbmxV69W7N7Go0glw0igu69rQT7mG2lAgjW9E7L8MGh2rBIBW5ohXfNoe Ro7fQBJD3gsgOm1wnvixOczqiVIXI9stFvPfcHMtR6qxVUT4R+vdFrCw+pNQikxU+qMC kSJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780410452; x=1781015252; 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=LF0PDpNJdViJ4rDQR90Xrs3wAgx6it7cgbXceeXKEJ4=; b=ZVCNKYOxE3jutCE9WifEkhr59rvi7Uu+jBW4msj0uKAVTmCSyXOAZ5EJEFCWzOysXZ GWLAYnvQO20kRFkR5ICqcM4Zf0sq4MV9XlEHG5gXJMieBV+X1Ih7IkdcsYX23X6txQ3b VWW+PBhodKRCnfH0ztqrf7YIu7oW8V2Pj+CkzxO1A0j5Uas+g+Aggp9wy2Eeo+Vl7Xs0 Zjhduc/d4XJ98oCGSgihlcRoPUEgHdvGrDWLcy3ipS8DV77jfBUP8lYEkInVpvLzfci/ LUPF6Kg+GGvglVXYtKj90GSfcB7ydZAVzj1txGGpUoaJTFvJ1kVS6DRIDqlcsjmYcnQR aXEA== X-Forwarded-Encrypted: i=1; AFNElJ/0DbSOQgTuZ2xyr6BfJ3yG7lZhYLYN6Jj0ufvS4u5JsnUEWj9E0u4F3Yjc/zx6Cen4AqUEOiJ8TAwsZO8=@vger.kernel.org X-Gm-Message-State: AOJu0Yy3p+LbtUotjbuGIINTM/aSfrv2Qemq+bVMULH9S9ZKr9J+WEqw q/Q/uIrede6Z+/G5UcpfE1AgqHsaXVl6G2k0TZGJvwOPqtrsS2B5UbnRqbTYfgAaGJI= X-Gm-Gg: Acq92OHQapY7D2absU5nzobhfVh0Upj2zd3eULvQlHH8fvBQF2b8TEx32p66k5C+zCR foM7EAEqWo3RtjuRJeTfjHiS/XAK4NRWl9IOxZziX7JH/RpyDx0c7ki5M5BtSGJ2T9U809ONNK5 CaRqeqIixrA73/xC1o2i0b7lPaqoOQ4ZD1a7Z41+7/I0WgpuBa0UoeJY7zkTaps297l5+sDRyHw C6/VhNsye84KScvYAOMZs8a0KbGdQBehSJZU7rsaKTSWv/k2xqFxOcm7WrWmov7aQrRm9UdOFwm F+1xUjrR27DnLl74Z+azWlHbRNxcbt9O5HFmmEpHrw4VFJUp2s7/y7AyDqAbBqLujechE/gjxr7 lo0o67IMibpKbFlVgfiMQl449MnyVNb48MrXdLG9FJcg9N9DlxjHuqBJ5r4k2OhmhcL1M92paJ/ 1u9c6OIVGFNtw7DcJiG2nxKCLTmJZDW4UPSLHdXQzwSaY= X-Received: by 2002:a05:600c:c098:b0:490:50ff:7943 with SMTP id 5b1f17b1804b1-490a2923a87mr247378765e9.5.1780410452040; Tue, 02 Jun 2026 07:27:32 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b0e18e1csm66771965e9.4.2026.06.02.07.27.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 07:27:31 -0700 (PDT) From: James Clark Date: Tue, 02 Jun 2026 15:26:53 +0100 Subject: [PATCH v2 11/18] 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: <20260602-james-cs-context-tracking-fix-v2-11-85b5ce6f55c6@linaro.org> References: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@linaro.org> In-Reply-To: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@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. Signed-off-by: James Clark Reviewed-by: Leo Yan --- tools/perf/tests/shell/test_arm_coresight.sh | 24 +++++++----------------- 1 file changed, 7 insertions(+), 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..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 @@ -52,17 +58,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 +118,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 +148,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 +171,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 +182,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 Mon Jun 8 04:25:37 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 AA26540DFC1 for ; Tue, 2 Jun 2026 14:27:34 +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=1780410457; cv=none; b=hDNqff2MEzlEb3zPlTqjLLou+s/B63A2LH+/s+UUEM1KcaNbXYUeD/L1YKwbozVIVqHj4c61dm0SE4XfEKJEsO76TbgEm1nMxnfofQcBWwmdue8GxQHRjYrh0Pz0ynRsdQ1De+Hc8QWiWtlsqpjI1mc+MKij1py4kKq3IIdN8cU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410457; c=relaxed/simple; bh=bBCpsHP6pxxOKGXqUqpPdX+SmhYJI6iRxQWCSYCtC/U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=q8nL+HYDH9mZaz3HwU2gz/C/dtw5cCr/+YcIynTsLmT0goiWm9ihLeBpxKnGcrdzsqQHuISE+PE/JiZa8QI08OARsEm9s4EPLQmcJuxSNeJzJlVSiFvA3bCqSErNJDsthrbmOGGhMAhmq+pEj0dztzFr4IwASzSkaUgxGO8cfxs= 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=me+0wouK; 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="me+0wouK" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-490af320e2aso15526825e9.2 for ; Tue, 02 Jun 2026 07:27:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780410453; x=1781015253; 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=t/tFhBvkW5lHa9f/mqQAj4otAbWa3BZTThp9kdngA0w=; b=me+0wouKFJA/aGBgjuNpqYvngSjqAVFsYzuG345fMbJ9tCH9vmiGkb/VnrFI8rTF1P aDDHWozLqPYTXNLtj9tAAHWEd1lYz6Jod6l3T+RNq48vAduxJ0Kg5Y4l6hvqwy1qsNbw mOe6BvR5YXE41fOYH10B4csT7M+9/exP0ys4G7V88sT9UDyDFU0ARxaPbD1y8OwoCn0r nUMvfxtd6KtWRQm8Ps6+NbtRLkeUqkbMu2MqcL8LtYMVUAK0XEobbm7fJ4/GWencmwbA zVYIBJL9JZzelT4u8P5B9rOxxMtaPcz+R1wxqZghOpoICiyP2dbQ/VABYTfJmO5l6glj UTqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780410453; x=1781015253; 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=t/tFhBvkW5lHa9f/mqQAj4otAbWa3BZTThp9kdngA0w=; b=RxAJSAiPFgK9nlQNBTQV70nPwyJ3WbAkqUL9uBXZVdcFxdc375fMHaa2l4btWv4QQJ gxzn+HEBri+Sj4EFtfyLBdqOHKW/32UeiiZtWlbjB5dOGHJiEpqzLvSdJ8z2YSerzw2T J7lC652YNnQWjdSIMlkMjYWxkMYLo/6E/ebNbrXV0RGBK6HE4jdXvoGHW1MAjvZJo/J7 bPw7jU03uBpu1YK9UYre2tFQhlQFfQFnRmqmpRzQp8ukXQCvhgqbfsBWy5zpdFEyao7V Z9zr+7aj6stUq+IfbUivCfskD3/YqC5Lf3Fj4uWkDSUYa00h8Li1yVxjslwikQAiSGsU oLDg== X-Forwarded-Encrypted: i=1; AFNElJ9ipJ0/NG2VDzuzEXe1Uo6OR9zn5BvGA5Bf+7hV3+aU1J9VlQQeOK8h6q4VySBkDYOm0XdmK5O+gYq3GhA=@vger.kernel.org X-Gm-Message-State: AOJu0YziyliwsODjbncebzi9aBJHWeHrlwBpTAAbvy2Nj9gROErM0jWi QRbo6iVJm834tT8cA/O21+3RaaYGM/iQN+PL8/FXfwG9JpyPSGKtHuexV7fKOftivWQ= X-Gm-Gg: Acq92OFW1iYYa4FHZOC35G5v7FiodbDbf9YtZ5ipAfMh7XzWnpj+4bb6Jgej8dK93lH SLRWwpO+Eoowg/txFB4Np8mYI/EVwzOB5L8amG03cMIfF2QecEYyce6+Jle6kKMqZUhF7HNDM93 RYL2DnHVOBgbZkxncVEuCrx3zp2mVOHIZJfzi5TclcNOTp2tV2aLuG+sTt+NARG0WjpWyz002XW /yTp7nQ40E65kg62NMfPPSD/5xpOHre3G74PFGadwRHh3h+3rxfzDeWGQHdDqzdGLMTBQX4Sn1K 3h9NMCMpkOAr+IxPRH10YOsJBT/e6lboIfjc9y92ARvLclPAeMMZ4uMiQkNvlEeMq8O6vwSYPtY UrANtqkYoZ6yvdzXDMGhE8hsjPCMnpN4vWS5Zn9pqVQ5/SPqfQJ2Q+k2WLfssk35l5MdSzsCHTg iorMd/9GzRNbwAr5khXXgJM+KpJtshQragIuPK6Wm7ztw= X-Received: by 2002:a05:600c:628f:b0:490:b026:971f with SMTP id 5b1f17b1804b1-490b078a6admr85262375e9.16.1780410453092; Tue, 02 Jun 2026 07:27:33 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b0e18e1csm66771965e9.4.2026.06.02.07.27.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 07:27:32 -0700 (PDT) From: James Clark Date: Tue, 02 Jun 2026 15:26:54 +0100 Subject: [PATCH v2 12/18] 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: <20260602-james-cs-context-tracking-fix-v2-12-85b5ce6f55c6@linaro.org> References: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@linaro.org> In-Reply-To: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@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. Signed-off-by: James Clark Reviewed-by: Leo Yan --- 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 Mon Jun 8 04:25:37 2026 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (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 985B4410D36 for ; Tue, 2 Jun 2026 14:27:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410457; cv=none; b=GCDQNyMP3aSF8aBDClGi9CjfaCxruRFyN6eJaWT316Oxj6TfxAoW6OLk4AleZqVOjEiJszn8worN3jUJijKT77Wate/59XU6xzedMPJvwo0JKFOqeAK5RxK2n7RKzGfqfy1dXMIfnCRtLvq+bKrSBtxVrjlxYDVDuvTMcUIQmNc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410457; c=relaxed/simple; bh=/bo6v3kFcoolHnOpj+EbZhoQzm7A8RsOcpjrkQcAFBE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Shj2CJKoMc5n3MZREwpdwSHg/3PvQeTu+yEDh+Rv0GNbWTLPGxhxbe5hELXisI88bdAPn5SI5V0wrJO3wfF81IyKV0+cDCqVgZlBscfITHyFaL5ahwsqjwEH/WlLm86vIcUpPN6uQNUuINzLFVXA2+y3LfOJXlWNlXaFxZfNMGs= 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=JPOQsZQs; arc=none smtp.client-ip=209.85.128.53 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="JPOQsZQs" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-490a7876f8cso25823425e9.3 for ; Tue, 02 Jun 2026 07:27:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780410454; x=1781015254; 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=3o0yW6uQ1LnJTQVmIzRpXA5Z0rqK8P+8rneFQb3y1o4=; b=JPOQsZQsfIUXYbQPn89gHhysBzQ2N5OF+SvDTucZePHwbPOyvy3LqhPX7KPeM5wv2Q e1jEmvqAzFgnOBBy5qEbB+xKehXqr9udaQITBmZhUKMQTmWARBTxhxXybMNsn0bAo/MX Cql618RLjOLQHGOn+LLcBCq5mZItwPKhEDNGMaU64zQFYI0d0z6qFETUCRfn6QKmUbLr 3MEuB6BaMKTBkrcWdfn+o/m8i581dlcbwR46nnO0VB4TaGEAoH5C0yh6hPXIuYeLdAr4 1W8p5tq/DIgG8VxjG07ywWziywQFLpEgJf2lq02Nbr3QPqhOgBeosEW+AMoMRX7Ixwe1 W7cA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780410454; x=1781015254; 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=3o0yW6uQ1LnJTQVmIzRpXA5Z0rqK8P+8rneFQb3y1o4=; b=Darx5qUQ8v7mY8sqK3fJOT63S4n+Mt+esn59+d4WlpKxGrgL4yimHmRC8laBWn80m0 O9Yrbj2RD+l2SRLC2WHY5454clYBBhveq1X1g5XJUY1W+UGtwjYtuc/AoNqXjyt1aqeZ fLVQlXFB09PY6onyZoNvXX8KSOzIXYMo7LeIkTyJS+GRx9QaUw3OPpzv6891r0e4v7+r xC+sdeuYOWmRUFX2DZkA57TfU+7Ra99ERFfTNj7goHV6MjHIunxuxZbzvDJwzqgIN3dx wkoA7ZQ1QVugzJId7DlS2yPXEal7tDrvX7XoNoJHyTRMU2imDjE2sMJ5nAYEVwFpVnj4 eVIA== X-Forwarded-Encrypted: i=1; AFNElJ+5+oBiDD8x2isCtmREqOds8dgbHH2SKHmnKqhbeP/hDogdr8b1MRi4ZVL3Ch1NO1yYJ1LikyPYMY4LF+M=@vger.kernel.org X-Gm-Message-State: AOJu0YxhAVufZW/vtGEOF9QoV6Zqr4VG+OUwKw+T9MYiXOwgCHJvV0vJ zk4lQZ/sY/Dziw7Ht4h2fPke8oCsq2GzNbgKnMcUCZa9OzXY0dHChvYKjPbCa+uzXmk= X-Gm-Gg: Acq92OH+UOw6BF4j2sJy0E+Yb8vkiBismJdFQGRXEF5XQWVw0zow170Rhr8riHSRPd7 fRdk0IsUlUr2K/3ontnUnpJqMVkyQ8M2xzthqKec7+m6psS5GODEDlb8AmqEXxKy6NI2hIDs+c+ 4dqWdHTODn50FVL3vjZn/npVinNtXhnApZNy+nSyao3OSQVn+LwE1EmxCDZwe6695mGRmM8bkLt cCb4T32781VKN3irnvR467ovf+WRxoTb3fLhUJ6AH/4JCieV+uum9jv0Batje8sf8dI7ZAAkS3J UTABqTc0mj55/u6g+8XaM+LN1kM8G27a5rImuEwjVVFfTayh/BSwUkEVS42Wq/TeizS4wvN9777 rkTUSA2QTFE0kMY2qyKqKCQyxjI4HjIeXT37ZpfowAZZixzgYOY+ib5U18JW5Df0F6tI1h/TvRU kR/uat3re01FP1y9jHTqcgcvxaheC+K5lguvh4ubum4bs= X-Received: by 2002:a05:600c:2242:b0:490:5321:2466 with SMTP id 5b1f17b1804b1-490a2941ea3mr195165935e9.20.1780410454099; Tue, 02 Jun 2026 07:27:34 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b0e18e1csm66771965e9.4.2026.06.02.07.27.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 07:27:33 -0700 (PDT) From: James Clark Date: Tue, 02 Jun 2026 15:26:55 +0100 Subject: [PATCH v2 13/18] 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: <20260602-james-cs-context-tracking-fix-v2-13-85b5ce6f55c6@linaro.org> References: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@linaro.org> In-Reply-To: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@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. Signed-off-by: James Clark Reviewed-by: Leo Yan --- 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 Mon Jun 8 04:25:37 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 F3E874219F2 for ; Tue, 2 Jun 2026 14:27:36 +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=1780410461; cv=none; b=SOHqNLxtT2O4rqDb36rU2iLV1leblifAs2nYQqVFxrnl0M6FlGxskyRFggSq8KvfszS8HRLlOyXFt4a9wfulPcJS3nAkZwsL4DLJ5myQHu357HkRQaQpYijATazQsPP0C4sXt9klY2rsuLV6xsFHuL7/Fu2zek8Khzulk80tH8o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410461; c=relaxed/simple; bh=iK+EPeGCJUL4Rd0+dg6SeeSLGmL00IoQ7KXBGN6a9ko=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=r5GwKHF6ctlZOKv+g2VadpFHiMFVTxQAUk3Jsce36T/xh5gCvCf1SdoUKHlwVBoxM29biWMr86ya8QszGtkhI3sLVls3PLcv1fujKJ3wavLmWXrH6oAzxuk6m5Dtbl7hW6AyI3WYevb+q1RprhBQlR7vPSH0S85aARuHSnxzxjc= 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=U3MkelRS; 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="U3MkelRS" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-49068493267so66366765e9.1 for ; Tue, 02 Jun 2026 07:27:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780410455; x=1781015255; 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=rizj2QOS7B7uZxjiTToPLLngMMrz1F5sdLliowsZ7eA=; b=U3MkelRS9OFPT3XVddtFk+FcqKeda95UXW+2bLCKwEu97TGWznvd//xXHF1tzBQZD5 gPdaIidkl5uoBnLJmF9XtC96fmqsthHXYtVaEsad0WbkSgTGGkhp4kBBIbNdPc6vgqyH 13YWQwM2A115ackeufBVAE2+UzL7VeSr9XcskQ8zv9cizden6Jl20RTY4IlKoK2GhpTE s5SuXV/N5jqWOaSgcUvsVDDjEsspndWLIMUJS3dPvCmO74nBYGsTMkqu2qukYkdqmhIw NQpcIcwmk7raDcW7Fold+hlnFJQgxkBnStsc64UACVbzJsSmW22ucALRsVLChWmMggz8 eXwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780410455; x=1781015255; 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=rizj2QOS7B7uZxjiTToPLLngMMrz1F5sdLliowsZ7eA=; b=HPyG8VduBQ7CnGTHevsC7lBmvtpy2pSzOXi8lA3PZ8ajDlVpdtSlkKBV8TmZ0O0NRm VX42qaHxgM4Wrdc+G77/WxztRcgFoDNxPNj0UdmZI8FerT4GPVv2ni+WKHK003xv8ZNx xGCbGxc6fVNyB2tzuBAc1Jf5EIxPGqQldvtbpTWFuYCXacxN/GV2ifVVMWDfP+3yzA2z 7fSJeHncqdgEz9kiS75LCCYQ0WIgsTETaB/nQHYd0GCBLGxLEvwCRhm3g/0ufJMu7mMQ U3kaoTSCUiZA7S2HircPIw/JWK1M+eqdd8RLnBHWjD9+KD3b59ZNHnjp9AMUa7kqa1V1 s06g== X-Forwarded-Encrypted: i=1; AFNElJ9od3+0GyNDqCmYtVctPi5JbZY/U0M6UtpVEPGLWiEW75bmrTFYucu56mNH4cc5WVdwNjs02fbtl1A1fVI=@vger.kernel.org X-Gm-Message-State: AOJu0YxpDZ1KTs6KffHK3+RNOssNJtDR3skZ+/FQRjCGdB9Nmb1SJ9VT Rv1dYckX5Z6EQgdnj0LVqNvI9OcHPC/feOerXIk/wUSKVPp7qSM6DHwIGVaB1qepM+E= X-Gm-Gg: Acq92OGNthrjoLnqoXW5pKtOHK/H95o8+FsLuU5zRWr4Mdv5r5wcetCj8NZzUHAzBUJ 6MkpF9K5jgYQPKnIZGJEPraJiJzSDY3yqSzgRc0pFUp43UFnzmYRduqp1T6wm5Qs9tGa80cbCyw oTp+QzOTkUrrvHG+H51VeSgZ4B2vFxXVP4OLsHuE4Krnxf7jY8DPyywHg+CBFA9kdCh+Kbpi/+I g/0kYAWj+3grJDzVGbN7yYShHqNpBbTtr2MNr+BmGusgs9HRzuhoYqRKoYtSxEZA29hs6LQJ78j +ZK7rZlEJAIrVsqKzw5I3PTMwIOeSLdz9Xy9NsURfSGS6AqbZHbvBrSjv+icPAWUdyhejf9RTjM F6g1Z3kWor4IslhDK+vRpBDF6PCbDVg6trjM8ESh/DGgPaK8pX4NMbG0i+uCZceL4BOjzq208JJ /eQqpG6Tbzg1xgtF+hXuX5Gnsye5z/Saph17k2ZdKORUU= X-Received: by 2002:a05:600c:3b27:b0:490:958f:2a5c with SMTP id 5b1f17b1804b1-490a292fbb2mr279676505e9.17.1780410455186; Tue, 02 Jun 2026 07:27:35 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b0e18e1csm66771965e9.4.2026.06.02.07.27.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 07:27:34 -0700 (PDT) From: James Clark Date: Tue, 02 Jun 2026 15:26:56 +0100 Subject: [PATCH v2 14/18] 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: <20260602-james-cs-context-tracking-fix-v2-14-85b5ce6f55c6@linaro.org> References: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@linaro.org> In-Reply-To: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@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 4ac2a0cec9ee..e4f8c979f47b 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 Mon Jun 8 04:25:37 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 B939A413227 for ; Tue, 2 Jun 2026 14:27:37 +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=1780410459; cv=none; b=MxR0SnaAFmGgMV6ZDCX/++uxnGbFrqpv3GIqUVVOq6qHyGuY7qHFATWVg4Zb41aUJNU/LmO1KZTz3za869+9yM0ElnkyTizSmjOaWB32VoNI/wAJ370IlH1+GrEDCZJAmL3uxZho8SEbSig2itAKt1HBAKqTMUJe69sE3uD0Fjw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410459; c=relaxed/simple; bh=Vebm4GlJiLVnJYDjVjznOc3fuBf50TfDyVZ1u6hrZBk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OJUkW7pdkW3Rhanlx4a6acY/b0eC6+9C0CA4XK2GJf+Y9Ev2wYKMusawU35yeDkWVSwUhRa/buwGiWLvJFDt50Nx7RhgsNpr2GeNzexNZbQW+6csYJqJHFHogKPI2Eeo21XRNqIuJGxmdgIjYcsQVjcmvdcrie2k/lLm8iF0ozM= 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=Gn/1KSMp; 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="Gn/1KSMp" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-490b2b037d2so6021755e9.3 for ; Tue, 02 Jun 2026 07:27:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780410456; x=1781015256; 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+iZ6FY03jm4PeAHyOI8fNsNwbPR2PmNKt6aEgZZmgI=; b=Gn/1KSMpfaPFib1BMtiNIAq5FWuujj/a+uqMvk4FPZ1k9GL29Jm5SHO6ADyjzrc/j+ Rb/C4LiCfnUFSEjDM9KThFdK4MVVb4nqRB8xe8y6tMEOiX5NmK16IsRtet+5kSvXnxhh 2QnEqoKGLEbnWiCM+XfSxMk6R1bOt9rJ02+qHY7e8Dzp4hwZCYIfU9dg5bZYDnFGF8KU riUCqbZvA6otwRzjjZh5UBFjE5AflaScTyaHplThFgOqP9m3lHNpzxMv9RBgaCsrz6Xe +UhjAIx/nnD/651SD1pmPyv6UsamylvSMpvMPrnKsx67LCbdR6MhrewGjjNujMfdg17j QAnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780410456; x=1781015256; 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+iZ6FY03jm4PeAHyOI8fNsNwbPR2PmNKt6aEgZZmgI=; b=SexravZW+w1AJpyni+3ppFq6qSgrjMfMBqLzxHDFoTaS8BPPW3epUGyOTYMZk+OsO+ GkBfgdpf8P9ExlpqkJntanDzthCgRY/p0OBpA+uJxF+H24dOFkrn+szRfj6OGaFNBYTv Ul2QAlWrFS9QStfMXhCmO94kCKQCa4GW7kwoeXoEMRX8g2Rk2msCTmG4SGKblMfs9VRq eRFmY4pLkoBlHIgL6StuuPt6s7sOwIAFb5DzM2J+CPiqxLuKJRDmzj92fF/hQyjtMBzs brFdL74sR1b2lifvafoeyToEm6UPQqtIHCFOzYcYoUtNGT6ivaKJdiJYKcViXSNyvSce vryg== X-Forwarded-Encrypted: i=1; AFNElJ/Zv/z6MaG339RsKysZ/uTyUFkSkNPHy8cQ34Or+8WeSug0EeIOJelL8WPDZmL3fT/U9iZk+tXB30sKK3k=@vger.kernel.org X-Gm-Message-State: AOJu0Yypv2+8sezKrMnPki6lDG8vdszhVJLvqI10Dql9JMhVuJCkIc3U XzOunq5P8iq7Wgk3OwDOrrEFKDwmIwuRYdR1MvY3B4Q3SAm9oZWcrAfUptXLMtu6kno= X-Gm-Gg: Acq92OFQwRPhnTYMnWGZVZ4u0IxaCeCmiXTGBuczHylmnlKiOaT7DX7mIK5Ek7b+JVH S9EQY6Oj1v28/7Fi+2J50rEuziLe4k9TNqYqBl4shKEQdGW1BwrvNRA8iKyZ5TTnQc8+ebXR/iY Ua6QpxjxKR2URJfMIoN2WTwKRRh6i1HIJmyYQE9lWeO9UG/8jOHviFK1gFEU0taaGl8XU12jEUu kaIYijUmntliaCP6vcSwbwnTUnnDNtmFyDQuyBijyKEHEF+boIapPIFw5QR5LLz0AJAl3YsVheS EcB6qqunjQL3j4WRT8d/3+hH+Je7i2m5VkFvj8MF52SbyZkat1lDi6AUOHAIH9KtJgk/i4kJJGp O3utWBHRvTwP7mmR/ncuuW35EGXAw+XCdmNK3MRdQon7upXdnjzz2TsJcF+LV/7Ng823yo5Sui7 m1i8h21XZkGto5w7ZrYCZr9XvkysYjwflH1XE5k0f2qck= X-Received: by 2002:a05:600d:848a:b0:490:9d1b:f06b with SMTP id 5b1f17b1804b1-490a2943afamr206045645e9.26.1780410456096; Tue, 02 Jun 2026 07:27:36 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b0e18e1csm66771965e9.4.2026.06.02.07.27.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 07:27:35 -0700 (PDT) From: James Clark Date: Tue, 02 Jun 2026 15:26:57 +0100 Subject: [PATCH v2 15/18] 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: <20260602-james-cs-context-tracking-fix-v2-15-85b5ce6f55c6@linaro.org> References: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@linaro.org> In-Reply-To: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@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 0dfb4fadf531..8b5c60a09012 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 [ -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 Mon Jun 8 04:25:37 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 76719423A93 for ; Tue, 2 Jun 2026 14:27:38 +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=1780410461; cv=none; b=LE2K31Pizd2v2ofKqQK7/MwwUocsyZ3PemCE/niudTZZuNvx+9vnf6UT4Az74vc2OjlzS8DqrcTGQgFPRu7lg4ga08K16rHKeUOQG8idmN5Oovr2kaEwXa1T9ZBg7cUvbIpcb3RoKmAp953kOPECysMpvbyLvDJVJjZQU+I1Avo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410461; c=relaxed/simple; bh=kiF2OTFMHPFSfKgoJlJ6LUHEtfynLX2Gc37z45ui+yM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dD+FA+F2CcszxBSejsHVfQKszq7BFdhiretnRFjemwOi2N0CDgoMSEuXlX27LvAnT+enk211QDV7dAOJwTUrIGhe9NyZ7e+9LFf0Srp3biC0ZY+VJpdjQ61SgIs74GfUpmMoD1nDYQa3kUDmAqoGzeNFq89g6w9sPfdlKh9UdSs= 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=Jv7gnym1; 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="Jv7gnym1" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-4905529b933so89852325e9.0 for ; Tue, 02 Jun 2026 07:27:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780410457; x=1781015257; 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=wlDlLwXjKsadrJWN67gG6GxzbQU2KCIjPSaxtLGJjnQ=; b=Jv7gnym1U4iKfN6BE4yjZ1BtzxIQux3BD2TmtuxpQvnPCGc5RKaqLE6KenwzNiJbLw 2U+cAMnO8UMHbxDwC4kllfMoqFLk8kAj65La/lpSqUQEXl/wnZRmmm7dIdZXHQzrqNiZ tXw9BfaA7tbOghNLkxBJwdB3jc8gSP4C/CwfTOntI5wS1Xww3DZnrpIT7kpC9Vj4iyp5 vhLVUe+ceFWEuFUk4r9eXBYcnyD2hDqcVxz2m0u8RTAakFiU2M7xxGTUm50koPWo9g7x rgRjZJG71DirmxCv7NKDpuo4UnZ+paTUbgBA2uVGBNqrohS1OMincuTdKwgy+JQ9YsYi cL5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780410457; x=1781015257; 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=wlDlLwXjKsadrJWN67gG6GxzbQU2KCIjPSaxtLGJjnQ=; b=FhfQtk9RYmwVJsBctFmnKqRqp10IGvEPsJlB+XOBcKlPBKNZFRV8AnzD5gC/AiKxyY vLiLNFZ9Pj8QCQL5TNM/YbmkDZKOsv1NQL0tF1Y4dpK1HFemjC6k+O5nHpIi7N6fBkH4 plswAI82+dmMms+gAcskDgvstkO3Kf7dP3hGyjdDrIFHl4SSN4OEDKXNMwyqih1UUDS9 sL09SY1mtKE62LSDDPXgnsWO3X2pnocU0CxddnxbkQNgEIRRFvKmZM5nPMQxTPK0kHb2 XB51ObQggG3o4HKiuEG0esLz2kUDRqzrFDclYdMmC3aNIybyzYlN3Ztj2Q0uz6CgQCQn OPfg== X-Forwarded-Encrypted: i=1; AFNElJ8+2iqsTinLu0hE3hDhr2p+cRUatLH2CB20tnsPTI6iTf5ZoYjeiJGx+lecG9WiXOHkShpPi+EQitFYCMk=@vger.kernel.org X-Gm-Message-State: AOJu0YxddVQdJAUYNju3i7jXU2siUi4CGTXMLNQ3i95lxmXwaCLhfxDo fF5Nuqe6A0VcW2ZnuprewXwMg2yXsg5qbgeyZuUGLcxBMIjus8wzMO4d965kjEKZJn0= X-Gm-Gg: Acq92OEnGIWKDQQPg2T1Zuar2krlCNBLK0NdRl5wy+sCGxU4L9/FMLnQMYp5g/Jy4Ya kkHzW/nI7s66BkmwYgv6BnSyfFbIbDw5KO14r+ineFfkIMtzrgmBjW9yd73WdLmw59LFvbQ4kPx mraigkSch3n4QhMKMKvdYWkLhfvogZ9dgI8cikrvZFS64W1M7SZNaIAQxbMurrGT/RGfND7z/Bq yRJvZB0GdJXDm834JrCHSaVYL+fPeo/hH8j1wdQh2FhCoBIN6JrNky0Yz4+m5z2nWfiOnHK85hh FUxZWWCPDSgHOU71Q/16nmHnxZ+/EwhSmyJp9yWpflUgw1A9j2NrS4XmEgZQykGnc8zzUP9QPB8 6G16k+/sVgJHC2b3soPKVopXKzA3eea4sNdpiGDn12b3woj5SfuFnmlHcp0WTSvIprLxOfXfRPF D5aCWvcfS2ThDkuBhcWrG1/IE4mXl1NUgc+R2ezL4ABdo= X-Received: by 2002:a05:600c:c11c:b0:490:4663:691b with SMTP id 5b1f17b1804b1-490a2923a3bmr241787255e9.7.1780410457017; Tue, 02 Jun 2026 07:27:37 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b0e18e1csm66771965e9.4.2026.06.02.07.27.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 07:27:36 -0700 (PDT) From: James Clark Date: Tue, 02 Jun 2026 15:26:58 +0100 Subject: [PATCH v2 16/18] 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: <20260602-james-cs-context-tracking-fix-v2-16-85b5ce6f55c6@linaro.org> References: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@linaro.org> In-Reply-To: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@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. Signed-off-by: James Clark Reviewed-by: Leo Yan --- 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 8b5c60a09012..5ee87eb7973e 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 [ -e /proc/kcore ]; then @@ -47,7 +46,7 @@ if [ -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 # kcore is required for correct kernel decode due to runtime code 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 Mon Jun 8 04:25:37 2026 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (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 7A9D4426688 for ; Tue, 2 Jun 2026 14:27:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410461; cv=none; b=MNRgvHblVHk453mWhoix7zwlG4iMoKt5/qVKNe7Xq2xo4vCVNnB6QKgIQUtJH7oEvWrywrliEeyN3YR6ikjlGZ+EY6iQi95YnQkEEigq5wjahV+OKaiLFFcZfhYIUFnz6qh62YrGv00OM3QZsYiIwJTPUS3pZX82+pb5ZGmzWS4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410461; c=relaxed/simple; bh=8LSDPEyYFg9oEMScO6e3DlP1X0ZKaHJzrU3+/imMTps=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=o2ddIKpx8Dr0GZaMqt78nQyolT6iGnClDseN57vUclGU08r7T0fLpAXYtkzvh0k6r87oIsrtslIZBLp4RJHNm8qulwjDpDA0mhr5uqllc34dU0Ruv6yU8YQkbPI5UDTs11ZQPfZBJGyctX3WKWEj81jr8JK+vtVCiLJigTNqTlM= 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=NiDViISC; arc=none smtp.client-ip=209.85.128.53 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="NiDViISC" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-4903f7a90d1so104341115e9.2 for ; Tue, 02 Jun 2026 07:27:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780410458; x=1781015258; 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=3CFsmZwqnn6DMPD7vsYdcccNw39lngm7NfIBTUlMynk=; b=NiDViISC1seieV876LAYXrFV4TMVt7QMcKRLyV7i68SfIg14S7peg5WG3INzCzhfa7 IJHtsM6+wjm82Lt6Tbw9t/JV2K+ohhNTpel2OiSX9KIan8dl9adqOPRAXI7qgguUNiK0 PlD5RmVnInEjSOInaNNq3H80wJc2C7xlxCLJajdS4pmRnmGZxcX+jaV2Us3X7lk1Yv1b YQWk2ZutnFRAq/YIPzssz3zTM7ZezhWcPI8KfKsFQMsl7H9z4013+gXITAGtnKwUuji2 Y4QmCg0AhQJVGjva3oJJzmrWrRPH+ai9vz+qzt9yV6VWZxhQxTjtxAXIN8awHNpKJPhN UHIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780410458; x=1781015258; 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=3CFsmZwqnn6DMPD7vsYdcccNw39lngm7NfIBTUlMynk=; b=CsDEAvVNLk2G4yvD4hasRy3pv1H7DA7/pKzE3fPSeLkOr7G7SpJvqknIVUVmDQHHmw rJyl6UcmD24nA27R/XSt1H1QtwZ5HkLZdV0Is+FI/EldqdkvlBCdh3wfJhTnA4PuUXOn 1v8tFKguR7BfbqvbBF4dGCts1sEzY/WNW8/tEH0krJ0IHcCPQYiqGk+sU64s1BXZ6TOu iSi1JnqgRLdcaD3goRUuJhfcjHLxjZi3wvZHEI4IT99eHipHhecV4OStUVpKcU+Bxc87 Q+jS4jpdG3U48LjI6I27w2yyoVjxvlQRUlFt12RMl/2XUijVoINh0hd1QosTUech/aeS kjNg== X-Forwarded-Encrypted: i=1; AFNElJ/UPRomh03YFL/TQ+WRgXu4Kr8QSr2/59ArEi8/02K8OyXQfJuDQ7+Ka8C+MXInc6p+C62K93xQkcOIMTc=@vger.kernel.org X-Gm-Message-State: AOJu0Yway0PAt6R2vUlo7Sx9CMgCQdb0cXlqPtstPKN2tD6sr7XvwUZ8 uuqKgpNaTNvn6hT0+Td0jo3iQO74uBVqjthKn1DMbBwHqbnRoVxoCcOKloJzxhamv8Q= X-Gm-Gg: Acq92OHENGl9i1gEQar5i10lraAaO1Sfq/2+pNq4wYXcFQL3h49JCTE9TUl37Dc7pML Bw5S/RRIyaOGBJH4yLjDki/f0ocY8eFtAJ6e2nXUy+16TLYk55+V9c/lgVzAhuugOkIIZMSSFCg emVy1AfM72ZZxGtotgaWb6Kq8CFQVAydhdoGc4r3bVqq4tVFD1Kpc6T7sSpDm39MmMRKe2+6ECF YAhLru+3Apq1WTbGxlD9m3BILtRqMhaNTdeFlRVR9NZzXdBZhz0qiq4QkC6Kp58VTbNMIOMULAU miqM6L+0FFLxQ2DYxKFi3kEsG/GFo81dRenb5QfbGKXFZWKFHEHEgUTtN1OmJvJNc6XGlnr5YDk IfssYmBYYlZQn7MSUU9ikyh+XfReLqYJTvYJqeoxq+EPaQIv4LkUnGJux6Q1wbj9Kqg+YMGe0cc anZqvh67OBjxTtr4PyU6OBGqgR0gGwMOZaYLD1NGtN7as= X-Received: by 2002:a05:600d:4453:10b0:490:6869:ef13 with SMTP id 5b1f17b1804b1-490a2918e9fmr208222895e9.14.1780410457984; Tue, 02 Jun 2026 07:27:37 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b0e18e1csm66771965e9.4.2026.06.02.07.27.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 07:27:37 -0700 (PDT) From: James Clark Date: Tue, 02 Jun 2026 15:26:59 +0100 Subject: [PATCH v2 17/18] 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: <20260602-james-cs-context-tracking-fix-v2-17-85b5ce6f55c6@linaro.org> References: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@linaro.org> In-Reply-To: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@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. Signed-off-by: James Clark Reviewed-by: Leo Yan --- 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 5ee87eb7973e..2a400fd38a36 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 [ -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 Mon Jun 8 04:25:37 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 7CB88426EB2 for ; Tue, 2 Jun 2026 14:27:40 +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=1780410462; cv=none; b=Ej5LWqxrdRSbTqb03KLP23zJow2u0APbjQuKOsRVqq5liCE0VKxMXd+DGhkZQbXrfPOynI1BMy7RNrh08i1iLM1/s6y/dtYkH3fA7YccALd886XOqfBugMIgrua/29FHKf8DHc9jKvamufF366qGULFIB8XxfEoV2TzPbx1RPAg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780410462; c=relaxed/simple; bh=UqUTcZlsYRMZ7HrUOPVdOIyjHND7lnBLRlj9pGTngF8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fOIKdi1SX/xCl3NCAxsohOuOsHvQnLAFPRX8GwBt8zmiPcbUkdeo4MSo0E5nENU7UpPcMz8DXVYnEBjW7/lE7hUK05kolexMOp89W9lIIUbtS0abN9fZbGhIB2CTP4u28XVyBV4DPq0bB3cCxyfA0047OAmzYF2D+UKVIEArm8c= 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=TWTTARr0; 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="TWTTARr0" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-49041e84237so93821395e9.1 for ; Tue, 02 Jun 2026 07:27:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1780410459; x=1781015259; 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=eCyit+MYNey9T5qQgf6spNYkow7XxVLTYJAiVVbCmNE=; b=TWTTARr0hyfXJFttBluqwf4CfuBhqj559ARL/D/LHTuf1PKJfmtL58sJaQ7/Pegpep gNbovz6Yjxzs50/PtGa+CbBUv9CElKnN1w0EKGVXwusA6GM5mSYy8LNZvNYFKI57VB+H MXYs8ox+a0MbPfS2skPwSDfNNrhSbNC3MsJ8tmyeWY17Wu9Fx0HwmO6DynVmeBHyd3fL rkcdowRJMjY3D4IF3oT97b1Isdadkjew7kjWhyJUEJO6q6bZcss+D3puSyoi6G2+LZjN 2B7scg/EGPdhkOAUCCTST6yyDLjCYfgHNulzAV0GsQRDSmBqxbA9qhDq3AEx+JOIybnx thHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780410459; x=1781015259; 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=eCyit+MYNey9T5qQgf6spNYkow7XxVLTYJAiVVbCmNE=; b=le1IjELafUo96/o+/AJHa8z54FiYeXc/aXOJJSXby87hKfWaYdtNm1y1cbDAGF6KmK VMgfImpgNSoJBlet7HJSxyZDB2Eo8j0T2E2BDJFyv56yYe/nnW3qaDzTW3YZwXifZOvO 8OMxrycbzwdkSEgfXGJ+jD/1acVR94ucgxHJdmDb+Lw14lHfZsbwDnWpj0s3IoIi0GxU qfjdvG70uQ7nNxfSGXcdagKdJnmrTvNXBFlEly/NxZ8XWg4Ii/vF3hDjpiFfRmOUtoo9 2y7tTxIUm91nM9espYnBGpSMcVyT403GmKXPIO05rZb4QdrsF1euJ0FGQ2KBArgI6CGp X0Uw== X-Forwarded-Encrypted: i=1; AFNElJ8YOiZQwbBHjb+qBgumuF4c/0i0HFQXiQ0BWgGD1u8aHjIqxfqEbD4GmnDsLCz6s92UBWZ0IyX2JR27Jh4=@vger.kernel.org X-Gm-Message-State: AOJu0Yy7Tp13o/nzeGWLPiNsa12Jm5qUEFxrVfR7aQTkftcsfzsJyqd4 LwT+LrlEJu8zK5Wzw9CoCt6DshqYVNOYKCuXxNnBeM8GGagmSWCPiTSTW6krdEsvvvw= X-Gm-Gg: Acq92OHX+M7vKfiR5i7IsKd1DqF8GNb3fshhFaYu5pxNp/uVoGaTleeVde5mb/0Tohl 6O5LB7nFDqwg6r6OZcxZK5XrxLUP53aHBDkDd5fDnRfP5S7HGtlLjn79pQgyPv/gH2NIl7AqYz8 XDqtaXRU1+Ss6NYnTmbCYbZMtc5tTv0P7t9L6bU04KBVkz7HAVZ8clFJYy8oiyPG3yt4PqZYwtJ S3ay+ICfaAeFimLyRCljgXYMEjNKC85mS/sIP2HoE0f7ZUDF/ytgA+3uqjcQzqt1M0HWmsueH2l oDw/NjT4aS4Dj5Or27Coso0haprkKqpNyGH4YnxngVRPjhaB1jb801JZa67mcN2zuZxv/rtLffn ktwEyVv7fbD6GYpRtB67lMXwK8JbtBhjNK/DBGy5YZ/94tcEaqVH7Yu/Xwe63h/CJVFUhOIfcXO zMdkKgjQPOJmPg1DUSQ9ZlP1zB1Ppil8VZpc+C25xG3hs= X-Received: by 2002:a05:600d:6447:10b0:490:5000:917 with SMTP id 5b1f17b1804b1-490b0e373acmr50037565e9.1.1780410458901; Tue, 02 Jun 2026 07:27:38 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490b0e18e1csm66771965e9.4.2026.06.02.07.27.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 07:27:38 -0700 (PDT) From: James Clark Date: Tue, 02 Jun 2026 15:27:00 +0100 Subject: [PATCH v2 18/18] 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: <20260602-james-cs-context-tracking-fix-v2-18-85b5ce6f55c6@linaro.org> References: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@linaro.org> In-Reply-To: <20260602-james-cs-context-tracking-fix-v2-0-85b5ce6f55c6@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. Signed-off-by: James Clark Reviewed-by: Leo Yan --- 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 2a400fd38a36..b196aab709f8 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