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
2396} __aligned(4 * sizeof(u64));2396} __aligned(4 * sizeof(u64));
2397 2397
2398struct pcpu_lstats {2398struct pcpu_lstats {
2399 u64 packets;2399 u64_stats_t packets;
2400 u64 bytes;2400 u64_stats_t bytes;
2401 struct u64_stats_sync syncp;2401 struct u64_stats_sync syncp;
2402} __aligned(2 * sizeof(u64));2402} __aligned(2 * sizeof(u64));
2403 2403
@@ -2408,8 +2408,8 @@ static inline void dev_lstats_add(struct net_device *dev, unsigned int len) · 4 unmodified lines
2408 struct pcpu_lstats *lstats = this_cpu_ptr(dev->lstats);2408 struct pcpu_lstats *lstats = this_cpu_ptr(dev->lstats);
2409 2409
2410 u64_stats_update_begin(&lstats->syncp);2410 u64_stats_update_begin(&lstats->syncp);
2411 lstats->bytes += len;2411 u64_stats_add(&lstats->bytes, len);
2412 lstats->packets++;2412 u64_stats_inc(&lstats->packets);
2413 u64_stats_update_end(&lstats->syncp);2413 u64_stats_update_end(&lstats->syncp);
2414}2414}
2415 2415

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