On Mon, Aug 06, 2018 at 03:23:53PM +0200, Jiri Olsa wrote:
> On Mon, Aug 06, 2018 at 02:48:40PM +0200, Oleg Nesterov wrote:
> > On 08/06, Jiri Olsa wrote:
> > >
> > > We need to change the breakpoint even if the attr with
> > > new fields has disabled set to true.
> > 
> > Agreed... The patch looks fine to me, but I have a question
> > 
> > >  int modify_user_hw_breakpoint(struct perf_event *bp, struct 
> > > perf_event_attr *attr)
> > >  {
> > > + int err;
> > > +
> > >   /*
> > >    * modify_user_hw_breakpoint can be invoked with IRQs disabled and 
> > > hence it
> > >    * will not be possible to raise IPIs that invoke __perf_event_disable.
> > > @@ -520,11 +522,11 @@ int modify_user_hw_breakpoint(struct perf_event 
> > > *bp, struct perf_event_attr *att
> > >   else
> > >           perf_event_disable(bp);
> > >  
> > > - if (!attr->disabled) {
> > > -         int err = modify_user_hw_breakpoint_check(bp, attr, false);
> > > + err = modify_user_hw_breakpoint_check(bp, attr, false);
> > > + if (err)
> > > +         return err;
> > >  
> > > -         if (err)
> > > -                 return err;
> > > + if (!attr->disabled) {
> > >           perf_event_enable(bp);
> > >           bp->attr.disabled = 0;
> > 
> > Afaics you do not need to clear attr.disabled, 
> > modify_user_hw_breakpoint_check()
> > updates it if err = 0. So I think
> > 
> >     if (!bp->attr.disabled)
> >             perf_event_enable(bp);
> > 
> > will look a bit better.
> > 
> > 
> > But, with or without this fix, shouldn't we set .disabled = 1 if modify_() 
> > fails?
> > IIUC this doesn't matter, bp->attr.disabled is not really used anyway, but 
> > looks a
> > bit confusing.
> > 
> 
> yea, I was looking on that, but as u said it makes no difference
> and I wanted to keep the patch as simple as possible ;-)
> 
> I'll send something on top of this patch

like this ;-)

jirka


---
Once the breakpoint was succesfully modified, the attr->disabled
value is in bp->attr.disabled. So there's no reason to set it
again, removing that.

Link: http://lkml.kernel.org/n/tip-v5oaellzsmyszv3rfucux...@git.kernel.org
Signed-off-by: Jiri Olsa <jo...@kernel.org>
---
 kernel/events/hw_breakpoint.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/kernel/events/hw_breakpoint.c b/kernel/events/hw_breakpoint.c
index fb229d9c7f3c..3e560d7609fd 100644
--- a/kernel/events/hw_breakpoint.c
+++ b/kernel/events/hw_breakpoint.c
@@ -526,10 +526,9 @@ int modify_user_hw_breakpoint(struct perf_event *bp, 
struct perf_event_attr *att
        if (err)
                return err;
 
-       if (!attr->disabled) {
+       if (!attr->disabled)
                perf_event_enable(bp);
-               bp->attr.disabled = 0;
-       }
+
        return 0;
 }
 EXPORT_SYMBOL_GPL(modify_user_hw_breakpoint);
-- 
2.17.1

Reply via email to