Skip to content

Commit b734091

Browse files
tlaudalgirdwood
authored andcommitted
ll_schedule_domain: pass task during unregistration
Changes domain_unregister operation to also receive task being unregistered. Signed-off-by: Tomasz Lauda <tomasz.lauda@linux.intel.com>
1 parent cb5506f commit b734091

5 files changed

Lines changed: 12 additions & 7 deletions

File tree

src/include/sof/schedule/ll_schedule_domain.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ struct ll_schedule_domain_ops {
3030
uint64_t period, struct task *task,
3131
void (*handler)(void *arg), void *arg);
3232
void (*domain_unregister)(struct ll_schedule_domain *domain,
33-
uint32_t num_tasks);
33+
struct task *task, uint32_t num_tasks);
3434
void (*domain_enable)(struct ll_schedule_domain *domain, int core);
3535
void (*domain_disable)(struct ll_schedule_domain *domain, int core);
3636
void (*domain_set)(struct ll_schedule_domain *domain, uint64_t start);
@@ -85,11 +85,11 @@ static inline int domain_register(struct ll_schedule_domain *domain,
8585
}
8686

8787
static inline void domain_unregister(struct ll_schedule_domain *domain,
88-
uint32_t num_tasks)
88+
struct task *task, uint32_t num_tasks)
8989
{
9090
assert(domain->ops->domain_unregister);
9191

92-
domain->ops->domain_unregister(domain, num_tasks);
92+
domain->ops->domain_unregister(domain, task, num_tasks);
9393
}
9494

9595
static inline void domain_enable(struct ll_schedule_domain *domain, int core)

src/schedule/dma_multi_chan_domain.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,9 +172,11 @@ static void dma_multi_chan_domain_irq_unregister(struct dma_domain_data *data)
172172
/**
173173
* \brief Unregisters task from DMA domain.
174174
* \param[in,out] domain Pointer to schedule domain.
175+
* \param[in,out] task Task to be unregistered from the domain..
175176
* \param[in] num_tasks Number of currently scheduled tasks.
176177
*/
177178
static void dma_multi_chan_domain_unregister(struct ll_schedule_domain *domain,
179+
struct task *task,
178180
uint32_t num_tasks)
179181
{
180182
struct dma_domain *dma_domain = ll_sch_domain_get_pdata(domain);

src/schedule/dma_single_chan_domain.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,9 +333,11 @@ static void dma_domain_unregister_owner(struct ll_schedule_domain *domain,
333333
/**
334334
* \brief Unregisters task from DMA domain.
335335
* \param[in,out] domain Pointer to schedule domain.
336+
* \param[in,out] task Task to be unregistered from the domain.
336337
* \param[in] num_tasks Number of currently scheduled tasks.
337338
*/
338339
static void dma_single_chan_domain_unregister(struct ll_schedule_domain *domain,
340+
struct task *task,
339341
uint32_t num_tasks)
340342
{
341343
struct dma_domain *dma_domain = ll_sch_domain_get_pdata(domain);

src/schedule/ll_schedule.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,8 @@ static int schedule_ll_domain_set(struct ll_schedule_data *sch,
191191
return 0;
192192
}
193193

194-
static void schedule_ll_domain_clear(struct ll_schedule_data *sch)
194+
static void schedule_ll_domain_clear(struct ll_schedule_data *sch,
195+
struct task *task)
195196
{
196197
spin_lock(sch->domain->lock);
197198

@@ -212,7 +213,7 @@ static void schedule_ll_domain_clear(struct ll_schedule_data *sch)
212213

213214
spin_unlock(sch->domain->lock);
214215

215-
domain_unregister(sch->domain, atomic_read(&sch->num_tasks));
216+
domain_unregister(sch->domain, task, atomic_read(&sch->num_tasks));
216217
}
217218

218219
static void schedule_ll_task_insert(struct task *task, struct list_item *tasks)
@@ -339,7 +340,7 @@ static void schedule_ll_task_cancel(void *data, struct task *task)
339340

340341
/* found it */
341342
if (curr_task == task) {
342-
schedule_ll_domain_clear(sch);
343+
schedule_ll_domain_clear(sch, task);
343344
break;
344345
}
345346
}

src/schedule/timer_domain.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ static int timer_domain_register(struct ll_schedule_domain *domain,
5656
}
5757

5858
static void timer_domain_unregister(struct ll_schedule_domain *domain,
59-
uint32_t num_tasks)
59+
struct task *task, uint32_t num_tasks)
6060
{
6161
struct timer_domain *timer_domain = ll_sch_domain_get_pdata(domain);
6262
int core = cpu_get_id();

0 commit comments

Comments
 (0)