Re: [PATCH v2 1/5] kernel-shark-qt: Add kshark_get_X_easy() functions.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 5 Oct 2018 17:30:17 +0300
"Yordan Karadzhov (VMware)" <y.karadz@xxxxxxxxx> wrote:

> Hi Steven,
> 
> I guess this email thread was lost on your side.

Not lost, just forgotten about ;-)

> 
> Is my explanation of the "UNTOUCHED_MASK" OK?
> Should I send you v3 of the patches with the other fixes you asked for?
> 
> On  3.10.2018 10:34, Yordan Karadzhov wrote:
> > 
> > 
> > On  2.10.2018 23:44, Steven Rostedt wrote:  
> >> On Mon,  1 Oct 2018 16:59:17 +0300
> >> Yordan Karadzhov <ykaradzhov@xxxxxxxxxx> wrote:
> >>  
> >>> From: "Yordan Karadzhov (VMware)" <y.karadz@xxxxxxxxx>
> >>>
> >>> The kshark_get_X_easy() functions allow for an easy access to the
> >>> tep_record's fields. Using these functions can be inefficient if you
> >>> need access to more than one of the fields of the record.
> >>>
> >>> Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@xxxxxxxxx>
> >>> ---
> >>>    kernel-shark-qt/src/libkshark.c | 185 ++++++++++++++++++++++++++++++++
> >>>    kernel-shark-qt/src/libkshark.h |  12 +++
> >>>    2 files changed, 197 insertions(+)
> >>>
> >>> diff --git a/kernel-shark-qt/src/libkshark.c b/kernel-shark-qt/src/libkshark.c
> >>> index 506511d..a7983eb 100644
> >>> --- a/kernel-shark-qt/src/libkshark.c
> >>> +++ b/kernel-shark-qt/src/libkshark.c
> >>> @@ -888,6 +888,191 @@ static const char *kshark_get_info(struct tep_handle *pe,
> >>>    	return seq.buffer;
> >>>    }
> >>>    
> >>> +/**
> >>> + * @brief This function allows for an easy access to the original value of the
> >>> + *	  Process Id as recorded in the tep_record object. The record is read
> >>> + *	  from the file only in the case of an entry being touched by a plugin.
> >>> + *	  Be aware that using the kshark_get_X_easy functions can be
> >>> + *	  inefficient if you need an access to more than one of the data fields
> >>> + *	  of the record.
> >>> + *
> >>> + * @param entry: Input location for the KernelShark entry.
> >>> + *
> >>> + * @returns The original value of the Process Id as recorded in the
> >>> + *	    tep_record object on success, otherwise negative error code.
> >>> + */
> >>> +int kshark_get_pid_easy(struct kshark_entry *entry)
> >>> +{
> >>> +	struct kshark_context *kshark_ctx = NULL;
> >>> +	struct tep_record *data;
> >>> +	int pid;
> >>> +
> >>> +	if (!kshark_instance(&kshark_ctx))
> >>> +		return -EFAULT;  
> >>
> >> Perhaps this should return -ENODEV;
> >>  
> >>> +
> >>> +	if (entry->visible & KS_PLUGIN_UNTOUCHED_MASK) {  
> >>
> >> What's the "UNTOUCHED_MASK" mean?  
> > 
> > We use the KS_PLUGIN_UNTOUCHED_MASK to check the flag (bit)
> > which indicates if the entry has been touched and potential modified by
> > a plugin callback function. If the bit is set this means untouched.
> > 
> > This flag (bit) gets set when we load the data ( libkshark.c /
> > get_records())
> > 
> > 	entry->visible = 0xFF;
> > 
> > ...
> > 
> > 	/* Execute all plugin-provided actions (if any). */
> > 	evt_handler = kshark_ctx->event_handlers;
> > 	while ((evt_handler = kshark_find_event_handler(evt_handler,
> > 						entry->event_id))) {
> > 		evt_handler->event_func(kshark_ctx, rec, entry);
> > 		evt_handler = evt_handler->next;
> > 		if (!evt_handler)
> > 			entry->visible &= ~KS_PLUGIN_UNTOUCHED_MASK;
> > 	}
> >   
> >>  
> >>> +		pid = entry->pid;
> >>> +	} else {  
> > 
> > In this case the entry has been touched by a plugin. Because of this we
> > do not trust the value of "entry->pid".

I guess my question is, can we reset the entry->pid back to something
we do trust, and clear the flag?

Or do we not want to modify it, because the plugin now owns the value?

-- Steve

> >   
> >>> +		data = kshark_read_at(kshark_ctx, entry->offset);
> >>> +		pid = tep_data_pid(kshark_ctx->pevent, data);
> >>> +		free_record(data);  
> >>
> >> Would it be possible to do:
> >>
> >> 		entry->visible |= KS_PLUGIN_UNTOUCHED_MASK;
> >> 		entry->pid = pid;
> >>
> >> ?
> >>
> >> Of course this depends on what that mask means.
> >>  
> >>> +	}
> >>> +
> >>> +	return pid;
> >>> +}
> >>> +  




[Index of Archives]     [Linux USB Development]     [Linux USB Development]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux