@@ -1294,8 +1294,15 @@ static int ufshcd_devfreq_target(struct device *dev,
12941294 }
12951295 spin_unlock_irqrestore (hba -> host -> host_lock , irq_flags );
12961296
1297+ pm_runtime_get_noresume (hba -> dev );
1298+ if (!pm_runtime_active (hba -> dev )) {
1299+ pm_runtime_put_noidle (hba -> dev );
1300+ ret = - EAGAIN ;
1301+ goto out ;
1302+ }
12971303 start = ktime_get ();
12981304 ret = ufshcd_devfreq_scale (hba , scale_up );
1305+ pm_runtime_put (hba -> dev );
12991306
13001307 trace_ufshcd_profile_clk_scaling (dev_name (hba -> dev ),
13011308 (scale_up ? "up" : "down" ),
@@ -3192,13 +3199,19 @@ int ufshcd_read_desc_param(struct ufs_hba *hba,
31923199 /* Get the length of descriptor */
31933200 ufshcd_map_desc_id_to_length (hba , desc_id , & buff_len );
31943201 if (!buff_len ) {
3195- dev_err (hba -> dev , "%s: Failed to get desc length" , __func__ );
3202+ dev_err (hba -> dev , "%s: Failed to get desc length\n" , __func__ );
3203+ return - EINVAL ;
3204+ }
3205+
3206+ if (param_offset >= buff_len ) {
3207+ dev_err (hba -> dev , "%s: Invalid offset 0x%x in descriptor IDN 0x%x, length 0x%x\n" ,
3208+ __func__ , param_offset , desc_id , buff_len );
31963209 return - EINVAL ;
31973210 }
31983211
31993212 /* Check whether we need temp memory */
32003213 if (param_offset != 0 || param_size < buff_len ) {
3201- desc_buf = kmalloc (buff_len , GFP_KERNEL );
3214+ desc_buf = kzalloc (buff_len , GFP_KERNEL );
32023215 if (!desc_buf )
32033216 return - ENOMEM ;
32043217 } else {
@@ -3212,14 +3225,14 @@ int ufshcd_read_desc_param(struct ufs_hba *hba,
32123225 desc_buf , & buff_len );
32133226
32143227 if (ret ) {
3215- dev_err (hba -> dev , "%s: Failed reading descriptor. desc_id %d, desc_index %d, param_offset %d, ret %d" ,
3228+ dev_err (hba -> dev , "%s: Failed reading descriptor. desc_id %d, desc_index %d, param_offset %d, ret %d\n " ,
32163229 __func__ , desc_id , desc_index , param_offset , ret );
32173230 goto out ;
32183231 }
32193232
32203233 /* Sanity check */
32213234 if (desc_buf [QUERY_DESC_DESC_TYPE_OFFSET ] != desc_id ) {
3222- dev_err (hba -> dev , "%s: invalid desc_id %d in descriptor header" ,
3235+ dev_err (hba -> dev , "%s: invalid desc_id %d in descriptor header\n " ,
32233236 __func__ , desc_buf [QUERY_DESC_DESC_TYPE_OFFSET ]);
32243237 ret = - EINVAL ;
32253238 goto out ;
@@ -3229,12 +3242,12 @@ int ufshcd_read_desc_param(struct ufs_hba *hba,
32293242 buff_len = desc_buf [QUERY_DESC_LENGTH_OFFSET ];
32303243 ufshcd_update_desc_length (hba , desc_id , desc_index , buff_len );
32313244
3232- /* Check wherher we will not copy more data, than available */
3233- if (is_kmalloc && (param_offset + param_size ) > buff_len )
3234- param_size = buff_len - param_offset ;
3235-
3236- if (is_kmalloc )
3245+ if (is_kmalloc ) {
3246+ /* Make sure we don't copy more data than available */
3247+ if (param_offset + param_size > buff_len )
3248+ param_size = buff_len - param_offset ;
32373249 memcpy (param_read_buf , & desc_buf [param_offset ], param_size );
3250+ }
32383251out :
32393252 if (is_kmalloc )
32403253 kfree (desc_buf );
@@ -8900,11 +8913,7 @@ int ufshcd_shutdown(struct ufs_hba *hba)
89008913 if (ufshcd_is_ufs_dev_poweroff (hba ) && ufshcd_is_link_off (hba ))
89018914 goto out ;
89028915
8903- if (pm_runtime_suspended (hba -> dev )) {
8904- ret = ufshcd_runtime_resume (hba );
8905- if (ret )
8906- goto out ;
8907- }
8916+ pm_runtime_get_sync (hba -> dev );
89088917
89098918 ret = ufshcd_suspend (hba , UFS_SHUTDOWN_PM );
89108919out :
0 commit comments