diff --git a/kernel/fork.c b/kernel/fork.c index 02b676d10054ae1370333d23bd68e8706b26c5e4..54c9b8841e005d87c091a08b5994454570d0d45a 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -919,6 +919,10 @@ static struct task_struct *dup_task_struct(struct task_struct *orig, int node) tsk->se.dyn_affi_stats = NULL; #endif +#ifdef CONFIG_QOS_SCHED_SMART_GRID + tsk->grid_qos = NULL; +#endif + setup_thread_stack(tsk, orig); clear_user_return_notifier(tsk); clear_tsk_need_resched(tsk); diff --git a/kernel/sched/grid/qos.c b/kernel/sched/grid/qos.c index b3df69d91499a6fc8623a750c67be0ef19c00fba..d6c8525fc16f1801b58898ab641d452a477dcdc3 100644 --- a/kernel/sched/grid/qos.c +++ b/kernel/sched/grid/qos.c @@ -68,6 +68,9 @@ int sched_grid_qos_fork(struct task_struct *p, struct task_struct *orig) void sched_grid_qos_free(struct task_struct *p) { + if (!p->grid_qos) + return; + kfree(p->_resvd->grid_qos); p->_resvd->grid_qos = NULL; }