* Schedule affinity_notify work while migrating IRQs during hot plug @ 2017-02-21 20:59 Sodagudi Prasad 2017-02-27 17:12 ` Sodagudi Prasad 0 siblings, 1 reply; 11+ messages in thread From: Sodagudi Prasad @ 2017-02-21 20:59 UTC (permalink / raw) To: linux-arm-kernel Hi Thomas, Currently irq_set_affinity() is called to migrate irqs from migrate_one_irq() during cpu hot plug and clients which are interested to know the irq affinity change not getting notified take_cpu_down () --> __cpu_disable() --> irq_migrate_all_off_this_cpu(); irq_set_affinity() is changing the IRQ affinity at chip level but it is not notifying the affinity_notify work. How about below change, so that clients drivers gets notified about irq affinity changes? --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -207,6 +207,7 @@ int irq_do_set_affinity(struct irq_data *data, const struct cpumask *mask, case IRQ_SET_MASK_OK_DONE: cpumask_copy(desc->irq_common_data.affinity, mask); case IRQ_SET_MASK_OK_NOCOPY: + schedule_work(&desc->affinity_notify->work); irq_set_thread_affinity(desc); ret = 0; With this change, notifications of IRQ affinity gets executed and notified to client drivers. -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, Linux Foundation Collaborative Project ^ permalink raw reply [flat|nested] 11+ messages in thread
* Schedule affinity_notify work while migrating IRQs during hot plug 2017-02-21 20:59 Schedule affinity_notify work while migrating IRQs during hot plug Sodagudi Prasad @ 2017-02-27 17:12 ` Sodagudi Prasad 2017-02-27 17:21 ` Thomas Gleixner 0 siblings, 1 reply; 11+ messages in thread From: Sodagudi Prasad @ 2017-02-27 17:12 UTC (permalink / raw) To: linux-arm-kernel On 2017-02-21 12:59, Sodagudi Prasad wrote: > Hi Thomas, > > Currently irq_set_affinity() is called to migrate irqs from > migrate_one_irq() > during cpu hot plug and clients which are interested to know the irq > affinity change > not getting notified > > take_cpu_down () --> __cpu_disable() --> > irq_migrate_all_off_this_cpu(); > > irq_set_affinity() is changing the IRQ affinity at chip level > but it is not notifying the affinity_notify work. > Hi Thomas and All, I could see that in the 3.10 kernel irq affinity notifiers are getting called when a core getting hot plugged. But in later kernel versions api used to change affinity was changed from irq_set_affinity_locked() to irq_do_set_affinity(), so irq notifiers are not getting called when a core hot plugged. https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/kernel/irq/manage.c?id=refs/tags/v3.10.105#n201 In latest kernel following path is executed to migrate IRQs. irq_migrate_all_off_this_cpu() --> migrate_one_irq() -> irq_do_set_affinity(). As I mentioned above, irq_set_affinity_locked() notifies all clients drivers, which are registered for IRQ affinity change but irq_do_set_affinity() API just changes the affinity at irq chip level but does not notify the clients drivers. I am not sure whether it is just a miss during IRQ framework refactor or intentionally done like this. Can you please check whether following code change make sense or not? So I am thinking that, adding following sched_work() would notify clients. diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index 6b66959..5e4766b 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -207,6 +207,7 @@ int irq_do_set_affinity(struct irq_data *data, const struct cpumask *mask, case IRQ_SET_MASK_OK_DONE: cpumask_copy(desc->irq_common_data.affinity, mask); case IRQ_SET_MASK_OK_NOCOPY: + schedule_work(&desc->affinity_notify->work); irq_set_thread_affinity(desc); ret = 0; } > How about below change, so that clients drivers gets notified about > irq affinity changes? > --- a/kernel/irq/manage.c > +++ b/kernel/irq/manage.c > @@ -207,6 +207,7 @@ int irq_do_set_affinity(struct irq_data *data, > const struct cpumask *mask, > case IRQ_SET_MASK_OK_DONE: > cpumask_copy(desc->irq_common_data.affinity, mask); > case IRQ_SET_MASK_OK_NOCOPY: > + schedule_work(&desc->affinity_notify->work); > irq_set_thread_affinity(desc); > ret = 0; > > With this change, notifications of IRQ affinity gets executed and > notified > to client drivers. -Thanks, Prasad -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, Linux Foundation Collaborative Project ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Schedule affinity_notify work while migrating IRQs during hot plug 2017-02-27 17:12 ` Sodagudi Prasad @ 2017-02-27 17:21 ` Thomas Gleixner 2017-03-13 19:43 ` Sodagudi Prasad 0 siblings, 1 reply; 11+ messages in thread From: Thomas Gleixner @ 2017-02-27 17:21 UTC (permalink / raw) To: linux-arm-kernel On Mon, 27 Feb 2017, Sodagudi Prasad wrote: > So I am thinking that, adding following sched_work() would notify clients. And break the world and some more. > diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c > index 6b66959..5e4766b 100644 > --- a/kernel/irq/manage.c > +++ b/kernel/irq/manage.c > @@ -207,6 +207,7 @@ int irq_do_set_affinity(struct irq_data *data, const > struct cpumask *mask, > case IRQ_SET_MASK_OK_DONE: > cpumask_copy(desc->irq_common_data.affinity, mask); > case IRQ_SET_MASK_OK_NOCOPY: > + schedule_work(&desc->affinity_notify->work); > irq_set_thread_affinity(desc); > ret = 0; You cannot do that unconditionally and just slap that schedule_work() call into the code. Aside of that schedule_work() would be invoked twice for all calls which come via irq_set_affinity_locked() .... Thanks, tglx ^ permalink raw reply [flat|nested] 11+ messages in thread
* Schedule affinity_notify work while migrating IRQs during hot plug 2017-02-27 17:21 ` Thomas Gleixner @ 2017-03-13 19:43 ` Sodagudi Prasad 2017-03-13 20:19 ` Thomas Gleixner 0 siblings, 1 reply; 11+ messages in thread From: Sodagudi Prasad @ 2017-03-13 19:43 UTC (permalink / raw) To: linux-arm-kernel On 2017-02-27 09:21, Thomas Gleixner wrote: > On Mon, 27 Feb 2017, Sodagudi Prasad wrote: >> So I am thinking that, adding following sched_work() would notify >> clients. > > And break the world and some more. > >> diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c >> index 6b66959..5e4766b 100644 >> --- a/kernel/irq/manage.c >> +++ b/kernel/irq/manage.c >> @@ -207,6 +207,7 @@ int irq_do_set_affinity(struct irq_data *data, >> const >> struct cpumask *mask, >> case IRQ_SET_MASK_OK_DONE: >> cpumask_copy(desc->irq_common_data.affinity, mask); >> case IRQ_SET_MASK_OK_NOCOPY: >> + schedule_work(&desc->affinity_notify->work); >> irq_set_thread_affinity(desc); >> ret = 0; > > You cannot do that unconditionally and just slap that schedule_work() > call > into the code. Aside of that schedule_work() would be invoked twice for > all > calls which come via irq_set_affinity_locked() .... Hi Tglx, Yes. I agree with you, schedule_work() gets invoked twice with previous change. How about calling irq_set_notify_locked() instead of irq_do_set_notify()? diff --git a/kernel/irq/cpuhotplug.c b/kernel/irq/cpuhotplug.c index 011f8c4..e8ce0db 100644 --- a/kernel/irq/cpuhotplug.c +++ b/kernel/irq/cpuhotplug.c @@ -18,8 +18,8 @@ static bool migrate_one_irq(struct irq_desc *desc) { struct irq_data *d = irq_desc_get_irq_data(desc); const struct cpumask *affinity = d->common->affinity; - struct irq_chip *c; bool ret = false; + int r; /* * If this is a per-CPU interrupt, or the affinity does not @@ -34,15 +34,10 @@ static bool migrate_one_irq(struct irq_desc *desc) ret = true; } - c = irq_data_get_irq_chip(d); - if (!c->irq_set_affinity) { - pr_debug("IRQ%u: unable to set affinity\n", d->irq); - } else { - int r = irq_do_set_affinity(d, affinity, false); - if (r) - pr_warn_ratelimited("IRQ%u: set affinity failed(%d).\n", + r = irq_set_affinity_locked(d, affinity, false); + if (r) + pr_warn_ratelimited("IRQ%u: set affinity failed(%d).\n", d->irq, r); - } return ret; -Thanks, Prasad > > Thanks, > > tglx -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, Linux Foundation Collaborative Project ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Schedule affinity_notify work while migrating IRQs during hot plug 2017-03-13 19:43 ` Sodagudi Prasad @ 2017-03-13 20:19 ` Thomas Gleixner 2017-03-17 10:51 ` Sodagudi Prasad 0 siblings, 1 reply; 11+ messages in thread From: Thomas Gleixner @ 2017-03-13 20:19 UTC (permalink / raw) To: linux-arm-kernel On Mon, 13 Mar 2017, Sodagudi Prasad wrote: > On 2017-02-27 09:21, Thomas Gleixner wrote: > > On Mon, 27 Feb 2017, Sodagudi Prasad wrote: > > > So I am thinking that, adding following sched_work() would notify clients. > > > > And break the world and some more. > > > > > diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c > > > index 6b66959..5e4766b 100644 > > > --- a/kernel/irq/manage.c > > > +++ b/kernel/irq/manage.c > > > @@ -207,6 +207,7 @@ int irq_do_set_affinity(struct irq_data *data, const > > > struct cpumask *mask, > > > case IRQ_SET_MASK_OK_DONE: > > > cpumask_copy(desc->irq_common_data.affinity, mask); > > > case IRQ_SET_MASK_OK_NOCOPY: > > > + schedule_work(&desc->affinity_notify->work); > > > irq_set_thread_affinity(desc); > > > ret = 0; > > > > You cannot do that unconditionally and just slap that schedule_work() call > > into the code. Aside of that schedule_work() would be invoked twice for all > > calls which come via irq_set_affinity_locked() .... > Hi Tglx, > > Yes. I agree with you, schedule_work() gets invoked twice with previous > change. > > How about calling irq_set_notify_locked() instead of irq_do_set_notify()? Is this a quiz? Can you actually see the difference between these functions? There is a damned good reason WHY this calls irq_do_set_affinity(). Thanks, tglx ^ permalink raw reply [flat|nested] 11+ messages in thread
* Schedule affinity_notify work while migrating IRQs during hot plug 2017-03-13 20:19 ` Thomas Gleixner @ 2017-03-17 10:51 ` Sodagudi Prasad 2017-03-17 13:18 ` Thomas Gleixner 0 siblings, 1 reply; 11+ messages in thread From: Sodagudi Prasad @ 2017-03-17 10:51 UTC (permalink / raw) To: linux-arm-kernel On 2017-03-13 13:19, Thomas Gleixner wrote: > On Mon, 13 Mar 2017, Sodagudi Prasad wrote: >> On 2017-02-27 09:21, Thomas Gleixner wrote: >> > On Mon, 27 Feb 2017, Sodagudi Prasad wrote: >> > > So I am thinking that, adding following sched_work() would notify clients. >> > >> > And break the world and some more. >> > >> > > diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c >> > > index 6b66959..5e4766b 100644 >> > > --- a/kernel/irq/manage.c >> > > +++ b/kernel/irq/manage.c >> > > @@ -207,6 +207,7 @@ int irq_do_set_affinity(struct irq_data *data, const >> > > struct cpumask *mask, >> > > case IRQ_SET_MASK_OK_DONE: >> > > cpumask_copy(desc->irq_common_data.affinity, mask); >> > > case IRQ_SET_MASK_OK_NOCOPY: >> > > + schedule_work(&desc->affinity_notify->work); >> > > irq_set_thread_affinity(desc); >> > > ret = 0; >> > >> > You cannot do that unconditionally and just slap that schedule_work() call >> > into the code. Aside of that schedule_work() would be invoked twice for all >> > calls which come via irq_set_affinity_locked() .... >> Hi Tglx, >> >> Yes. I agree with you, schedule_work() gets invoked twice with >> previous >> change. >> >> How about calling irq_set_notify_locked() instead of >> irq_do_set_notify()? > > Is this a quiz? > > Can you actually see the difference between these functions? There is a > damned good reason WHY this calls irq_do_set_affinity(). Other option is that, adding an argument to irq_do_set_affinity() and queue work to notify when that new parameter set. I have attached patch for the same. I tested this change on arm64 bit platform and observed that clients drivers are getting notified during cpu hot plug. > Thanks, > > tglx -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, Linux Foundation Collaborative Project -------------- next part -------------- A non-text attachment was scrubbed... Name: 0001-genirq-Notify-clients-whenever-there-is-change-in-af.patch Type: text/x-diff Size: 3321 bytes Desc: not available URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20170317/409d9484/attachment-0001.bin> ^ permalink raw reply [flat|nested] 11+ messages in thread
* Schedule affinity_notify work while migrating IRQs during hot plug 2017-03-17 10:51 ` Sodagudi Prasad @ 2017-03-17 13:18 ` Thomas Gleixner 2017-03-20 16:36 ` Prasad Sodagudi 0 siblings, 1 reply; 11+ messages in thread From: Thomas Gleixner @ 2017-03-17 13:18 UTC (permalink / raw) To: linux-arm-kernel On Fri, 17 Mar 2017, Sodagudi Prasad wrote: > On 2017-03-13 13:19, Thomas Gleixner wrote: > > Can you actually see the difference between these functions? There is a > > damned good reason WHY this calls irq_do_set_affinity(). > > Other option is that, adding an argument to irq_do_set_affinity() and queue > work to notify when that new parameter set. I have attached patch for the > same. Documentation/process/submitting-patches.rst: Section #6 ^ permalink raw reply [flat|nested] 11+ messages in thread
* Schedule affinity_notify work while migrating IRQs during hot plug 2017-03-17 13:18 ` Thomas Gleixner @ 2017-03-20 16:36 ` Prasad Sodagudi 2017-03-20 16:36 ` [PATCH] genirq: Notify clients whenever there is change in affinity Prasad Sodagudi 0 siblings, 1 reply; 11+ messages in thread From: Prasad Sodagudi @ 2017-03-20 16:36 UTC (permalink / raw) To: linux-arm-kernel irq_do_set_affinity() last argument differentiates whether notify work need to queued for this irq or not. So that we can avoid double queuing of notify in the irq_set_affinity_locked() path. ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH] genirq: Notify clients whenever there is change in affinity 2017-03-20 16:36 ` Prasad Sodagudi @ 2017-03-20 16:36 ` Prasad Sodagudi 2017-03-23 2:33 ` kbuild test robot 2017-03-23 6:18 ` kbuild test robot 0 siblings, 2 replies; 11+ messages in thread From: Prasad Sodagudi @ 2017-03-20 16:36 UTC (permalink / raw) To: linux-arm-kernel During the cpu hotplug, irq are getting migrated from hotplugging core but not getting notitfied to client drivers. So add parameter to irq_do_set_affinity(), to check and notify client drivers during the cpu hotplug. Signed-off-by: Prasad Sodagudi <psodagud@codeaurora.org> --- kernel/irq/cpuhotplug.c | 2 +- kernel/irq/internals.h | 2 +- kernel/irq/manage.c | 9 ++++++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/kernel/irq/cpuhotplug.c b/kernel/irq/cpuhotplug.c index 011f8c4..e293d9b 100644 --- a/kernel/irq/cpuhotplug.c +++ b/kernel/irq/cpuhotplug.c @@ -38,7 +38,7 @@ static bool migrate_one_irq(struct irq_desc *desc) if (!c->irq_set_affinity) { pr_debug("IRQ%u: unable to set affinity\n", d->irq); } else { - int r = irq_do_set_affinity(d, affinity, false); + int r = irq_do_set_affinity(d, affinity, false, true); if (r) pr_warn_ratelimited("IRQ%u: set affinity failed(%d).\n", d->irq, r); diff --git a/kernel/irq/internals.h b/kernel/irq/internals.h index bc226e7..6abde48 100644 --- a/kernel/irq/internals.h +++ b/kernel/irq/internals.h @@ -114,7 +114,7 @@ static inline void unregister_handler_proc(unsigned int irq, extern void irq_set_thread_affinity(struct irq_desc *desc); extern int irq_do_set_affinity(struct irq_data *data, - const struct cpumask *dest, bool force); + const struct cpumask *dest, bool force, bool notify); /* Inline functions for support of irq chips on slow busses */ static inline void chip_bus_lock(struct irq_desc *desc) diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index a4afe5c..fea8c8e 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -197,7 +197,7 @@ static inline bool irq_move_pending(struct irq_data *data) #endif int irq_do_set_affinity(struct irq_data *data, const struct cpumask *mask, - bool force) + bool force, bool notify) { struct irq_desc *desc = irq_data_to_desc(data); struct irq_chip *chip = irq_data_get_irq_chip(data); @@ -209,6 +209,9 @@ int irq_do_set_affinity(struct irq_data *data, const struct cpumask *mask, case IRQ_SET_MASK_OK_DONE: cpumask_copy(desc->irq_common_data.affinity, mask); case IRQ_SET_MASK_OK_NOCOPY: + if (notify && desc->affinity_notify) + schedule_work(&desc->affinity_notify->work); + irq_set_thread_affinity(desc); ret = 0; } @@ -227,7 +230,7 @@ int irq_set_affinity_locked(struct irq_data *data, const struct cpumask *mask, return -EINVAL; if (irq_can_move_pcntxt(data)) { - ret = irq_do_set_affinity(data, mask, force); + ret = irq_do_set_affinity(data, mask, force, false); } else { irqd_set_move_pending(data); irq_copy_pending(desc, mask); @@ -375,7 +378,7 @@ static int setup_affinity(struct irq_desc *desc, struct cpumask *mask) if (cpumask_intersects(mask, nodemask)) cpumask_and(mask, mask, nodemask); } - irq_do_set_affinity(&desc->irq_data, mask, false); + irq_do_set_affinity(&desc->irq_data, mask, false, true); return 0; } #else -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH] genirq: Notify clients whenever there is change in affinity 2017-03-20 16:36 ` [PATCH] genirq: Notify clients whenever there is change in affinity Prasad Sodagudi @ 2017-03-23 2:33 ` kbuild test robot 2017-03-23 6:18 ` kbuild test robot 1 sibling, 0 replies; 11+ messages in thread From: kbuild test robot @ 2017-03-23 2:33 UTC (permalink / raw) To: linux-arm-kernel Hi Prasad, [auto build test ERROR on tip/irq/core] [also build test ERROR on v4.11-rc3 next-20170322] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Prasad-Sodagudi/genirq-Notify-clients-whenever-there-is-change-in-affinity/20170323-094431 config: x86_64-randconfig-x015-201712 (attached as .config) compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All errors (new ones prefixed by >>): kernel/irq/migration.c: In function 'irq_move_masked_irq': >> kernel/irq/migration.c:46:3: error: too few arguments to function 'irq_do_set_affinity' irq_do_set_affinity(&desc->irq_data, desc->pending_mask, false); ^~~~~~~~~~~~~~~~~~~ In file included from kernel/irq/migration.c:5:0: kernel/irq/internals.h:116:12: note: declared here extern int irq_do_set_affinity(struct irq_data *data, ^~~~~~~~~~~~~~~~~~~ vim +/irq_do_set_affinity +46 kernel/irq/migration.c c777ac55 Andrew Morton 2006-03-25 40 * Being paranoid i guess! e7b946e9 Eric W. Biederman 2006-10-04 41 * e7b946e9 Eric W. Biederman 2006-10-04 42 * For correct operation this depends on the caller e7b946e9 Eric W. Biederman 2006-10-04 43 * masking the irqs. c777ac55 Andrew Morton 2006-03-25 44 */ 818b0f3b Jiang Liu 2012-03-30 45 if (cpumask_any_and(desc->pending_mask, cpu_online_mask) < nr_cpu_ids) 818b0f3b Jiang Liu 2012-03-30 @46 irq_do_set_affinity(&desc->irq_data, desc->pending_mask, false); 57b150cc Yinghai Lu 2009-04-27 47 7f7ace0c Mike Travis 2009-01-10 48 cpumask_clear(desc->pending_mask); e7b946e9 Eric W. Biederman 2006-10-04 49 } :::::: The code at line 46 was first introduced by commit :::::: 818b0f3bfb236ae66cac3ff38e86b9e47f24b7aa genirq: Introduce irq_do_set_affinity() to reduce duplicated code :::::: TO: Jiang Liu <liuj97@gmail.com> :::::: CC: Thomas Gleixner <tglx@linutronix.de> --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation -------------- next part -------------- A non-text attachment was scrubbed... Name: .config.gz Type: application/gzip Size: 25930 bytes Desc: not available URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20170323/57d9c433/attachment-0001.gz> ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH] genirq: Notify clients whenever there is change in affinity 2017-03-20 16:36 ` [PATCH] genirq: Notify clients whenever there is change in affinity Prasad Sodagudi 2017-03-23 2:33 ` kbuild test robot @ 2017-03-23 6:18 ` kbuild test robot 1 sibling, 0 replies; 11+ messages in thread From: kbuild test robot @ 2017-03-23 6:18 UTC (permalink / raw) To: linux-arm-kernel Hi Prasad, [auto build test WARNING on tip/irq/core] [also build test WARNING on v4.11-rc3 next-20170322] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Prasad-Sodagudi/genirq-Notify-clients-whenever-there-is-change-in-affinity/20170323-094431 reproduce: # apt-get install sparse make ARCH=x86_64 allmodconfig make C=1 CF=-D__CHECK_ENDIAN__ sparse warnings: (new ones prefixed by >>) include/linux/compiler.h:264:8: sparse: attribute 'no_sanitize_address': unknown attribute >> kernel/irq/migration.c:46:36: sparse: not enough arguments for function irq_do_set_affinity kernel/irq/migration.c: In function 'irq_move_masked_irq': kernel/irq/migration.c:46:3: error: too few arguments to function 'irq_do_set_affinity' irq_do_set_affinity(&desc->irq_data, desc->pending_mask, false); ^~~~~~~~~~~~~~~~~~~ In file included from kernel/irq/migration.c:5:0: kernel/irq/internals.h:116:12: note: declared here extern int irq_do_set_affinity(struct irq_data *data, ^~~~~~~~~~~~~~~~~~~ vim +46 kernel/irq/migration.c c777ac55 Andrew Morton 2006-03-25 30 239007b8 Thomas Gleixner 2009-11-17 31 assert_raw_spin_locked(&desc->lock); 501f2499 Bryan Holty 2006-03-25 32 c777ac55 Andrew Morton 2006-03-25 33 /* c777ac55 Andrew Morton 2006-03-25 34 * If there was a valid mask to work with, please c777ac55 Andrew Morton 2006-03-25 35 * do the disable, re-program, enable sequence. c777ac55 Andrew Morton 2006-03-25 36 * This is *not* particularly important for level triggered c777ac55 Andrew Morton 2006-03-25 37 * but in a edge trigger case, we might be setting rte 25985edc Lucas De Marchi 2011-03-30 38 * when an active trigger is coming in. This could c777ac55 Andrew Morton 2006-03-25 39 * cause some ioapics to mal-function. c777ac55 Andrew Morton 2006-03-25 40 * Being paranoid i guess! e7b946e9 Eric W. Biederman 2006-10-04 41 * e7b946e9 Eric W. Biederman 2006-10-04 42 * For correct operation this depends on the caller e7b946e9 Eric W. Biederman 2006-10-04 43 * masking the irqs. c777ac55 Andrew Morton 2006-03-25 44 */ 818b0f3b Jiang Liu 2012-03-30 45 if (cpumask_any_and(desc->pending_mask, cpu_online_mask) < nr_cpu_ids) 818b0f3b Jiang Liu 2012-03-30 @46 irq_do_set_affinity(&desc->irq_data, desc->pending_mask, false); 57b150cc Yinghai Lu 2009-04-27 47 7f7ace0c Mike Travis 2009-01-10 48 cpumask_clear(desc->pending_mask); e7b946e9 Eric W. Biederman 2006-10-04 49 } e7b946e9 Eric W. Biederman 2006-10-04 50 a439520f Thomas Gleixner 2011-02-04 51 void irq_move_irq(struct irq_data *idata) e7b946e9 Eric W. Biederman 2006-10-04 52 { f1a06390 Thomas Gleixner 2011-01-28 53 bool masked; e7b946e9 Eric W. Biederman 2006-10-04 54 :::::: The code at line 46 was first introduced by commit :::::: 818b0f3bfb236ae66cac3ff38e86b9e47f24b7aa genirq: Introduce irq_do_set_affinity() to reduce duplicated code :::::: TO: Jiang Liu <liuj97@gmail.com> :::::: CC: Thomas Gleixner <tglx@linutronix.de> --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2017-03-23 6:18 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-02-21 20:59 Schedule affinity_notify work while migrating IRQs during hot plug Sodagudi Prasad 2017-02-27 17:12 ` Sodagudi Prasad 2017-02-27 17:21 ` Thomas Gleixner 2017-03-13 19:43 ` Sodagudi Prasad 2017-03-13 20:19 ` Thomas Gleixner 2017-03-17 10:51 ` Sodagudi Prasad 2017-03-17 13:18 ` Thomas Gleixner 2017-03-20 16:36 ` Prasad Sodagudi 2017-03-20 16:36 ` [PATCH] genirq: Notify clients whenever there is change in affinity Prasad Sodagudi 2017-03-23 2:33 ` kbuild test robot 2017-03-23 6:18 ` kbuild test robot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).