linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Dan Carpenter <dan.carpenter@oracle.com>
To: sandeep.singh@amd.com
Cc: linux-input@vger.kernel.org
Subject: [bug report] SFH:Transport Driver to add support of AMD Sensor Fusion Hub (SFH)
Date: Mon, 2 Nov 2020 17:01:47 +0300	[thread overview]
Message-ID: <20201102140147.GA41810@mwanda> (raw)

Hello Sandeep Singh,

The patch 4b2c53d93a4b: "SFH:Transport Driver to add support of AMD
Sensor Fusion Hub (SFH)" from Oct 10, 2020, leads to the following
static checker warning:

	drivers/hid/amd-sfh-hid/amd_sfh_client.c:222 amd_sfh_hid_client_init()
	warn: '&cl_data->work.timer' not released on lines: 202,222.

drivers/hid/amd-sfh-hid/amd_sfh_client.c
   134  int amd_sfh_hid_client_init(struct amd_mp2_dev *privdata)
   135  {
   136          struct amdtp_cl_data *cl_data = privdata->cl_data;
   137          struct amd_mp2_sensor_info info;
   138          struct device *dev;
   139          u32 feature_report_size;
   140          u32 input_report_size;
   141          u8 cl_idx;
   142          int rc, i;
   143  
   144          dev = &privdata->pdev->dev;
   145          cl_data = kzalloc(sizeof(*cl_data), GFP_KERNEL);
   146          if (!cl_data)
   147                  return -ENOMEM;
   148  
   149          cl_data->num_hid_devices = amd_mp2_get_sensor_num(privdata, &cl_data->sensor_idx[0]);
   150  
   151          INIT_DELAYED_WORK(&cl_data->work, amd_sfh_work);
   152          INIT_DELAYED_WORK(&cl_data->work_buffer, amd_sfh_work_buffer);

I think the INIT_DELAYED_WORK() allocates a bunch of debug stuff but I'm
not 100% positive...  Maybe there is nothing to free.  Does anyone know?

   153          INIT_LIST_HEAD(&req_list.list);
   154  
   155          for (i = 0; i < cl_data->num_hid_devices; i++) {
   156                  cl_data->sensor_virt_addr[i] = dma_alloc_coherent(dev, sizeof(int) * 8,
   157                                                                    &cl_data->sensor_phys_addr[i],
   158                                                                    GFP_KERNEL);
   159                  cl_data->sensor_sts[i] = 0;
   160                  cl_data->sensor_requested_cnt[i] = 0;
   161                  cl_data->cur_hid_dev = i;
   162                  cl_idx = cl_data->sensor_idx[i];
   163                  cl_data->report_descr_sz[i] = get_descr_sz(cl_idx, descr_size);
   164                  if (!cl_data->report_descr_sz[i]) {
   165                          rc = -EINVAL;
   166                          goto cleanup;
   167                  }
   168                  feature_report_size = get_descr_sz(cl_idx, feature_size);
   169                  if (!feature_report_size) {
   170                          rc = -EINVAL;
   171                          goto cleanup;
   172                  }
   173                  input_report_size =  get_descr_sz(cl_idx, input_size);
   174                  if (!input_report_size) {
   175                          rc = -EINVAL;
   176                          goto cleanup;
   177                  }
   178                  cl_data->feature_report[i] = kzalloc(feature_report_size, GFP_KERNEL);
   179                  if (!cl_data->feature_report[i]) {
   180                          rc = -ENOMEM;
   181                          goto cleanup;
   182                  }
   183                  cl_data->input_report[i] = kzalloc(input_report_size, GFP_KERNEL);
   184                  if (!cl_data->input_report[i]) {
   185                          rc = -ENOMEM;
   186                          goto cleanup;
   187                  }
   188                  info.period = msecs_to_jiffies(AMD_SFH_IDLE_LOOP);
   189                  info.sensor_idx = cl_idx;
   190                  info.phys_address = cl_data->sensor_phys_addr[i];
   191  
   192                  cl_data->report_descr[i] = kzalloc(cl_data->report_descr_sz[i], GFP_KERNEL);
   193                  if (!cl_data->report_descr[i]) {
   194                          rc = -ENOMEM;
   195                          goto cleanup;
   196                  }
   197                  rc = get_report_descriptor(cl_idx, cl_data->report_descr[i]);
   198                  if (rc)
   199                          return rc;
                                ^^^^^^^^^^
This should "goto cleanup"


   200                  rc = amdtp_hid_probe(cl_data->cur_hid_dev, cl_data);
   201                  if (rc)
   202                          return rc;
                                ^^^^^^^^^^
Same

   203                  amd_start_sensor(privdata, info);
   204                  cl_data->sensor_sts[i] = 1;
   205          }
   206          privdata->cl_data = cl_data;
   207          schedule_delayed_work(&cl_data->work_buffer, msecs_to_jiffies(AMD_SFH_IDLE_LOOP));
   208          return 0;
   209  
   210  cleanup:
   211          for (i = 0; i < cl_data->num_hid_devices; i++) {
   212                  if (cl_data->sensor_virt_addr[i]) {
   213                          dma_free_coherent(&privdata->pdev->dev, 8 * sizeof(int),
   214                                            cl_data->sensor_virt_addr[i],
   215                                            cl_data->sensor_phys_addr[i]);
   216                  }
   217                  kfree(cl_data->feature_report[i]);
   218                  kfree(cl_data->input_report[i]);
   219                  kfree(cl_data->report_descr[i]);
   220          }
   221          kfree(cl_data);
   222          return rc;
   223  }

regards,
dan carpenter

                 reply	other threads:[~2020-11-02 14:03 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201102140147.GA41810@mwanda \
    --to=dan.carpenter@oracle.com \
    --cc=linux-input@vger.kernel.org \
    --cc=sandeep.singh@amd.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).