bool    (*validate_data)(struct sctp_chunk *chunk);
        int     (*ulpevent_data)(struct sctp_ulpq *ulpq,
                                 struct sctp_chunk *chunk, gfp_t gfp);
+       int     (*enqueue_event)(struct sctp_ulpq *ulpq,
+                                struct sctp_ulpevent *event);
 };
 
 void sctp_stream_interleave_init(struct sctp_stream *stream);
 
                event = sctp_ulpevent_make_peer_addr_change(asoc, &addr,
                                        0, spc_state, error, GFP_ATOMIC);
                if (event)
-                       sctp_ulpq_tail_event(&asoc->ulpq, event);
+                       asoc->stream.si->enqueue_event(&asoc->ulpq, event);
        }
 
        /* Select new active and retran paths. */
 
                        ev = sctp_ulpevent_make_send_failed(asoc, chunk, sent,
                                                            error, GFP_ATOMIC);
                        if (ev)
-                               sctp_ulpq_tail_event(&asoc->ulpq, ev);
+                               asoc->stream.si->enqueue_event(&asoc->ulpq, ev);
                }
 
                sctp_chunk_put(chunk);
 
                if (!ev)
                        return;
 
-               sctp_ulpq_tail_event(&asoc->ulpq, ev);
+               asoc->stream.si->enqueue_event(&asoc->ulpq, ev);
 
                switch (err_hdr->cause) {
                case SCTP_ERROR_UNKNOWN_CHUNK:
                                            asoc->c.sinit_max_instreams,
                                            NULL, GFP_ATOMIC);
        if (ev)
-               sctp_ulpq_tail_event(&asoc->ulpq, ev);
+               asoc->stream.si->enqueue_event(&asoc->ulpq, ev);
 }
 
 /* Helper function to generate an adaptation indication event */
        ev = sctp_ulpevent_make_adaptation_indication(asoc, GFP_ATOMIC);
 
        if (ev)
-               sctp_ulpq_tail_event(&asoc->ulpq, ev);
+               asoc->stream.si->enqueue_event(&asoc->ulpq, ev);
 }
 
 
                        pr_debug("%s: sm_sideff: event_up:%p, ulpq:%p\n",
                                 __func__, cmd->obj.ulpevent, &asoc->ulpq);
 
-                       sctp_ulpq_tail_event(&asoc->ulpq, cmd->obj.ulpevent);
+                       asoc->stream.si->enqueue_event(&asoc->ulpq,
+                                                      cmd->obj.ulpevent);
                        break;
 
                case SCTP_CMD_REPLY:
 
                        if (!event)
                                return -ENOMEM;
 
-                       sctp_ulpq_tail_event(&asoc->ulpq, event);
+                       asoc->stream.si->enqueue_event(&asoc->ulpq, event);
                }
        }
 
 
        .assign_number          = sctp_chunk_assign_ssn,
        .validate_data          = sctp_validate_data,
        .ulpevent_data          = sctp_ulpq_tail_data,
+       .enqueue_event          = sctp_ulpq_tail_event,
 };
 
 static struct sctp_stream_interleave sctp_stream_interleave_1 = {
        .assign_number          = sctp_chunk_assign_mid,
        .validate_data          = sctp_validate_idata,
        .ulpevent_data          = sctp_ulpevent_idata,
+       .enqueue_event          = sctp_enqueue_event,
 };
 
 void sctp_stream_interleave_init(struct sctp_stream *stream)