Function report

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:kernel\events\core.c Create Date:2022-07-28 13:39:30
Last Modify:2022-05-20 07:50:19 Copyright©Brick
home page Tree
Annotation kernel can get tool activityDownload SCCTChinese

Name:Address filter string parser

Proto:static int perf_event_parse_addr_filter(struct perf_event *event, char *fstr, struct list_head *filters)

Type:int

Parameter:

TypeParameterName
struct perf_event *event
char *fstr
struct list_head *filters
9568  struct perf_addr_filter * filter = NULL
9569  char * start, * orig, * filename = NULL
9571  state = IF_STATE_ACTION
9572  kernel = 0
9573  ret = -EINVAL
9575  orig = fstr = kstrdup(fstr, GFP_KERNEL)
9576  If Not fstr Then Return -ENOMEM
9579  When ((start = strsep - Split a string into tokens*@s: The string to be searched*@ct: The characters to search for* strsep() updates @s to point after the token, ready for the next call.* It returns empty tokens, too, behaving exactly like the libc function) != NULL) cycle
9580  static const enum perf_addr_filter_action_t actions[] = {[IF_ACT_FILTER] = PERF_ADDR_FILTER_ACTION_FILTER, [IF_ACT_START] = PERF_ADDR_FILTER_ACTION_START, [IF_ACT_STOP] = PERF_ADDR_FILTER_ACTION_STOP, }
9585  ret = -EINVAL
9587  If Not start Then Continue
9591  If state == IF_STATE_ACTION Then
9593  If Not filter Then Go to fail
9597  token = match_token: - Find a token (and optional args) in a string*@s: the string to examine for token/argument pairs*@table: match_table_t describing the set of allowed option tokens and the* arguments that may be associated with them. Must be terminated with a
9599  Case token == IF_ACT_FILTER
9600  Case token == IF_ACT_START
9601  Case token == IF_ACT_STOP
9602  If state != IF_STATE_ACTION Then Go to fail
9605  action = actions[token]
9607  Break
9609  Case token == IF_SRC_KERNELADDR
9610  Case token == IF_SRC_KERNEL
9611  kernel = 1
9614  Case token == IF_SRC_FILEADDR
9615  Case token == IF_SRC_FILE
9616  If state != IF_STATE_SOURCE Then Go to fail
9619  to = 0
9621  If ret Then Go to fail
9624  If token == IF_SRC_KERNEL || token == IF_SRC_FILE Then
9631  If token == IF_SRC_FILE || token == IF_SRC_FILEADDR Then
9641  state = IF_STATE_END
9642  Break
9644  Default
9645  Go to fail
9653  If state == IF_STATE_END Then
9654  ret = -EINVAL
9655  If kernel && exclude_kernel Then Go to fail
9662  If action == PERF_ADDR_FILTER_ACTION_FILTER && Not size Then Go to fail
9666  If Not kernel Then
9667  If Not filename Then Go to fail
9678  ret = -EOPNOTSUPP
9679  If Not task Then Go to fail_free_name
9685  If ret Then Go to fail_free_name
9688  kfree(filename)
9689  filename = NULL
9691  ret = -EINVAL
9692  If Not dentry || Not S_ISREG(i_mode) Then Go to fail
9697  nr_file_filters++
9702  filter = NULL
9706  If state != IF_STATE_ACTION Then Go to fail
9709  kfree(orig)
9711  Return 0
9713  fail_free_name :
9714  kfree(filename)
9715  fail :
9716  free_filters_list(filters)
9717  kfree(orig)
9719  Return ret
Caller
NameDescribe
perf_event_set_addr_filter