ASoC: SOF: Intel: Do not use resource managed allocation for ipc4_data
authorPeter Ujfalusi <peter.ujfalusi@linux.intel.com>
Wed, 29 Nov 2023 12:53:26 +0000 (14:53 +0200)
committerMark Brown <broonie@kernel.org>
Wed, 29 Nov 2023 13:25:14 +0000 (13:25 +0000)
Manage the ipc4_data allocation in code instead of devm since the ops_init
might be called more than once due to IPC type fallback.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Link: https://lore.kernel.org/r/20231129125327.23708-13-peter.ujfalusi@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/intel/apl.c
sound/soc/sof/intel/cnl.c
sound/soc/sof/intel/hda-dai.c
sound/soc/sof/intel/icl.c
sound/soc/sof/intel/lnl.c
sound/soc/sof/intel/mtl.c
sound/soc/sof/intel/skl.c
sound/soc/sof/intel/tgl.c

index 776b663..dee6c7f 100644 (file)
@@ -55,7 +55,7 @@ int sof_apl_ops_init(struct snd_sof_dev *sdev)
        if (sdev->pdata->ipc_type == SOF_IPC_TYPE_4) {
                struct sof_ipc4_fw_data *ipc4_data;
 
-               sdev->private = devm_kzalloc(sdev->dev, sizeof(*ipc4_data), GFP_KERNEL);
+               sdev->private = kzalloc(sizeof(*ipc4_data), GFP_KERNEL);
                if (!sdev->private)
                        return -ENOMEM;
 
index 598cf50..85e1e47 100644 (file)
@@ -402,7 +402,7 @@ int sof_cnl_ops_init(struct snd_sof_dev *sdev)
        if (sdev->pdata->ipc_type == SOF_IPC_TYPE_4) {
                struct sof_ipc4_fw_data *ipc4_data;
 
-               sdev->private = devm_kzalloc(sdev->dev, sizeof(*ipc4_data), GFP_KERNEL);
+               sdev->private = kzalloc(sizeof(*ipc4_data), GFP_KERNEL);
                if (!sdev->private)
                        return -ENOMEM;
 
index a20deaf..f4cbc0a 100644 (file)
@@ -621,6 +621,9 @@ void hda_ops_free(struct snd_sof_dev *sdev)
 
                if (!hda_use_tplg_nhlt)
                        intel_nhlt_free(ipc4_data->nhlt);
+
+               kfree(sdev->private);
+               sdev->private = NULL;
        }
 }
 EXPORT_SYMBOL_NS(hda_ops_free, SND_SOC_SOF_INTEL_HDA_COMMON);
index 8e29d6b..0406985 100644 (file)
@@ -123,7 +123,7 @@ int sof_icl_ops_init(struct snd_sof_dev *sdev)
        if (sdev->pdata->ipc_type == SOF_IPC_TYPE_4) {
                struct sof_ipc4_fw_data *ipc4_data;
 
-               sdev->private = devm_kzalloc(sdev->dev, sizeof(*ipc4_data), GFP_KERNEL);
+               sdev->private = kzalloc(sizeof(*ipc4_data), GFP_KERNEL);
                if (!sdev->private)
                        return -ENOMEM;
 
index db94b45..0330872 100644 (file)
@@ -120,7 +120,7 @@ int sof_lnl_ops_init(struct snd_sof_dev *sdev)
 
        sof_lnl_ops.get_stream_position = mtl_dsp_get_stream_hda_link_position;
 
-       sdev->private = devm_kzalloc(sdev->dev, sizeof(struct sof_ipc4_fw_data), GFP_KERNEL);
+       sdev->private = kzalloc(sizeof(struct sof_ipc4_fw_data), GFP_KERNEL);
        if (!sdev->private)
                return -ENOMEM;
 
index 3ef9e5c..f941e2c 100644 (file)
@@ -709,7 +709,7 @@ int sof_mtl_ops_init(struct snd_sof_dev *sdev)
 
        sof_mtl_ops.get_stream_position = mtl_dsp_get_stream_hda_link_position;
 
-       sdev->private = devm_kzalloc(sdev->dev, sizeof(struct sof_ipc4_fw_data), GFP_KERNEL);
+       sdev->private = kzalloc(sizeof(struct sof_ipc4_fw_data), GFP_KERNEL);
        if (!sdev->private)
                return -ENOMEM;
 
index d24e64e..93824e6 100644 (file)
@@ -62,7 +62,7 @@ int sof_skl_ops_init(struct snd_sof_dev *sdev)
        /* probe/remove/shutdown */
        sof_skl_ops.shutdown    = hda_dsp_shutdown;
 
-       sdev->private = devm_kzalloc(sdev->dev, sizeof(*ipc4_data), GFP_KERNEL);
+       sdev->private = kzalloc(sizeof(*ipc4_data), GFP_KERNEL);
        if (!sdev->private)
                return -ENOMEM;
 
index f7de1f5..d890cac 100644 (file)
@@ -82,7 +82,7 @@ int sof_tgl_ops_init(struct snd_sof_dev *sdev)
        if (sdev->pdata->ipc_type == SOF_IPC_TYPE_4) {
                struct sof_ipc4_fw_data *ipc4_data;
 
-               sdev->private = devm_kzalloc(sdev->dev, sizeof(*ipc4_data), GFP_KERNEL);
+               sdev->private = kzalloc(sizeof(*ipc4_data), GFP_KERNEL);
                if (!sdev->private)
                        return -ENOMEM;