History

net: use u64_stats_t in struct pcpu_lstats

In order to fix the data-race found by KCSAN, we can use the new u64_stats_t type and its accessors instead of plain u64 fields. This will still generate optimal code for both 32 and 64 bit platforms.

Eric Dumazet committed 7 years ago

Commit fd2f4731 parent 5260dd32 files · +6 −6Browse files

Showing the changes to include/linux (1 of 2 files). Show all

Unified · Split

include/linux/netdevice.h+4−4
@@ -2396,8 +2396,8 @@ struct pcpu_sw_netstats { · 2395 unmodified lines
23962396 } __aligned(4 * sizeof(u64));
23972397
23982398 struct pcpu_lstats {
2399− u64 packets;
2400− u64 bytes;
2399+ u64_stats_t packets;
2400+ u64_stats_t bytes;
24012401 struct u64_stats_sync syncp;
24022402 } __aligned(2 * sizeof(u64));
24032403
@@ -2408,8 +2408,8 @@ static inline void dev_lstats_add(struct net_device *dev, unsigned int len) · 4 unmodified lines
24082408 struct pcpu_lstats *lstats = this_cpu_ptr(dev->lstats);
24092409
24102410 u64_stats_update_begin(&lstats->syncp);
2411− lstats->bytes += len;
2412− lstats->packets++;
2411+ u64_stats_add(&lstats->bytes, len);
2412+ u64_stats_inc(&lstats->packets);
24132413 u64_stats_update_end(&lstats->syncp);
24142414 }
24152415

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t