@@ -71,45 +71,77 @@ static int mhi_ep_send_event(struct mhi_ep_cntrl *mhi_cntrl, u32 ring_idx,
7171static int mhi_ep_send_completion_event (struct mhi_ep_cntrl * mhi_cntrl , struct mhi_ep_ring * ring ,
7272 struct mhi_ring_element * tre , u32 len , enum mhi_ev_ccs code )
7373{
74- struct mhi_ring_element event = {};
74+ struct mhi_ring_element * event ;
75+ int ret ;
76+
77+ event = kzalloc (sizeof (struct mhi_ring_element ), GFP_KERNEL );
78+ if (!event )
79+ return - ENOMEM ;
7580
76- event . ptr = cpu_to_le64 (ring -> rbase + ring -> rd_offset * sizeof (* tre ));
77- event . dword [0 ] = MHI_TRE_EV_DWORD0 (code , len );
78- event . dword [1 ] = MHI_TRE_EV_DWORD1 (ring -> ch_id , MHI_PKT_TYPE_TX_EVENT );
81+ event -> ptr = cpu_to_le64 (ring -> rbase + ring -> rd_offset * sizeof (* tre ));
82+ event -> dword [0 ] = MHI_TRE_EV_DWORD0 (code , len );
83+ event -> dword [1 ] = MHI_TRE_EV_DWORD1 (ring -> ch_id , MHI_PKT_TYPE_TX_EVENT );
7984
80- return mhi_ep_send_event (mhi_cntrl , ring -> er_index , & event , MHI_TRE_DATA_GET_BEI (tre ));
85+ ret = mhi_ep_send_event (mhi_cntrl , ring -> er_index , event , MHI_TRE_DATA_GET_BEI (tre ));
86+ kfree (event );
87+
88+ return ret ;
8189}
8290
8391int mhi_ep_send_state_change_event (struct mhi_ep_cntrl * mhi_cntrl , enum mhi_state state )
8492{
85- struct mhi_ring_element event = {};
93+ struct mhi_ring_element * event ;
94+ int ret ;
95+
96+ event = kzalloc (sizeof (struct mhi_ring_element ), GFP_KERNEL );
97+ if (!event )
98+ return - ENOMEM ;
8699
87- event . dword [0 ] = MHI_SC_EV_DWORD0 (state );
88- event . dword [1 ] = MHI_SC_EV_DWORD1 (MHI_PKT_TYPE_STATE_CHANGE_EVENT );
100+ event -> dword [0 ] = MHI_SC_EV_DWORD0 (state );
101+ event -> dword [1 ] = MHI_SC_EV_DWORD1 (MHI_PKT_TYPE_STATE_CHANGE_EVENT );
89102
90- return mhi_ep_send_event (mhi_cntrl , 0 , & event , 0 );
103+ ret = mhi_ep_send_event (mhi_cntrl , 0 , event , 0 );
104+ kfree (event );
105+
106+ return ret ;
91107}
92108
93109int mhi_ep_send_ee_event (struct mhi_ep_cntrl * mhi_cntrl , enum mhi_ee_type exec_env )
94110{
95- struct mhi_ring_element event = {};
111+ struct mhi_ring_element * event ;
112+ int ret ;
113+
114+ event = kzalloc (sizeof (struct mhi_ring_element ), GFP_KERNEL );
115+ if (!event )
116+ return - ENOMEM ;
96117
97- event . dword [0 ] = MHI_EE_EV_DWORD0 (exec_env );
98- event . dword [1 ] = MHI_SC_EV_DWORD1 (MHI_PKT_TYPE_EE_EVENT );
118+ event -> dword [0 ] = MHI_EE_EV_DWORD0 (exec_env );
119+ event -> dword [1 ] = MHI_SC_EV_DWORD1 (MHI_PKT_TYPE_EE_EVENT );
99120
100- return mhi_ep_send_event (mhi_cntrl , 0 , & event , 0 );
121+ ret = mhi_ep_send_event (mhi_cntrl , 0 , event , 0 );
122+ kfree (event );
123+
124+ return ret ;
101125}
102126
103127static int mhi_ep_send_cmd_comp_event (struct mhi_ep_cntrl * mhi_cntrl , enum mhi_ev_ccs code )
104128{
105129 struct mhi_ep_ring * ring = & mhi_cntrl -> mhi_cmd -> ring ;
106- struct mhi_ring_element event = {};
130+ struct mhi_ring_element * event ;
131+ int ret ;
132+
133+ event = kzalloc (sizeof (struct mhi_ring_element ), GFP_KERNEL );
134+ if (!event )
135+ return - ENOMEM ;
107136
108- event . ptr = cpu_to_le64 (ring -> rbase + ring -> rd_offset * sizeof (struct mhi_ring_element ));
109- event . dword [0 ] = MHI_CC_EV_DWORD0 (code );
110- event . dword [1 ] = MHI_CC_EV_DWORD1 (MHI_PKT_TYPE_CMD_COMPLETION_EVENT );
137+ event -> ptr = cpu_to_le64 (ring -> rbase + ring -> rd_offset * sizeof (struct mhi_ring_element ));
138+ event -> dword [0 ] = MHI_CC_EV_DWORD0 (code );
139+ event -> dword [1 ] = MHI_CC_EV_DWORD1 (MHI_PKT_TYPE_CMD_COMPLETION_EVENT );
111140
112- return mhi_ep_send_event (mhi_cntrl , 0 , & event , 0 );
141+ ret = mhi_ep_send_event (mhi_cntrl , 0 , event , 0 );
142+ kfree (event );
143+
144+ return ret ;
113145}
114146
115147static int mhi_ep_process_cmd_ring (struct mhi_ep_ring * ring , struct mhi_ring_element * el )
0 commit comments