linux.conf.au Optimization if (length > 0) { u32 *dst = (u32*)buffer; u32 *src = (u32*)(((u8*)ip_rt_acct) + offset); memcpy(dst, src, length); #ifdef CONFIG_SMP if (smp_num_cpus > 1 || cpu_logical_map(0) != 0) { int i; int cnt = length / 4; for (i = 0; i < smp_num_cpus; i++) { int cpu = cpu_logical_map(i); int k; if (cpu == 0) continue; src = (u32*)(((u8*)ip_rt_acct) + offset + cpu * 256 * sizeof(struct ip_rt_acct)); for (k = 0; k < cnt; k++) dst[k] += src[k]; } } #endif return length; } return 0;