@@ -182,18 +182,21 @@ def _set_irq_affinity(self, irq, affinity, restoring):
182182 #
183183 # "high-level" methods: apply tuning while saving original affinities
184184 #
185- def _apply_irq_affinity (self , irqinfo , affinity , mode ):
185+ def _apply_irq_affinity (self , irqinfo , affinity , mode , transfer ):
186186 """Apply IRQ affinity tuning
187187
188188 Args:
189189 irqinfo (IrqInfo): IRQ that should be tuned
190190 affinity (set): desired affinity
191191 """
192- original = self ._get_irq_affinity (irqinfo .irq )
192+ if transfer :
193+ original = irqinfo .original_affinity
194+ else :
195+ original = self ._get_irq_affinity (irqinfo .irq )
193196 if mode == "intersect" :
194197 # intersection of affinity and original, if that is empty fall back to configured affinity
195198 affinity = affinity & original or affinity
196- if irqinfo .unchangeable or affinity == original :
199+ if irqinfo .unchangeable or ( not transfer and affinity == original ) :
197200 return
198201 res = self ._set_irq_affinity (irqinfo .irq , affinity , False )
199202 if res == 0 :
@@ -202,13 +205,13 @@ def _apply_irq_affinity(self, irqinfo, affinity, mode):
202205 elif res == - 2 :
203206 irqinfo .unchangeable = True
204207
205- def _restore_irq_affinity (self , irqinfo ):
208+ def _restore_irq_affinity (self , irqinfo , transfer ):
206209 """Restore IRQ affinity
207210
208211 Args:
209212 irqinfo (IrqInfo): IRQ that should be restored
210213 """
211- if irqinfo .unchangeable or irqinfo .original_affinity is None :
214+ if transfer or irqinfo .unchangeable or irqinfo .original_affinity is None :
212215 return
213216 self ._set_irq_affinity (irqinfo .irq , irqinfo .original_affinity , True )
214217 irqinfo .original_affinity = None
@@ -257,6 +260,7 @@ def _mode(self, enabling, value, verify, ignore_missing, instance, transfer_inst
257260
258261 @command_custom ("affinity" , per_device = True )
259262 def _affinity (self , enabling , value , device , verify , ignore_missing , instance , transfer_instance ):
263+ transfer = transfer_instance is not None
260264 irq = "DEFAULT" if device == "DEFAULT" else device [len ("irq" ):]
261265 if irq not in self ._irqs :
262266 log .error ("Unknown device: %s" % device )
@@ -267,6 +271,6 @@ def _affinity(self, enabling, value, device, verify, ignore_missing, instance, t
267271 return self ._verify_irq_affinity (irqinfo , affinity , self ._mode_val )
268272 if enabling :
269273 affinity = set (self ._cmd .cpulist_unpack (value ))
270- return self ._apply_irq_affinity (irqinfo , affinity , self ._mode_val )
274+ return self ._apply_irq_affinity (irqinfo , affinity , self ._mode_val , transfer )
271275 else :
272- return self ._restore_irq_affinity (irqinfo )
276+ return self ._restore_irq_affinity (irqinfo , transfer )
0 commit comments