96 if (!is_error_return(ret_value))
97 return;
98 check_for_held();
99 }
100
101 static void register_returns_held_funcs(void)
102 {
103 struct token *token;
104 const char *func;
105
106 token = get_tokens_file("kernel.returns_held_funcs");
107 if (!token)
108 return;
109 if (token_type(token) != TOKEN_STREAMBEGIN)
110 return;
111 token = token->next;
112 while (token_type(token) != TOKEN_STREAMEND) {
113 if (token_type(token) != TOKEN_IDENT)
114 return;
115 func = show_ident(token->ident);
116 return_implies_state(func, valid_ptr_min, valid_ptr_max,
117 &match_returns_held, NULL);
118 return_implies_state(func, 0, 0, &match_returns_null,
119 NULL);
120 token = token->next;
121 }
122 clear_token_alloc();
123 }
124
125 void check_held_dev(int id)
126 {
127 if (option_project != PROJ_KERNEL)
128 return;
129
130 my_id = id;
131 add_function_hook("dev_hold", &match_dev_hold, NULL);
132 add_function_hook("dev_put", &match_dev_put, NULL);
133 register_returns_held_funcs();
134 add_hook(&match_return, RETURN_HOOK);
135 }
|
96 if (!is_error_return(ret_value))
97 return;
98 check_for_held();
99 }
100
101 static void register_returns_held_funcs(void)
102 {
103 struct token *token;
104 const char *func;
105
106 token = get_tokens_file("kernel.returns_held_funcs");
107 if (!token)
108 return;
109 if (token_type(token) != TOKEN_STREAMBEGIN)
110 return;
111 token = token->next;
112 while (token_type(token) != TOKEN_STREAMEND) {
113 if (token_type(token) != TOKEN_IDENT)
114 return;
115 func = show_ident(token->ident);
116 return_implies_state_sval(func, valid_ptr_min_sval, valid_ptr_max_sval,
117 &match_returns_held, NULL);
118 return_implies_state(func, 0, 0, &match_returns_null,
119 NULL);
120 token = token->next;
121 }
122 clear_token_alloc();
123 }
124
125 void check_held_dev(int id)
126 {
127 if (option_project != PROJ_KERNEL)
128 return;
129
130 my_id = id;
131 add_function_hook("dev_hold", &match_dev_hold, NULL);
132 add_function_hook("dev_put", &match_dev_put, NULL);
133 register_returns_held_funcs();
134 add_hook(&match_return, RETURN_HOOK);
135 }
|