diff for duplicates of <49424637.3010107@cosmosbay.com> diff --git a/a/1.txt b/N1/1.txt index 3173eb0..3563d3d 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -266,3 +266,15 @@ index b255b93..6ef4a44 100644 list_for_each_entry(fbc, &percpu_counters, list) { - s32 *pcount; - unsigned long flags; +- +- spin_lock_irqsave(&fbc->lock, flags); +- pcount = per_cpu_ptr(fbc->counters, cpu); +- fbc->count += *pcount; +- *pcount = 0; +- spin_unlock_irqrestore(&fbc->lock, flags); ++ long count = local_xchg(per_cpu_ptr(fbc->counters, cpu), 0); ++ ++ s64c_add(count, &fbc->counter); + } + mutex_unlock(&percpu_counters_lock); + return NOTIFY_OK; diff --git a/a/content_digest b/N1/content_digest index 6b0417f..50fabb2 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -283,6 +283,18 @@ " \tmutex_lock(&percpu_counters_lock);\n" " \tlist_for_each_entry(fbc, &percpu_counters, list) {\n" "-\t\ts32 *pcount;\n" - "-\t\tunsigned long flags;" + "-\t\tunsigned long flags;\n" + "-\n" + "-\t\tspin_lock_irqsave(&fbc->lock, flags);\n" + "-\t\tpcount = per_cpu_ptr(fbc->counters, cpu);\n" + "-\t\tfbc->count += *pcount;\n" + "-\t\t*pcount = 0;\n" + "-\t\tspin_unlock_irqrestore(&fbc->lock, flags);\n" + "+\t\tlong count = local_xchg(per_cpu_ptr(fbc->counters, cpu), 0);\n" + "+\n" + "+\t\ts64c_add(count, &fbc->counter);\n" + " \t}\n" + " \tmutex_unlock(&percpu_counters_lock);\n" + " \treturn NOTIFY_OK;" -6e886ef9567e16ee47228a1d874dcbcb8a0f046778615d10d4a6328732ce62f0 +fc1818fbe43e1b49141ee11538c94c45d1a96367d7afdd820a23f105ba2300df
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.