counter.h (71e3c3083b47ad0f04322c5a1173377433c05a6e) counter.h (ab3059a8e7f382cff93dbe4d1b082adf62f4d849)
1/*-
2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3 *
4 * Copyright (c) 2012, 2013 Konstantin Belousov <kib@FreeBSD.org>
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 36 unchanged lines hidden (view full) ---

45#define counter_enter() do {} while (0)
46#define counter_exit() do {} while (0)
47
48#ifdef IN_SUBR_COUNTER_C
49static inline uint64_t
50counter_u64_read_one(uint64_t *p, int cpu)
51{
52
1/*-
2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3 *
4 * Copyright (c) 2012, 2013 Konstantin Belousov <kib@FreeBSD.org>
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 36 unchanged lines hidden (view full) ---

45#define counter_enter() do {} while (0)
46#define counter_exit() do {} while (0)
47
48#ifdef IN_SUBR_COUNTER_C
49static inline uint64_t
50counter_u64_read_one(uint64_t *p, int cpu)
51{
52
53 return (*(uint64_t *)((char *)p + sizeof(struct pcpu) * cpu));
53 return (*(uint64_t *)((char *)p + UMA_PCPU_ALLOC_SIZE * cpu));
54}
55
56static inline uint64_t
57counter_u64_fetch_inline(uint64_t *p)
58{
59 uint64_t r;
60 int i;
61
62 r = 0;
63 CPU_FOREACH(i)
64 r += counter_u64_read_one((uint64_t *)p, i);
65
66 return (r);
67}
68
69static void
70counter_u64_zero_one_cpu(void *arg)
71{
72
54}
55
56static inline uint64_t
57counter_u64_fetch_inline(uint64_t *p)
58{
59 uint64_t r;
60 int i;
61
62 r = 0;
63 CPU_FOREACH(i)
64 r += counter_u64_read_one((uint64_t *)p, i);
65
66 return (r);
67}
68
69static void
70counter_u64_zero_one_cpu(void *arg)
71{
72
73 *((uint64_t *)((char *)arg + sizeof(struct pcpu) *
73 *((uint64_t *)((char *)arg + UMA_PCPU_ALLOC_SIZE *
74 PCPU_GET(cpuid))) = 0;
75}
76
77static inline void
78counter_u64_zero_inline(counter_u64_t c)
79{
80
81 smp_rendezvous(smp_no_rendezvous_barrier, counter_u64_zero_one_cpu,

--- 26 unchanged lines hidden (view full) ---

108#define counter_exit() critical_exit()
109
110#ifdef IN_SUBR_COUNTER_C
111/* XXXKIB non-atomic 64bit read */
112static inline uint64_t
113counter_u64_read_one(uint64_t *p, int cpu)
114{
115
74 PCPU_GET(cpuid))) = 0;
75}
76
77static inline void
78counter_u64_zero_inline(counter_u64_t c)
79{
80
81 smp_rendezvous(smp_no_rendezvous_barrier, counter_u64_zero_one_cpu,

--- 26 unchanged lines hidden (view full) ---

108#define counter_exit() critical_exit()
109
110#ifdef IN_SUBR_COUNTER_C
111/* XXXKIB non-atomic 64bit read */
112static inline uint64_t
113counter_u64_read_one(uint64_t *p, int cpu)
114{
115
116 return (*(uint64_t *)((char *)p + sizeof(struct pcpu) * cpu));
116 return (*(uint64_t *)((char *)p + UMA_PCPU_ALLOC_SIZE * cpu));
117}
118
119static inline uint64_t
120counter_u64_fetch_inline(uint64_t *p)
121{
122 uint64_t r;
123 int i;
124

--- 4 unchanged lines hidden (view full) ---

129 return (r);
130}
131
132/* XXXKIB non-atomic 64bit store, might interrupt increment */
133static void
134counter_u64_zero_one_cpu(void *arg)
135{
136
117}
118
119static inline uint64_t
120counter_u64_fetch_inline(uint64_t *p)
121{
122 uint64_t r;
123 int i;
124

--- 4 unchanged lines hidden (view full) ---

129 return (r);
130}
131
132/* XXXKIB non-atomic 64bit store, might interrupt increment */
133static void
134counter_u64_zero_one_cpu(void *arg)
135{
136
137 *((uint64_t *)((char *)arg + sizeof(struct pcpu) *
137 *((uint64_t *)((char *)arg + UMA_PCPU_ALLOC_SIZE *
138 PCPU_GET(cpuid))) = 0;
139}
140
141static inline void
142counter_u64_zero_inline(counter_u64_t c)
143{
144
145 smp_rendezvous(smp_no_rendezvous_barrier, counter_u64_zero_one_cpu,

--- 21 unchanged lines hidden ---
138 PCPU_GET(cpuid))) = 0;
139}
140
141static inline void
142counter_u64_zero_inline(counter_u64_t c)
143{
144
145 smp_rendezvous(smp_no_rendezvous_barrier, counter_u64_zero_one_cpu,

--- 21 unchanged lines hidden ---