Motr  M0
locality.h
Go to the documentation of this file.
1 /* -*- C -*- */
2 /*
3  * Copyright (c) 2013-2020 Seagate Technology LLC and/or its Affiliates
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * For any questions about this software or licensing,
18  * please email opensource@seagate.com or cortx-questions@seagate.com.
19  *
20  */
21 
22 
23 #pragma once
24 
25 #ifndef __MOTR_LIB_LOCALITY_H__
26 #define __MOTR_LIB_LOCALITY_H__
27 
34 /* import */
35 #include "lib/types.h"
36 #include "lib/processor.h"
37 #include "lib/lockers.h"
38 #include "lib/tlist.h"
39 #include "lib/time.h"
40 #include "lib/chan.h"
41 #include "lib/mutex.h"
42 #include "sm/sm.h"
43 struct m0_reqh;
44 struct m0_fom_domain;
45 
46 /* export */
47 struct m0_locality;
48 struct m0_locality_chore;
50 
51 enum { M0_LOCALITY_LOCKERS_NR = 256 };
53 
57 struct m0_locality {
68  size_t lo_idx;
71  struct m0_locality_lockers lo_lockers;
72  struct m0_tl lo_chores;
73 };
74 
75 M0_INTERNAL void m0_locality_init(struct m0_locality *loc,
76  struct m0_sm_group *grp,
77  struct m0_fom_domain *dom, size_t idx);
78 M0_INTERNAL void m0_locality_fini(struct m0_locality *loc);
79 
85 M0_INTERNAL struct m0_locality *m0_locality_here(void);
86 
93 M0_INTERNAL struct m0_locality *m0_locality_get(uint64_t value);
94 
95 M0_INTERNAL struct m0_locality *m0_locality0_get(void);
96 
100 M0_INTERNAL void m0_locality_dom_set (struct m0_fom_domain *dom);
101 
105 M0_INTERNAL void m0_locality_dom_unset(struct m0_fom_domain *dom);
106 
107 M0_INTERNAL int m0_localities_init(void);
108 M0_INTERNAL void m0_localities_fini(void);
109 
112  void *lc_datum;
119  size_t lc_datasize;
120  int lc_rc;
121  uint64_t lc_magix;
122 };
123 
125  const char *co_name;
126  int (*co_enter)(struct m0_locality_chore *chore,
127  struct m0_locality *loc, void *place);
128  void (*co_leave)(struct m0_locality_chore *chore,
129  struct m0_locality *loc, void *place);
130  void (*co_tick)(struct m0_locality_chore *chore,
131  struct m0_locality *loc, void *place);
132 };
133 
134 int m0_locality_chore_init(struct m0_locality_chore *chore,
135  const struct m0_locality_chore_ops *ops,
136  void *datum, m0_time_t interval,
137  size_t datasize);
138 void m0_locality_chore_quit(struct m0_locality_chore *chore);
139 void m0_locality_chore_fini(struct m0_locality_chore *chore);
140 
141 M0_INTERNAL void m0_locality_chores_run(struct m0_locality *locality);
142 
143 int m0_locality_data_alloc(size_t nob, int (*ctor)(void *, void *),
144  void (*dtor)(void *, void *), void *datum);
145 void m0_locality_data_free (int key);
146 void *m0_locality_data (int key);
148  void (*func)(int idx, void *data, void *datum),
149  void *datum);
150 
151 int m0_locality_call(struct m0_locality *loc, int (*cb)(void *), void *data);
152 
153 M0_INTERNAL struct m0_fom_domain *m0_fom_dom(void);
154 
157 #endif /* __MOTR_LIB_LOCALITY_H__ */
158 
159 /*
160  * Local variables:
161  * c-indentation-style: "K&R"
162  * c-basic-offset: 8
163  * tab-width: 8
164  * fill-column: 80
165  * scroll-step: 1
166  * End:
167  */
168 /*
169  * vim: tabstop=8 shiftwidth=8 noexpandtab textwidth=80 nowrap
170  */
M0_INTERNAL struct m0_locality * m0_locality_get(uint64_t value)
Definition: locality.c:156
static size_t locality(const struct m0_fom *fom)
Definition: rm_foms.c:269
void * m0_locality_data(int key)
Definition: locality.c:474
static struct m0_sm_group * grp
Definition: bytecount.c:38
M0_INTERNAL void m0_locality_fini(struct m0_locality *loc)
Definition: locality.c:140
uint64_t m0_time_t
Definition: time.h:37
M0_INTERNAL int m0_localities_init(void)
Definition: locality.c:212
M0_INTERNAL void m0_locality_dom_unset(struct m0_fom_domain *dom)
Definition: locality.c:182
struct m0_bufvec data
Definition: di.c:40
struct m0_fom_domain * lo_dom
Definition: locality.h:69
int const char const void * value
Definition: dir.c:325
Definition: sm.h:504
int m0_locality_call(struct m0_locality *loc, int(*cb)(void *), void *data)
Definition: locality.c:570
M0_INTERNAL void m0_locality_chores_run(struct m0_locality *locality)
Definition: locality.c:305
int(* co_enter)(struct m0_locality_chore *chore, struct m0_locality *loc, void *place)
Definition: locality.h:126
m0_time_t lc_interval
Definition: locality.h:113
void m0_locality_data_free(int key)
Definition: locality.c:463
void(* co_leave)(struct m0_locality_chore *chore, struct m0_locality *loc, void *place)
Definition: locality.h:128
Definition: tlist.h:251
M0_INTERNAL void m0_locality_dom_set(struct m0_fom_domain *dom)
Definition: locality.c:174
struct m0_tlink lc_linkage
Definition: locality.h:117
static struct m0_stob_domain * dom
Definition: storage.c:38
const struct m0_locality_chore_ops * lc_ops
Definition: locality.h:111
int m0_locality_chore_init(struct m0_locality_chore *chore, const struct m0_locality_chore_ops *ops, void *datum, m0_time_t interval, size_t datasize)
Definition: locality.c:270
Definition: reqh.h:94
struct m0_sm_group * lo_grp
Definition: locality.h:67
const char * co_name
Definition: locality.h:125
Definition: chan.h:229
static int ctor(void *area, void *cookie)
Definition: locality.c:287
M0_INTERNAL struct m0_locality * m0_locality_here(void)
Definition: locality.c:146
void m0_locality_chore_fini(struct m0_locality_chore *chore)
Definition: locality.c:296
M0_INTERNAL void m0_localities_fini(void)
Definition: locality.c:242
struct m0_locality_lockers lo_lockers
Definition: locality.h:71
M0_INTERNAL struct m0_locality * m0_locality0_get(void)
Definition: locality.c:169
struct m0_sm_ast lc_ast
Definition: locality.h:118
M0_LOCKERS_DECLARE(M0_EXTERN, m0_locality, M0_LOCALITY_LOCKERS_NR)
struct m0_tl lo_chores
Definition: locality.h:72
M0_INTERNAL struct m0_fom_domain * m0_fom_dom(void)
Definition: locality.c:575
size_t lo_idx
Definition: locality.h:68
M0_INTERNAL void m0_locality_init(struct m0_locality *loc, struct m0_sm_group *grp, struct m0_fom_domain *dom, size_t idx)
Definition: locality.c:126
struct m0_chan lc_signal
Definition: locality.h:115
uint64_t lc_magix
Definition: locality.h:121
void m0_locality_data_iterate(int key, void(*func)(int idx, void *data, void *datum), void *datum)
Definition: locality.c:480
int m0_locality_data_alloc(size_t nob, int(*ctor)(void *, void *), void(*dtor)(void *, void *), void *datum)
Definition: locality.c:442
void(* co_tick)(struct m0_locality_chore *chore, struct m0_locality *loc, void *place)
Definition: locality.h:130
struct m0_fom_ops ops
Definition: io_foms.c:623
Definition: mutex.h:47
void m0_locality_chore_quit(struct m0_locality_chore *chore)
Definition: idx_mock.c:47
size_t lc_datasize
Definition: locality.h:119
struct m0_mutex lc_lock
Definition: locality.h:114