* Julia Lawall <julia.lawall@xxxxxxx> wrote: > > > [...] There does seem to be a few cases where the field actually does hold an > > > integer. I guess this is not a problem? > > > > Could you point to such an example? > > drivers/thermal/intel_soc_dts_thermal.c:#define BYT_SOC_DTS_APIC_IRQ 86 > > and then: > > static const struct x86_cpu_id soc_thermal_ids[] = { > { X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_SILVERMONT1, 0, > BYT_SOC_DTS_APIC_IRQ}, > {} > }; > > and finally: > > soc_dts_thres_irq = (int)match_cpu->driver_data; > > Also: > > arch/x86/kernel/apic/apic.c > > #define DEADLINE_MODEL_MATCH_REV(model, rev) \ > { X86_VENDOR_INTEL, 6, model, X86_FEATURE_ANY, (unsigned long)rev > } > > DEADLINE_MODEL_MATCH_REV ( INTEL_FAM6_BROADWELL_X, 0x0b000020), > DEADLINE_MODEL_MATCH_REV ( INTEL_FAM6_HASWELL_CORE, 0x22), > etc. (all 2-digit numbers in the remaining case). Ok - I think in these cases the resulting long->pointer type conversion is a _lot_ less dangerous than the pointer->long conversion which caused the regression. So unless the resulting code is excessively ugly, this feels like the right approach to me. Thanks, Ingo