On Wed, Apr 03, 2024 at 12:36:41AM -0700, Atish Patra wrote: > On 4/1/24 15:36, Atish Patra wrote: > > On Sat, Mar 2, 2024 at 1:49 AM Andrew Jones <ajones@xxxxxxxxxxxxxxxx> wrote: > > > > > > On Wed, Feb 28, 2024 at 05:01:23PM -0800, Atish Patra wrote: ... > > > > + > > > > if (flags & SBI_PMU_STOP_FLAG_RESET) { > > > > pmc->event_idx = SBI_PMU_EVENT_IDX_INVALID; > > > > clear_bit(pmc_index, kvpmu->pmc_in_use); > > > > + if (snap_flag_set) { > > > > + /* Clear the snapshot area for the upcoming deletion event */ > > > > + kvpmu->sdata->ctr_values[i] = 0; > > > > + kvm_vcpu_write_guest(vcpu, kvpmu->snapshot_addr, kvpmu->sdata, > > > > + sizeof(struct riscv_pmu_snapshot_data)); > > > > > > The spec isn't clear on this (so we should clarify it), but I'd expect > > > that a caller who set both the reset and the snapshot flag would want > > > the snapshot from before the reset when this call completes and then > > > assume that when they start counting again, and look at the snapshot > > > again, that those new counts would be from the reset values. Or maybe > > > not :-) Maybe they want to do a reset and take a snapshot in order to > > > look at the snapshot and confirm the reset happened? Either way, it > > > seems we should only do one of the two here. Either update the snapshot > > > before resetting, and not again after reset, or reset and then update > > > the snapshot (with no need to update before). > > > > > > > The reset call should happen when the event is deleted by the perf > > framework in supervisor. > > If we don't clear the values, the shared memory may have stale data of > > last read counters > > which is not ideal. That's why, I am clearing it upon resetting. > > Thinking about it more, I think having stale values in the shared memory > would be similar expected behavior to hardware counters after reset. We > don't need to clear the shared memory during the reset. > > If both SBI_PMU_STOP_FLAG_TAKE_SNAPSHOT and SBI_PMU_STOP_FLAG_RESET are set, > may be we should just write it to the shared memory again without assuming > the intention of the caller ? > Either way, we just need to ensure it's clear in the spec. Thanks, drew