�
��\c@s�ddlZddlZddlmZddlTddlZddlTddl m
Z
ddljZej
j�Zdejfd��YZdS(i����Ni(tbase(t*(tcommandst
ModulesPlugincBsbeZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z e
d�Zd �ZRS(
s6
Plugin for applying custom kernel modules options.
cOs2tt|�j||�t|_t�|_dS(N(tsuperRt__init__tTruet_has_dynamic_optionsRt_cmd(tselftargstkwargs((s@/usr/lib/python2.7/site-packages/tuned/plugins/plugin_modules.pyRs cCs"t|_t|_|j|_dS(N(tFalset_has_dynamic_tuningRt_has_static_tuningtoptionst_modules(R tinstance((s@/usr/lib/python2.7/site-packages/tuned/plugins/plugin_modules.pyt_instance_inits cCsdS(N((R R((s@/usr/lib/python2.7/site-packages/tuned/plugins/plugin_modules.pyt_instance_cleanupscCs�x�|D]�}|jjdd|g�\}}|dkrKtjd�dS|dkrwtjd||j�f�n|jjd|g�\}}|dkrtjd||j�f�qqWdS(Ntmodprobes-risN'modprobe' command not found, cannot reload kernel modules, reboot is requireds$cannot remove kernel module '%s': %ss:cannot insert/reinsert module '%s', reboot is required: %s(Rtexecutetlogtwarntdebugtstrip(R tmodulestmoduletretcodetout((s@/usr/lib/python2.7/site-packages/tuned/plugins/plugin_modules.pyt_reload_moduless
!
cCs�|j�d}d}t}g}xOt|jj��D]8\}}|jj|�}|jj|�} |s�|jjd|g�\}}
|dkr�t }t
jd�q�|dkr�t
jd|�q�n|s�|dkr8t
| �dkr-| dd!dkr-tjd d| �} |j|�nt
| �dkr\|d
|d| d7}qpt
jd
|�q8q8W|jjtj|�t
|�}|dkr�|j|�t
|j�|kr�t
jtj�q�ndS(Ntitmodinfos8'modinfo' command not found, not checking kernel moduless)kernel module '%s' not found, skipping itiis+rs^\s*\+r\s*,?\s*soptions t s
sKmodule '%s' doesn't have any option specified, not writing it to modprobe.d(t_clear_modprobe_fileRtlistRtitemst
_variablestexpandRRRRRterrortlentretsubtappendRt
write_to_filetconststMODULES_FILERtinfotSTR_HINT_REBOOT(R RtsRt
skip_checktreload_listtoptiontvalueRtvRtl((s@/usr/lib/python2.7/site-packages/tuned/plugins/plugin_modules.pyt_instance_apply_static*s8
"%
cCst|�jdd�S(Nt/R(tstrtreplace(R tpath((s@/usr/lib/python2.7/site-packages/tuned/plugins/plugin_modules.pyt
_unquote_pathIscCs�t}t}tjd�}xht|jj��D]Q\}}|jj|�}|jj|�} tjdd| �} d|}
t j
j|
�s�t}t
jtjd|�q1t
jtjd|�|j| �}x�|D]�}|jd�}
t|
�dkr"t
jd ||f�q�|j|
d
|
d|jj|
d|j|
d
�d
ddt�|�tkr�t}q�q�Wq1W|S(Ns\s+s^\s*\+r\s*,?\s*Rs/sys/module/%ssmodule '%s' is not loadedsmodule '%s' is loadedt=is.unrecognized module option for module '%s': %siis/parameters/terr_rettno_error(RR)tcompileR#RR$R%R&R*tosR<texistsRRR'R-tSTR_VERIFY_PROFILE_FAILR/tSTR_VERIFY_PROFILE_OKtsplitR(Rt
_verify_valueRt read_fileR=tNone(R Rtignore_missingtdevicestrettrR4R5RR6tmpathR7titemtarg((s@/usr/lib/python2.7/site-packages/tuned/plugins/plugin_modules.pyt_instance_verify_staticLs,"
0cCs|r|j�ndS(N(R"(R Rt
full_rollback((s@/usr/lib/python2.7/site-packages/tuned/plugins/plugin_modules.pyt_instance_unapply_staticgscCs�|jjtjdt�}|jd�}d}}t|�}tjd�}xB||kr�|j ||�dkr�|}|}n|d7}qRWdj|d|!�}t|�dkr�|d7}n|jjtj|�dS(NR@s
is^\s*#i(
RRHR-R.RRFR(R)RAtsearchRItjoinR,(R R1R7titjtllRM((s@/usr/lib/python2.7/site-packages/tuned/plugins/plugin_modules.pyR"ks
(
t__name__t
__module__t__doc__RRRRR8R=RQRRSR"(((s@/usr/lib/python2.7/site-packages/tuned/plugins/plugin_modules.pyRs (R)tos.pathRBRRt
decoratorst
tuned.logsttunedt
subprocessttuned.utils.commandsRttuned.constsR-tlogstgetRtPluginR(((s@/usr/lib/python2.7/site-packages/tuned/plugins/plugin_modules.pyt<module>s
|