Skip to content

Commit

Permalink
stm class: dummy_stm: Create multiple devices
Browse files Browse the repository at this point in the history
STM framework should be able to handle multiple STM devices at a time,
each one with its own master allocation policy.

This patch changes dummy_stm driver to create multiple STM sinks to
help testing the framework.

Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Alexander Shishkin authored and Greg Kroah-Hartman committed Feb 20, 2016
1 parent 59be422 commit bcfdf8a
Showing 1 changed file with 48 additions and 9 deletions.
57 changes: 48 additions & 9 deletions drivers/hwtracing/stm/dummy_stm.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,22 +40,61 @@ dummy_stm_packet(struct stm_data *stm_data, unsigned int master,
return size;
}

static struct stm_data dummy_stm = {
.name = "dummy_stm",
.sw_start = 0x0000,
.sw_end = 0xffff,
.sw_nchannels = 0xffff,
.packet = dummy_stm_packet,
};
#define DUMMY_STM_MAX 32

static struct stm_data dummy_stm[DUMMY_STM_MAX];

static int nr_dummies = 4;

module_param(nr_dummies, int, 0600);

static unsigned int dummy_stm_nr;

static int dummy_stm_init(void)
{
return stm_register_device(NULL, &dummy_stm, THIS_MODULE);
int i, ret = -ENOMEM, __nr_dummies = ACCESS_ONCE(nr_dummies);

if (__nr_dummies < 0 || __nr_dummies > DUMMY_STM_MAX)
return -EINVAL;

for (i = 0; i < __nr_dummies; i++) {
dummy_stm[i].name = kasprintf(GFP_KERNEL, "dummy_stm.%d", i);
if (!dummy_stm[i].name)
goto fail_unregister;

dummy_stm[i].sw_start = 0x0000;
dummy_stm[i].sw_end = 0xffff;
dummy_stm[i].sw_nchannels = 0xffff;
dummy_stm[i].packet = dummy_stm_packet;

ret = stm_register_device(NULL, &dummy_stm[i], THIS_MODULE);
if (ret)
goto fail_free;
}

dummy_stm_nr = __nr_dummies;

return 0;

fail_unregister:
for (i--; i >= 0; i--) {
stm_unregister_device(&dummy_stm[i]);
fail_free:
kfree(dummy_stm[i].name);
}

return ret;

}

static void dummy_stm_exit(void)
{
stm_unregister_device(&dummy_stm);
int i;

for (i = 0; i < dummy_stm_nr; i++) {
stm_unregister_device(&dummy_stm[i]);
kfree(dummy_stm[i].name);
}
}

module_init(dummy_stm_init);
Expand Down

0 comments on commit bcfdf8a

Please sign in to comment.