From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758747AbcINExm (ORCPT ); Wed, 14 Sep 2016 00:53:42 -0400 Received: from mail-pa0-f67.google.com ([209.85.220.67]:33537 "EHLO mail-pa0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752814AbcINExj (ORCPT ); Wed, 14 Sep 2016 00:53:39 -0400 Message-ID: <1473828811.2554.12.camel@gmail.com> Subject: Re: [PATCH v14 07/15] selftests/powerpc: Add ptrace tests for TAR, PPR, DSCR registers From: Cyril Bur To: wei.guo.simon@gmail.com, linuxppc-dev@lists.ozlabs.org Cc: Shuah Khan , Michael Ellerman , Chris Smart , Suraj Jitindar Singh , Michael Neuling , Anshuman Khandual , Jack Miller , Rashmica Gupta , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org Date: Wed, 14 Sep 2016 14:53:31 +1000 In-Reply-To: <1473665605-11890-8-git-send-email-wei.guo.simon@gmail.com> References: <1473665605-11890-1-git-send-email-wei.guo.simon@gmail.com> <1473665605-11890-8-git-send-email-wei.guo.simon@gmail.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.20.5 Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 2016-09-12 at 15:33 +0800, wei.guo.simon@gmail.com wrote: > From: Anshuman Khandual > > This patch adds ptrace interface test for TAR, PPR, DSCR > registers. This also adds ptrace interface based helper > functions related to TAR, PPR, DSCR register access. > > Signed-off-by: Anshuman Khandual > Signed-off-by: Simon Guo > --- >  tools/testing/selftests/powerpc/ptrace/Makefile    |   3 +- >  .../testing/selftests/powerpc/ptrace/ptrace-tar.c  | 159 > ++++++++++++++++++ >  .../testing/selftests/powerpc/ptrace/ptrace-tar.h  |  50 ++++++ >  tools/testing/selftests/powerpc/ptrace/ptrace.h    | 181 > +++++++++++++++++++++ >  4 files changed, 392 insertions(+), 1 deletion(-) >  create mode 100644 tools/testing/selftests/powerpc/ptrace/ptrace- > tar.c >  create mode 100644 tools/testing/selftests/powerpc/ptrace/ptrace- > tar.h > [snip] > + > +void tar(void) > +{ > + unsigned long reg[3]; > + int ret; > + > + cptr = (int *)shmat(shm_id, NULL, 0); > + printf("%-30s TAR: %u PPR: %lx DSCR: %u\n", > + user_write, TAR_1, PPR_1, DSCR_1); > + > + mtspr(SPRN_TAR, TAR_1); > + mtspr(SPRN_PPR, PPR_1); > + mtspr(SPRN_DSCR, DSCR_1); > + > + cptr[2] = 1; > + > + /* Wait on parent */ > + while (!cptr[0]); asm volatile("" ::: "memory"); > + > + reg[0] = mfspr(SPRN_TAR); > + reg[1] = mfspr(SPRN_PPR); > + reg[2] = mfspr(SPRN_DSCR); > + > + printf("%-30s TAR: %lu PPR: %lx DSCR: %lu\n", > + user_read, reg[0], reg[1], reg[2]); > + > + /* Unblock the parent now */ > + cptr[1] = 1; > + shmdt((int *)cptr); > + > + ret = validate_tar_registers(reg, TAR_2, PPR_2, DSCR_2); > + if (ret) > + exit(1); > + exit(0); > +} > + > +int trace_tar(pid_t child) > +{ > + unsigned long reg[3]; > + int ret; > + > + ret = start_trace(child); > + if (ret) > + return TEST_FAIL; > + > + ret = show_tar_registers(child, reg); > + if (ret) > + return TEST_FAIL; > + > + printf("%-30s TAR: %lu PPR: %lx DSCR: %lu\n", > + ptrace_read_running, reg[0], reg[1], > reg[2]); > + > + ret = validate_tar_registers(reg, TAR_1, PPR_1, DSCR_1); > + if (ret) > + return TEST_FAIL; > + > + ret = stop_trace(child); > + if (ret) > + return TEST_FAIL; > + > + return TEST_PASS; > +} > + > +int trace_tar_write(pid_t child) > +{ > + int ret; > + > + ret = start_trace(child); > + if (ret) > + return TEST_FAIL; > + > + ret = write_tar_registers(child, TAR_2, PPR_2, DSCR_2); > + if (ret) > + return TEST_FAIL; > + > + printf("%-30s TAR: %u PPR: %lx DSCR: %u\n", > + ptrace_write_running, TAR_2, PPR_2, DSCR_2); > + > + ret = stop_trace(child); > + if (ret) > + return TEST_FAIL; > + > + return TEST_PASS; > +} More comments about calling TEST_FAIL(x) > + > +int ptrace_tar(void) > +{ > + pid_t pid; > + int ret, status; > + > + shm_id = shmget(IPC_PRIVATE, sizeof(int) * 3, > 0777|IPC_CREAT); > + pid = fork(); > + if (pid < 0) { > + perror("fork() failed"); > + return TEST_FAIL; > + } > + > + if (pid == 0) > + tar(); > + > + if (pid) { > [snip]