Revert "sched/psi: use kernfs polling functions for PSI trigger polling"
This reverts commit 92cc015332
which is
commit aff037078ecaecf34a7c2afab1341815f90fba5e upstream.
It is part of a patch series that breaks the Android API. If this
series is needed in Android devices in the future, it can come back in
an ABI-safe manner.
Bug: 161946584
Change-Id: I2c941ec44d5261a914d95591b7918e46f7db825a
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
parent
8976ff249f
commit
ffed79e366
@ -23,9 +23,8 @@ void psi_memstall_enter(unsigned long *flags);
|
||||
void psi_memstall_leave(unsigned long *flags);
|
||||
|
||||
int psi_show(struct seq_file *s, struct psi_group *group, enum psi_res res);
|
||||
struct psi_trigger *psi_trigger_create(struct psi_group *group, char *buf,
|
||||
enum psi_res res, struct file *file,
|
||||
struct kernfs_open_file *of);
|
||||
struct psi_trigger *psi_trigger_create(struct psi_group *group,
|
||||
char *buf, enum psi_res res, struct file *file);
|
||||
void psi_trigger_destroy(struct psi_trigger *t);
|
||||
|
||||
__poll_t psi_trigger_poll(void **trigger_ptr, struct file *file,
|
||||
|
@ -137,9 +137,6 @@ struct psi_trigger {
|
||||
/* Wait queue for polling */
|
||||
wait_queue_head_t event_wait;
|
||||
|
||||
/* Kernfs file for cgroup triggers */
|
||||
struct kernfs_open_file *of;
|
||||
|
||||
/* Pending event flag */
|
||||
int event;
|
||||
|
||||
|
@ -3777,7 +3777,7 @@ static ssize_t pressure_write(struct kernfs_open_file *of, char *buf,
|
||||
}
|
||||
|
||||
psi = cgroup_psi(cgrp);
|
||||
new = psi_trigger_create(psi, buf, res, of->file, of);
|
||||
new = psi_trigger_create(psi, buf, res, of->file);
|
||||
if (IS_ERR(new)) {
|
||||
cgroup_put(cgrp);
|
||||
return PTR_ERR(new);
|
||||
|
@ -494,12 +494,8 @@ static u64 update_triggers(struct psi_group *group, u64 now, bool *update_total,
|
||||
continue;
|
||||
|
||||
/* Generate an event */
|
||||
if (cmpxchg(&t->event, 0, 1) == 0) {
|
||||
if (t->of)
|
||||
kernfs_notify(t->of->kn);
|
||||
else
|
||||
if (cmpxchg(&t->event, 0, 1) == 0)
|
||||
wake_up_interruptible(&t->event_wait);
|
||||
}
|
||||
t->last_event_time = now;
|
||||
/* Reset threshold breach flag once event got generated */
|
||||
t->pending_event = false;
|
||||
@ -1276,9 +1272,8 @@ int psi_show(struct seq_file *m, struct psi_group *group, enum psi_res res)
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct psi_trigger *psi_trigger_create(struct psi_group *group, char *buf,
|
||||
enum psi_res res, struct file *file,
|
||||
struct kernfs_open_file *of)
|
||||
struct psi_trigger *psi_trigger_create(struct psi_group *group,
|
||||
char *buf, enum psi_res res, struct file *file)
|
||||
{
|
||||
struct psi_trigger *t;
|
||||
enum psi_states state;
|
||||
@ -1337,8 +1332,6 @@ struct psi_trigger *psi_trigger_create(struct psi_group *group, char *buf,
|
||||
|
||||
t->event = 0;
|
||||
t->last_event_time = 0;
|
||||
t->of = of;
|
||||
if (!of)
|
||||
init_waitqueue_head(&t->event_wait);
|
||||
t->pending_event = false;
|
||||
t->aggregator = privileged ? PSI_POLL : PSI_AVGS;
|
||||
@ -1396,10 +1389,7 @@ void psi_trigger_destroy(struct psi_trigger *t)
|
||||
* being accessed later. Can happen if cgroup is deleted from under a
|
||||
* polling process.
|
||||
*/
|
||||
if (t->of)
|
||||
kernfs_notify(t->of->kn);
|
||||
else
|
||||
wake_up_interruptible(&t->event_wait);
|
||||
wake_up_pollfree(&t->event_wait);
|
||||
|
||||
if (t->aggregator == PSI_AVGS) {
|
||||
mutex_lock(&group->avgs_lock);
|
||||
@ -1471,9 +1461,6 @@ __poll_t psi_trigger_poll(void **trigger_ptr,
|
||||
if (!t)
|
||||
return DEFAULT_POLLMASK | EPOLLERR | EPOLLPRI;
|
||||
|
||||
if (t->of)
|
||||
kernfs_generic_poll(t->of, wait);
|
||||
else
|
||||
poll_wait(file, &t->event_wait, wait);
|
||||
|
||||
if (cmpxchg(&t->event, 1, 0) == 1)
|
||||
@ -1544,7 +1531,7 @@ static ssize_t psi_write(struct file *file, const char __user *user_buf,
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
new = psi_trigger_create(&psi_system, buf, res, file, NULL);
|
||||
new = psi_trigger_create(&psi_system, buf, res, file);
|
||||
if (IS_ERR(new)) {
|
||||
mutex_unlock(&seq->lock);
|
||||
return PTR_ERR(new);
|
||||
|
Loading…
Reference in New Issue
Block a user