Messages in this thread | | | Date | Thu, 4 Mar 2010 09:50:07 +0100 | From | Robert Richter <> | Subject | Re: [RFC][PATCH 06/11] perf, x86: PEBS infrastructure |
| |
On 03.03.10 18:42:48, Peter Zijlstra wrote: > On Wed, 2010-03-03 at 18:38 +0100, Robert Richter wrote: > > > + fake_cpuc = kmalloc(sizeof(*fake_cpuc), GFP_KERNEL | __GFP_ZERO); > > > + if (!fake_cpuc) > > > + return -ENOMEM; > > > + > > > + c = x86_pmu.get_event_constraints(fake_cpuc, event); > > > + > > > + if (!c || !c->weight) > > > + ret = -ENOSPC; > > > + > > > + if (x86_pmu.put_event_constraints) > > > + x86_pmu.put_event_constraints(fake_cpuc, event); > > > > A fake cpu with the struct filled with zeros will cause a null pointer > > exception in amd_get_event_constraints(): > > > > struct amd_nb *nb = cpuc->amd_nb; > > That should result in nb == NULL, right? which is checked slightly > further in the function.
Yes, right. The problem was in your earlier version of this code where fake_cpuc was a null pointer. The check in amd_get_event_constraints() for nb should work.
-Robert
> > > Shouldn't x86_schedule_events() sufficient to decide if a single > > counter is available? I did not yet look at group events, this might > > happen there too. > > Sure, but we will only attempt scheduling them at enable time, this is a > creation time check, failing to create an unschedulable event seems > prudent. > >
-- Advanced Micro Devices, Inc. Operating System Research Center email: robert.richter@amd.com
| |