@@ -45,6 +45,7 @@ struct test_batched_req {
4545 bool sent ;
4646 const struct firmware * fw ;
4747 const char * name ;
48+ const char * fw_buf ;
4849 struct completion completion ;
4950 struct task_struct * task ;
5051 struct device * dev ;
@@ -175,8 +176,14 @@ static void __test_release_all_firmware(void)
175176
176177 for (i = 0 ; i < test_fw_config -> num_requests ; i ++ ) {
177178 req = & test_fw_config -> reqs [i ];
178- if (req -> fw )
179+ if (req -> fw ) {
180+ if (req -> fw_buf ) {
181+ kfree_const (req -> fw_buf );
182+ req -> fw_buf = NULL ;
183+ }
179184 release_firmware (req -> fw );
185+ req -> fw = NULL ;
186+ }
180187 }
181188
182189 vfree (test_fw_config -> reqs );
@@ -670,6 +677,8 @@ static ssize_t trigger_request_store(struct device *dev,
670677
671678 mutex_lock (& test_fw_mutex );
672679 release_firmware (test_firmware );
680+ if (test_fw_config -> reqs )
681+ __test_release_all_firmware ();
673682 test_firmware = NULL ;
674683 rc = request_firmware (& test_firmware , name , dev );
675684 if (rc ) {
@@ -770,6 +779,8 @@ static ssize_t trigger_async_request_store(struct device *dev,
770779 mutex_lock (& test_fw_mutex );
771780 release_firmware (test_firmware );
772781 test_firmware = NULL ;
782+ if (test_fw_config -> reqs )
783+ __test_release_all_firmware ();
773784 rc = request_firmware_nowait (THIS_MODULE , 1 , name , dev , GFP_KERNEL ,
774785 NULL , trigger_async_request_cb );
775786 if (rc ) {
@@ -812,6 +823,8 @@ static ssize_t trigger_custom_fallback_store(struct device *dev,
812823
813824 mutex_lock (& test_fw_mutex );
814825 release_firmware (test_firmware );
826+ if (test_fw_config -> reqs )
827+ __test_release_all_firmware ();
815828 test_firmware = NULL ;
816829 rc = request_firmware_nowait (THIS_MODULE , FW_ACTION_NOUEVENT , name ,
817830 dev , GFP_KERNEL , NULL ,
@@ -874,6 +887,8 @@ static int test_fw_run_batch_request(void *data)
874887 test_fw_config -> buf_size );
875888 if (!req -> fw )
876889 kfree (test_buf );
890+ else
891+ req -> fw_buf = test_buf ;
877892 } else {
878893 req -> rc = test_fw_config -> req_firmware (& req -> fw ,
879894 req -> name ,
@@ -934,6 +949,7 @@ static ssize_t trigger_batched_requests_store(struct device *dev,
934949 req -> fw = NULL ;
935950 req -> idx = i ;
936951 req -> name = test_fw_config -> name ;
952+ req -> fw_buf = NULL ;
937953 req -> dev = dev ;
938954 init_completion (& req -> completion );
939955 req -> task = kthread_run (test_fw_run_batch_request , req ,
@@ -1038,6 +1054,7 @@ ssize_t trigger_batched_requests_async_store(struct device *dev,
10381054 for (i = 0 ; i < test_fw_config -> num_requests ; i ++ ) {
10391055 req = & test_fw_config -> reqs [i ];
10401056 req -> name = test_fw_config -> name ;
1057+ req -> fw_buf = NULL ;
10411058 req -> fw = NULL ;
10421059 req -> idx = i ;
10431060 init_completion (& req -> completion );
0 commit comments