> > 2007-08-02 (木) の 14:32 -0500 に John Keller さんは書きました: > > > > > > Hi, > > > > > > This is FYI. > > > > > > If VECTOR_DOMAIN_PERCPU is NOT enabled: > > > > > > The "irq == vector" is always true in the following cases: > > > - reserve_irq_vector(), which is used only by SN > > > - create_irq() used on the system that has NO I/O SAPIC > > > > Could you say a bit more about this case. I see create_irq() > > calling find_unassigned_vector() and find_unassigned_irq(). > > How is "irq == vector" guaranteed to be always true in this case? > > > > Both find_unassigned_vector() and find_unassigned_irq() searchs the > number from IA64_FIRST_DEVICE_VECTOR. And all irq and vector numbers > from IA64_FIRST_DEVICE_VECTOR to IA64_LAST_DEVICE_VECTOR are not used. > > The create_irq() acquires both irq number and vector number using > find_unassigned_irq() and find_unassigned_vector() respectively and > bind them, with vector_lock held. > > The clear_irq_vector(), which is called through destroy_irq() and so > on, frees both irq and vector with vector_lock held. > > Since oth irq and vector are acquired/freed at a time, "irq == vector" > is guaranteed. > > But there is a exception destroy_and_reserve_irq(), which is called > by IOSAPIC code. It frees both irq and vector, and reserve irq after > that. That is, it only frees vector. This is required for fixed > mapping between gsi and irq. > > Thanks, > Kenji Kaneshige Thanks for the info. Your patch looks good to me, along with the other change to sn_irq_to_vector(). > What about this: > > ia64_vector sn_irq_to_vector(int irq) > { > if (irq >= IA64_NUM_VECTORS) > return 0; > return (ia64_vector)irq; > } > > John Keller > > > > John > > > > > > > > > - assign_irq_vector() with AUTO_ASSIGN specified > > > - Vectors outside FIRST_DEVICE_VECTOR to LAST_DEVICE_VECTOR > > > > > > The "irq == vector" is not always true in the folliwng cases: > > > - create_irq() used on the system that has I/O SAPICs. > > > - assign_irq_vector() with the value other than AUTO_ASSIGN > > > specified on the system has I/O SAPICs. > > > > > > And it is not ensured that those are true even in the future. > > > > > > Yasuaki, could you check if it is correct? > > > > > > Thanks, > > > Kenji Kaneshige > > > > > > > > > > > > 2007-08-02 (木) の 08:26 -0500 に John Keller さんは書きました: > > > > Yes, we'll take a look at it. > > > > > > > > John > > > > > > > > > > > > > > > > > > Hi Kenji-san > > > > > > > > > > I believe we need this property, but I am not 100% sure, so I am > > > > > going to forward your patch to our team who maintain the IRQ code > > > > > for Altix. > > > > > > > > > > Mike, Aaron or John, would one of you have time to take a look at > > > > > this? > > > > > > > > > > Thanks, > > > > > Jes > > > > > > > > > > > > > > > Kenji Kaneshige wrote: > > > > > > Hi Jes-san, Russ-san, Christoph-san and SN platform developers, > > > > > > > > > > > > I glanced over the SN code, and I found SN platform doesn't have SN > > > > > > specific irq_to_vector() function, though it has SN specific > > > > > > local_vector_to_irq() function. I guess it was OK because maybe SN > > > > > > platform depends on irq == vector and old generic irq_to_vector() was > > > > > > just returning the same value as irq. > > > > > > > > > > > > The irq_to_vector() function, however, has been changed by vector > > > > > > domain support, and currently it can return the different value from > > > > > > irq, even when VECTOR_DOMAIN_PERCPU is not enabled. This can happen > > > > > > when an interrupt thorough I/O SAPIC is unregistered and another > > > > > > interupt is registered. So if my guess (SN platform depends on irq == > > > > > > vector) is true, something problem might happen on SN platform when > > > > > > PCI hotplugging or driver reloading. > > > > > > > > > > > > If it is true that SN platform depends on irq == vector, we need to > > > > > > implement SN specific irq_to_vector() that returns the same value as > > > > > > irq, I think. I made sample patches to implement platform specific > > > > > > irq_to_vector() as follows. Note that [PATCH 2/2] is not tested yet > > > > > > because I don't have any SN platform unfortunately. > > > > > > > > > > > > [PATCH 1/2] Add base support for platform_irq_to_vector() > > > > > > [PATCH 2/2] Implement platform_irq_to_vector() for SN > > > > > > > > > > > > Could you give me comments? > > > > > > > > > > > > Thanks, > > > > > > Kenji Kaneshige > > > > > > > > > > > > > > > > > > > > > > > > - > > > > To unsubscribe from this list: send the line "unsubscribe linux-ia64" in > > > > the body of a message to majordomo@xxxxxxxxxxxxxxx > > > > More majordomo info at http://vger.kernel.org/majordomo-info.html > > > > > > > > > > - > > To unsubscribe from this list: send the line "unsubscribe linux-ia64" in > > the body of a message to majordomo@xxxxxxxxxxxxxxx > > More majordomo info at http://vger.kernel.org/majordomo-info.html > > - To unsubscribe from this list: send the line "unsubscribe linux-ia64" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
![]() |