Re: [PATCH 3/3] powerpc/smp: Cache CPU to chip lookup
From: Srikar Dronamraju <hidden>
Date: 2021-04-16 16:58:12
* Gautham R Shenoy [off-list ref] [2021-04-16 21:27:48]:
On Thu, Apr 15, 2021 at 11:21:10PM +0530, Srikar Dronamraju wrote:quoted
* Gautham R Shenoy [off-list ref] [2021-04-15 22:49:21]:quoted
quoted
+int *chip_id_lookup_table; + #ifdef CONFIG_PPC64 int __initdata iommu_is_off; int __initdata iommu_force_on;@@ -914,13 +916,22 @@ EXPORT_SYMBOL(of_get_ibm_chip_id); int cpu_to_chip_id(int cpu) { struct device_node *np; + int ret = -1, idx; + + idx = cpu / threads_per_core; + if (chip_id_lookup_table && chip_id_lookup_table[idx] != -1)quoted
The value -1 is ambiguous since we won't be able to determine if it is because we haven't yet made a of_get_ibm_chip_id() call or if of_get_ibm_chip_id() call was made and it returned a -1.We don't allocate chip_id_lookup_table unless cpu_to_chip_id() return !-1 value for the boot-cpuid. So this ensures that we dont unnecessarily allocate chip_id_lookup_table. Also I check for chip_id_lookup_table before calling cpu_to_chip_id() for other CPUs. So this avoids overhead of calling cpu_to_chip_id() for platforms that dont support it. Also its most likely that if the chip_id_lookup_table is initialized then of_get_ibm_chip_id() call would return a valid value. + Below we are only populating the lookup table, only when the of_get_cpu_node is valid. So I dont see any drawbacks of initializing it to -1. Do you seeany? Only if other callers of cpu_to_chip_id() don't check for whether the chip_id_lookup_table() has been allocated or not. From a code readability point of view, it is easier to have that check this inside cpu_to_chip_id() instead of requiring all its callers to make that check.
I didn't understand your comment. However let me reiterate what I said earlier. We don't have control over who and when cpu_to_chip_id() gets called. If the cpu_to_chip_id() might be called for non present CPU, in which case it will return -1, Should we cache it or not? If we cache it, we will return wrong value when the CPU may turn out to be present. If we cache and retry it then having one value for initializing and another for invalid is all the same as having just 1 value for initializing and invalid. Just that we end up adding more confusing code. Atleast to me, code isnt readable if I say retry for -1 and -2 too. After few years, we ourselves will wonder why we have two values if we are checking and performing same actions.
quoted
quoted
Thus, perhaps we can initialize chip_id_lookup_table[idx] with a different unique negative value. How about S32_MIN ? and check chip_id_lookup_table[idx] is different here ?I had initially initialized to -2, But then I thought we adding in more confusion than necessary and it was not solving any issues. -- Thanks and Regards Srikar Dronamraju
-- Thanks and Regards Srikar Dronamraju