£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
3
<e
                 @   sr   d dl mZ ddlZddlZddlZd dlT ddlZddl	j
Z
ddlT ddlmZ ejj ZG dd dejZdS )   )base    N)*)commandsc                   sf   e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Ze	j
fddZdd Zdd Zdd Z  ZS )SysfsPlugina|  
	`sysfs`::
	
	Sets various `sysfs` settings specified by the plug-in options.
	+
	The syntax is `_name_=_value_`, where
	`_name_` is the `sysfs` path to use and `_value_` is
	the value to write. The `sysfs` path supports the shell-style
	wildcard characters (see `man 7 glob` for additional detail).
	+
	Use this plugin in case you need to change some settings that are
	not covered by other plug-ins. Prefer specific plug-ins if they
	cover the required settings.
	+
	.Ignore corrected errors and associated scans that cause latency spikes
	====
	----
	[sysfs]
	/sys/devices/system/machinecheck/machinecheck*/ignore_ce=1
	----
	====
	c                s$   t t| j|| d| _t | _d S )NT)superr   __init__Z_has_dynamic_optionsr   _cmd)selfargskwargs)	__class__ "/usr/lib/python3.6/plugin_sysfs.pyr   '   s    zSysfsPlugin.__init__c             C   s4   d|_ d|_tdd t|jj D |_i |_d S )NFTc             S   s$   g | ]}t jj|d  |d fqS )r   r   )ospathnormpath).0	key_valuer   r   r   
<listcomp>0   s    z.SysfsPlugin._instance_init.<locals>.<listcomp>)Z_has_dynamic_tuningZ_has_static_tuningdictlistZoptionsitems_sysfs_sysfs_original)r
   instancer   r   r   _instance_init,   s    zSysfsPlugin._instance_initc             C   s   d S )Nr   )r
   r   r   r   r   _instance_cleanup3   s    zSysfsPlugin._instance_cleanupc             C   sv   xpt |jj D ]^\}}| jj|}xHtj|D ]:}| j|r\| j||j	|< | j
|| q0tjd|  q0W qW d S )Nz)rejecting write to '%s' (not inside /sys))r   r   r   
_variablesexpandglobiglob_check_sysfs_read_sysfsr   _write_sysfslogerror)r
   r   keyvaluevfr   r   r   _instance_apply_static6   s    
z"SysfsPlugin._instance_apply_staticc       
      C   sp   d}xft |jj D ]T\}}| jj|}x>tj|D ]0}| j|r4| j|}	| j	|||	|dkr4d}q4W qW |S )NTF)
r   r   r   r   r   r    r!   r"   r#   Z_verify_value)
r
   r   Zignore_missingZdevicesretr'   r(   r)   r*   Zcurr_valr   r   r   _instance_verify_static@   s    

z#SysfsPlugin._instance_verify_staticc             C   s,   x&t |jj D ]\}}| j|| qW d S )N)r   r   r   r$   )r
   r   Zrollbackr'   r(   r   r   r   _instance_unapply_staticK   s    z$SysfsPlugin._instance_unapply_staticc             C   s   t jd|S )Nz^/sys/.*)rematch)r
   
sysfs_filer   r   r   r"   O   s    zSysfsPlugin._check_sysfsc             C   s2   | j j|j }t|dkr*| j j|dS d S d S )Nr   F)r	   Z	read_filestriplenZget_active_option)r
   r1   datar   r   r   r#   R   s    zSysfsPlugin._read_sysfsc             C   s   | j j||S )N)r	   Zwrite_to_file)r
   r1   r(   r   r   r   r$   Y   s    zSysfsPlugin._write_sysfs)__name__
__module____qualname____doc__r   r   r   r+   r-   constsZROLLBACK_SOFTr.   r"   r#   r$   __classcell__r   r   )r   r   r      s   
r   ) r   r    r/   Zos.pathr   Z
decoratorsZ
tuned.logsZtunedZtuned.constsr9   
subprocessZtuned.utils.commandsr   Zlogsgetr%   ZPluginr   r   r   r   r   <module>   s   

