All of lore.kernel.org
 help / color / mirror / Atom feed
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.