diff mbox series

ACPI / APEI: Remove needless __ghes_check_estatus() calls

Message ID 1560749129-26288-1-git-send-email-zhangliguang@linux.alibaba.com
State Changes Requested, archived
Headers show
Series ACPI / APEI: Remove needless __ghes_check_estatus() calls | expand

Commit Message

Liguang Zhang June 17, 2019, 5:25 a.m. UTC
Function __ghes_check_estatus() is called after __ghes_peek_estatus(),
but it is already called in __ghes_peek_estatus(). So we should remove
some needless __ghes_check_estatus() calls.

Signed-off-by: Liguang Zhang <zhangliguang@linux.alibaba.com>
---
 drivers/acpi/apei/ghes.c | 10 ----------
 1 file changed, 10 deletions(-)

Comments

Borislav Petkov June 21, 2019, 3:18 p.m. UTC | #1
On Mon, Jun 17, 2019 at 01:25:29PM +0800, luanshi wrote:
> Function __ghes_check_estatus() is called after __ghes_peek_estatus(),
> but it is already called in __ghes_peek_estatus(). So we should remove
> some needless __ghes_check_estatus() calls.
> 
> Signed-off-by: Liguang Zhang <zhangliguang@linux.alibaba.com>
> ---
>  drivers/acpi/apei/ghes.c | 10 ----------
>  1 file changed, 10 deletions(-)
> 
> diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c
> index 993940d..1041a4d 100644
> --- a/drivers/acpi/apei/ghes.c
> +++ b/drivers/acpi/apei/ghes.c
> @@ -372,10 +372,6 @@ static int ghes_read_estatus(struct ghes *ghes,
>  	if (rc)
>  		return rc;
>  
> -	rc = __ghes_check_estatus(ghes, estatus);
> -	if (rc)
> -		return rc;
> -
>  	return __ghes_read_estatus(estatus, *buf_paddr, fixmap_idx,
>  				   cper_estatus_len(estatus));
>  }
> @@ -882,12 +878,6 @@ static int ghes_in_nmi_queue_one_entry(struct ghes *ghes,
>  		return rc;
>  	}
>  
> -	rc = __ghes_check_estatus(ghes, &tmp_header);
> -	if (rc) {
> -		ghes_clear_estatus(ghes, &tmp_header, buf_paddr, fixmap_idx);
> -		return rc;
> -	}
> -
>  	len = cper_estatus_len(&tmp_header);
>  	node_len = GHES_ESTATUS_NODE_LEN(len);
>  	estatus_node = (void *)gen_pool_alloc(ghes_estatus_pool, node_len);
> -- 

Yah, looks correct to me.

James, I think the cleaner thing to do would be for
__ghes_peek_estatus() not to call __ghes_check_estatus() at the end but
to return success and we can keep the two functions - "peek" and "check"
status - separate and always do:

	if (peek)
		return ...;

	if (check)
		return ...;

because this way the checking remains separate in __ghes_check_estatus()
and so is the peeking in __ghes_peek_estatus().

We can merge the two functions because we always do peek and then check
but keeping them separate makes the code clearer.

Am I making some sense...?

Thx.
James Morse June 24, 2019, 5:32 p.m. UTC | #2
Hi Boris,

On 21/06/2019 16:18, Borislav Petkov wrote:
> On Mon, Jun 17, 2019 at 01:25:29PM +0800, luanshi wrote:
>> Function __ghes_check_estatus() is called after __ghes_peek_estatus(),
>> but it is already called in __ghes_peek_estatus(). So we should remove

>> diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c
>> index 993940d..1041a4d 100644
>> --- a/drivers/acpi/apei/ghes.c
>> +++ b/drivers/acpi/apei/ghes.c
>> @@ -372,10 +372,6 @@ static int ghes_read_estatus(struct ghes *ghes,
>>  	if (rc)
>>  		return rc;
>>  
>> -	rc = __ghes_check_estatus(ghes, estatus);
>> -	if (rc)
>> -		return rc;
>> -
>>  	return __ghes_read_estatus(estatus, *buf_paddr, fixmap_idx,
>>  				   cper_estatus_len(estatus));
>>  }
>> @@ -882,12 +878,6 @@ static int ghes_in_nmi_queue_one_entry(struct ghes *ghes,
>>  		return rc;
>>  	}
>>  
>> -	rc = __ghes_check_estatus(ghes, &tmp_header);
>> -	if (rc) {
>> -		ghes_clear_estatus(ghes, &tmp_header, buf_paddr, fixmap_idx);
>> -		return rc;
>> -	}
>> -
>>  	len = cper_estatus_len(&tmp_header);
>>  	node_len = GHES_ESTATUS_NODE_LEN(len);
>>  	estatus_node = (void *)gen_pool_alloc(ghes_estatus_pool, node_len);
>> -- 
> 
> Yah, looks correct to me.

Yes, looks like I changed my mind halfway through about whether peek should just get the
values needed to allocate 'enough' memory, or do some validation too.


> James, I think the cleaner thing to do would be for
> __ghes_peek_estatus() not to call __ghes_check_estatus() at the end but
> to return success and we can keep the two functions - "peek" and "check"
> status - separate and always do:
> 
> 	if (peek)
> 		return ...;
> 
> 	if (check)
> 		return ...;
> 
> because this way the checking remains separate in __ghes_check_estatus()
> and so is the peeking in __ghes_peek_estatus().
> 
> We can merge the two functions because we always do peek and then check
> but keeping them separate makes the code clearer.
> 
> Am I making some sense...?

Makes sense to me.


Thanks,

James
diff mbox series

Patch

diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c
index 993940d..1041a4d 100644
--- a/drivers/acpi/apei/ghes.c
+++ b/drivers/acpi/apei/ghes.c
@@ -372,10 +372,6 @@  static int ghes_read_estatus(struct ghes *ghes,
 	if (rc)
 		return rc;
 
-	rc = __ghes_check_estatus(ghes, estatus);
-	if (rc)
-		return rc;
-
 	return __ghes_read_estatus(estatus, *buf_paddr, fixmap_idx,
 				   cper_estatus_len(estatus));
 }
@@ -882,12 +878,6 @@  static int ghes_in_nmi_queue_one_entry(struct ghes *ghes,
 		return rc;
 	}
 
-	rc = __ghes_check_estatus(ghes, &tmp_header);
-	if (rc) {
-		ghes_clear_estatus(ghes, &tmp_header, buf_paddr, fixmap_idx);
-		return rc;
-	}
-
 	len = cper_estatus_len(&tmp_header);
 	node_len = GHES_ESTATUS_NODE_LEN(len);
 	estatus_node = (void *)gen_pool_alloc(ghes_estatus_pool, node_len);