@@ -71,45 +71,77 @@ static int mhi_ep_send_event(struct mhi_ep_cntrl *mhi_cntrl, u32 ring_idx,
71
71
static int mhi_ep_send_completion_event (struct mhi_ep_cntrl * mhi_cntrl , struct mhi_ep_ring * ring ,
72
72
struct mhi_ring_element * tre , u32 len , enum mhi_ev_ccs code )
73
73
{
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 ;
75
80
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 );
79
84
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 ;
81
89
}
82
90
83
91
int mhi_ep_send_state_change_event (struct mhi_ep_cntrl * mhi_cntrl , enum mhi_state state )
84
92
{
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 ;
86
99
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 );
89
102
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 ;
91
107
}
92
108
93
109
int mhi_ep_send_ee_event (struct mhi_ep_cntrl * mhi_cntrl , enum mhi_ee_type exec_env )
94
110
{
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 ;
96
117
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 );
99
120
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 ;
101
125
}
102
126
103
127
static int mhi_ep_send_cmd_comp_event (struct mhi_ep_cntrl * mhi_cntrl , enum mhi_ev_ccs code )
104
128
{
105
129
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 ;
107
136
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 );
111
140
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 ;
113
145
}
114
146
115
147
static int mhi_ep_process_cmd_ring (struct mhi_ep_ring * ring , struct mhi_ring_element * el )
0 commit comments