projects
/
linux-2.6-microblaze.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'work.get_user_pages_fast' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-microblaze.git]
/
fs
/
eventpoll.c
diff --git
a/fs/eventpoll.c
b/fs/eventpoll.c
index
afd548e
..
42e35a6
100644
(file)
--- a/
fs/eventpoll.c
+++ b/
fs/eventpoll.c
@@
-874,7
+874,8
@@
static void ep_ptable_queue_proc(struct file *file, wait_queue_head_t *whead,
* the ep->mtx so we need to start from depth=1, such that mutex_lock_nested()
* is correctly annotated.
*/
* the ep->mtx so we need to start from depth=1, such that mutex_lock_nested()
* is correctly annotated.
*/
-static unsigned int ep_item_poll(struct epitem *epi, poll_table *pt, int depth)
+static unsigned int ep_item_poll(const struct epitem *epi, poll_table *pt,
+ int depth)
{
struct eventpoll *ep;
bool locked;
{
struct eventpoll *ep;
bool locked;
@@
-920,7
+921,7
@@
static int ep_read_events_proc(struct eventpoll *ep, struct list_head *head,
return 0;
}
return 0;
}
-static
unsigned in
t ep_eventpoll_poll(struct file *file, poll_table *wait)
+static
__poll_
t ep_eventpoll_poll(struct file *file, poll_table *wait)
{
struct eventpoll *ep = file->private_data;
int depth = 0;
{
struct eventpoll *ep = file->private_data;
int depth = 0;
@@
-1117,6
+1118,7
@@
static int ep_poll_callback(wait_queue_entry_t *wait, unsigned mode, int sync, v
unsigned long flags;
struct epitem *epi = ep_item_from_wait(wait);
struct eventpoll *ep = epi->ep;
unsigned long flags;
struct epitem *epi = ep_item_from_wait(wait);
struct eventpoll *ep = epi->ep;
+ __poll_t pollflags = key_to_poll(key);
int ewake = 0;
spin_lock_irqsave(&ep->lock, flags);
int ewake = 0;
spin_lock_irqsave(&ep->lock, flags);
@@
-1138,7
+1140,7
@@
static int ep_poll_callback(wait_queue_entry_t *wait, unsigned mode, int sync, v
* callback. We need to be able to handle both cases here, hence the
* test for "key" != NULL before the event match test.
*/
* callback. We need to be able to handle both cases here, hence the
* test for "key" != NULL before the event match test.
*/
- if (
key && !((unsigned long) key
& epi->event.events))
+ if (
pollflags && !(pollflags
& epi->event.events))
goto out_unlock;
/*
goto out_unlock;
/*
@@
-1175,8
+1177,8
@@
static int ep_poll_callback(wait_queue_entry_t *wait, unsigned mode, int sync, v
*/
if (waitqueue_active(&ep->wq)) {
if ((epi->event.events & EPOLLEXCLUSIVE) &&
*/
if (waitqueue_active(&ep->wq)) {
if ((epi->event.events & EPOLLEXCLUSIVE) &&
- !(
(unsigned long)key
& POLLFREE)) {
- switch (
(unsigned long)key
& EPOLLINOUT_BITS) {
+ !(
pollflags
& POLLFREE)) {
+ switch (
pollflags
& EPOLLINOUT_BITS) {
case POLLIN:
if (epi->event.events & POLLIN)
ewake = 1;
case POLLIN:
if (epi->event.events & POLLIN)
ewake = 1;
@@
-1205,7
+1207,7
@@
out_unlock:
if (!(epi->event.events & EPOLLEXCLUSIVE))
ewake = 1;
if (!(epi->event.events & EPOLLEXCLUSIVE))
ewake = 1;
- if (
(unsigned long)key
& POLLFREE) {
+ if (
pollflags
& POLLFREE) {
/*
* If we race with ep_remove_wait_queue() it can miss
* ->whead = NULL and do another remove_wait_queue() after
/*
* If we race with ep_remove_wait_queue() it can miss
* ->whead = NULL and do another remove_wait_queue() after
@@
-1409,7
+1411,7
@@
static noinline void ep_destroy_wakeup_source(struct epitem *epi)
/*
* Must be called with "mtx" held.
*/
/*
* Must be called with "mtx" held.
*/
-static int ep_insert(struct eventpoll *ep, struct epoll_event *event,
+static int ep_insert(struct eventpoll *ep,
const
struct epoll_event *event,
struct file *tfile, int fd, int full_check)
{
int error, revents, pwake = 0;
struct file *tfile, int fd, int full_check)
{
int error, revents, pwake = 0;
@@
-1486,7
+1488,7
@@
static int ep_insert(struct eventpoll *ep, struct epoll_event *event,
ep_set_busy_poll_napi_id(epi);
/* If the file is already "ready" we drop it inside the ready list */
ep_set_busy_poll_napi_id(epi);
/* If the file is already "ready" we drop it inside the ready list */
- if (
(revents & event->events)
&& !ep_is_linked(&epi->rdllink)) {
+ if (
revents
&& !ep_is_linked(&epi->rdllink)) {
list_add_tail(&epi->rdllink, &ep->rdllist);
ep_pm_stay_awake(epi);
list_add_tail(&epi->rdllink, &ep->rdllist);
ep_pm_stay_awake(epi);
@@
-1540,10
+1542,10
@@
error_create_wakeup_source:
* Modify the interest event mask by dropping an event if the new mask
* has a match in the current file status. Must be called with "mtx" held.
*/
* Modify the interest event mask by dropping an event if the new mask
* has a match in the current file status. Must be called with "mtx" held.
*/
-static int ep_modify(struct eventpoll *ep, struct epitem *epi, struct epoll_event *event)
+static int ep_modify(struct eventpoll *ep, struct epitem *epi,
+ const struct epoll_event *event)
{
int pwake = 0;
{
int pwake = 0;
- unsigned int revents;
poll_table pt;
init_poll_funcptr(&pt, NULL);
poll_table pt;
init_poll_funcptr(&pt, NULL);
@@
-1585,14
+1587,10
@@
static int ep_modify(struct eventpoll *ep, struct epitem *epi, struct epoll_even
/*
* Get current event bits. We can safely use the file* here because
* its usage count has been increased by the caller of this function.
/*
* Get current event bits. We can safely use the file* here because
* its usage count has been increased by the caller of this function.
- */
- revents = ep_item_poll(epi, &pt, 1);
-
- /*
* If the item is "hot" and it is not registered inside the ready
* list, push it inside.
*/
* If the item is "hot" and it is not registered inside the ready
* list, push it inside.
*/
- if (
revents & event->events
) {
+ if (
ep_item_poll(epi, &pt, 1)
) {
spin_lock_irq(&ep->lock);
if (!ep_is_linked(&epi->rdllink)) {
list_add_tail(&epi->rdllink, &ep->rdllist);
spin_lock_irq(&ep->lock);
if (!ep_is_linked(&epi->rdllink)) {
list_add_tail(&epi->rdllink, &ep->rdllist);