#define SO_LOCK_FILTER         44
 
+#define SO_SELECT_ERR_QUEUE    45
+
 #endif /* _UAPI_ASM_SOCKET_H */
 
 
 #define SO_LOCK_FILTER         44
 
+#define SO_SELECT_ERR_QUEUE    45
+
 #endif /* __ASM_AVR32_SOCKET_H */
 
 
 #define SO_LOCK_FILTER         44
 
+#define SO_SELECT_ERR_QUEUE    45
+
 #endif /* _ASM_SOCKET_H */
 
 
 
 
 #define SO_LOCK_FILTER         44
 
+#define SO_SELECT_ERR_QUEUE    45
+
 #endif /* _ASM_SOCKET_H */
 
 
 
 #define SO_LOCK_FILTER         44
 
+#define SO_SELECT_ERR_QUEUE    45
+
 #endif /* _ASM_SOCKET_H */
 
 
 #define SO_LOCK_FILTER         44
 
+#define SO_SELECT_ERR_QUEUE    45
+
 #endif /* _ASM_IA64_SOCKET_H */
 
 
 #define SO_LOCK_FILTER         44
 
+#define SO_SELECT_ERR_QUEUE    45
+
 #endif /* _ASM_M32R_SOCKET_H */
 
 
 #define SO_LOCK_FILTER         44
 
+#define SO_SELECT_ERR_QUEUE    45
+
 #endif /* _UAPI_ASM_SOCKET_H */
 
 
 #define SO_LOCK_FILTER         44
 
+#define SO_SELECT_ERR_QUEUE    45
+
 #endif /* _ASM_SOCKET_H */
 
 
 #define SO_LOCK_FILTER         0x4025
 
+#define SO_SELECT_ERR_QUEUE    0x4026
+
 /* O_NONBLOCK clashes with the bits used for socket types.  Therefore we
  * have to define SOCK_NONBLOCK to a different value here.
  */
 
 
 #define SO_LOCK_FILTER         44
 
+#define SO_SELECT_ERR_QUEUE    45
+
 #endif /* _ASM_POWERPC_SOCKET_H */
 
 
 #define SO_LOCK_FILTER         44
 
+#define SO_SELECT_ERR_QUEUE    45
+
 #endif /* _ASM_SOCKET_H */
 
 
 #define SO_LOCK_FILTER         0x0028
 
+#define SO_SELECT_ERR_QUEUE    0x0029
+
 /* Security levels - as per NRL IPv6 - don't actually do anything */
 #define SO_SECURITY_AUTHENTICATION             0x5001
 #define SO_SECURITY_ENCRYPTION_TRANSPORT       0x5002
 
 
 #define SO_LOCK_FILTER         44
 
+#define SO_SELECT_ERR_QUEUE    45
+
 #endif /* _XTENSA_SOCKET_H */
 
                     * user-space instead.
                     */
        SOCK_FILTER_LOCKED, /* Filter cannot be changed anymore */
+       SOCK_SELECT_ERR_QUEUE, /* Wake select on error queue */
 };
 
 static inline void sock_copy_flags(struct sock *nsk, struct sock *osk)
 
 
 #define SO_LOCK_FILTER         44
 
+#define SO_SELECT_ERR_QUEUE    45
+
 #endif /* __ASM_GENERIC_SOCKET_H */
 
                return bt_accept_poll(sk);
 
        if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue))
-               mask |= POLLERR;
+               mask |= POLLERR |
+                       sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? POLLPRI : 0;
 
        if (sk->sk_shutdown & RCV_SHUTDOWN)
                mask |= POLLRDHUP | POLLIN | POLLRDNORM;
 
 
        /* exceptional events? */
        if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue))
-               mask |= POLLERR;
+               mask |= POLLERR |
+                       sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? POLLPRI : 0;
+
        if (sk->sk_shutdown & RCV_SHUTDOWN)
                mask |= POLLRDHUP | POLLIN | POLLRDNORM;
        if (sk->sk_shutdown == SHUTDOWN_MASK)
 
                sock_valbool_flag(sk, SOCK_NOFCS, valbool);
                break;
 
+       case SO_SELECT_ERR_QUEUE:
+               sock_valbool_flag(sk, SOCK_SELECT_ERR_QUEUE, valbool);
+               break;
+
        default:
                ret = -ENOPROTOOPT;
                break;
                v.val = sock_flag(sk, SOCK_FILTER_LOCKED);
                break;
 
+       case SO_SELECT_ERR_QUEUE:
+               v.val = sock_flag(sk, SOCK_SELECT_ERR_QUEUE);
+               break;
+
        default:
                return -ENOPROTOOPT;
        }
 
                return iucv_accept_poll(sk);
 
        if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue))
-               mask |= POLLERR;
+               mask |= POLLERR |
+                       sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? POLLPRI : 0;
 
        if (sk->sk_shutdown & RCV_SHUTDOWN)
                mask |= POLLRDHUP;
 
                return llcp_accept_poll(sk);
 
        if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue))
-               mask |= POLLERR;
+               mask |= POLLERR |
+                       sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? POLLPRI : 0;
 
        if (!skb_queue_empty(&sk->sk_receive_queue))
                mask |= POLLIN | POLLRDNORM;
 
 
        /* Is there any exceptional events?  */
        if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue))
-               mask |= POLLERR;
+               mask |= POLLERR |
+                       sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? POLLPRI : 0;
        if (sk->sk_shutdown & RCV_SHUTDOWN)
                mask |= POLLRDHUP | POLLIN | POLLRDNORM;
        if (sk->sk_shutdown == SHUTDOWN_MASK)
 
 
        /* exceptional events? */
        if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue))
-               mask |= POLLERR;
+               mask |= POLLERR |
+                       sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? POLLPRI : 0;
+
        if (sk->sk_shutdown & RCV_SHUTDOWN)
                mask |= POLLRDHUP | POLLIN | POLLRDNORM;
        if (sk->sk_shutdown == SHUTDOWN_MASK)