mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	intel_th: msu: Add a sysfs attribute to trigger window switch
Now that we have the means to trigger a window switch for the MSU trace store, add a sysfs file to allow triggering it from userspace. Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
		
							parent
							
								
									4840572d3d
								
							
						
					
					
						commit
						6cac7866c2
					
				
					 2 changed files with 36 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -30,4 +30,12 @@ Description:	(RW) Configure MSC buffer size for "single" or "multi" modes.
 | 
			
		|||
		there are no active users and tracing is not enabled) and then
 | 
			
		||||
		allocates a new one.
 | 
			
		||||
 | 
			
		||||
What:		/sys/bus/intel_th/devices/<intel_th_id>-msc<msc-id>/win_switch
 | 
			
		||||
Date:		May 2019
 | 
			
		||||
KernelVersion:	5.2
 | 
			
		||||
Contact:	Alexander Shishkin <alexander.shishkin@linux.intel.com>
 | 
			
		||||
Description:	(RW) Trigger window switch for the MSC's buffer, in
 | 
			
		||||
		multi-window mode. In "multi" mode, accepts writes of "1", thereby
 | 
			
		||||
		triggering a window switch for the buffer. Returns an error in any
 | 
			
		||||
		other operating mode or attempts to write something other than "1".
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1572,10 +1572,38 @@ nr_pages_store(struct device *dev, struct device_attribute *attr,
 | 
			
		|||
 | 
			
		||||
static DEVICE_ATTR_RW(nr_pages);
 | 
			
		||||
 | 
			
		||||
static ssize_t
 | 
			
		||||
win_switch_store(struct device *dev, struct device_attribute *attr,
 | 
			
		||||
		 const char *buf, size_t size)
 | 
			
		||||
{
 | 
			
		||||
	struct msc *msc = dev_get_drvdata(dev);
 | 
			
		||||
	unsigned long val;
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	ret = kstrtoul(buf, 10, &val);
 | 
			
		||||
	if (ret)
 | 
			
		||||
		return ret;
 | 
			
		||||
 | 
			
		||||
	if (val != 1)
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	mutex_lock(&msc->buf_mutex);
 | 
			
		||||
	if (msc->mode != MSC_MODE_MULTI)
 | 
			
		||||
		ret = -ENOTSUPP;
 | 
			
		||||
	else
 | 
			
		||||
		ret = intel_th_trace_switch(msc->thdev);
 | 
			
		||||
	mutex_unlock(&msc->buf_mutex);
 | 
			
		||||
 | 
			
		||||
	return ret ? ret : size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static DEVICE_ATTR_WO(win_switch);
 | 
			
		||||
 | 
			
		||||
static struct attribute *msc_output_attrs[] = {
 | 
			
		||||
	&dev_attr_wrap.attr,
 | 
			
		||||
	&dev_attr_mode.attr,
 | 
			
		||||
	&dev_attr_nr_pages.attr,
 | 
			
		||||
	&dev_attr_win_switch.attr,
 | 
			
		||||
	NULL,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue