+
     Gi(  c                   s    ^RI Ht ^RIHt ^ RIHt ^ RIt^ RIt^ RIt]P                  P                  4       t ! R R]P                  4      tR# )i   )base)command_custom)constsNc                   s   a a ] tR t^
t oRtV 3R ltR tR t]R 4       t	R t
R tR tR	 tR
 tR tR t]! RRR7      R 4       tRtVtV ;t# )IrqbalancePlugina  
Plug-in for irqbalance settings management. The plug-in
configures CPUs which should be skipped when rebalancing IRQs in
`/etc/sysconfig/irqbalance`. It then restarts irqbalance if and
only if it was previously running.

The banned/skipped CPUs are specified as a CPU list via the
[option]`banned_cpus` option.

.Skip CPUs 2,4 and 9-13 when rebalancing IRQs
====
----
[irqbalance]
banned_cpus=2,4,9-13
----
====
c                sn   < \         \        V `
  ! V/ VB  V P                  P	                  4       V n        R # N)Zsuperr   __init___cmdZget_cpus_cpus)selfZargsZkwargs	__class__s   &*,D/usr/lib/python3.14/site-packages/tuned/plugins/plugin_irqbalance.pyr   ZIrqbalancePlugin.__init__   s,    $($9&9yy!!#$*    c                s"    R Vn         RVn        R# )FTN)Z_has_dynamic_tuningZ_has_static_tuningr   instance   &&r
   _instance_initZIrqbalancePlugin._instance_init!   s    !&( $(r   c                s    R # r    r   r   r
   _instance_cleanupZ"IrqbalancePlugin._instance_cleanup%   s    r   c                s
    R R/# )banned_cpusNr   )Zclss   &r
   _get_config_optionsZ$IrqbalancePlugin._get_config_options(   s     $
 r   c                sz    \        \        P                  R 4      ;_uu_ 4       pVP                  4       uuRRR4       #   + '       g   i     R# ; i  \         d]   pTP
                  \
        P                  8X  d   \        P                  R4       M\        P                  RT,          4        Rp?R# Rp?ii ; i)ZrNz>irqbalance sysconfig file is missing. Is irqbalance installed?z,Failed to read irqbalance sysconfig file: %s)
openr   IRQBALANCE_SYSCONFIG_FILEZreadIOErrorerrnoZENOENTlogwarningerror)r   fe   &  r
   _read_irqbalance_sysconfigZ+IrqbalancePlugin._read_irqbalance_sysconfig.   su    V--s33q668 	4333	 ggKKPQII<q@A
s2   "A ?
A A	
A A B:AB55B:c                s    \        \        P                  R 4      ;_uu_ 4       pVP                  V4       RRR4       R#   + '       g   i     R# ; i  \         d(   p\
        P                  RT,          4        Rp?R# Rp?ii ; i)ZwNTz-Failed to write irqbalance sysconfig file: %sF)r   r   r   Zwriter   r   r   )r   contentr   r      &&  r
   _write_irqbalance_sysconfigZ,IrqbalancePlugin._write_irqbalance_sysconfig9   s`    V--s33qGGG 	4
 	43
	 99<q@A
s3   "A A A  A	A A BBBc                s"    VR V,          ,           # )zIRQBALANCE_BANNED_CPULIST=%s
r   )r   	sysconfigbanned_cpulist_strings   &&&r
   _write_banned_cpusZ#IrqbalancePlugin._write_banned_cpusB   s    	58MM	MMr   c                s    . pVP                  R 4       F3  p\        P                  ! RV4      '       d   K"  VP                  V4       K5  	  R P	                  V4      # )Z
z\s*IRQBALANCE_BANNED_CPULIST=)ZsplitreZmatchZappendjoin)r   r"   ZlinesZliner    r
   _clear_banned_cpusZ#IrqbalancePlugin._clear_banned_cpusE   sI    
%ood#d
((3T
:
:	LL $ 
5	r   c                s    V P                   P                  . RO^.R7      w  rV^ 8w  d   \        P                  R4       R# R# )	systemctl)Z	no_errorsz.Failed to restart irqbalance. Is it installed?N)r(   ztry-restartZ
irqbalance)r   Zexecuter   r   )r   ZretcodeZoutr   r
   _restart_irqbalanceZ$IrqbalancePlugin._restart_irqbalanceL   sB     ""-S # ,' \;;?@ r   c                s    V P                  4       pVf   R # V P                  V4      pV P                  W!4      pV P                  V4      '       d   V P	                  4        R # R # r   )r   r'   r$   r!   r)   )r   r#   r   s   && r
   _set_banned_cpusZ!IrqbalancePlugin._set_banned_cpusU   sZ    ++-'_	##G,'##GC'	%%g.. /r   c                s    V P                  4       pVf   R # V P                  V4      pV P                  V4      '       d   V P                  4        R # R # r   )r   r'   r!   r)   )r   r   s   & r
   _restore_banned_cpusZ%IrqbalancePlugin._restore_banned_cpus^   sJ    ++-'_	##G,'	%%g.. /r   r   F)Z
per_devicec                s`   R pVe   \        V P                  P                  V4      4      p\        V P                  4      pVP	                  V4      '       d6   V P                  P                  V P                  P                  V4      4      pMRRP                  V P                   U	u. uF  p	\        V	4      NK  	  up	4      p
\        P                  RV: RV
: R24       V'       g	   V'       d   Vf   R # V'       d   R # V'       d   V P                  V4       R # V P                  4        R # u up	i )NZ,z Invalid banned_cpus specified, 'z"' does not match available cores 'Z')Zsetr   Zcpulist_unpackr   ZissubsetZcpulist2stringZcpulist_packr&   Zstrr   r   r*   r+   )r   ZenablingZvalueZverifyZignore_missingr   r#   ZbannedZpresentZxZstr_cpuss   &&&&&&     r
   _banned_cpusZIrqbalancePlugin._banned_cpusf   s    
		((/06_7oog II44TYY5K5KE5RSxx4AQ45HII
  &3;

./ 5s   %D+)r   )Z__name__Z
__module__Z__qualname__Z__firstlineno__Z__doc__r   r   r   Zclassmethodr   r   r!   r$   r'   r)   r*   r+   r   r,   Z__static_attributes__Z__classdictcell__Z__classcell__)r	   Z__classdict__s   @@r
   r   r   
   sr     $$%  
	NA 51 2 r   r   )Z r    Z
decoratorsr   Ztunedr   Z
tuned.logsr   r%   ZlogsZgetr   ZPluginr   r   r   r
   <module>r-      s9     &    	jjnnqt{{ qr   