Received: by 10.213.65.68 with SMTP id h4csp1525016imn; Wed, 4 Apr 2018 22:11:16 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/V3qF0wW9fJ8JAL2dzW4G4yo/Bmh1DiMddyxv9bZ9x2OUNEYT1f51al63MmxLCQjnWZqo3 X-Received: by 2002:a17:902:9696:: with SMTP id n22-v6mr22027509plp.355.1522905075951; Wed, 04 Apr 2018 22:11:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522905075; cv=none; d=google.com; s=arc-20160816; b=EpFis0wixrfF+/0HowA/I8yjto0B4WWLIBr/CsCaB0L3Vw3NSN5i0S/8Z9CPnblQuz 98hJt9BKim0ol9AVMovX3dbt4UK2eWUuz6fO0d/zTE3utsWfLGfVzA1Ocajv0n0Mt7qu 5yA8AJDLZk1qmtUl2LAHxiEoRaqa4ngCp+D8tZRy3fpIsP+c/7AZh5F+AlLIoeELXPTQ tWBkBZEP9PI7eFzp+OkZnO22DV+aF3Edre9OgWplX2vuSpWH9SZgzlLcZpibE1ExDpHH 3GlVSzjchw8Tkw4MX8/B47//nkzX0rmtGF8QlEfbZLHcXDXWLvxerZP+PgriW7ikB5/M WiNA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:arc-authentication-results; bh=22HNqHb8Pm7kpV/+HAseZ1YJHdaUt//1ZyOe6Ptkssk=; b=PYIdXJKSR8VvZJINrU76abCfzeq6W+0iUGD9mfoAANOrll4xV24tR3SnDBQlqJgrWz AWg89VQFm7HBzKgaJ6t0aQPX4X3TDAIo7TzJieMM/WLgoziWvCKLnhRFOc+tdDzEL5v6 lNs07WQ3Bv96/8jnWOY4KxEbBzN6YBUjlcp3ouXrbpGF6y57UcIkhLCqJAQK1OLlhlzQ ZLYPeJHgwezA/Mm5C3aFEMA/IKYXkA29FASmIvSxmLznjlcAeF0WRI7eb/7Cae0axEyE ol7KhTc3a6mAqwB0rHBM5LZ3aSdHpOrKF+XX8C5nGEFJ5fmUoqO/Kt15Bg5MI4FVAS0A 8spw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g8si5294543pfh.401.2018.04.04.22.11.00; Wed, 04 Apr 2018 22:11:15 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751469AbeDEFJu (ORCPT + 99 others); Thu, 5 Apr 2018 01:09:50 -0400 Received: from exmail.andestech.com ([59.124.169.137]:61089 "EHLO ATCSQR.andestech.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751117AbeDEFJt (ORCPT ); Thu, 5 Apr 2018 01:09:49 -0400 Received: from mail.andestech.com (atcpcs16.andestech.com [10.0.1.222]) by ATCSQR.andestech.com with ESMTP id w3554N20028533; Thu, 5 Apr 2018 13:04:23 +0800 (GMT-8) (envelope-from alankao@andestech.com) Received: from andestech.com (10.0.1.85) by ATCPCS16.andestech.com (10.0.1.222) with Microsoft SMTP Server id 14.3.123.3; Thu, 5 Apr 2018 13:09:38 +0800 Date: Thu, 5 Apr 2018 13:09:39 +0800 From: Alan Kao To: Alex Solomatnikov CC: Palmer Dabbelt , Albert Ou , "Peter Zijlstra" , Ingo Molnar , "Arnaldo Carvalho de Melo" , Alexander Shishkin , Jiri Olsa , "Namhyung Kim" , Jonathan Corbet , , , , Nick Hu , Greentime Hu Subject: Re: [PATCH v2 2/2] perf: riscv: Add Document for Future Porting Guide Message-ID: <20180405050938.GB24451@andestech.com> References: <1522672284-29593-1-git-send-email-alankao@andestech.com> <1522672284-29593-3-git-send-email-alankao@andestech.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.24 (2015-08-30) X-Originating-IP: [10.0.1.85] X-DNSRBL: X-MAIL: ATCSQR.andestech.com w3554N20028533 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Alex, On Tue, Apr 03, 2018 at 07:08:43PM -0700, Alex Solomatnikov wrote: > Doc fixes: > > Thanks for these fixes. I'll edit this patch and send a v3 once I am done with the PMU patch. I suppose a "Reviewed-by: Alex Solomatnikov" appending at the end of the commit will be great, right? Alan > diff --git a/Documentation/riscv/pmu.txt b/Documentation/riscv/pmu.txt > index a3e930e..ae90a5e 100644 > --- a/Documentation/riscv/pmu.txt > +++ b/Documentation/riscv/pmu.txt > @@ -20,7 +20,7 @@ the lack of the following general architectural > performance monitoring features: > * Enabling/Disabling counters > Counters are just free-running all the time in our case. > * Interrupt caused by counter overflow > - No such design in the spec. > + No such feature in the spec. > * Interrupt indicator > It is not possible to have many interrupt ports for all counters, so an > interrupt indicator is required for software to tell which counter has > @@ -159,14 +159,14 @@ interrupt for perf, so the details are to be > completed in the future. > > They seem symmetric but perf treats them quite differently. For reading, there > is a *read* interface in *struct pmu*, but it serves more than just reading. > -According to the context, the *read* function not only read the content of the > -counter (event->count), but also update the left period to the next interrupt > +According to the context, the *read* function not only reads the content of the > +counter (event->count), but also updates the left period for the next interrupt > (event->hw.period_left). > > But the core of perf does not need direct write to counters. Writing counters > -hides behind the abstraction of 1) *pmu->start*, literally start > counting so one > +is hidden behind the abstraction of 1) *pmu->start*, literally start > counting so one > has to set the counter to a good value for the next interrupt; 2) > inside the IRQ > -it should set the counter with the same reason. > +it should set the counter to the same reasonable value. > > Reading is not a problem in RISC-V but writing would need some effort, since > counters are not allowed to be written by S-mode. > @@ -190,37 +190,37 @@ Three states (event->hw.state) are defined: > A normal flow of these state transitions are as follows: > > * A user launches a perf event, resulting in calling to *event_init*. > -* When being context-switched in, *add* is called by the perf core, with flag > - PERF_EF_START, which mean that the event should be started after it is added. > - In this stage, an general event is binded to a physical counter, if any. > +* When being context-switched in, *add* is called by the perf core, with a flag > + PERF_EF_START, which means that the event should be started after > it is added. > + At this stage, a general event is bound to a physical counter, if any. > The state changes to PERF_HES_STOPPED and PERF_HES_UPTODATE, > because it is now > stopped, and the (software) event count does not need updating. > ** *start* is then called, and the counter is enabled. > - With flag PERF_EF_RELOAD, it write the counter to an appropriate > value (check > - previous section for detail). > - No writing is made if the flag does not contain PERF_EF_RELOAD. > - The state now is reset to none, because it is neither stopped nor update > - (the counting already starts) > -* When being context-switched out, *del* is called. It then checkout all the > - events in the PMU and call *stop* to update their counts. > + With flag PERF_EF_RELOAD, it writes an appropriate value to the > counter (check > + the previous section for details). > + Nothing is written if the flag does not contain PERF_EF_RELOAD. > + The state now is reset to none, because it is neither stopped nor updated > + (the counting already started) > +* When being context-switched out, *del* is called. It then checks out all the > + events in the PMU and calls *stop* to update their counts. > ** *stop* is called by *del* > and the perf core with flag PERF_EF_UPDATE, and it often shares the same > subroutine as *read* with the same logic. > The state changes to PERF_HES_STOPPED and PERF_HES_UPTODATE, again. > > -** Life cycles of these two pairs: *add* and *del* are called repeatedly as > +** Life cycle of these two pairs: *add* and *del* are called repeatedly as > tasks switch in-and-out; *start* and *stop* is also called when the perf core > needs a quick stop-and-start, for instance, when the interrupt > period is being > adjusted. > > -Current implementation is sufficient for now and can be easily extend to > +Current implementation is sufficient for now and can be easily > extended with new > features in the future. > > A. Related Structures > --------------------- > > -* struct pmu: include/linux/perf_events.h > -* struct riscv_pmu: arch/riscv/include/asm/perf_events.h > +* struct pmu: include/linux/perf_event.h > +* struct riscv_pmu: arch/riscv/include/asm/perf_event.h > > Both structures are designed to be read-only. > > @@ -231,13 +231,13 @@ perf's internal state machine (check > kernel/events/core.c for details). > *struct riscv_pmu* defines PMU-specific parameters. The naming follows the > convention of all other architectures. > > -* struct perf_event: include/linux/perf_events.h > +* struct perf_event: include/linux/perf_event.h > * struct hw_perf_event > > The generic structure that represents perf events, and the hardware-related > details. > > -* struct riscv_hw_events: arch/riscv/include/asm/perf_events.h > +* struct riscv_hw_events: arch/riscv/include/asm/perf_event.h > > The structure that holds the status of events, has two fixed members: > the number of events and the array of the events. > >