[Skiboot] [PATCH v3 04/10] opal-msg: Enhance opal-get-msg API
    Jeremy Kerr 
    jk at ozlabs.org
       
    Thu May 16 16:51:30 AEST 2019
    
    
  
Hi Vasant,
> - If buffer size < actual message size, then opal_get_msg will copy
> partial data and return OPAL_PARTIAL to Linux.
This sounds a little dangerous, but I'm sure you had a good reason for
that (rather than dropping the message). Could you remind me of that?
> - Add new variable "extended" to "opal_msg_entry" structure to keep
> track of messages that has more than 64byte data. We will allocate
> separate memory for these messages and once kernel consumes message we
> will release that memory.
OK, that scheme sounds good.
> +	if (params_size > OPAL_MSG_FIXED_PARAMS_SIZE) {
> +		entry_size = sizeof(struct opal_msg_entry) + params_size;
> +		entry_size -= OPAL_MSG_FIXED_PARAMS_SIZE;
> +		entry = zalloc(entry_size);
>
Can we set entry->extended here ...
> +	} else {
> +		entry = list_pop(&msg_free_list, struct opal_msg_entry, link);
>  		if (!entry) {
> -			prerror("Allocation failed\n");
> -			unlock(&opal_msg_lock);
> -			return OPAL_RESOURCE;
> +			prerror("No available node in the free list, allocating\n");
> +			entry = zalloc(sizeof(struct opal_msg_entry));
>  		}
>
>  	}
> +	if (!entry) {
> +		prerror("Allocation failed\n");
> +		unlock(&opal_msg_lock);
> +		return OPAL_RESOURCE;
> +	}
>  
>  	entry->consumed = consumed;
>  	entry->data = data;
>  	entry->msg.msg_type = cpu_to_be32(msg_type);
> -
> -	if (params_size > OPAL_MSG_FIXED_PARAMS_SIZE) {
> -		prerror("Discarding extra parameters\n");
> -		params_size = OPAL_MSG_FIXED_PARAMS_SIZE;
> -	}
> +	entry->msg.size = cpu_to_be32(params_size);
>  	memcpy(entry->msg.params, params, params_size);
>  
> +	if (params_size > OPAL_MSG_FIXED_PARAMS_SIZE)
> +		entry->extended = true;
... rather than here, so that it's more obvious that ->extended is
correlated to the allocation we've just used. I don't want us to miss
that in a future change, as it'll result in a silent memory leak.
With that changed:
Acked-by: Jeremy Kerr <jk at ozlabs.org>
Cheers,
Jeremy
    
    
More information about the Skiboot
mailing list