hi: > Probably because in 2.6.30 you only cast the result of 32-bit multiplies > to 64 bits. In the 2.6.33 kernel, the mutliplies are 64-bit as the > 0x000010c7ull constant is 64-bit... >> void __udelay(unsigned long us) >> { >> unsigned int lpj = current_cpu_data.udelay_val; >> >> __delay(((unsigned long long)(us * 0x000010c7 * HZ * lpj)) >> 32); so that means (us * 0x000010c7 * HZ * lpj) is calculated at 32-bits and finally (unsigned long long) cast it as 64-bits? if i remember correctly, "64bit cast to 32-bits" is possible get 0 value, since high bits cast out. But how 34-bits cast to 64-bits will make the value as 0 if original low 32-bits value is non-zero? appreciate your reply, miloody >> 80306ed0: 00001821 move v1,zero >> 80306ed4: 00601021 move v0,v1 >> #include<asm/compiler.h> >> #include<asm/war.h> >> >> inline void __delay(unsigned int loops) >> { >> __asm__ __volatile__ ( >> 80306ed8: 1440ffff bnez v0,80306ed8 <__udelay+0x8> >> 80306edc: 2442ffff addiu v0,v0,-1 >> void __udelay(unsigned long us) > >> I have double checked the __delay source code of 2.6.33.4 >> and the dis-assemblies: > >> void __udelay(unsigned long us) >> { >> unsigned int lpj = current_cpu_data.udelay_val; >> >> __delay((us * 0x000010c7ull * HZ * lpj) >> 32); >> 802f7310: 3c02804f lui v0,0x804f >> 802f7314: 8c429360 lw v0,-27808(v0) >> 802f7318: 3c050010 lui a1,0x10 >> 802f731c: 34a56256 ori a1,a1,0x6256 >> 802f7320: 00450019 multu v0,a1 >> 802f7324: 00002821 move a1,zero >> 802f7328: 00001012 mflo v0 >> 802f732c: 00001810 mfhi v1 >> 802f7330: 00a20018 mult a1,v0 >> 802f7334: 70640000 madd v1,a0 >> 802f7338: 00003012 mflo a2 >> 802f733c: 00440019 multu v0,a0 >> 802f7340: 00001810 mfhi v1 >> 802f7344: 00c31021 addu v0,a2,v1 >> #include<asm/compiler.h> >> #include<asm/war.h> >> >> inline void __delay(unsigned int loops) >> { >> __asm__ __volatile__ ( >> 802f7348: 1440ffff bnez v0,802f7348 <__udelay+0x38> >> 802f734c: 2442ffff addiu v0,v0,-1 >> void __udelay(unsigned long us) >> { >> unsigned int lpj = current_cpu_data.udelay_val; >> >> __delay((us * 0x000010c7ull * HZ * lpj)>> 32); >> } >> 802f7350: 03e00008 jr ra > > WBR, Sergei > -- Regards,