Line data Source code
1 :
2 : struct device;
3 :
4 : void *ldv_dev_get_drvdata(const struct device *dev);
5 : int ldv_dev_set_drvdata(struct device *dev, void *data);
6 :
7 : struct spi_master;
8 : struct device;
9 : struct spi_master *ldv_spi_alloc_master(struct device *host, unsigned size);
10 :
11 : #include <linux/ldv/err.h>
12 :
13 : #include <linux/types.h>
14 : void *ldv_kzalloc(size_t size, gfp_t flags);
15 :
16 : struct clk;
17 :
18 : extern void ldv_clk_disable(struct clk *clk);
19 : extern int ldv_clk_enable(void);
20 :
21 : #include <linux/ldv/common.h>
22 : #include <linux/ldv/irq.h>
23 : #include <verifier/common.h>
24 : #include <verifier/nondet.h>
25 : #include <verifier/memory.h>
26 : #include <verifier/thread.h>
27 :
28 : #include <linux/pci.h>
29 : #include <linux/pm.h>
30 : #include <linux/timer.h>
31 : #include <linux/usb.h>
32 : #include <linux/interrupt.h>
33 :
34 :
35 : struct ldv_struct_free_irq_8 {
36 : int arg0;
37 : int signal_pending;
38 : };
39 1 :
40 : struct ldv_struct_insmod_6 {
41 : int signal_pending;
42 : };
43 1 :
44 : struct ldv_struct_pci_scenario_2 {
45 : struct pci_driver *arg0;
46 : int signal_pending;
47 : };
48 1 :
49 : struct ldv_struct_timer_scenario_5 {
50 : struct timer_list *arg0;
51 : int signal_pending;
52 : };
53 :
54 : /* EMG Function declarations */
55 : void ldv_dispatch_default_deregister_8_6_4(void);
56 : void ldv_dispatch_default_deregister_9_6_5(void);
57 : void ldv_dispatch_default_irq_register_4_6_6(void);
58 : void ldv_dispatch_default_register_8_6_8(void);
59 : void ldv_dispatch_default_register_9_6_7(void);
60 : void ldv_dispatch_deregister_10_1(struct pci_driver *);
61 : void ldv_dispatch_insmod_deregister_12_2(void);
62 : void ldv_dispatch_insmod_register_12_3(void);
63 : void ldv_dispatch_instance_deregister_7_1(struct timer_list *);
64 : void ldv_dispatch_instance_register_9_3(struct timer_list *);
65 : void ldv_dispatch_irq_deregister_8_1(int);
66 : void ldv_dispatch_register_11_3(struct pci_driver *);
67 : int ldv_emg___pci_register_driver(struct pci_driver *, struct module *, char *);
68 : int ldv_emg_del_timer(struct timer_list *);
69 : void ldv_emg_free_irq(int, void *);
70 : int ldv_emg_mod_timer(struct timer_list *, long unsigned int);
71 : void ldv_emg_pci_unregister_driver(struct pci_driver *);
72 : void ldv_insmod_6(void *);
73 : void ldv_insmod_ohci_hcd_mod_exit_6_2(void (*)(void));
74 : int ldv_insmod_ohci_hcd_mod_init_6_12(int (*)(void));
75 : void ldv_interrupt_scenario_1(void *);
76 : enum irqreturn ldv_interrupt_scenario_handler_1_5(irqreturn_t (*)(int, void *), int, void *);
77 : void ldv_interrupt_scenario_thread_1_3(irqreturn_t (*)(int, void *), int, void *);
78 : void ldv_main_12(void *);
79 : void ldv_partially_ordered_scenario_3(void *);
80 : void ldv_partially_ordered_scenario_callback_3_17(int (*)(struct usb_hcd *), struct usb_hcd *);
81 : void ldv_partially_ordered_scenario_callback_3_18(int (*)(struct usb_hcd *, short unsigned int, short unsigned int, short unsigned int, char *, short unsigned int), struct usb_hcd *, short unsigned int, short unsigned int, short unsigned int, char *, short unsigned int);
82 : void ldv_partially_ordered_scenario_callback_3_21(int (*)(struct usb_hcd *, char *), struct usb_hcd *, char *);
83 : void ldv_partially_ordered_scenario_callback_3_24(irqreturn_t (*)(struct usb_hcd *), struct usb_hcd *);
84 : void ldv_partially_ordered_scenario_callback_3_25(int (*)(struct usb_hcd *), struct usb_hcd *);
85 : void ldv_partially_ordered_scenario_callback_3_26(void (*)(struct usb_hcd *), struct usb_hcd *);
86 : void ldv_partially_ordered_scenario_callback_3_27(int (*)(struct usb_hcd *, struct urb *, int), struct usb_hcd *, struct urb *, int);
87 : void ldv_partially_ordered_scenario_callback_3_30(int (*)(struct usb_hcd *, struct urb *, gfp_t ), struct usb_hcd *, struct urb *, unsigned int);
88 : void ldv_partially_ordered_scenario_callback_3_4(void (*)(struct usb_hcd *, struct usb_host_endpoint *), struct usb_hcd *, struct usb_host_endpoint *);
89 : int ldv_partially_ordered_scenario_probe_3_12(int (*)(struct usb_hcd *), struct usb_hcd *);
90 : void ldv_partially_ordered_scenario_release_3_2(void (*)(struct usb_hcd *), struct usb_hcd *);
91 : void ldv_pci_scenario_2(void *);
92 : int ldv_pci_scenario_probe_2_17(int (*)(struct pci_dev *, struct pci_device_id *), struct pci_dev *, struct pci_device_id *);
93 : void ldv_pci_scenario_release_2_2(void (*)(struct pci_dev *), struct pci_dev *);
94 : void ldv_pci_scenario_resume_2_5(int (*)(struct pci_dev *), struct pci_dev *);
95 : void ldv_pci_scenario_resume_early_2_6(int (*)(struct pci_dev *), struct pci_dev *);
96 : void ldv_pci_scenario_shutdown_2_3(void (*)(struct pci_dev *), struct pci_dev *);
97 : int ldv_pci_scenario_suspend_2_8(int (*)(struct pci_dev *, struct pm_message), struct pci_dev *, struct pm_message);
98 : int ldv_pci_scenario_suspend_late_2_7(int (*)(struct pci_dev *, struct pm_message), struct pci_dev *, struct pm_message);
99 : void ldv_random_containerless_scenario_4(void *);
100 : void ldv_random_containerless_scenario_callback_4_10(int (*)(char *, struct kernel_param *), char *, struct kernel_param *);
101 : void ldv_random_containerless_scenario_callback_4_4(int (*)(char *, struct kernel_param *), char *, struct kernel_param *);
102 : void ldv_timer_scenario_5(void *);
103 : void ldv_timer_scenario_callback_5_2(void (*)(unsigned long), unsigned long);
104 : int main(void);
105 :
106 : /* EMG variable declarations */
107 1 : struct ldv_thread ldv_thread_1;
108 1 : struct ldv_thread ldv_thread_12;
109 1 : struct ldv_thread ldv_thread_2;
110 1 : struct ldv_thread ldv_thread_3;
111 1 : struct ldv_thread ldv_thread_4;
112 1 : struct ldv_thread ldv_thread_5;
113 1 : struct ldv_thread ldv_thread_6;
114 :
115 : /* EMG variable initialization */
116 :
117 : /* EMG function definitions */
118 : /* AUX_FUNC ldv_dispatch_default_deregister_8_6_4 */
119 : void ldv_dispatch_default_deregister_8_6_4() {
120 : struct ldv_struct_insmod_6 *cf_arg_3;
121 : /* Skip thread join call */
122 1 : return;
123 : }
124 :
125 : /* AUX_FUNC ldv_dispatch_default_deregister_9_6_5 */
126 : void ldv_dispatch_default_deregister_9_6_5() {
127 : struct ldv_struct_insmod_6 *cf_arg_4;
128 : /* Skip thread join call */
129 1 : return;
130 : }
131 :
132 : /* AUX_FUNC ldv_dispatch_default_irq_register_4_6_6 */
133 : void ldv_dispatch_default_irq_register_4_6_6() {
134 : struct ldv_struct_insmod_6 *cf_arg_1;
135 4 : cf_arg_1 = ldv_xmalloc(sizeof(struct ldv_struct_insmod_6));
136 5 : ldv_interrupt_scenario_1(cf_arg_1);
137 1 : return;
138 : }
139 :
140 : /* AUX_FUNC ldv_dispatch_default_register_8_6_8 */
141 : void ldv_dispatch_default_register_8_6_8() {
142 : struct ldv_struct_insmod_6 *cf_arg_3;
143 4 : cf_arg_3 = ldv_xmalloc(sizeof(struct ldv_struct_insmod_6));
144 3 : ldv_partially_ordered_scenario_3(cf_arg_3);
145 1 : return;
146 : }
147 :
148 : /* AUX_FUNC ldv_dispatch_default_register_9_6_7 */
149 : void ldv_dispatch_default_register_9_6_7() {
150 : struct ldv_struct_insmod_6 *cf_arg_4;
151 4 : cf_arg_4 = ldv_xmalloc(sizeof(struct ldv_struct_insmod_6));
152 3 : ldv_random_containerless_scenario_4(cf_arg_4);
153 1 : return;
154 : }
155 :
156 : /* AUX_FUNC ldv_dispatch_deregister_10_1 */
157 : void ldv_dispatch_deregister_10_1(struct pci_driver *arg0) {
158 : struct ldv_struct_pci_scenario_2 *cf_arg_2;
159 : /* Skip thread join call */
160 2 : return;
161 : }
162 :
163 : /* AUX_FUNC ldv_dispatch_insmod_deregister_12_2 */
164 : void ldv_dispatch_insmod_deregister_12_2() {
165 : struct ldv_struct_insmod_6 *cf_arg_6;
166 : /* Skip thread join call */
167 1 : return;
168 : }
169 :
170 : /* AUX_FUNC ldv_dispatch_insmod_register_12_3 */
171 : void ldv_dispatch_insmod_register_12_3() {
172 : struct ldv_struct_insmod_6 *cf_arg_6;
173 4 : cf_arg_6 = ldv_xmalloc(sizeof(struct ldv_struct_insmod_6));
174 4 : ldv_insmod_6(cf_arg_6);
175 1 : return;
176 : }
177 :
178 : /* AUX_FUNC ldv_dispatch_instance_deregister_7_1 */
179 : void ldv_dispatch_instance_deregister_7_1(struct timer_list *arg0) {
180 : struct ldv_struct_timer_scenario_5 *cf_arg_5;
181 : /* Skip thread join call */
182 3 : return;
183 : }
184 :
185 : /* AUX_FUNC ldv_dispatch_instance_register_9_3 */
186 : void ldv_dispatch_instance_register_9_3(struct timer_list *arg0) {
187 : struct ldv_struct_timer_scenario_5 *cf_arg_5;
188 12 : cf_arg_5 = ldv_xmalloc(sizeof(struct ldv_struct_timer_scenario_5));
189 6 : cf_arg_5->arg0 = arg0;
190 12 : ldv_timer_scenario_5(cf_arg_5);
191 3 : return;
192 : }
193 :
194 : /* AUX_FUNC ldv_dispatch_irq_deregister_8_1 */
195 : void ldv_dispatch_irq_deregister_8_1(int arg0) {
196 : struct ldv_struct_free_irq_8 *cf_arg_1;
197 : /* Skip thread join call */
198 3 : return;
199 : }
200 :
201 : /* AUX_FUNC ldv_dispatch_register_11_3 */
202 : void ldv_dispatch_register_11_3(struct pci_driver *arg0) {
203 : struct ldv_struct_pci_scenario_2 *cf_arg_2;
204 4 : cf_arg_2 = ldv_xmalloc(sizeof(struct ldv_struct_pci_scenario_2));
205 2 : cf_arg_2->arg0 = arg0;
206 2 : ldv_pci_scenario_2(cf_arg_2);
207 1 : return;
208 : }
209 :
210 : /* AUX_FUNC ldv_emg___pci_register_driver */
211 : int ldv_emg___pci_register_driver(struct pci_driver *arg0, struct module *arg1, char *arg2) {
212 : /* LDV {"comment": "Control function '__pci_register_driver'", "type": "CONTROL_FUNCTION_BEGIN", "function": "ldv_emg___pci_register_driver"} */
213 : /* LDV {"type": "CONTROL_FUNCTION_INIT_BEGIN", "comment": "Declare auxiliary variables."} */
214 1 : struct pci_driver *ldv_11_pci_driver_pci_driver;
215 1 : /* LDV {"type": "CONTROL_FUNCTION_INIT_END", "comment": "Declare auxiliary variables."} */
216 1 : /* LDV {"action": null, "type": "ARTIFICIAL", "comment": "Artificial state in scenario"} */
217 :
218 4 : if (ldv_undef_int()) {
219 : /* LDV {"action": "ASSIGN", "type": "CONDITION_BEGIN", "comment": "Get 'pci' callbacks to register."} */
220 1 : ldv_11_pci_driver_pci_driver = arg0;
221 : /* LDV {"action": "ASSIGN", "type": "CONDITION_END"} */
222 :
223 : /* LDV {"action": "REGISTER", "type": "DISPATCH_BEGIN", "comment": "Register PCI callbacks."} */
224 2 : ldv_dispatch_register_11_3(ldv_11_pci_driver_pci_driver);
225 : /* LDV {"action": "REGISTER", "type": "DISPATCH_END"} */
226 :
227 : /* LDV {"action": "FAIL", "type": "CONDITION_BEGIN", "comment": "Fail registration of 'pci' callbacks."} */
228 3 : return ldv_undef_int_negative();
229 : /* LDV {"action": "FAIL", "type": "CONDITION_END"} */
230 :
231 : /* Exit function at a terminal state */
232 : }
233 : else {
234 : /* LDV {"action": "SUCCESS", "type": "CONDITION_BEGIN", "comment": "Registration of 'pci' callbacks has been successful."} */
235 1 : return 0;
236 : /* LDV {"action": "SUCCESS", "type": "CONDITION_END"} */
237 :
238 : /* Exit function at a terminal state */
239 : }
240 : /* End of the process */
241 : /* LDV {"comment": "End of control function based on process '__pci_register_driver'", "type": "CONTROL_FUNCTION_END", "function": "ldv_emg___pci_register_driver"} */
242 : }
243 :
244 : /* AUX_FUNC ldv_emg_del_timer */
245 : int ldv_emg_del_timer(struct timer_list *arg0) {
246 : /* LDV {"comment": "Control function 'del_timer'", "type": "CONTROL_FUNCTION_BEGIN", "function": "ldv_emg_del_timer"} */
247 3 : /* LDV {"type": "CONTROL_FUNCTION_INIT_BEGIN", "comment": "Declare auxiliary variables."} */
248 : struct timer_list *ldv_7_timer_list_timer_list;
249 : /* LDV {"type": "CONTROL_FUNCTION_INIT_END", "comment": "Declare auxiliary variables."} */
250 : /* LDV {"action": "ASSIGN", "type": "CONDITION_BEGIN", "comment": "Get timer representing structure."} */
251 3 : ldv_7_timer_list_timer_list = arg0;
252 : /* LDV {"action": "ASSIGN", "type": "CONDITION_END"} */
253 :
254 : /* LDV {"action": "INSTANCE_DEREGISTER", "type": "DISPATCH_BEGIN", "comment": "Deregister TIMER callbacks."} */
255 6 : ldv_dispatch_instance_deregister_7_1(ldv_7_timer_list_timer_list);
256 3 : /* LDV {"action": "INSTANCE_DEREGISTER", "type": "DISPATCH_END"} */
257 :
258 : /* Exit function at a terminal state */
259 : /* End of the process */
260 : /* LDV {"comment": "End of control function based on process 'del_timer'", "type": "CONTROL_FUNCTION_END", "function": "ldv_emg_del_timer"} */
261 : }
262 :
263 : /* AUX_FUNC ldv_emg_free_irq */
264 : void ldv_emg_free_irq(int arg0, void *arg1) {
265 : /* LDV {"comment": "Control function 'free_irq'", "type": "CONTROL_FUNCTION_BEGIN", "function": "ldv_emg_free_irq"} */
266 3 : /* LDV {"type": "CONTROL_FUNCTION_INIT_BEGIN", "comment": "Declare auxiliary variables."} */
267 : int ldv_8_line_line;
268 : /* LDV {"type": "CONTROL_FUNCTION_INIT_END", "comment": "Declare auxiliary variables."} */
269 : /* LDV {"action": "ASSIGN", "type": "CONDITION_BEGIN", "comment": "Get an interrupt line argument."} */
270 3 : ldv_8_line_line = arg0;
271 : /* LDV {"action": "ASSIGN", "type": "CONDITION_END"} */
272 :
273 : /* LDV {"action": "IRQ_DEREGISTER", "type": "DISPATCH_BEGIN", "comment": "The interrupt line is freed."} */
274 6 : ldv_dispatch_irq_deregister_8_1(ldv_8_line_line);
275 : /* LDV {"action": "IRQ_DEREGISTER", "type": "DISPATCH_END"} */
276 :
277 : /* Exit function at a terminal state */
278 3 : return;
279 : /* End of the process */
280 : return;
281 : /* LDV {"comment": "End of control function based on process 'free_irq'", "type": "CONTROL_FUNCTION_END", "function": "ldv_emg_free_irq"} */
282 : }
283 :
284 : /* AUX_FUNC ldv_emg_mod_timer */
285 : int ldv_emg_mod_timer(struct timer_list *arg0, long unsigned int arg1) {
286 : /* LDV {"comment": "Control function 'mod_timer'", "type": "CONTROL_FUNCTION_BEGIN", "function": "ldv_emg_mod_timer"} */
287 3 : /* LDV {"type": "CONTROL_FUNCTION_INIT_BEGIN", "comment": "Declare auxiliary variables."} */
288 3 : struct timer_list *ldv_9_timer_list_timer_list;
289 3 : /* LDV {"type": "CONTROL_FUNCTION_INIT_END", "comment": "Declare auxiliary variables."} */
290 : /* LDV {"action": null, "type": "ARTIFICIAL", "comment": "Artificial state in scenario"} */
291 :
292 12 : if (ldv_undef_int()) {
293 : /* LDV {"action": "ASSIGN", "type": "CONDITION_BEGIN", "comment": "Get timer representing structure."} */
294 3 : ldv_9_timer_list_timer_list = arg0;
295 : /* LDV {"action": "ASSIGN", "type": "CONDITION_END"} */
296 :
297 : /* LDV {"action": "INSTANCE_REGISTER", "type": "DISPATCH_BEGIN", "comment": "Register TIMER callbacks."} */
298 6 : ldv_dispatch_instance_register_9_3(ldv_9_timer_list_timer_list);
299 : /* LDV {"action": "INSTANCE_REGISTER", "type": "DISPATCH_END"} */
300 :
301 : /* LDV {"action": "SUCCESS", "type": "CONDITION_BEGIN", "comment": "Successfully modified a timer's timeout"} */
302 3 : return 0;
303 : /* LDV {"action": "SUCCESS", "type": "CONDITION_END"} */
304 :
305 : /* Exit function at a terminal state */
306 : }
307 : else {
308 : /* LDV {"action": "FAIL", "type": "CONDITION_BEGIN", "comment": "Failed to modify a timer's timeout"} */
309 9 : return ldv_undef_int_negative();
310 : /* LDV {"action": "FAIL", "type": "CONDITION_END"} */
311 :
312 : /* Exit function at a terminal state */
313 : }
314 : /* End of the process */
315 : /* LDV {"comment": "End of control function based on process 'mod_timer'", "type": "CONTROL_FUNCTION_END", "function": "ldv_emg_mod_timer"} */
316 : }
317 :
318 : /* AUX_FUNC ldv_emg_pci_unregister_driver */
319 : void ldv_emg_pci_unregister_driver(struct pci_driver *arg0) {
320 : /* LDV {"comment": "Control function 'pci_unregister_driver'", "type": "CONTROL_FUNCTION_BEGIN", "function": "ldv_emg_pci_unregister_driver"} */
321 2 : /* LDV {"type": "CONTROL_FUNCTION_INIT_BEGIN", "comment": "Declare auxiliary variables."} */
322 : struct pci_driver *ldv_10_pci_driver_pci_driver;
323 : /* LDV {"type": "CONTROL_FUNCTION_INIT_END", "comment": "Declare auxiliary variables."} */
324 : /* LDV {"action": "ASSIGN", "type": "CONDITION_BEGIN", "comment": "Get 'pci' callbacks to deregister."} */
325 2 : ldv_10_pci_driver_pci_driver = arg0;
326 : /* LDV {"action": "ASSIGN", "type": "CONDITION_END"} */
327 :
328 : /* LDV {"action": "DEREGISTER", "type": "DISPATCH_BEGIN", "comment": "Deregister PCI callbacks."} */
329 4 : ldv_dispatch_deregister_10_1(ldv_10_pci_driver_pci_driver);
330 : /* LDV {"action": "DEREGISTER", "type": "DISPATCH_END"} */
331 :
332 : /* Exit function at a terminal state */
333 2 : return;
334 : /* End of the process */
335 : return;
336 : /* LDV {"comment": "End of control function based on process 'pci_unregister_driver'", "type": "CONTROL_FUNCTION_END", "function": "ldv_emg_pci_unregister_driver"} */
337 : }
338 :
339 : /* AUX_FUNC ldv_insmod_6 */
340 : void ldv_insmod_6(void *arg0) {
341 : /* LDV {"thread": 6, "type": "CONTROL_FUNCTION_BEGIN", "comment": "Control function 'insmod(artificial)'", "function": "ldv_insmod_6"} */
342 1 : /* LDV {"type": "CONTROL_FUNCTION_INIT_BEGIN", "comment": "Declare auxiliary variables."} */
343 1 : void (*ldv_6_ohci_hcd_mod_exit_default)(void);
344 1 : int (*ldv_6_ohci_hcd_mod_init_default)(void);
345 1 : int ldv_6_ret_default;
346 1 : /* LDV {"type": "CONTROL_FUNCTION_INIT_END", "comment": "Declare auxiliary variables."} */
347 : /* LDV {"action": "INSMOD_REGISTER", "type": "RECEIVE_BEGIN", "comment": "Trigger module initialization."} */
348 2 : ldv_free(arg0);
349 : /* LDV {"action": "INSMOD_REGISTER", "type": "RECEIVE_END"} */
350 :
351 : /* LDV {"action": "OHCI_HCD_MOD_INIT", "type": "CALL_BEGIN", "callback": true, "comment": "Initialize the module after insmod with 'ohci_hcd_mod_init' function. Invoke callback ohci_hcd_mod_init from ARTIFICIAL."} */
352 : /* LDV {"type": "CALLBACK", "call": "ldv_6_ret_default = (ohci_hcd_mod_init)();", "comment": "ohci_hcd_mod_init"} */
353 2 : ldv_6_ret_default = ldv_insmod_ohci_hcd_mod_init_6_12(ldv_6_ohci_hcd_mod_init_default);
354 : /* Callback post-call */
355 2 : ldv_6_ret_default = ldv_post_init(ldv_6_ret_default);
356 : /* LDV {"action": "OHCI_HCD_MOD_INIT", "type": "CALL_END"} */
357 :
358 4 : if (ldv_undef_int()) {
359 : /* LDV {"action": "INIT_FAILED", "type": "CONDITION_BEGIN", "comment": "Failed to initialize the module."} */
360 2 : ldv_assume(ldv_6_ret_default != 0);
361 : /* LDV {"action": "INIT_FAILED", "type": "CONDITION_END"} */
362 :
363 : /* LDV {"action": "INSMOD_DEREGISTER", "type": "RECEIVE_BEGIN", "comment": "Trigger module exit."} */
364 : /* Skip a non-replicative signal receiving */
365 : /* LDV {"action": "INSMOD_DEREGISTER", "type": "RECEIVE_END"} */
366 :
367 : /* Exit function at a terminal state */
368 1 : return;
369 : }
370 : else {
371 : /* LDV {"action": "INIT_SUCCESS", "type": "CONDITION_BEGIN", "comment": "Module has been initialized."} */
372 2 : ldv_assume(ldv_6_ret_default == 0);
373 : /* LDV {"action": "INIT_SUCCESS", "type": "CONDITION_END"} */
374 :
375 4 : if (ldv_undef_int()) {
376 : /* LDV {"action": "DEFAULT_REGISTER_8", "type": "DISPATCH_BEGIN", "comment": "Register 'STRUCT_HC_DRIVER' callbacks with unknown registration function."} */
377 2 : ldv_dispatch_default_register_8_6_8();
378 : /* LDV {"action": "DEFAULT_REGISTER_8", "type": "DISPATCH_END"} */
379 :
380 : /* LDV {"action": "DEFAULT_REGISTER_9", "type": "DISPATCH_BEGIN", "comment": "Register 'STRUCT_KERNEL_PARAM' callbacks with unknown registration function."} */
381 2 : ldv_dispatch_default_register_9_6_7();
382 : /* LDV {"action": "DEFAULT_REGISTER_9", "type": "DISPATCH_END"} */
383 :
384 : /* LDV {"action": "DEFAULT_IRQ_REGISTER_4", "type": "DISPATCH_BEGIN", "comment": "Register 'INTERRUPT' callbacks with unknown registration function."} */
385 2 : ldv_dispatch_default_irq_register_4_6_6();
386 : /* LDV {"action": "DEFAULT_IRQ_REGISTER_4", "type": "DISPATCH_END"} */
387 :
388 : /* LDV {"action": "DEFAULT_DEREGISTER_9", "type": "DISPATCH_BEGIN", "comment": "Deregister 'STRUCT_KERNEL_PARAM' callbacks with unknown deregistration function."} */
389 2 : ldv_dispatch_default_deregister_9_6_5();
390 : /* LDV {"action": "DEFAULT_DEREGISTER_9", "type": "DISPATCH_END"} */
391 :
392 : /* LDV {"action": "DEFAULT_DEREGISTER_8", "type": "DISPATCH_BEGIN", "comment": "Deregister 'STRUCT_HC_DRIVER' callbacks with unknown deregistration function."} */
393 2 : ldv_dispatch_default_deregister_8_6_4();
394 : /* LDV {"action": "DEFAULT_DEREGISTER_8", "type": "DISPATCH_END"} */
395 :
396 : }
397 : else {
398 : /* LDV {"action": "NONE", "type": "CONDITION_BEGIN", "comment": "Skip default callbacks registrations and deregistrations."} */
399 : /* LDV {"action": "NONE", "type": "CONDITION_END"} */
400 :
401 : }
402 : /* LDV {"action": "OHCI_HCD_MOD_EXIT", "type": "CALL_BEGIN", "callback": true, "comment": "Exit the module before its unloading with 'ohci_hcd_mod_exit' function. Invoke callback ohci_hcd_mod_exit from ARTIFICIAL."} */
403 : /* LDV {"type": "CALLBACK", "call": "(ohci_hcd_mod_exit)();", "comment": "ohci_hcd_mod_exit"} */
404 4 : ldv_insmod_ohci_hcd_mod_exit_6_2(ldv_6_ohci_hcd_mod_exit_default);
405 : /* LDV {"action": "OHCI_HCD_MOD_EXIT", "type": "CALL_END"} */
406 :
407 : /* LDV {"action": "INSMOD_DEREGISTER", "type": "RECEIVE_BEGIN", "comment": "Trigger module exit."} */
408 : /* Skip a non-replicative signal receiving */
409 : /* LDV {"action": "INSMOD_DEREGISTER", "type": "RECEIVE_END"} */
410 :
411 : /* Exit function at a terminal state */
412 1 : return;
413 : }
414 : /* End of the process */
415 : return;
416 : /* LDV {"comment": "End of control function based on process 'insmod(artificial)'", "type": "CONTROL_FUNCTION_END", "function": "ldv_insmod_6"} */
417 : }
418 :
419 : /* AUX_FUNC_CALLBACK ldv_insmod_ohci_hcd_mod_exit_6_2 */
420 : void ldv_insmod_ohci_hcd_mod_exit_6_2(void (*arg0)(void)) {
421 4 : (ohci_hcd_mod_exit)();
422 2 : }
423 :
424 : /* AUX_FUNC_CALLBACK ldv_insmod_ohci_hcd_mod_init_6_12 */
425 : int ldv_insmod_ohci_hcd_mod_init_6_12(int (*arg0)(void)) {
426 5 : return (ohci_hcd_mod_init)();
427 1 : }
428 :
429 : /* AUX_FUNC ldv_interrupt_scenario_1 */
430 : void ldv_interrupt_scenario_1(void *arg0) {
431 : /* LDV {"thread": 1, "type": "CONTROL_FUNCTION_BEGIN", "comment": "Control function 'interrupt_scenario(interrupt)'", "function": "ldv_interrupt_scenario_1"} */
432 1 : /* LDV {"type": "CONTROL_FUNCTION_INIT_BEGIN", "comment": "Declare auxiliary variables."} */
433 1 : irqreturn_t (*ldv_1_callback_handler)(int, void *);
434 1 : void *ldv_1_data_data;
435 1 : int ldv_1_line_line;
436 1 : enum irqreturn ldv_1_ret_val_default;
437 1 : irqreturn_t (*ldv_1_thread_thread)(int, void *);
438 1 : /* LDV {"type": "CONTROL_FUNCTION_INIT_END", "comment": "Declare auxiliary variables."} */
439 1 : /* LDV {"action": "DEFAULT_IRQ_REGISTER_4", "type": "RECEIVE_BEGIN", "comment": "An interrupt is registered."} */
440 2 : ldv_free(arg0);
441 : /* LDV {"action": "DEFAULT_IRQ_REGISTER_4", "type": "RECEIVE_END"} */
442 :
443 : /* LDV {"action": "DEFAULT_ALLOC_4", "type": "CONDITION_BEGIN", "comment": "Allocate memory after default registration."} */
444 3 : ldv_1_callback_handler = ldv_xmalloc_unknown_size(0);
445 3 : ldv_1_thread_thread = ldv_xmalloc_unknown_size(0);
446 2 : ldv_1_data_data = ldv_xmalloc_unknown_size(0);
447 : /* LDV {"action": "DEFAULT_ALLOC_4", "type": "CONDITION_END"} */
448 :
449 : /* LDV {"action": "HANDLER", "type": "CALL_BEGIN", "callback": true, "comment": "An interrupt happens, execute the bottom half function to handle it. Invoke callback handler from INTERRUPT."} */
450 : /* Callback pre-call */
451 1 : ldv_switch_to_interrupt_context();
452 2 : if (ldv_1_callback_handler) {
453 : /* LDV {"type": "CALLBACK", "call": "ldv_1_ret_val_default = (ldv_1_callback_handler)(ldv_1_line_line, ldv_1_data_data);", "comment": "handler"} */
454 2 : ldv_1_ret_val_default = ldv_interrupt_scenario_handler_1_5(ldv_1_callback_handler, ldv_1_line_line, ldv_1_data_data);
455 : }
456 : /* Callback post-call */
457 2 : ldv_switch_to_process_context();
458 : /* LDV {"action": "HANDLER", "type": "CALL_END"} */
459 :
460 6 : if (ldv_undef_int()) {
461 : /* LDV {"action": "NEED_THREAD", "type": "CONDITION_BEGIN", "comment": "Wake a thread to continue an interrupt handling."} */
462 2 : ldv_assume(ldv_1_ret_val_default == IRQ_WAKE_THREAD);
463 : /* LDV {"action": "NEED_THREAD", "type": "CONDITION_END"} */
464 :
465 : /* LDV {"action": "THREAD", "type": "CALL_BEGIN", "callback": true, "comment": "Proceed with the interrupt handling, execute the top half function. Invoke callback thread from INTERRUPT."} */
466 2 : if (ldv_1_thread_thread) {
467 : /* LDV {"type": "CALLBACK", "call": "(ldv_1_thread_thread)(ldv_1_line_line, ldv_1_data_data);", "comment": "thread"} */
468 2 : ldv_interrupt_scenario_thread_1_3(ldv_1_thread_thread, ldv_1_line_line, ldv_1_data_data);
469 : }
470 : /* LDV {"action": "THREAD", "type": "CALL_END"} */
471 :
472 : }
473 : else {
474 : /* LDV {"action": "HANDLED", "type": "CONDITION_BEGIN", "comment": "An interrupt has been handled."} */
475 2 : ldv_assume(ldv_1_ret_val_default != IRQ_WAKE_THREAD);
476 : /* LDV {"action": "HANDLED", "type": "CONDITION_END"} */
477 :
478 : }
479 : /* LDV {"action": "IRQ_DEREGISTER", "type": "RECEIVE_BEGIN", "comment": "An interrupt is deregistered."} */
480 : /* Skip a non-replicative signal receiving */
481 : /* LDV {"action": "IRQ_DEREGISTER", "type": "RECEIVE_END"} */
482 :
483 : /* Exit function at a terminal state */
484 3 : return;
485 : /* End of the process */
486 : return;
487 : /* LDV {"comment": "End of control function based on process 'interrupt_scenario(interrupt)'", "type": "CONTROL_FUNCTION_END", "function": "ldv_interrupt_scenario_1"} */
488 : }
489 :
490 : /* AUX_FUNC_CALLBACK ldv_interrupt_scenario_handler_1_5 */
491 : enum irqreturn ldv_interrupt_scenario_handler_1_5(irqreturn_t (*arg0)(int, void *), int arg1, void *arg2) {
492 2 : return (*arg0)(arg1, arg2);
493 : }
494 1 :
495 : /* AUX_FUNC_CALLBACK ldv_interrupt_scenario_thread_1_3 */
496 : void ldv_interrupt_scenario_thread_1_3(irqreturn_t (*arg0)(int, void *), int arg1, void *arg2) {
497 1 : (*arg0)(arg1, arg2);
498 1 : }
499 :
500 : /* AUX_FUNC ldv_main_12 */
501 : void ldv_main_12(void *arg0) {
502 : /* LDV {"thread": 12, "type": "CONTROL_FUNCTION_BEGIN", "comment": "Control function 'main(main)'", "function": "ldv_main_12"} */
503 : /* LDV {"type": "CONTROL_FUNCTION_INIT_BEGIN", "comment": "Declare auxiliary variables."} */
504 : /* LDV {"type": "CONTROL_FUNCTION_INIT_END", "comment": "Declare auxiliary variables."} */
505 : /* LDV {"action": "INIT", "type": "CONDITION_BEGIN", "comment": "Initialize rule models."} */
506 1 : ldv_initialize();
507 : /* LDV {"action": "INIT", "type": "CONDITION_END"} */
508 :
509 : /* LDV {"action": "INSMOD_REGISTER", "type": "DISPATCH_BEGIN", "comment": "Start environment model scenarios."} */
510 2 : ldv_dispatch_insmod_register_12_3();
511 : /* LDV {"action": "INSMOD_REGISTER", "type": "DISPATCH_END"} */
512 :
513 : /* LDV {"action": "INSMOD_DEREGISTER", "type": "DISPATCH_BEGIN", "comment": "Stop environment model scenarios."} */
514 2 : ldv_dispatch_insmod_deregister_12_2();
515 : /* LDV {"action": "INSMOD_DEREGISTER", "type": "DISPATCH_END"} */
516 :
517 : /* LDV {"action": "FINAL", "type": "CONDITION_BEGIN", "comment": "Check rule model state at the exit."} */
518 1 : ldv_check_final_state();
519 1 : ldv_stop();
520 : /* LDV {"action": "FINAL", "type": "CONDITION_END"} */
521 :
522 : /* Exit function at a terminal state */
523 0 : return;
524 : /* End of the process */
525 : return;
526 : /* LDV {"comment": "End of control function based on process 'main(main)'", "type": "CONTROL_FUNCTION_END", "function": "ldv_main_12"} */
527 : }
528 :
529 : /* AUX_FUNC ldv_partially_ordered_scenario_3 */
530 : void ldv_partially_ordered_scenario_3(void *arg0) {
531 : /* LDV {"thread": 3, "type": "CONTROL_FUNCTION_BEGIN", "comment": "Control function 'partially_ordered_scenario(struct_hc_driver)'", "function": "ldv_partially_ordered_scenario_3"} */
532 1 : /* LDV {"type": "CONTROL_FUNCTION_INIT_BEGIN", "comment": "Declare auxiliary variables."} */
533 1 : void (*ldv_3_callback_endpoint_disable)(struct usb_hcd *, struct usb_host_endpoint *);
534 1 : int (*ldv_3_callback_get_frame_number)(struct usb_hcd *);
535 : int (*ldv_3_callback_hub_control)(struct usb_hcd *, short unsigned int, short unsigned int, short unsigned int, char *, short unsigned int);
536 1 : int (*ldv_3_callback_hub_status_data)(struct usb_hcd *, char *);
537 1 : irqreturn_t (*ldv_3_callback_irq)(struct usb_hcd *);
538 1 : int (*ldv_3_callback_reset)(struct usb_hcd *);
539 1 : void (*ldv_3_callback_shutdown)(struct usb_hcd *);
540 1 : int (*ldv_3_callback_urb_dequeue)(struct usb_hcd *, struct urb *, int);
541 1 : int (*ldv_3_callback_urb_enqueue)(struct usb_hcd *, struct urb *, gfp_t );
542 1 : struct hc_driver *ldv_3_container_struct_hc_driver;
543 1 : short unsigned int ldv_3_ldv_param_18_1_default;
544 1 : short unsigned int ldv_3_ldv_param_18_2_default;
545 1 : short unsigned int ldv_3_ldv_param_18_3_default;
546 1 : char *ldv_3_ldv_param_18_4_default;
547 1 : short unsigned int ldv_3_ldv_param_18_5_default;
548 1 : char *ldv_3_ldv_param_21_1_default;
549 1 : int ldv_3_ldv_param_27_2_default;
550 1 : unsigned int ldv_3_ldv_param_30_2_default;
551 1 : struct urb *ldv_3_resource_struct_urb_ptr;
552 1 : struct usb_hcd *ldv_3_resource_struct_usb_hcd_ptr;
553 1 : struct usb_host_endpoint *ldv_3_resource_struct_usb_host_endpoint_ptr;
554 1 : int ldv_3_ret_default;
555 1 : /* LDV {"type": "CONTROL_FUNCTION_INIT_END", "comment": "Declare auxiliary variables."} */
556 1 : /* Initialize automaton variables */
557 2 : ldv_3_ret_default = 1;
558 1 : /* LDV {"action": "DEFAULT_REGISTER_8", "type": "RECEIVE_BEGIN", "comment": "Begin STRUCT_HC_DRIVER callbacks invocations scenario."} */
559 3 : ldv_free(arg0);
560 1 : /* LDV {"action": "DEFAULT_REGISTER_8", "type": "RECEIVE_END"} */
561 1 :
562 1 : /* LDV {"action": "DEFAULT_ALLOC_8", "type": "CONDITION_BEGIN", "comment": "Allocate memory after default registration."} */
563 4 : ldv_3_container_struct_hc_driver = ldv_xmalloc_unknown_size(0);
564 : /* LDV {"action": "DEFAULT_ALLOC_8", "type": "CONDITION_END"} */
565 :
566 : /* LDV {"action": "INIT", "type": "CONDITION_BEGIN", "comment": "Alloc memory for common callback arguments."} */
567 3 : ldv_3_resource_struct_urb_ptr = ldv_xmalloc_unknown_size(0);
568 3 : ldv_3_resource_struct_usb_hcd_ptr = ldv_xmalloc_unknown_size(0);
569 3 : ldv_3_resource_struct_usb_host_endpoint_ptr = ldv_xmalloc_unknown_size(0);
570 : /* LDV {"action": "INIT", "type": "CONDITION_END"} */
571 :
572 : /* LDV {"action": "MAIN", "type": "SUBPROCESS_BEGIN", "comment": "Start with an initialization callback."} */
573 : /* LDV {"action": "MAIN", "type": "SUBPROCESS_END"} */
574 :
575 : /* Jump to a subprocess 'main' initial state */
576 1 : goto ldv_main_3;
577 : /* End of the process */
578 : return;
579 1 :
580 : /* Sbprocess main */
581 : ldv_main_3:
582 : /* LDV {"action": null, "type": "ARTIFICIAL", "comment": "Artificial state in scenario"} */
583 :
584 4 : if (ldv_undef_int()) {
585 : /* LDV {"action": "PROBE", "type": "CALL_BEGIN", "callback": true, "comment": "Call an initialization callback. Invoke callback start from hc_driver."} */
586 : /* LDV {"type": "CALLBACK", "call": "ldv_3_ret_default = ((& ohci_pci_start))(ldv_3_resource_struct_usb_hcd_ptr);", "comment": "probe"} */
587 2 : ldv_3_ret_default = ldv_partially_ordered_scenario_probe_3_12(ldv_3_container_struct_hc_driver->start, ldv_3_resource_struct_usb_hcd_ptr);
588 : /* Callback post-call */
589 2 : ldv_3_ret_default = ldv_filter_err_code(ldv_3_ret_default);
590 : /* LDV {"action": "PROBE", "type": "CALL_END"} */
591 :
592 4 : if (ldv_undef_int()) {
593 : /* LDV {"action": "Y_RET", "type": "CONDITION_BEGIN", "comment": "Initialization has been successful."} */
594 2 : ldv_assume(ldv_3_ret_default == 0);
595 : /* LDV {"action": "Y_RET", "type": "CONDITION_END"} */
596 :
597 : /* LDV {"action": "CALL", "type": "SUBPROCESS_BEGIN", "comment": "Initializations are done, proceed to the other callbacks."} */
598 : /* LDV {"action": "CALL", "type": "SUBPROCESS_END"} */
599 :
600 : /* Jump to a subprocess 'call' initial state */
601 1 : goto ldv_call_3;
602 : }
603 : else {
604 : /* LDV {"action": "N_RET", "type": "CONDITION_BEGIN", "comment": "Initialization has failed."} */
605 2 : ldv_assume(ldv_3_ret_default != 0);
606 : /* LDV {"action": "N_RET", "type": "CONDITION_END"} */
607 :
608 : /* LDV {"action": "MAIN", "type": "SUBPROCESS_BEGIN", "comment": "Start with an initialization callback."} */
609 : /* LDV {"action": "MAIN", "type": "SUBPROCESS_END"} */
610 :
611 : /* Jump to a subprocess 'main' initial state */
612 1 : goto ldv_main_3;
613 : }
614 : }
615 : else {
616 : /* LDV {"action": "FREE", "type": "CONDITION_BEGIN", "comment": "Free memory for common callback arguments."} */
617 2 : ldv_free(ldv_3_resource_struct_urb_ptr);
618 2 : ldv_free(ldv_3_resource_struct_usb_hcd_ptr);
619 2 : ldv_free(ldv_3_resource_struct_usb_host_endpoint_ptr);
620 : /* LDV {"action": "FREE", "type": "CONDITION_END"} */
621 :
622 : /* LDV {"action": "DEFAULT_FREE_8", "type": "CONDITION_BEGIN", "comment": "Free memory before default deregistration."} */
623 2 : ldv_free(ldv_3_container_struct_hc_driver);
624 : /* LDV {"action": "DEFAULT_FREE_8", "type": "CONDITION_END"} */
625 :
626 : /* LDV {"action": "DEFAULT_DEREGISTER_8", "type": "RECEIVE_BEGIN", "comment": "Finish STRUCT_HC_DRIVER callbacks invocations scenario."} */
627 : /* Skip a non-replicative signal receiving */
628 : /* LDV {"action": "DEFAULT_DEREGISTER_8", "type": "RECEIVE_END"} */
629 :
630 : /* Exit function at a terminal state */
631 1 : return;
632 : }
633 : /* End of the subprocess 'main' */
634 : return;
635 1 :
636 : /* Sbprocess call */
637 : ldv_call_3:
638 : /* LDV {"action": null, "type": "ARTIFICIAL", "comment": "Artificial state in scenario"} */
639 :
640 2 : switch (ldv_undef_int()) {
641 3 : case 1: {
642 : /* LDV {"action": "PRE_CALL_30", "type": "CONDITION_BEGIN", "comment": "Allocate memory for adhoc callback parameters."} */
643 : /* LDV {"action": "PRE_CALL_30", "type": "CONDITION_END"} */
644 :
645 : /* LDV {"action": "CALLBACK", "type": "CALL_BEGIN", "callback": true, "comment": "Call any random callback. Invoke callback urb_enqueue from hc_driver."} */
646 : /* LDV {"type": "CALLBACK", "call": "((& ohci_urb_enqueue))(ldv_3_resource_struct_usb_hcd_ptr, ldv_3_resource_struct_urb_ptr, ldv_3_ldv_param_30_2_default);", "comment": "callback"} */
647 2 : ldv_partially_ordered_scenario_callback_3_30(ldv_3_callback_urb_enqueue, ldv_3_resource_struct_usb_hcd_ptr, ldv_3_resource_struct_urb_ptr, ldv_3_ldv_param_30_2_default);
648 : /* LDV {"action": "CALLBACK", "type": "CALL_END"} */
649 :
650 : /* LDV {"action": "POST_CALL_30", "type": "CONDITION_BEGIN", "comment": "Free memory of adhoc callback parameters."} */
651 : /* LDV {"action": "POST_CALL_30", "type": "CONDITION_END"} */
652 :
653 : /* LDV {"action": "CALL", "type": "SUBPROCESS_BEGIN", "comment": "Initializations are done, proceed to the other callbacks."} */
654 : /* LDV {"action": "CALL", "type": "SUBPROCESS_END"} */
655 :
656 : /* Jump to a subprocess 'call' initial state */
657 1 : goto ldv_call_3;
658 1 : break;
659 : }
660 3 : case 2: {
661 : /* LDV {"action": "PRE_CALL_27", "type": "CONDITION_BEGIN", "comment": "Allocate memory for adhoc callback parameters."} */
662 : /* LDV {"action": "PRE_CALL_27", "type": "CONDITION_END"} */
663 :
664 : /* LDV {"action": "CALLBACK", "type": "CALL_BEGIN", "callback": true, "comment": "Call any random callback. Invoke callback urb_dequeue from hc_driver."} */
665 : /* LDV {"type": "CALLBACK", "call": "((& ohci_urb_dequeue))(ldv_3_resource_struct_usb_hcd_ptr, ldv_3_resource_struct_urb_ptr, ldv_3_ldv_param_27_2_default);", "comment": "callback"} */
666 2 : ldv_partially_ordered_scenario_callback_3_27(ldv_3_callback_urb_dequeue, ldv_3_resource_struct_usb_hcd_ptr, ldv_3_resource_struct_urb_ptr, ldv_3_ldv_param_27_2_default);
667 : /* LDV {"action": "CALLBACK", "type": "CALL_END"} */
668 :
669 : /* LDV {"action": "POST_CALL_27", "type": "CONDITION_BEGIN", "comment": "Free memory of adhoc callback parameters."} */
670 : /* LDV {"action": "POST_CALL_27", "type": "CONDITION_END"} */
671 :
672 : /* LDV {"action": "CALL", "type": "SUBPROCESS_BEGIN", "comment": "Initializations are done, proceed to the other callbacks."} */
673 : /* LDV {"action": "CALL", "type": "SUBPROCESS_END"} */
674 :
675 : /* Jump to a subprocess 'call' initial state */
676 1 : goto ldv_call_3;
677 : /* Jump to a subprocess 'call' initial state */
678 : goto ldv_call_3;
679 1 : break;
680 : }
681 3 : case 3: {
682 : /* LDV {"action": "CALLBACK", "type": "CALL_BEGIN", "callback": true, "comment": "Call any random callback. Invoke callback shutdown from hc_driver."} */
683 : /* LDV {"type": "CALLBACK", "call": "((& ohci_shutdown))(ldv_3_resource_struct_usb_hcd_ptr);", "comment": "callback"} */
684 2 : ldv_partially_ordered_scenario_callback_3_26(ldv_3_callback_shutdown, ldv_3_resource_struct_usb_hcd_ptr);
685 : /* LDV {"action": "CALLBACK", "type": "CALL_END"} */
686 :
687 : /* LDV {"action": "CALL", "type": "SUBPROCESS_BEGIN", "comment": "Initializations are done, proceed to the other callbacks."} */
688 : /* LDV {"action": "CALL", "type": "SUBPROCESS_END"} */
689 :
690 : /* Jump to a subprocess 'call' initial state */
691 1 : goto ldv_call_3;
692 : /* Jump to a subprocess 'call' initial state */
693 : goto ldv_call_3;
694 : /* Jump to a subprocess 'call' initial state */
695 : goto ldv_call_3;
696 1 : break;
697 : }
698 3 : case 4: {
699 : /* LDV {"action": "CALLBACK", "type": "CALL_BEGIN", "callback": true, "comment": "Call any random callback. Invoke callback reset from hc_driver."} */
700 : /* LDV {"type": "CALLBACK", "call": "((& ohci_pci_reset))(ldv_3_resource_struct_usb_hcd_ptr);", "comment": "callback"} */
701 2 : ldv_partially_ordered_scenario_callback_3_25(ldv_3_callback_reset, ldv_3_resource_struct_usb_hcd_ptr);
702 : /* LDV {"action": "CALLBACK", "type": "CALL_END"} */
703 :
704 : /* LDV {"action": "CALL", "type": "SUBPROCESS_BEGIN", "comment": "Initializations are done, proceed to the other callbacks."} */
705 : /* LDV {"action": "CALL", "type": "SUBPROCESS_END"} */
706 :
707 : /* Jump to a subprocess 'call' initial state */
708 1 : goto ldv_call_3;
709 : /* Jump to a subprocess 'call' initial state */
710 : goto ldv_call_3;
711 : /* Jump to a subprocess 'call' initial state */
712 : goto ldv_call_3;
713 : /* Jump to a subprocess 'call' initial state */
714 : goto ldv_call_3;
715 1 : break;
716 : }
717 3 : case 5: {
718 : /* LDV {"action": "CALLBACK", "type": "CALL_BEGIN", "callback": true, "comment": "Call any random callback. Invoke callback irq from hc_driver."} */
719 : /* LDV {"type": "CALLBACK", "call": "((& ohci_irq))(ldv_3_resource_struct_usb_hcd_ptr);", "comment": "callback"} */
720 2 : ldv_partially_ordered_scenario_callback_3_24(ldv_3_callback_irq, ldv_3_resource_struct_usb_hcd_ptr);
721 : /* LDV {"action": "CALLBACK", "type": "CALL_END"} */
722 :
723 : /* LDV {"action": "CALL", "type": "SUBPROCESS_BEGIN", "comment": "Initializations are done, proceed to the other callbacks."} */
724 : /* LDV {"action": "CALL", "type": "SUBPROCESS_END"} */
725 :
726 : /* Jump to a subprocess 'call' initial state */
727 1 : goto ldv_call_3;
728 : /* Jump to a subprocess 'call' initial state */
729 : goto ldv_call_3;
730 : /* Jump to a subprocess 'call' initial state */
731 : goto ldv_call_3;
732 : /* Jump to a subprocess 'call' initial state */
733 : goto ldv_call_3;
734 : /* Jump to a subprocess 'call' initial state */
735 : goto ldv_call_3;
736 1 : break;
737 : }
738 3 : case 6: {
739 : /* LDV {"action": "PRE_CALL_21", "type": "CONDITION_BEGIN", "comment": "Allocate memory for adhoc callback parameters."} */
740 3 : ldv_3_ldv_param_21_1_default = ldv_xmalloc_unknown_size(0);
741 : /* LDV {"action": "PRE_CALL_21", "type": "CONDITION_END"} */
742 :
743 : /* LDV {"action": "CALLBACK", "type": "CALL_BEGIN", "callback": true, "comment": "Call any random callback. Invoke callback hub_status_data from hc_driver."} */
744 : /* LDV {"type": "CALLBACK", "call": "((& ohci_hub_status_data))(ldv_3_resource_struct_usb_hcd_ptr, ldv_3_ldv_param_21_1_default);", "comment": "callback"} */
745 2 : ldv_partially_ordered_scenario_callback_3_21(ldv_3_callback_hub_status_data, ldv_3_resource_struct_usb_hcd_ptr, ldv_3_ldv_param_21_1_default);
746 : /* LDV {"action": "CALLBACK", "type": "CALL_END"} */
747 :
748 : /* LDV {"action": "POST_CALL_21", "type": "CONDITION_BEGIN", "comment": "Free memory of adhoc callback parameters."} */
749 2 : ldv_free(ldv_3_ldv_param_21_1_default);
750 : /* LDV {"action": "POST_CALL_21", "type": "CONDITION_END"} */
751 :
752 : /* LDV {"action": "CALL", "type": "SUBPROCESS_BEGIN", "comment": "Initializations are done, proceed to the other callbacks."} */
753 : /* LDV {"action": "CALL", "type": "SUBPROCESS_END"} */
754 :
755 : /* Jump to a subprocess 'call' initial state */
756 1 : goto ldv_call_3;
757 : /* Jump to a subprocess 'call' initial state */
758 : goto ldv_call_3;
759 : /* Jump to a subprocess 'call' initial state */
760 : goto ldv_call_3;
761 : /* Jump to a subprocess 'call' initial state */
762 : goto ldv_call_3;
763 : /* Jump to a subprocess 'call' initial state */
764 : goto ldv_call_3;
765 : /* Jump to a subprocess 'call' initial state */
766 : goto ldv_call_3;
767 1 : break;
768 : }
769 3 : case 7: {
770 : /* LDV {"action": "PRE_CALL_18", "type": "CONDITION_BEGIN", "comment": "Allocate memory for adhoc callback parameters."} */
771 3 : ldv_3_ldv_param_18_4_default = ldv_xmalloc_unknown_size(0);
772 : /* LDV {"action": "PRE_CALL_18", "type": "CONDITION_END"} */
773 :
774 : /* LDV {"action": "CALLBACK", "type": "CALL_BEGIN", "callback": true, "comment": "Call any random callback. Invoke callback hub_control from hc_driver."} */
775 : /* LDV {"type": "CALLBACK", "call": "((& ohci_hub_control))(ldv_3_resource_struct_usb_hcd_ptr, ldv_3_ldv_param_18_1_default, ldv_3_ldv_param_18_2_default, ldv_3_ldv_param_18_3_default, ldv_3_ldv_param_18_4_default, ldv_3_ldv_param_18_5_default);", "comment": "callback"} */
776 2 : ldv_partially_ordered_scenario_callback_3_18(ldv_3_callback_hub_control, ldv_3_resource_struct_usb_hcd_ptr, ldv_3_ldv_param_18_1_default, ldv_3_ldv_param_18_2_default, ldv_3_ldv_param_18_3_default, ldv_3_ldv_param_18_4_default, ldv_3_ldv_param_18_5_default);
777 : /* LDV {"action": "CALLBACK", "type": "CALL_END"} */
778 :
779 : /* LDV {"action": "POST_CALL_18", "type": "CONDITION_BEGIN", "comment": "Free memory of adhoc callback parameters."} */
780 2 : ldv_free(ldv_3_ldv_param_18_4_default);
781 : /* LDV {"action": "POST_CALL_18", "type": "CONDITION_END"} */
782 :
783 : /* LDV {"action": "CALL", "type": "SUBPROCESS_BEGIN", "comment": "Initializations are done, proceed to the other callbacks."} */
784 : /* LDV {"action": "CALL", "type": "SUBPROCESS_END"} */
785 :
786 : /* Jump to a subprocess 'call' initial state */
787 1 : goto ldv_call_3;
788 : /* Jump to a subprocess 'call' initial state */
789 : goto ldv_call_3;
790 : /* Jump to a subprocess 'call' initial state */
791 : goto ldv_call_3;
792 : /* Jump to a subprocess 'call' initial state */
793 : goto ldv_call_3;
794 : /* Jump to a subprocess 'call' initial state */
795 : goto ldv_call_3;
796 : /* Jump to a subprocess 'call' initial state */
797 : goto ldv_call_3;
798 : /* Jump to a subprocess 'call' initial state */
799 : goto ldv_call_3;
800 1 : break;
801 : }
802 3 : case 8: {
803 : /* LDV {"action": "CALLBACK", "type": "CALL_BEGIN", "callback": true, "comment": "Call any random callback. Invoke callback get_frame_number from hc_driver."} */
804 : /* LDV {"type": "CALLBACK", "call": "((& ohci_get_frame))(ldv_3_resource_struct_usb_hcd_ptr);", "comment": "callback"} */
805 2 : ldv_partially_ordered_scenario_callback_3_17(ldv_3_callback_get_frame_number, ldv_3_resource_struct_usb_hcd_ptr);
806 : /* LDV {"action": "CALLBACK", "type": "CALL_END"} */
807 :
808 : /* LDV {"action": "CALL", "type": "SUBPROCESS_BEGIN", "comment": "Initializations are done, proceed to the other callbacks."} */
809 : /* LDV {"action": "CALL", "type": "SUBPROCESS_END"} */
810 :
811 : /* Jump to a subprocess 'call' initial state */
812 1 : goto ldv_call_3;
813 : /* Jump to a subprocess 'call' initial state */
814 : goto ldv_call_3;
815 : /* Jump to a subprocess 'call' initial state */
816 : goto ldv_call_3;
817 : /* Jump to a subprocess 'call' initial state */
818 : goto ldv_call_3;
819 : /* Jump to a subprocess 'call' initial state */
820 : goto ldv_call_3;
821 : /* Jump to a subprocess 'call' initial state */
822 : goto ldv_call_3;
823 : /* Jump to a subprocess 'call' initial state */
824 : goto ldv_call_3;
825 : /* Jump to a subprocess 'call' initial state */
826 : goto ldv_call_3;
827 1 : break;
828 : }
829 3 : case 9: {
830 : /* LDV {"action": "CALLBACK", "type": "CALL_BEGIN", "callback": true, "comment": "Call any random callback. Invoke callback endpoint_disable from hc_driver."} */
831 : /* LDV {"type": "CALLBACK", "call": "((& ohci_endpoint_disable))(ldv_3_resource_struct_usb_hcd_ptr, ldv_3_resource_struct_usb_host_endpoint_ptr);", "comment": "callback"} */
832 2 : ldv_partially_ordered_scenario_callback_3_4(ldv_3_callback_endpoint_disable, ldv_3_resource_struct_usb_hcd_ptr, ldv_3_resource_struct_usb_host_endpoint_ptr);
833 : /* LDV {"action": "CALLBACK", "type": "CALL_END"} */
834 :
835 : /* LDV {"action": "CALL", "type": "SUBPROCESS_BEGIN", "comment": "Initializations are done, proceed to the other callbacks."} */
836 : /* LDV {"action": "CALL", "type": "SUBPROCESS_END"} */
837 :
838 : /* Jump to a subprocess 'call' initial state */
839 1 : goto ldv_call_3;
840 : /* Jump to a subprocess 'call' initial state */
841 : goto ldv_call_3;
842 : /* Jump to a subprocess 'call' initial state */
843 : goto ldv_call_3;
844 : /* Jump to a subprocess 'call' initial state */
845 : goto ldv_call_3;
846 : /* Jump to a subprocess 'call' initial state */
847 : goto ldv_call_3;
848 : /* Jump to a subprocess 'call' initial state */
849 : goto ldv_call_3;
850 : /* Jump to a subprocess 'call' initial state */
851 : goto ldv_call_3;
852 : /* Jump to a subprocess 'call' initial state */
853 : goto ldv_call_3;
854 : /* Jump to a subprocess 'call' initial state */
855 : goto ldv_call_3;
856 1 : break;
857 : }
858 3 : case 10: {
859 : /* LDV {"action": "RELEASE", "type": "CALL_BEGIN", "callback": true, "comment": "Do uninitializations before deregistration. Invoke callback stop from hc_driver."} */
860 : /* LDV {"type": "CALLBACK", "call": "((& ohci_stop))(ldv_3_resource_struct_usb_hcd_ptr);", "comment": "release"} */
861 2 : ldv_partially_ordered_scenario_release_3_2(ldv_3_container_struct_hc_driver->stop, ldv_3_resource_struct_usb_hcd_ptr);
862 : /* LDV {"action": "RELEASE", "type": "CALL_END"} */
863 :
864 : /* LDV {"action": "MAIN", "type": "SUBPROCESS_BEGIN", "comment": "Start with an initialization callback."} */
865 : /* LDV {"action": "MAIN", "type": "SUBPROCESS_END"} */
866 :
867 : /* Jump to a subprocess 'main' initial state */
868 1 : goto ldv_main_3;
869 1 : break;
870 : }
871 2 : default: ldv_stop();
872 1 : }
873 0 : /* End of the subprocess 'call' */
874 0 : return;
875 : /* LDV {"comment": "End of control function based on process 'partially_ordered_scenario(struct_hc_driver)'", "type": "CONTROL_FUNCTION_END", "function": "ldv_partially_ordered_scenario_3"} */
876 : }
877 :
878 : /* AUX_FUNC_CALLBACK ldv_partially_ordered_scenario_callback_3_17 */
879 : void ldv_partially_ordered_scenario_callback_3_17(int (*arg0)(struct usb_hcd *), struct usb_hcd *arg1) {
880 2 : ((& ohci_get_frame))(arg1);
881 1 : }
882 :
883 : /* AUX_FUNC_CALLBACK ldv_partially_ordered_scenario_callback_3_18 */
884 : void ldv_partially_ordered_scenario_callback_3_18(int (*arg0)(struct usb_hcd *, short unsigned int, short unsigned int, short unsigned int, char *, short unsigned int), struct usb_hcd *arg1, short unsigned int arg2, short unsigned int arg3, short unsigned int arg4, char *arg5, short unsigned int arg6) {
885 10 : ((& ohci_hub_control))(arg1, arg2, arg3, arg4, arg5, arg6);
886 1 : }
887 :
888 : /* AUX_FUNC_CALLBACK ldv_partially_ordered_scenario_callback_3_21 */
889 : void ldv_partially_ordered_scenario_callback_3_21(int (*arg0)(struct usb_hcd *, char *), struct usb_hcd *arg1, char *arg2) {
890 2 : ((& ohci_hub_status_data))(arg1, arg2);
891 1 : }
892 :
893 : /* AUX_FUNC_CALLBACK ldv_partially_ordered_scenario_callback_3_24 */
894 : void ldv_partially_ordered_scenario_callback_3_24(irqreturn_t (*arg0)(struct usb_hcd *), struct usb_hcd *arg1) {
895 5 : ((& ohci_irq))(arg1);
896 1 : }
897 :
898 : /* AUX_FUNC_CALLBACK ldv_partially_ordered_scenario_callback_3_25 */
899 : void ldv_partially_ordered_scenario_callback_3_25(int (*arg0)(struct usb_hcd *), struct usb_hcd *arg1) {
900 3 : ((& ohci_pci_reset))(arg1);
901 1 : }
902 :
903 : /* AUX_FUNC_CALLBACK ldv_partially_ordered_scenario_callback_3_26 */
904 : void ldv_partially_ordered_scenario_callback_3_26(void (*arg0)(struct usb_hcd *), struct usb_hcd *arg1) {
905 2 : ((& ohci_shutdown))(arg1);
906 1 : }
907 :
908 : /* AUX_FUNC_CALLBACK ldv_partially_ordered_scenario_callback_3_27 */
909 : void ldv_partially_ordered_scenario_callback_3_27(int (*arg0)(struct usb_hcd *, struct urb *, int), struct usb_hcd *arg1, struct urb *arg2, int arg3) {
910 2 : ((& ohci_urb_dequeue))(arg1, arg2, arg3);
911 1 : }
912 :
913 : /* AUX_FUNC_CALLBACK ldv_partially_ordered_scenario_callback_3_30 */
914 : void ldv_partially_ordered_scenario_callback_3_30(int (*arg0)(struct usb_hcd *, struct urb *, gfp_t ), struct usb_hcd *arg1, struct urb *arg2, unsigned int arg3) {
915 5 : ((& ohci_urb_enqueue))(arg1, arg2, arg3);
916 1 : }
917 :
918 : /* AUX_FUNC_CALLBACK ldv_partially_ordered_scenario_callback_3_4 */
919 : void ldv_partially_ordered_scenario_callback_3_4(void (*arg0)(struct usb_hcd *, struct usb_host_endpoint *), struct usb_hcd *arg1, struct usb_host_endpoint *arg2) {
920 3 : ((& ohci_endpoint_disable))(arg1, arg2);
921 1 : }
922 :
923 : /* AUX_FUNC_CALLBACK ldv_partially_ordered_scenario_probe_3_12 */
924 : int ldv_partially_ordered_scenario_probe_3_12(int (*arg0)(struct usb_hcd *), struct usb_hcd *arg1) {
925 4 : return ((& ohci_pci_start))(arg1);
926 1 : }
927 :
928 : /* AUX_FUNC_CALLBACK ldv_partially_ordered_scenario_release_3_2 */
929 : void ldv_partially_ordered_scenario_release_3_2(void (*arg0)(struct usb_hcd *), struct usb_hcd *arg1) {
930 3 : ((& ohci_stop))(arg1);
931 1 : }
932 :
933 : /* AUX_FUNC ldv_pci_scenario_2 */
934 : void ldv_pci_scenario_2(void *arg0) {
935 : /* LDV {"thread": 2, "type": "CONTROL_FUNCTION_BEGIN", "comment": "Control function 'pci_scenario(pci)'", "function": "ldv_pci_scenario_2"} */
936 1 : /* LDV {"type": "CONTROL_FUNCTION_INIT_BEGIN", "comment": "Declare auxiliary variables."} */
937 1 : struct pci_driver *ldv_2_container_pci_driver;
938 1 : struct pci_dev *ldv_2_resource_dev;
939 1 : struct pm_message ldv_2_resource_pm_message;
940 1 : struct pci_device_id *ldv_2_resource_struct_pci_device_id_ptr;
941 1 : int ldv_2_ret_default;
942 1 : /* Received labels */
943 2 : struct ldv_struct_pci_scenario_2 *data = (struct ldv_struct_pci_scenario_2*) arg0;
944 1 :
945 1 : /* LDV {"type": "CONTROL_FUNCTION_INIT_END", "comment": "Declare auxiliary variables."} */
946 1 : /* Initialize automaton variables */
947 1 : ldv_2_ret_default = 1;
948 : /* LDV {"action": "REGISTER", "type": "RECEIVE_BEGIN", "comment": "Begin PCI callbacks invocating."} */
949 : /* Assign recieved labels */
950 2 : if (data) {
951 1 : ldv_2_container_pci_driver = data->arg0;
952 2 : ldv_free(data);
953 : }
954 : /* LDV {"action": "REGISTER", "type": "RECEIVE_END"} */
955 :
956 : /* LDV {"action": "INIT", "type": "CONDITION_BEGIN", "comment": "Allocate memory for pci_dev structure."} */
957 5 : ldv_2_resource_dev = ldv_xmalloc(sizeof(struct pci_dev));
958 3 : ldv_2_resource_struct_pci_device_id_ptr = ldv_xmalloc_unknown_size(0);
959 : /* LDV {"action": "INIT", "type": "CONDITION_END"} */
960 :
961 : /* LDV {"action": "MAIN", "type": "SUBPROCESS_BEGIN", "comment": "New device is inserted, probe it."} */
962 : /* LDV {"action": "MAIN", "type": "SUBPROCESS_END"} */
963 :
964 : /* Jump to a subprocess 'main' initial state */
965 1 : goto ldv_main_2;
966 : /* End of the process */
967 : return;
968 1 :
969 : /* Sbprocess main */
970 : ldv_main_2:
971 : /* LDV {"action": null, "type": "ARTIFICIAL", "comment": "Artificial state in scenario"} */
972 :
973 4 : if (ldv_undef_int()) {
974 : /* LDV {"action": "PROBE", "type": "CALL_BEGIN", "callback": true, "comment": "Probe new PCI driver. Invoke callback probe from pci_driver."} */
975 : /* Callback pre-call */
976 1 : ldv_pre_probe();
977 : /* LDV {"type": "CALLBACK", "call": "ldv_2_ret_default = ((& usb_hcd_pci_probe))(ldv_2_resource_dev, ldv_2_resource_struct_pci_device_id_ptr);", "comment": "probe"} */
978 3 : ldv_2_ret_default = ldv_pci_scenario_probe_2_17(ldv_2_container_pci_driver->probe, ldv_2_resource_dev, ldv_2_resource_struct_pci_device_id_ptr);
979 : /* Callback post-call */
980 2 : ldv_2_ret_default = ldv_post_probe(ldv_2_ret_default);
981 : /* LDV {"action": "PROBE", "type": "CALL_END"} */
982 :
983 4 : if (ldv_undef_int()) {
984 : /* LDV {"action": "PROBE_SUCCESS", "type": "CONDITION_BEGIN", "comment": "Probing of PCI driver has been successfull."} */
985 2 : ldv_assume(ldv_2_ret_default == 0);
986 : /* LDV {"action": "PROBE_SUCCESS", "type": "CONDITION_END"} */
987 :
988 : /* LDV {"action": "CALL", "type": "SUBPROCESS_BEGIN", "comment": "Driver is probed, call rest callbacks."} */
989 : /* LDV {"action": "CALL", "type": "SUBPROCESS_END"} */
990 :
991 : /* Jump to a subprocess 'call' initial state */
992 1 : goto ldv_call_2;
993 : }
994 : else {
995 : /* LDV {"action": "PROBE_FAILED", "type": "CONDITION_BEGIN", "comment": "Failed to probe PCI driver."} */
996 2 : ldv_assume(ldv_2_ret_default != 0);
997 : /* LDV {"action": "PROBE_FAILED", "type": "CONDITION_END"} */
998 :
999 : /* LDV {"action": "MAIN", "type": "SUBPROCESS_BEGIN", "comment": "New device is inserted, probe it."} */
1000 : /* LDV {"action": "MAIN", "type": "SUBPROCESS_END"} */
1001 :
1002 : /* Jump to a subprocess 'main' initial state */
1003 1 : goto ldv_main_2;
1004 : }
1005 : }
1006 : else {
1007 : /* LDV {"action": "FREE", "type": "CONDITION_BEGIN", "comment": "Free memory of pci_dev structure."} */
1008 2 : ldv_free(ldv_2_resource_dev);
1009 2 : ldv_free(ldv_2_resource_struct_pci_device_id_ptr);
1010 : /* LDV {"action": "FREE", "type": "CONDITION_END"} */
1011 :
1012 : /* LDV {"action": "DEREGISTER", "type": "RECEIVE_BEGIN", "comment": "Stop PCI callbacks invocating."} */
1013 : /* Skip a non-replicative signal receiving */
1014 : /* LDV {"action": "DEREGISTER", "type": "RECEIVE_END"} */
1015 :
1016 : /* Exit function at a terminal state */
1017 1 : return;
1018 : }
1019 : /* End of the subprocess 'main' */
1020 : return;
1021 1 :
1022 : /* Sbprocess call */
1023 : ldv_call_2:
1024 : /* LDV {"action": null, "type": "ARTIFICIAL", "comment": "Artificial state in scenario"} */
1025 :
1026 2 : switch (ldv_undef_int()) {
1027 3 : case 1: {
1028 : /* LDV {"action": "CALLBACK", "type": "CALL_BEGIN", "comment": "Call callback 'callback' of a process 'pci_scenario' of an interface category 'pci'"} */
1029 : /* Skip callback without implementations */
1030 : /* LDV {"action": "CALLBACK", "type": "CALL_END"} */
1031 :
1032 : /* LDV {"action": "CALL", "type": "SUBPROCESS_BEGIN", "comment": "Driver is probed, call rest callbacks."} */
1033 : /* LDV {"action": "CALL", "type": "SUBPROCESS_END"} */
1034 :
1035 : /* Jump to a subprocess 'call' initial state */
1036 1 : goto ldv_call_2;
1037 1 : break;
1038 : }
1039 3 : case 2: {
1040 : /* LDV {"action": "SUSPEND", "type": "CALL_BEGIN", "callback": true, "comment": "Invoke callback suspend from PCI."} */
1041 3 : if (ldv_2_container_pci_driver->suspend) {
1042 : /* LDV {"type": "CALLBACK", "call": "ldv_2_ret_default = (ldv_2_container_pci_driver->suspend)(ldv_2_resource_dev, ldv_2_resource_pm_message);", "comment": "suspend"} */
1043 2 : ldv_2_ret_default = ldv_pci_scenario_suspend_2_8(ldv_2_container_pci_driver->suspend, ldv_2_resource_dev, ldv_2_resource_pm_message);
1044 : }
1045 : /* Callback post-call */
1046 4 : ldv_2_ret_default = ldv_filter_err_code(ldv_2_ret_default);
1047 : /* LDV {"action": "SUSPEND", "type": "CALL_END"} */
1048 :
1049 : /* LDV {"action": "SUSPEND_LATE", "type": "CALL_BEGIN", "callback": true, "comment": "Invoke callback suspend_late from PCI."} */
1050 3 : if (ldv_2_container_pci_driver->suspend_late) {
1051 : /* LDV {"type": "CALLBACK", "call": "ldv_2_ret_default = (ldv_2_container_pci_driver->suspend_late)(ldv_2_resource_dev, ldv_2_resource_pm_message);", "comment": "suspend_late"} */
1052 2 : ldv_2_ret_default = ldv_pci_scenario_suspend_late_2_7(ldv_2_container_pci_driver->suspend_late, ldv_2_resource_dev, ldv_2_resource_pm_message);
1053 : }
1054 : /* Callback post-call */
1055 4 : ldv_2_ret_default = ldv_filter_err_code(ldv_2_ret_default);
1056 : /* LDV {"action": "SUSPEND_LATE", "type": "CALL_END"} */
1057 :
1058 : /* LDV {"action": "RESUME_EARLY", "type": "CALL_BEGIN", "callback": true, "comment": "Invoke callback resume_early from PCI."} */
1059 3 : if (ldv_2_container_pci_driver->resume_early) {
1060 : /* LDV {"type": "CALLBACK", "call": "(ldv_2_container_pci_driver->resume_early)(ldv_2_resource_dev);", "comment": "resume_early"} */
1061 2 : ldv_pci_scenario_resume_early_2_6(ldv_2_container_pci_driver->resume_early, ldv_2_resource_dev);
1062 : }
1063 : /* LDV {"action": "RESUME_EARLY", "type": "CALL_END"} */
1064 :
1065 : /* LDV {"action": "RESUME", "type": "CALL_BEGIN", "callback": true, "comment": "Invoke callback resume from PCI."} */
1066 6 : if (ldv_2_container_pci_driver->resume) {
1067 : /* LDV {"type": "CALLBACK", "call": "(ldv_2_container_pci_driver->resume)(ldv_2_resource_dev);", "comment": "resume"} */
1068 4 : ldv_pci_scenario_resume_2_5(ldv_2_container_pci_driver->resume, ldv_2_resource_dev);
1069 : }
1070 : /* LDV {"action": "RESUME", "type": "CALL_END"} */
1071 :
1072 : /* LDV {"action": "CALL", "type": "SUBPROCESS_BEGIN", "comment": "Driver is probed, call rest callbacks."} */
1073 : /* LDV {"action": "CALL", "type": "SUBPROCESS_END"} */
1074 :
1075 : /* Jump to a subprocess 'call' initial state */
1076 3 : goto ldv_call_2;
1077 1 : break;
1078 : }
1079 3 : case 3: {
1080 : /* LDV {"action": "SHUTDOWN", "type": "CALL_BEGIN", "callback": true, "comment": "Invoke callback shutdown from pci_driver."} */
1081 : /* LDV {"type": "CALLBACK", "call": "((& usb_hcd_pci_shutdown))(ldv_2_resource_dev);", "comment": "shutdown"} */
1082 2 : ldv_pci_scenario_shutdown_2_3(ldv_2_container_pci_driver->shutdown, ldv_2_resource_dev);
1083 : /* LDV {"action": "SHUTDOWN", "type": "CALL_END"} */
1084 :
1085 : /* LDV {"action": "RELEASE", "type": "CALL_BEGIN", "callback": true, "comment": "Invoke callback remove from pci_driver."} */
1086 : /* LDV {"type": "CALLBACK", "call": "((& usb_hcd_pci_remove))(ldv_2_resource_dev);", "comment": "release"} */
1087 2 : ldv_pci_scenario_release_2_2(ldv_2_container_pci_driver->remove, ldv_2_resource_dev);
1088 : /* LDV {"action": "RELEASE", "type": "CALL_END"} */
1089 :
1090 : /* LDV {"action": "MAIN", "type": "SUBPROCESS_BEGIN", "comment": "New device is inserted, probe it."} */
1091 : /* LDV {"action": "MAIN", "type": "SUBPROCESS_END"} */
1092 :
1093 : /* Jump to a subprocess 'main' initial state */
1094 1 : goto ldv_main_2;
1095 1 : break;
1096 : }
1097 2 : default: ldv_stop();
1098 1 : }
1099 0 : /* End of the subprocess 'call' */
1100 0 : return;
1101 : /* LDV {"comment": "End of control function based on process 'pci_scenario(pci)'", "type": "CONTROL_FUNCTION_END", "function": "ldv_pci_scenario_2"} */
1102 : }
1103 :
1104 : /* AUX_FUNC_CALLBACK ldv_pci_scenario_probe_2_17 */
1105 : int ldv_pci_scenario_probe_2_17(int (*arg0)(struct pci_dev *, struct pci_device_id *), struct pci_dev *arg1, struct pci_device_id *arg2) {
1106 2 : return ((& usb_hcd_pci_probe))(arg1, arg2);
1107 : }
1108 1 :
1109 : /* AUX_FUNC_CALLBACK ldv_pci_scenario_release_2_2 */
1110 : void ldv_pci_scenario_release_2_2(void (*arg0)(struct pci_dev *), struct pci_dev *arg1) {
1111 1 : ((& usb_hcd_pci_remove))(arg1);
1112 1 : }
1113 :
1114 : /* AUX_FUNC_CALLBACK ldv_pci_scenario_resume_2_5 */
1115 : void ldv_pci_scenario_resume_2_5(int (*arg0)(struct pci_dev *), struct pci_dev *arg1) {
1116 2 : (*arg0)(arg1);
1117 2 : }
1118 :
1119 : /* AUX_FUNC_CALLBACK ldv_pci_scenario_resume_early_2_6 */
1120 : void ldv_pci_scenario_resume_early_2_6(int (*arg0)(struct pci_dev *), struct pci_dev *arg1) {
1121 1 : (*arg0)(arg1);
1122 1 : }
1123 :
1124 : /* AUX_FUNC_CALLBACK ldv_pci_scenario_shutdown_2_3 */
1125 : void ldv_pci_scenario_shutdown_2_3(void (*arg0)(struct pci_dev *), struct pci_dev *arg1) {
1126 1 : ((& usb_hcd_pci_shutdown))(arg1);
1127 1 : }
1128 :
1129 : /* AUX_FUNC_CALLBACK ldv_pci_scenario_suspend_2_8 */
1130 : int ldv_pci_scenario_suspend_2_8(int (*arg0)(struct pci_dev *, struct pm_message), struct pci_dev *arg1, struct pm_message arg2) {
1131 2 : return (*arg0)(arg1, arg2);
1132 : }
1133 1 :
1134 : /* AUX_FUNC_CALLBACK ldv_pci_scenario_suspend_late_2_7 */
1135 : int ldv_pci_scenario_suspend_late_2_7(int (*arg0)(struct pci_dev *, struct pm_message), struct pci_dev *arg1, struct pm_message arg2) {
1136 2 : return (*arg0)(arg1, arg2);
1137 : }
1138 1 :
1139 : /* AUX_FUNC ldv_random_containerless_scenario_4 */
1140 : void ldv_random_containerless_scenario_4(void *arg0) {
1141 : /* LDV {"thread": 4, "type": "CONTROL_FUNCTION_BEGIN", "comment": "Control function 'random_containerless_scenario(struct_kernel_param)'", "function": "ldv_random_containerless_scenario_4"} */
1142 1 : /* LDV {"type": "CONTROL_FUNCTION_INIT_BEGIN", "comment": "Declare auxiliary variables."} */
1143 1 : int (*ldv_4_callback_get)(char *, struct kernel_param *);
1144 1 : int (*ldv_4_callback_set)(char *, struct kernel_param *);
1145 1 : struct kernel_param *ldv_4_container_struct_kernel_param;
1146 1 : char *ldv_4_ldv_param_10_0_default;
1147 1 : char *ldv_4_ldv_param_4_0_default;
1148 1 : /* LDV {"type": "CONTROL_FUNCTION_INIT_END", "comment": "Declare auxiliary variables."} */
1149 1 : /* LDV {"action": "DEFAULT_REGISTER_9", "type": "RECEIVE_BEGIN", "comment": "Begin STRUCT_KERNEL_PARAM callbacks invocations scenario."} */
1150 3 : ldv_free(arg0);
1151 1 : /* LDV {"action": "DEFAULT_REGISTER_9", "type": "RECEIVE_END"} */
1152 :
1153 : /* LDV {"action": "DEFAULT_ALLOC_9", "type": "CONDITION_BEGIN", "comment": "Allocate memory after default registration."} */
1154 3 : ldv_4_container_struct_kernel_param = ldv_xmalloc_unknown_size(0);
1155 : /* LDV {"action": "DEFAULT_ALLOC_9", "type": "CONDITION_END"} */
1156 :
1157 : /* LDV {"action": "CALL", "type": "SUBPROCESS_BEGIN", "comment": "Prepare to call a random callback or deregister the callbacks."} */
1158 : /* LDV {"action": "CALL", "type": "SUBPROCESS_END"} */
1159 :
1160 : /* Jump to a subprocess 'call' initial state */
1161 1 : goto ldv_call_4;
1162 : /* End of the process */
1163 : return;
1164 1 :
1165 : /* Sbprocess call */
1166 : ldv_call_4:
1167 : /* LDV {"action": null, "type": "ARTIFICIAL", "comment": "Artificial state in scenario"} */
1168 :
1169 4 : if (ldv_undef_int()) {
1170 : /* LDV {"action": "PRE_CALL_4", "type": "CONDITION_BEGIN", "comment": "Allocate memory for adhoc callback parameters."} */
1171 3 : ldv_4_ldv_param_4_0_default = ldv_xmalloc_unknown_size(0);
1172 : /* LDV {"action": "PRE_CALL_4", "type": "CONDITION_END"} */
1173 :
1174 4 : if (ldv_undef_int()) {
1175 : /* LDV {"action": "PRE_CALL_10", "type": "CONDITION_BEGIN", "comment": "Allocate memory for adhoc callback parameters."} */
1176 3 : ldv_4_ldv_param_10_0_default = ldv_xmalloc_unknown_size(0);
1177 : /* LDV {"action": "PRE_CALL_10", "type": "CONDITION_END"} */
1178 :
1179 : /* LDV {"action": "CALLBACK", "type": "CALL_BEGIN", "callback": true, "comment": "Call any random callback. Invoke callback set from kernel_param."} */
1180 : /* LDV {"type": "CALLBACK", "call": "((& param_set_bool))(ldv_4_ldv_param_10_0_default, ldv_4_container_struct_kernel_param);", "comment": "callback"} */
1181 2 : ldv_random_containerless_scenario_callback_4_10(ldv_4_callback_set, ldv_4_ldv_param_10_0_default, ldv_4_container_struct_kernel_param);
1182 : /* LDV {"action": "CALLBACK", "type": "CALL_END"} */
1183 :
1184 : /* LDV {"action": "POST_CALL_10", "type": "CONDITION_BEGIN", "comment": "Free memory of adhoc callback parameters."} */
1185 2 : ldv_free(ldv_4_ldv_param_10_0_default);
1186 : /* LDV {"action": "POST_CALL_10", "type": "CONDITION_END"} */
1187 :
1188 : }
1189 : else {
1190 : /* LDV {"action": "CALLBACK", "type": "CALL_BEGIN", "callback": true, "comment": "Call any random callback. Invoke callback get from kernel_param."} */
1191 : /* LDV {"type": "CALLBACK", "call": "((& param_get_bool))(ldv_4_ldv_param_4_0_default, ldv_4_container_struct_kernel_param);", "comment": "callback"} */
1192 2 : ldv_random_containerless_scenario_callback_4_4(ldv_4_callback_get, ldv_4_ldv_param_4_0_default, ldv_4_container_struct_kernel_param);
1193 : /* LDV {"action": "CALLBACK", "type": "CALL_END"} */
1194 :
1195 : }
1196 : /* LDV {"action": "POST_CALL_4", "type": "CONDITION_BEGIN", "comment": "Free memory of adhoc callback parameters."} */
1197 4 : ldv_free(ldv_4_ldv_param_4_0_default);
1198 : /* LDV {"action": "POST_CALL_4", "type": "CONDITION_END"} */
1199 :
1200 : /* LDV {"action": "CALL", "type": "SUBPROCESS_BEGIN", "comment": "Prepare to call a random callback or deregister the callbacks."} */
1201 : /* LDV {"action": "CALL", "type": "SUBPROCESS_END"} */
1202 :
1203 : /* Jump to a subprocess 'call' initial state */
1204 1 : goto ldv_call_4;
1205 : }
1206 : else {
1207 : /* LDV {"action": "DEFAULT_FREE_9", "type": "CONDITION_BEGIN", "comment": "Free memory before default deregistration."} */
1208 2 : ldv_free(ldv_4_container_struct_kernel_param);
1209 : /* LDV {"action": "DEFAULT_FREE_9", "type": "CONDITION_END"} */
1210 :
1211 : /* LDV {"action": "DEFAULT_DEREGISTER_9", "type": "RECEIVE_BEGIN", "comment": "Finish STRUCT_KERNEL_PARAM callbacks invocations scenario."} */
1212 : /* Skip a non-replicative signal receiving */
1213 : /* LDV {"action": "DEFAULT_DEREGISTER_9", "type": "RECEIVE_END"} */
1214 :
1215 : /* Exit function at a terminal state */
1216 1 : return;
1217 : }
1218 : /* End of the subprocess 'call' */
1219 : return;
1220 : /* LDV {"comment": "End of control function based on process 'random_containerless_scenario(struct_kernel_param)'", "type": "CONTROL_FUNCTION_END", "function": "ldv_random_containerless_scenario_4"} */
1221 : }
1222 :
1223 : /* AUX_FUNC_CALLBACK ldv_random_containerless_scenario_callback_4_10 */
1224 : void ldv_random_containerless_scenario_callback_4_10(int (*arg0)(char *, struct kernel_param *), char *arg1, struct kernel_param *arg2) {
1225 1 : ((& param_set_bool))(arg1, arg2);
1226 1 : }
1227 :
1228 : /* AUX_FUNC_CALLBACK ldv_random_containerless_scenario_callback_4_4 */
1229 : void ldv_random_containerless_scenario_callback_4_4(int (*arg0)(char *, struct kernel_param *), char *arg1, struct kernel_param *arg2) {
1230 1 : ((& param_get_bool))(arg1, arg2);
1231 1 : }
1232 :
1233 : /* AUX_FUNC ldv_timer_scenario_5 */
1234 : void ldv_timer_scenario_5(void *arg0) {
1235 : /* LDV {"thread": 5, "type": "CONTROL_FUNCTION_BEGIN", "comment": "Control function 'timer_scenario(timer)'", "function": "ldv_timer_scenario_5"} */
1236 3 : /* LDV {"type": "CONTROL_FUNCTION_INIT_BEGIN", "comment": "Declare auxiliary variables."} */
1237 3 : struct timer_list *ldv_5_container_timer_list;
1238 : /* Received labels */
1239 3 : struct ldv_struct_timer_scenario_5 *data = (struct ldv_struct_timer_scenario_5*) arg0;
1240 :
1241 : /* LDV {"type": "CONTROL_FUNCTION_INIT_END", "comment": "Declare auxiliary variables."} */
1242 : /* LDV {"action": "INSTANCE_REGISTER", "type": "RECEIVE_BEGIN", "comment": "Begin TIMER callbacks invocations scenario."} */
1243 : /* Assign recieved labels */
1244 6 : if (data) {
1245 3 : ldv_5_container_timer_list = data->arg0;
1246 6 : ldv_free(data);
1247 : }
1248 : /* LDV {"action": "INSTANCE_REGISTER", "type": "RECEIVE_END"} */
1249 :
1250 : /* LDV {"action": "CALLBACK", "type": "CALL_BEGIN", "callback": true, "comment": "Time has come: call the timer callback. Invoke callback callback from TIMER."} */
1251 : /* Callback pre-call */
1252 6 : ldv_switch_to_interrupt_context();
1253 18 : if (ldv_5_container_timer_list->function) {
1254 : /* LDV {"type": "CALLBACK", "call": "(ldv_5_container_timer_list->function)(ldv_5_container_timer_list->data);", "comment": "callback"} */
1255 12 : ldv_timer_scenario_callback_5_2(ldv_5_container_timer_list->function, ldv_5_container_timer_list->data);
1256 : }
1257 : /* Callback post-call */
1258 9 : ldv_switch_to_process_context();
1259 : /* LDV {"action": "CALLBACK", "type": "CALL_END"} */
1260 :
1261 : /* LDV {"action": "INSTANCE_DEREGISTER", "type": "RECEIVE_BEGIN", "comment": "Finish TIMER callbacks invocations scenario."} */
1262 : /* Skip a non-replicative signal receiving */
1263 : /* LDV {"action": "INSTANCE_DEREGISTER", "type": "RECEIVE_END"} */
1264 :
1265 : /* Exit function at a terminal state */
1266 9 : return;
1267 : /* End of the process */
1268 : return;
1269 : /* LDV {"comment": "End of control function based on process 'timer_scenario(timer)'", "type": "CONTROL_FUNCTION_END", "function": "ldv_timer_scenario_5"} */
1270 : }
1271 :
1272 : /* AUX_FUNC_CALLBACK ldv_timer_scenario_callback_5_2 */
1273 : void ldv_timer_scenario_callback_5_2(void (*arg0)(unsigned long), unsigned long arg1) {
1274 12 : (*arg0)(arg1);
1275 6 : }
1276 :
1277 : /* AUX_FUNC main */
1278 : int main() {
1279 1 : ldv_main_12(0);
1280 0 : return 0;
1281 : }
1282 :
1283 :
1284 : /* AUX_FUNC ERR_PTR */
1285 : static inline void *ERR_PTR (long int error)
1286 : {
1287 :
1288 : return ldv_err_ptr(error);
1289 : }
1290 :
1291 : /* AUX_FUNC PTR_ERR */
1292 : static inline long int PTR_ERR (void const *ptr)
1293 : {
1294 :
1295 : return ldv_ptr_err(ptr);
1296 : }
1297 :
1298 : /* AUX_FUNC IS_ERR */
1299 : static inline long int IS_ERR (void const *ptr)
1300 : {
1301 :
1302 : return ldv_is_err(ptr);
1303 : }
1304 :
1305 : /* AUX_FUNC IS_ERR_OR_NULL */
1306 : static inline long int IS_ERR_OR_NULL (void const *ptr)
1307 : {
1308 :
1309 : return ldv_is_err_or_null(ptr);
1310 : }
1311 :
1312 : /* AUX_FUNC ldv_del_timer_5 */
1313 : int ldv_del_timer_5 (struct timer_list *ldv_func_arg1)
1314 : {
1315 :
1316 : /* LDV {"type": "KERNEL_MODEL", "comment": "Perform the model code of the function 'del_timer'"} */
1317 : return ldv_emg_del_timer(ldv_func_arg1);
1318 : }
1319 :
1320 : /* AUX_FUNC kzalloc */
1321 : static inline void *kzalloc (size_t size, gfp_t flags)
1322 : {
1323 2 :
1324 6 : return ldv_kzalloc(size, flags);
1325 : }
1326 :
1327 : /* AUX_FUNC ldv_dev_get_drvdata_7 */
1328 : void *ldv_dev_get_drvdata_7 (struct device const *dev)
1329 : {
1330 :
1331 : return ldv_dev_get_drvdata(dev);
1332 : }
1333 :
1334 : /* AUX_FUNC ldv_dev_get_drvdata_8 */
1335 : void *ldv_dev_get_drvdata_8 (struct device const *dev)
1336 : {
1337 :
1338 : return ldv_dev_get_drvdata(dev);
1339 : }
1340 :
1341 : /* AUX_FUNC ldv_mod_timer_9 */
1342 : int ldv_mod_timer_9 (struct timer_list *ldv_func_arg1, long unsigned int ldv_func_arg2)
1343 : {
1344 3 :
1345 : /* LDV {"type": "KERNEL_MODEL", "comment": "Perform the model code of the function 'mod_timer'"} */
1346 12 : return ldv_emg_mod_timer(ldv_func_arg1, ldv_func_arg2);
1347 : }
1348 :
1349 : /* AUX_FUNC ldv_mod_timer_10 */
1350 : int ldv_mod_timer_10 (struct timer_list *ldv_func_arg1, long unsigned int ldv_func_arg2)
1351 : {
1352 0 :
1353 : /* LDV {"type": "KERNEL_MODEL", "comment": "Perform the model code of the function 'mod_timer'"} */
1354 0 : return ldv_emg_mod_timer(ldv_func_arg1, ldv_func_arg2);
1355 : }
1356 :
1357 : /* AUX_FUNC ldv_free_irq_11 */
1358 : void ldv_free_irq_11 (unsigned int ldv_func_arg1, void *ldv_func_arg2)
1359 : {
1360 :
1361 : /* LDV {"type": "KERNEL_MODEL", "comment": "Perform the model code of the function 'free_irq'"} */
1362 6 : ldv_emg_free_irq(ldv_func_arg1, ldv_func_arg2);
1363 3 : }
1364 :
1365 : /* AUX_FUNC ldv_del_timer_12 */
1366 : int ldv_del_timer_12 (struct timer_list *ldv_func_arg1)
1367 : {
1368 3 :
1369 : /* LDV {"type": "KERNEL_MODEL", "comment": "Perform the model code of the function 'del_timer'"} */
1370 9 : return ldv_emg_del_timer(ldv_func_arg1);
1371 : }
1372 :
1373 : /* AUX_FUNC ldv___pci_register_driver_13 */
1374 : int ldv___pci_register_driver_13 (struct pci_driver *ldv_func_arg1, struct module *ldv_func_arg2, char const *ldv_func_arg3)
1375 : {
1376 :
1377 1 : /* LDV {"type": "KERNEL_MODEL", "comment": "Perform the model code of the function '__pci_register_driver'"} */
1378 4 : return ldv_emg___pci_register_driver(ldv_func_arg1, ldv_func_arg2, ldv_func_arg3);
1379 : }
1380 :
1381 : /* AUX_FUNC ldv_pci_unregister_driver_14 */
1382 : void ldv_pci_unregister_driver_14 (struct pci_driver *ldv_func_arg1)
1383 : {
1384 :
1385 : /* LDV {"type": "KERNEL_MODEL", "comment": "Perform the model code of the function 'pci_unregister_driver'"} */
1386 0 : ldv_emg_pci_unregister_driver(ldv_func_arg1);
1387 0 : }
1388 :
1389 : /* AUX_FUNC ldv_pci_unregister_driver_15 */
1390 : void ldv_pci_unregister_driver_15 (struct pci_driver *ldv_func_arg1)
1391 : {
1392 :
1393 : /* LDV {"type": "KERNEL_MODEL", "comment": "Perform the model code of the function 'pci_unregister_driver'"} */
1394 4 : ldv_emg_pci_unregister_driver(ldv_func_arg1);
1395 2 : }
|