Skip to content

Commit 7aa1871

Browse files
zhangwenjian111xiaoxiang781216
authored andcommitted
note:support filter for each note channel
Signed-off-by: zhangwenjian <zhangwenjian@xiaomi.com>
1 parent c018be6 commit 7aa1871

File tree

11 files changed

+459
-213
lines changed

11 files changed

+459
-213
lines changed

drivers/note/note_driver.c

Lines changed: 259 additions & 179 deletions
Large diffs are not rendered by default.

drivers/note/notectl_driver.c

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
* Private Function Prototypes
3939
****************************************************************************/
4040

41-
static int notectl_ioctl(struct file *filep, int cmd, unsigned long arg);
41+
static int notectl_ioctl(FAR struct file *filep, int cmd, unsigned long arg);
4242

4343
/****************************************************************************
4444
* Private Data
@@ -62,7 +62,7 @@ static const struct file_operations g_notectl_fops =
6262
* Name: notectl_ioctl
6363
****************************************************************************/
6464

65-
static int notectl_ioctl(struct file *filep, int cmd, unsigned long arg)
65+
static int notectl_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
6666
{
6767
int ret = -ENOSYS;
6868

@@ -77,7 +77,8 @@ static int notectl_ioctl(struct file *filep, int cmd, unsigned long arg)
7777

7878
case NOTECTL_GETMODE:
7979
{
80-
struct note_filter_mode_s *mode = (struct note_filter_mode_s *)arg;
80+
FAR struct note_filter_named_mode_s *mode =
81+
(FAR struct note_filter_named_mode_s *)arg;
8182

8283
if (mode == NULL)
8384
{
@@ -98,7 +99,8 @@ static int notectl_ioctl(struct file *filep, int cmd, unsigned long arg)
9899

99100
case NOTECTL_SETMODE:
100101
{
101-
struct note_filter_mode_s *mode = (struct note_filter_mode_s *)arg;
102+
FAR struct note_filter_named_mode_s *mode =
103+
(FAR struct note_filter_named_mode_s *)arg;
102104

103105
if (mode == NULL)
104106
{
@@ -120,8 +122,8 @@ static int notectl_ioctl(struct file *filep, int cmd, unsigned long arg)
120122

121123
case NOTECTL_GETSYSCALLFILTER:
122124
{
123-
struct note_filter_syscall_s *filter;
124-
filter = (struct note_filter_syscall_s *)arg;
125+
FAR struct note_filter_named_syscall_s *filter;
126+
filter = (FAR struct note_filter_named_syscall_s *)arg;
125127

126128
if (filter == NULL)
127129
{
@@ -142,8 +144,8 @@ static int notectl_ioctl(struct file *filep, int cmd, unsigned long arg)
142144

143145
case NOTECTL_SETSYSCALLFILTER:
144146
{
145-
struct note_filter_syscall_s *filter;
146-
filter = (struct note_filter_syscall_s *)arg;
147+
FAR struct note_filter_named_syscall_s *filter;
148+
filter = (FAR struct note_filter_named_syscall_s *)arg;
147149

148150
if (filter == NULL)
149151
{
@@ -166,8 +168,8 @@ static int notectl_ioctl(struct file *filep, int cmd, unsigned long arg)
166168

167169
case NOTECTL_GETIRQFILTER:
168170
{
169-
struct note_filter_irq_s *filter;
170-
filter = (struct note_filter_irq_s *)arg;
171+
FAR struct note_filter_named_irq_s *filter;
172+
filter = (FAR struct note_filter_named_irq_s *)arg;
171173

172174
if (filter == NULL)
173175
{
@@ -189,8 +191,8 @@ static int notectl_ioctl(struct file *filep, int cmd, unsigned long arg)
189191

190192
case NOTECTL_SETIRQFILTER:
191193
{
192-
struct note_filter_irq_s *filter;
193-
filter = (struct note_filter_irq_s *)arg;
194+
FAR struct note_filter_named_irq_s *filter;
195+
filter = (FAR struct note_filter_named_irq_s *)arg;
194196

195197
if (filter == NULL)
196198
{

drivers/note/notelog_driver.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,17 @@ static const struct note_driver_ops_s g_notelog_ops =
124124

125125
struct note_driver_s g_notelog_driver =
126126
{
127+
#ifdef CONFIG_SCHED_INSTRUMENTATION_FILTER
128+
"log",
129+
{
130+
{
131+
CONFIG_SCHED_INSTRUMENTATION_FILTER_DEFAULT_MODE,
132+
# ifdef CONFIG_SMP
133+
CONFIG_SCHED_INSTRUMENTATION_CPUSET
134+
# endif
135+
},
136+
},
137+
#endif
127138
&g_notelog_ops,
128139
};
129140

drivers/note/noteram_driver.c

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,20 @@ static const struct note_driver_ops_s g_noteram_ops =
146146

147147
struct noteram_driver_s g_noteram_driver =
148148
{
149-
{&g_noteram_ops},
149+
{
150+
#ifdef CONFIG_SCHED_INSTRUMENTATION_FILTER
151+
"ram",
152+
{
153+
{
154+
CONFIG_SCHED_INSTRUMENTATION_FILTER_DEFAULT_MODE,
155+
# ifdef CONFIG_SMP
156+
CONFIG_SCHED_INSTRUMENTATION_CPUSET
157+
# endif
158+
},
159+
},
160+
#endif
161+
&g_noteram_ops
162+
},
150163
g_ramnote_buffer,
151164
CONFIG_DRIVERS_NOTERAM_BUFSIZE,
152165
#ifdef CONFIG_DRIVERS_NOTERAM_DEFAULT_NOOVERWRITE
@@ -1339,17 +1352,35 @@ FAR struct note_driver_s *
13391352
noteram_initialize(FAR const char *devpath, size_t bufsize, bool overwrite)
13401353
{
13411354
FAR struct noteram_driver_s *drv;
1355+
#ifdef CONFIG_SCHED_INSTRUMENTATION_FILTER
1356+
size_t len = strlen(devpath) + 1;
1357+
#else
1358+
size_t len = 0;
1359+
#endif
13421360
int ret;
13431361

1344-
drv = kmm_malloc(sizeof(*drv) + bufsize);
1362+
drv = kmm_malloc(sizeof(*drv) + len + bufsize);
13451363
if (drv == NULL)
13461364
{
13471365
return NULL;
13481366
}
1367+
#ifdef CONFIG_SCHED_INSTRUMENTATION_FILTER
1368+
1369+
memcpy(drv + 1, devpath, len);
1370+
drv->driver.name = (FAR const char *)(drv + 1);
1371+
drv->driver.filter.mode.flag =
1372+
CONFIG_SCHED_INSTRUMENTATION_FILTER_DEFAULT_MODE;
1373+
1374+
# ifdef CONFIG_SMP
1375+
drv->driver.filter.mode.cpuset =
1376+
CONFIG_SCHED_INSTRUMENTATION_CPUSET;
1377+
# endif
1378+
1379+
#endif
13491380

13501381
drv->driver.ops = &g_noteram_ops;
13511382
drv->ni_bufsize = bufsize;
1352-
drv->ni_buffer = (FAR uint8_t *)(drv + 1);
1383+
drv->ni_buffer = (FAR uint8_t *)(drv + 1) + len;
13531384
drv->ni_overwrite = overwrite;
13541385
drv->ni_head = 0;
13551386
drv->ni_tail = 0;

drivers/note/noterpmsg_driver.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,20 @@ static const struct note_driver_ops_s g_noterpmsg_ops =
6767

6868
struct noterpmsg_driver_s g_noterpmsg_driver =
6969
{
70-
{&g_noterpmsg_ops},
70+
{
71+
#ifdef CONFIG_SCHED_INSTRUMENTATION_FILTER
72+
"rpmsg",
73+
{
74+
{
75+
CONFIG_SCHED_INSTRUMENTATION_FILTER_DEFAULT_MODE,
76+
# ifdef CONFIG_SMP
77+
CONFIG_SCHED_INSTRUMENTATION_CPUSET
78+
# endif
79+
},
80+
},
81+
#endif
82+
&g_noterpmsg_ops
83+
},
7184
};
7285

7386
/****************************************************************************

drivers/note/notesnap_driver.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,20 @@ static const struct note_driver_ops_s g_notesnap_ops =
150150

151151
static struct notesnap_s g_notesnap =
152152
{
153-
{&g_notesnap_ops}
153+
{
154+
#ifdef CONFIG_SCHED_INSTRUMENTATION_FILTER
155+
"snap",
156+
{
157+
{
158+
CONFIG_SCHED_INSTRUMENTATION_FILTER_DEFAULT_MODE,
159+
# ifdef CONFIG_SMP
160+
CONFIG_SCHED_INSTRUMENTATION_CPUSET
161+
# endif
162+
},
163+
},
164+
#endif
165+
&g_notesnap_ops
166+
}
154167
};
155168

156169
static FAR const char *g_notesnap_type[] =

drivers/note/notestream_driver.c

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,17 @@ static const struct note_driver_ops_s g_notestream_ops =
6565
struct notestream_driver_s g_notestream_lowerout =
6666
{
6767
{
68+
#ifdef CONFIG_SCHED_INSTRUMENTATION_FILTER
69+
"lowerout",
70+
{
71+
{
72+
CONFIG_SCHED_INSTRUMENTATION_FILTER_DEFAULT_MODE,
73+
# ifdef CONFIG_SMP
74+
CONFIG_SCHED_INSTRUMENTATION_CPUSET
75+
# endif
76+
},
77+
},
78+
#endif
6879
&g_notestream_ops
6980
},
7081
&g_lowoutstream
@@ -91,14 +102,32 @@ static void notestream_add(FAR struct note_driver_s *drv,
91102
int notefile_register(FAR const char *filename)
92103
{
93104
FAR struct notestream_file_s *notefile;
105+
#ifdef CONFIG_SCHED_INSTRUMENTATION_FILTER
106+
size_t len = strlen(filename) + 1;
107+
#else
108+
size_t len = 0;
109+
#endif
94110
int ret;
95111

96-
notefile = kmm_zalloc(sizeof(struct notestream_file_s));
112+
notefile = kmm_zalloc(sizeof(struct notestream_file_s) + len);
97113
if (notefile == NULL)
98114
{
99115
return -ENOMEM;
100116
}
101117

118+
#ifdef CONFIG_SCHED_INSTRUMENTATION_FILTER
119+
memcpy(notefile + 1, filename, len);
120+
notefile->driver.driver.name = (FAR const char *)(notefile + 1);
121+
notefile->driver.driver.filter.mode.flag =
122+
CONFIG_SCHED_INSTRUMENTATION_FILTER_DEFAULT_MODE;
123+
124+
# ifdef CONFIG_SMP
125+
notefile->driver.driver.filter.mode.cpuset =
126+
CONFIG_SCHED_INSTRUMENTATION_CPUSET;
127+
# endif
128+
129+
#endif
130+
102131
notefile->driver.stream = &notefile->filestream.common;
103132
ret = file_open(&notefile->file, filename, O_WRONLY);
104133
if (ret < 0)

drivers/segger/note_rtt.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,17 @@ static const struct note_driver_ops_s g_notertt_ops =
5555
struct notertt_s g_notertt =
5656
{
5757
{
58+
#ifdef CONFIG_SCHED_INSTRUMENTATION_FILTER
59+
"rtt",
60+
{
61+
{
62+
CONFIG_SCHED_INSTRUMENTATION_FILTER_DEFAULT_MODE,
63+
# ifdef CONFIG_SMP
64+
CONFIG_SCHED_INSTRUMENTATION_CPUSET
65+
# endif
66+
},
67+
},
68+
#endif
5869
&g_notertt_ops
5970
}
6071
};

drivers/segger/note_sysview.c

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,6 @@ struct note_sysview_driver_s
4545
{
4646
struct note_driver_s driver;
4747
unsigned int irq[CONFIG_SMP_NCPUS];
48-
#ifdef CONFIG_SCHED_INSTRUMENTATION_SYSCALL
49-
struct note_filter_syscall_s syscall_marker;
50-
#endif
5148
};
5249

5350
/****************************************************************************
@@ -144,6 +141,17 @@ static const struct note_driver_ops_s g_note_sysview_ops =
144141
static struct note_sysview_driver_s g_note_sysview_driver =
145142
{
146143
{
144+
#ifdef CONFIG_SCHED_INSTRUMENTATION_FILTER
145+
"sysview",
146+
{
147+
{
148+
CONFIG_SCHED_INSTRUMENTATION_FILTER_DEFAULT_MODE,
149+
# ifdef CONFIG_SMP
150+
CONFIG_SCHED_INSTRUMENTATION_CPUSET
151+
# endif
152+
},
153+
},
154+
#endif
147155
&g_note_sysview_ops
148156
}
149157
};
@@ -307,24 +315,27 @@ static void note_sysview_syscall_enter(FAR struct note_driver_s *drv, int nr,
307315

308316
/* Set the name marker if the current syscall nr is not active */
309317

310-
if (NOTE_FILTER_SYSCALLMASK_ISSET(nr, &driver->syscall_marker) == 0)
318+
if (NOTE_FILTER_SYSCALLMASK_ISSET(nr,
319+
&driver->driver.filter.syscall_mask) == 0)
311320
{
312321
/* Set the name marker */
313322

314323
SEGGER_SYSVIEW_NameMarker(nr, g_funcnames[nr]);
315324

316325
/* Mark the syscall active */
317326

318-
NOTE_FILTER_SYSCALLMASK_SET(nr, &driver->syscall_marker);
327+
NOTE_FILTER_SYSCALLMASK_SET(nr, &driver->driver.filter.syscall_mask);
319328

320329
/* Use the Syscall "0" to identify whether the syscall is enabled,
321330
* if the host tool is closed abnormally, use this bit to clear
322331
* the active set.
323332
*/
324333

325-
if (NOTE_FILTER_SYSCALLMASK_ISSET(0, &driver->syscall_marker) == 0)
334+
if (NOTE_FILTER_SYSCALLMASK_ISSET(0,
335+
&driver->driver.filter.syscall_mask) == 0)
326336
{
327-
NOTE_FILTER_SYSCALLMASK_SET(0, &driver->syscall_marker);
337+
NOTE_FILTER_SYSCALLMASK_SET(0,
338+
&driver->driver.filter.syscall_mask);
328339
}
329340
}
330341

@@ -338,7 +349,7 @@ static void note_sysview_syscall_leave(FAR struct note_driver_s *drv,
338349
(FAR struct note_sysview_driver_s *)drv;
339350
nr -= CONFIG_SYS_RESERVED;
340351

341-
if (NOTE_FILTER_SYSCALLMASK_ISSET(nr, &driver->syscall_marker) != 0)
352+
if (NOTE_FILTER_SYSCALLMASK_ISSET(nr, &driver->driver.filter.syscall_mask))
342353
{
343354
SEGGER_SYSVIEW_MarkStop(nr);
344355
}

include/nuttx/note/note_driver.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include <stddef.h>
3333

3434
#include <nuttx/sched.h>
35+
#include <nuttx/sched_note.h>
3536

3637
/****************************************************************************
3738
* Pre-processor Definitions
@@ -108,8 +109,28 @@ struct note_driver_ops_s
108109
#endif
109110
};
110111

112+
#ifdef CONFIG_SCHED_INSTRUMENTATION_FILTER
113+
struct note_filter_s
114+
{
115+
struct note_filter_mode_s mode;
116+
# ifdef CONFIG_SCHED_INSTRUMENTATION_DUMP
117+
struct note_filter_tag_s tag_mask;
118+
# endif
119+
# ifdef CONFIG_SCHED_INSTRUMENTATION_IRQHANDLER
120+
struct note_filter_irq_s irq_mask;
121+
# endif
122+
# ifdef CONFIG_SCHED_INSTRUMENTATION_SYSCALL
123+
struct note_filter_syscall_s syscall_mask;
124+
# endif
125+
};
126+
#endif
127+
111128
struct note_driver_s
112129
{
130+
#ifdef CONFIG_SCHED_INSTRUMENTATION_FILTER
131+
FAR const char *name;
132+
struct note_filter_s filter;
133+
#endif
113134
FAR const struct note_driver_ops_s *ops;
114135
};
115136

0 commit comments

Comments
 (0)