@@ -732,7 +732,7 @@ pvr_fw_process(struct pvr_device *pvr_dev)
732732 fw_mem -> core_data , fw_mem -> core_code_alloc_size );
733733
734734 if (err )
735- goto err_free_fw_core_data_obj ;
735+ goto err_free_kdata ;
736736
737737 memcpy (fw_code_ptr , fw_mem -> code , fw_mem -> code_alloc_size );
738738 memcpy (fw_data_ptr , fw_mem -> data , fw_mem -> data_alloc_size );
@@ -742,18 +742,22 @@ pvr_fw_process(struct pvr_device *pvr_dev)
742742 memcpy (fw_core_data_ptr , fw_mem -> core_data , fw_mem -> core_data_alloc_size );
743743
744744 /* We're finished with the firmware section memory on the CPU, unmap. */
745- if (fw_core_data_ptr )
745+ if (fw_core_data_ptr ) {
746746 pvr_fw_object_vunmap (fw_mem -> core_data_obj );
747- if (fw_core_code_ptr )
747+ fw_core_data_ptr = NULL ;
748+ }
749+ if (fw_core_code_ptr ) {
748750 pvr_fw_object_vunmap (fw_mem -> core_code_obj );
751+ fw_core_code_ptr = NULL ;
752+ }
749753 pvr_fw_object_vunmap (fw_mem -> data_obj );
750754 fw_data_ptr = NULL ;
751755 pvr_fw_object_vunmap (fw_mem -> code_obj );
752756 fw_code_ptr = NULL ;
753757
754758 err = pvr_fw_create_fwif_connection_ctl (pvr_dev );
755759 if (err )
756- goto err_free_fw_core_data_obj ;
760+ goto err_free_kdata ;
757761
758762 return 0 ;
759763
@@ -763,13 +767,16 @@ pvr_fw_process(struct pvr_device *pvr_dev)
763767 kfree (fw_mem -> data );
764768 kfree (fw_mem -> code );
765769
766- err_free_fw_core_data_obj :
767770 if (fw_core_data_ptr )
768- pvr_fw_object_unmap_and_destroy (fw_mem -> core_data_obj );
771+ pvr_fw_object_vunmap (fw_mem -> core_data_obj );
772+ if (fw_mem -> core_data_obj )
773+ pvr_fw_object_destroy (fw_mem -> core_data_obj );
769774
770775err_free_fw_core_code_obj :
771776 if (fw_core_code_ptr )
772- pvr_fw_object_unmap_and_destroy (fw_mem -> core_code_obj );
777+ pvr_fw_object_vunmap (fw_mem -> core_code_obj );
778+ if (fw_mem -> core_code_obj )
779+ pvr_fw_object_destroy (fw_mem -> core_code_obj );
773780
774781err_free_fw_data_obj :
775782 if (fw_data_ptr )
@@ -836,6 +843,12 @@ pvr_fw_cleanup(struct pvr_device *pvr_dev)
836843 struct pvr_fw_mem * fw_mem = & pvr_dev -> fw_dev .mem ;
837844
838845 pvr_fw_fini_fwif_connection_ctl (pvr_dev );
846+
847+ kfree (fw_mem -> core_data );
848+ kfree (fw_mem -> core_code );
849+ kfree (fw_mem -> data );
850+ kfree (fw_mem -> code );
851+
839852 if (fw_mem -> core_code_obj )
840853 pvr_fw_object_destroy (fw_mem -> core_code_obj );
841854 if (fw_mem -> core_data_obj )
0 commit comments