linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V2] s390: Simplify the calculation of variables
@ 2022-03-28  6:19 Haowen Bai
  0 siblings, 0 replies; 5+ messages in thread
From: Haowen Bai @ 2022-03-28  6:19 UTC (permalink / raw)
  To: hca, gor, agordeev, borntraeger, svens
  Cc: linux-s390, linux-kernel, Haowen Bai

Fix the following coccicheck warnings:
./arch/s390/include/asm/scsw.h:695:47-49: WARNING
 !A || A && B is equivalent to !A || B

Signed-off-by: Haowen Bai <baihaowen@meizu.com>
---
V1->V2: fix build error

 arch/s390/include/asm/scsw.h | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/arch/s390/include/asm/scsw.h b/arch/s390/include/asm/scsw.h
index a7c3ccf..f2baac8 100644
--- a/arch/s390/include/asm/scsw.h
+++ b/arch/s390/include/asm/scsw.h
@@ -692,8 +692,7 @@ static inline int scsw_tm_is_valid_pno(union scsw *scsw)
 	return (scsw->tm.fctl != 0) &&
 	       (scsw->tm.stctl & SCSW_STCTL_STATUS_PEND) &&
 	       (!(scsw->tm.stctl & SCSW_STCTL_INTER_STATUS) ||
-		 ((scsw->tm.stctl & SCSW_STCTL_INTER_STATUS) &&
-		  (scsw->tm.actl & SCSW_ACTL_SUSPENDED)));
+	       (scsw->tm.actl & SCSW_ACTL_SUSPENDED));
 }
 
 /**
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH V2] s390: Simplify the calculation of variables
  2022-04-06 16:44     ` Peter Oberparleiter
@ 2022-04-07  2:19       ` baihaowen
  0 siblings, 0 replies; 5+ messages in thread
From: baihaowen @ 2022-04-07  2:19 UTC (permalink / raw)
  To: Peter Oberparleiter, Heiko Carstens, Vineeth Vijayan
  Cc: Vasily Gorbik, Alexander Gordeev, Christian Borntraeger,
	Sven Schnelle, linux-s390, linux-kernel

在 4/7/22 12:44 AM, Peter Oberparleiter 写道:
> On 06.04.2022 10:45, Heiko Carstens wrote:
>> On Wed, Apr 06, 2022 at 10:37:31AM +0800, Haowen Bai wrote:
>>> Fix the following coccicheck warnings:
>>> ./arch/s390/include/asm/scsw.h:695:47-49: WARNING
>>>  !A || A && B is equivalent to !A || B
>>>
>>> I apply a readable version just to get rid of a warning.
>>>
>>> Signed-off-by: Haowen Bai <baihaowen@meizu.com>
>>> ---
>>> V1->V2: apply a readable and simple version as suggestion.
>>>
>>>  arch/s390/include/asm/scsw.h | 47 ++++++++++++++++++++++++++++++--------------
>>>  1 file changed, 32 insertions(+), 15 deletions(-)
>> [full quote below]
>>
>> Vineeth, Peter, could one of you please Review and or ACK the patch
>> below?
> This patch changes scsw->cmd access to scsw->tm access, which is
> incorrect, so I cannot ACK them as is.
>
> Also I'm somewhat torn on the general question if these functions should
> be changed:
>
> - the current implementation is unreadable => change it
> - the current implementation works => keep it
> - improvement patches like this one seem to appear regularly and consume
>   time in reviewing => change it
>
> If there was a new version that really improved readability, this would
> be really welcome. The problem is that the definition of readability is
> special for these functions: each of these functions implement a
> validity check based on text from the s390 Principles of Operations
> (PoP) document [1]. "Readable" for myself would mean: I can easily
> correlate the code to the text from the PoP so that I can spot errors or
> adjust code to changed text.
>
> I'm adding some examples how that could look like below. My question to
> the original author would be, if this is something they could implement,
> or if we'd rather do that at some point in time in the future by ourselves.
>
>>> diff --git a/arch/s390/include/asm/scsw.h b/arch/s390/include/asm/scsw.h
>>> index a7c3ccf681da..b7e65f96de3c 100644
>>> --- a/arch/s390/include/asm/scsw.h
>>> +++ b/arch/s390/include/asm/scsw.h
>>> @@ -508,9 +508,13 @@ static inline int scsw_cmd_is_valid_zcc(union scsw *scsw)
>>>   */
>>>  static inline int scsw_cmd_is_valid_ectl(union scsw *scsw)
>>>  {
>>> -	return (scsw->cmd.stctl & SCSW_STCTL_STATUS_PEND) &&
>>> -	       !(scsw->cmd.stctl & SCSW_STCTL_INTER_STATUS) &&
>>> -	       (scsw->cmd.stctl & SCSW_STCTL_ALERT_STATUS);
>>> +	if (!(scsw->tm.stctl & SCSW_STCTL_STATUS_PEND))
>>> +		return 0;
>>> +	if (scsw->tm.stctl & SCSW_STCTL_INTER_STATUS)
>>> +		return 0;
>>> +	if (scsw->tm.stctl & SCSW_STCTL_ALERT_STATUS)
>>> +		return 1;
>>> +	return 0;
>>>  }
> Here's the PoP text that is the base for this function (note ECTL=E):
>
> "The E bit is meaningful whenever the subchannel is status pending with
> alert status either alone or together with primary status, secondary
> status, or both."
>
> A readable version for me would therefore contain code that can easily
> be matched against that text, e.g. something like:
>
> /* Must be status pending. */
> if (!(scsw->cmd.stctl & SCSW_STCTL_STATUS_PEND))
>   return 0;
>
> /* Must have alert status. */
> if (!(scsw->cmd.stctl & SCSW_STCTL_ALERT_STATUS))
>   return 0;
>
> /* Must be alone or together with primary, secondary or both,
>  * => no intermediate status. */
> if (scsw->cmd.stctl & SCSW_STCTL_INTER_STATUS)
>   return 0;
>
> return 1;
>
>>>  /**
>>> @@ -522,10 +526,15 @@ static inline int scsw_cmd_is_valid_ectl(union scsw *scsw)
>>>   */
>>>  static inline int scsw_cmd_is_valid_pno(union scsw *scsw)
>>>  {
>>> -	return (scsw->cmd.fctl != 0) &&
>>> -	       (scsw->cmd.stctl & SCSW_STCTL_STATUS_PEND) &&
>>> -	       (!(scsw->cmd.stctl & SCSW_STCTL_INTER_STATUS) ||
>>> -		  (scsw->cmd.actl & SCSW_ACTL_SUSPENDED));
>>> +	if (!scsw->tm.fctl)
>>> +		return 0;
>>> +	if (!(scsw->tm.stctl & SCSW_STCTL_STATUS_PEND))
>>> +		return 0;
>>> +	if (!(scsw->tm.stctl & SCSW_STCTL_INTER_STATUS))
>>> +		return 1;
>>> +	if (scsw->tm.actl & SCSW_ACTL_SUSPENDED)
>>> +		return 1;
>>> +	return 0;
>>>  }
> Here's the associated PoP text for this function (note: PNO=N)
>
> "The N bit is meaningful whenever the status-control field contains any
> of the indications listed below and at least one basic I/O function is
> also indicated at the subchannel:
> - Status pending with any combination of primary, secondary, or alert
>   status
> - Status pending alone
> - Status pending with intermediate status when the subchannel is also
>   suspended"
>
> Again a readable version could look like:
>
> /* Must indicate at least one I/O function. */
> if (!scsw->cmd.fctl)
>   return 0;
>
> /* Must be status pending. */
> if (!(scsw->cmd.stctl & SCSW_STCTL_STATUS_PEND))
>   return 0;
>
> /* Can be status pending alone, or with any combination of primary,
>  * secondary and alert => no intermediate status. */
> if (!(scsw->cmd.stctl & SCSW_STCTL_INTER_STATUS))
>   return 1;
>
> /* If intermediate, must be suspended. */
> if (scsw->cmd.actl & SCSW_ACTL_SUSPENDED)
>   return 1;
>
> return 0;
>
> The _tm_ functions below should be changed in the exact same way, while
> accessing the corresponding data fields in scsw->tm instead of scsw->cmd.
>
>>>  static inline int scsw_tm_is_valid_ectl(union scsw *scsw)
>>>  static inline int scsw_tm_is_valid_pno(union scsw *scsw)
> [1] https://www.ibm.com/support/pages/zarchitecture-principles-operation
>
Dear Peter Oberparleiter

Well done. Thank you for your kindly and professional explain what we need to do best.

-- 
Haowen Bai


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH V2] s390: Simplify the calculation of variables
  2022-04-06  8:45   ` Heiko Carstens
@ 2022-04-06 16:44     ` Peter Oberparleiter
  2022-04-07  2:19       ` baihaowen
  0 siblings, 1 reply; 5+ messages in thread
From: Peter Oberparleiter @ 2022-04-06 16:44 UTC (permalink / raw)
  To: Heiko Carstens, Haowen Bai, Vineeth Vijayan
  Cc: Vasily Gorbik, Alexander Gordeev, Christian Borntraeger,
	Sven Schnelle, linux-s390, linux-kernel

On 06.04.2022 10:45, Heiko Carstens wrote:
> On Wed, Apr 06, 2022 at 10:37:31AM +0800, Haowen Bai wrote:
>> Fix the following coccicheck warnings:
>> ./arch/s390/include/asm/scsw.h:695:47-49: WARNING
>>  !A || A && B is equivalent to !A || B
>>
>> I apply a readable version just to get rid of a warning.
>>
>> Signed-off-by: Haowen Bai <baihaowen@meizu.com>
>> ---
>> V1->V2: apply a readable and simple version as suggestion.
>>
>>  arch/s390/include/asm/scsw.h | 47 ++++++++++++++++++++++++++++++--------------
>>  1 file changed, 32 insertions(+), 15 deletions(-)
> 
> [full quote below]
> 
> Vineeth, Peter, could one of you please Review and or ACK the patch
> below?

This patch changes scsw->cmd access to scsw->tm access, which is
incorrect, so I cannot ACK them as is.

Also I'm somewhat torn on the general question if these functions should
be changed:

- the current implementation is unreadable => change it
- the current implementation works => keep it
- improvement patches like this one seem to appear regularly and consume
  time in reviewing => change it

If there was a new version that really improved readability, this would
be really welcome. The problem is that the definition of readability is
special for these functions: each of these functions implement a
validity check based on text from the s390 Principles of Operations
(PoP) document [1]. "Readable" for myself would mean: I can easily
correlate the code to the text from the PoP so that I can spot errors or
adjust code to changed text.

I'm adding some examples how that could look like below. My question to
the original author would be, if this is something they could implement,
or if we'd rather do that at some point in time in the future by ourselves.

>> diff --git a/arch/s390/include/asm/scsw.h b/arch/s390/include/asm/scsw.h
>> index a7c3ccf681da..b7e65f96de3c 100644
>> --- a/arch/s390/include/asm/scsw.h
>> +++ b/arch/s390/include/asm/scsw.h
>> @@ -508,9 +508,13 @@ static inline int scsw_cmd_is_valid_zcc(union scsw *scsw)
>>   */
>>  static inline int scsw_cmd_is_valid_ectl(union scsw *scsw)
>>  {
>> -	return (scsw->cmd.stctl & SCSW_STCTL_STATUS_PEND) &&
>> -	       !(scsw->cmd.stctl & SCSW_STCTL_INTER_STATUS) &&
>> -	       (scsw->cmd.stctl & SCSW_STCTL_ALERT_STATUS);
>> +	if (!(scsw->tm.stctl & SCSW_STCTL_STATUS_PEND))
>> +		return 0;
>> +	if (scsw->tm.stctl & SCSW_STCTL_INTER_STATUS)
>> +		return 0;
>> +	if (scsw->tm.stctl & SCSW_STCTL_ALERT_STATUS)
>> +		return 1;
>> +	return 0;
>>  }

Here's the PoP text that is the base for this function (note ECTL=E):

"The E bit is meaningful whenever the subchannel is status pending with
alert status either alone or together with primary status, secondary
status, or both."

A readable version for me would therefore contain code that can easily
be matched against that text, e.g. something like:

/* Must be status pending. */
if (!(scsw->cmd.stctl & SCSW_STCTL_STATUS_PEND))
  return 0;

/* Must have alert status. */
if (!(scsw->cmd.stctl & SCSW_STCTL_ALERT_STATUS))
  return 0;

/* Must be alone or together with primary, secondary or both,
 * => no intermediate status. */
if (scsw->cmd.stctl & SCSW_STCTL_INTER_STATUS)
  return 0;

return 1;

>>  /**
>> @@ -522,10 +526,15 @@ static inline int scsw_cmd_is_valid_ectl(union scsw *scsw)
>>   */
>>  static inline int scsw_cmd_is_valid_pno(union scsw *scsw)
>>  {
>> -	return (scsw->cmd.fctl != 0) &&
>> -	       (scsw->cmd.stctl & SCSW_STCTL_STATUS_PEND) &&
>> -	       (!(scsw->cmd.stctl & SCSW_STCTL_INTER_STATUS) ||
>> -		  (scsw->cmd.actl & SCSW_ACTL_SUSPENDED));
>> +	if (!scsw->tm.fctl)
>> +		return 0;
>> +	if (!(scsw->tm.stctl & SCSW_STCTL_STATUS_PEND))
>> +		return 0;
>> +	if (!(scsw->tm.stctl & SCSW_STCTL_INTER_STATUS))
>> +		return 1;
>> +	if (scsw->tm.actl & SCSW_ACTL_SUSPENDED)
>> +		return 1;
>> +	return 0;
>>  }

Here's the associated PoP text for this function (note: PNO=N)

"The N bit is meaningful whenever the status-control field contains any
of the indications listed below and at least one basic I/O function is
also indicated at the subchannel:
- Status pending with any combination of primary, secondary, or alert
  status
- Status pending alone
- Status pending with intermediate status when the subchannel is also
  suspended"

Again a readable version could look like:

/* Must indicate at least one I/O function. */
if (!scsw->cmd.fctl)
  return 0;

/* Must be status pending. */
if (!(scsw->cmd.stctl & SCSW_STCTL_STATUS_PEND))
  return 0;

/* Can be status pending alone, or with any combination of primary,
 * secondary and alert => no intermediate status. */
if (!(scsw->cmd.stctl & SCSW_STCTL_INTER_STATUS))
  return 1;

/* If intermediate, must be suspended. */
if (scsw->cmd.actl & SCSW_ACTL_SUSPENDED)
  return 1;

return 0;

The _tm_ functions below should be changed in the exact same way, while
accessing the corresponding data fields in scsw->tm instead of scsw->cmd.

>>  static inline int scsw_tm_is_valid_ectl(union scsw *scsw)
>>  static inline int scsw_tm_is_valid_pno(union scsw *scsw)

[1] https://www.ibm.com/support/pages/zarchitecture-principles-operation

-- 
Peter Oberparleiter
Linux on IBM Z Development - IBM Germany R&D

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH V2] s390: Simplify the calculation of variables
  2022-04-06  2:37 ` [PATCH V2] " Haowen Bai
@ 2022-04-06  8:45   ` Heiko Carstens
  2022-04-06 16:44     ` Peter Oberparleiter
  0 siblings, 1 reply; 5+ messages in thread
From: Heiko Carstens @ 2022-04-06  8:45 UTC (permalink / raw)
  To: Haowen Bai, Peter Oberparleiter, Vineeth Vijayan
  Cc: Vasily Gorbik, Alexander Gordeev, Christian Borntraeger,
	Sven Schnelle, linux-s390, linux-kernel

On Wed, Apr 06, 2022 at 10:37:31AM +0800, Haowen Bai wrote:
> Fix the following coccicheck warnings:
> ./arch/s390/include/asm/scsw.h:695:47-49: WARNING
>  !A || A && B is equivalent to !A || B
> 
> I apply a readable version just to get rid of a warning.
> 
> Signed-off-by: Haowen Bai <baihaowen@meizu.com>
> ---
> V1->V2: apply a readable and simple version as suggestion.
> 
>  arch/s390/include/asm/scsw.h | 47 ++++++++++++++++++++++++++++++--------------
>  1 file changed, 32 insertions(+), 15 deletions(-)

[full quote below]

Vineeth, Peter, could one of you please Review and or ACK the patch
below?

Thank you!

> diff --git a/arch/s390/include/asm/scsw.h b/arch/s390/include/asm/scsw.h
> index a7c3ccf681da..b7e65f96de3c 100644
> --- a/arch/s390/include/asm/scsw.h
> +++ b/arch/s390/include/asm/scsw.h
> @@ -508,9 +508,13 @@ static inline int scsw_cmd_is_valid_zcc(union scsw *scsw)
>   */
>  static inline int scsw_cmd_is_valid_ectl(union scsw *scsw)
>  {
> -	return (scsw->cmd.stctl & SCSW_STCTL_STATUS_PEND) &&
> -	       !(scsw->cmd.stctl & SCSW_STCTL_INTER_STATUS) &&
> -	       (scsw->cmd.stctl & SCSW_STCTL_ALERT_STATUS);
> +	if (!(scsw->tm.stctl & SCSW_STCTL_STATUS_PEND))
> +		return 0;
> +	if (scsw->tm.stctl & SCSW_STCTL_INTER_STATUS)
> +		return 0;
> +	if (scsw->tm.stctl & SCSW_STCTL_ALERT_STATUS)
> +		return 1;
> +	return 0;
>  }
>  
>  /**
> @@ -522,10 +526,15 @@ static inline int scsw_cmd_is_valid_ectl(union scsw *scsw)
>   */
>  static inline int scsw_cmd_is_valid_pno(union scsw *scsw)
>  {
> -	return (scsw->cmd.fctl != 0) &&
> -	       (scsw->cmd.stctl & SCSW_STCTL_STATUS_PEND) &&
> -	       (!(scsw->cmd.stctl & SCSW_STCTL_INTER_STATUS) ||
> -		  (scsw->cmd.actl & SCSW_ACTL_SUSPENDED));
> +	if (!scsw->tm.fctl)
> +		return 0;
> +	if (!(scsw->tm.stctl & SCSW_STCTL_STATUS_PEND))
> +		return 0;
> +	if (!(scsw->tm.stctl & SCSW_STCTL_INTER_STATUS))
> +		return 1;
> +	if (scsw->tm.actl & SCSW_ACTL_SUSPENDED)
> +		return 1;
> +	return 0;
>  }
>  
>  /**
> @@ -675,9 +684,13 @@ static inline int scsw_tm_is_valid_q(union scsw *scsw)
>   */
>  static inline int scsw_tm_is_valid_ectl(union scsw *scsw)
>  {
> -	return (scsw->tm.stctl & SCSW_STCTL_STATUS_PEND) &&
> -	       !(scsw->tm.stctl & SCSW_STCTL_INTER_STATUS) &&
> -	       (scsw->tm.stctl & SCSW_STCTL_ALERT_STATUS);
> +	if (!(scsw->tm.stctl & SCSW_STCTL_STATUS_PEND))
> +		return 0;
> +	if (scsw->tm.stctl & SCSW_STCTL_INTER_STATUS)
> +		return 0;
> +	if (scsw->tm.stctl & SCSW_STCTL_ALERT_STATUS)
> +		return 1;
> +	return 0;
>  }
>  
>  /**
> @@ -689,11 +702,15 @@ static inline int scsw_tm_is_valid_ectl(union scsw *scsw)
>   */
>  static inline int scsw_tm_is_valid_pno(union scsw *scsw)
>  {
> -	return (scsw->tm.fctl != 0) &&
> -	       (scsw->tm.stctl & SCSW_STCTL_STATUS_PEND) &&
> -	       (!(scsw->tm.stctl & SCSW_STCTL_INTER_STATUS) ||
> -		 ((scsw->tm.stctl & SCSW_STCTL_INTER_STATUS) &&
> -		  (scsw->tm.actl & SCSW_ACTL_SUSPENDED)));
> +	if (!scsw->tm.fctl)
> +		return 0;
> +	if (!(scsw->tm.stctl & SCSW_STCTL_STATUS_PEND))
> +		return 0;
> +	if (!(scsw->tm.stctl & SCSW_STCTL_INTER_STATUS))
> +		return 1;
> +	if (scsw->tm.actl & SCSW_ACTL_SUSPENDED)
> +		return 1;
> +	return 0;
>  }
>  
>  /**
> -- 
> 2.7.4
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH V2] s390: Simplify the calculation of variables
  2022-04-04  9:10 [PATCH] " Heiko Carstens
@ 2022-04-06  2:37 ` Haowen Bai
  2022-04-06  8:45   ` Heiko Carstens
  0 siblings, 1 reply; 5+ messages in thread
From: Haowen Bai @ 2022-04-06  2:37 UTC (permalink / raw)
  To: Heiko Carstens, Vasily Gorbik, Alexander Gordeev,
	Christian Borntraeger, Sven Schnelle
  Cc: Haowen Bai, linux-s390, linux-kernel

Fix the following coccicheck warnings:
./arch/s390/include/asm/scsw.h:695:47-49: WARNING
 !A || A && B is equivalent to !A || B

I apply a readable version just to get rid of a warning.

Signed-off-by: Haowen Bai <baihaowen@meizu.com>
---
V1->V2: apply a readable and simple version as suggestion.

 arch/s390/include/asm/scsw.h | 47 ++++++++++++++++++++++++++++++--------------
 1 file changed, 32 insertions(+), 15 deletions(-)

diff --git a/arch/s390/include/asm/scsw.h b/arch/s390/include/asm/scsw.h
index a7c3ccf681da..b7e65f96de3c 100644
--- a/arch/s390/include/asm/scsw.h
+++ b/arch/s390/include/asm/scsw.h
@@ -508,9 +508,13 @@ static inline int scsw_cmd_is_valid_zcc(union scsw *scsw)
  */
 static inline int scsw_cmd_is_valid_ectl(union scsw *scsw)
 {
-	return (scsw->cmd.stctl & SCSW_STCTL_STATUS_PEND) &&
-	       !(scsw->cmd.stctl & SCSW_STCTL_INTER_STATUS) &&
-	       (scsw->cmd.stctl & SCSW_STCTL_ALERT_STATUS);
+	if (!(scsw->tm.stctl & SCSW_STCTL_STATUS_PEND))
+		return 0;
+	if (scsw->tm.stctl & SCSW_STCTL_INTER_STATUS)
+		return 0;
+	if (scsw->tm.stctl & SCSW_STCTL_ALERT_STATUS)
+		return 1;
+	return 0;
 }
 
 /**
@@ -522,10 +526,15 @@ static inline int scsw_cmd_is_valid_ectl(union scsw *scsw)
  */
 static inline int scsw_cmd_is_valid_pno(union scsw *scsw)
 {
-	return (scsw->cmd.fctl != 0) &&
-	       (scsw->cmd.stctl & SCSW_STCTL_STATUS_PEND) &&
-	       (!(scsw->cmd.stctl & SCSW_STCTL_INTER_STATUS) ||
-		  (scsw->cmd.actl & SCSW_ACTL_SUSPENDED));
+	if (!scsw->tm.fctl)
+		return 0;
+	if (!(scsw->tm.stctl & SCSW_STCTL_STATUS_PEND))
+		return 0;
+	if (!(scsw->tm.stctl & SCSW_STCTL_INTER_STATUS))
+		return 1;
+	if (scsw->tm.actl & SCSW_ACTL_SUSPENDED)
+		return 1;
+	return 0;
 }
 
 /**
@@ -675,9 +684,13 @@ static inline int scsw_tm_is_valid_q(union scsw *scsw)
  */
 static inline int scsw_tm_is_valid_ectl(union scsw *scsw)
 {
-	return (scsw->tm.stctl & SCSW_STCTL_STATUS_PEND) &&
-	       !(scsw->tm.stctl & SCSW_STCTL_INTER_STATUS) &&
-	       (scsw->tm.stctl & SCSW_STCTL_ALERT_STATUS);
+	if (!(scsw->tm.stctl & SCSW_STCTL_STATUS_PEND))
+		return 0;
+	if (scsw->tm.stctl & SCSW_STCTL_INTER_STATUS)
+		return 0;
+	if (scsw->tm.stctl & SCSW_STCTL_ALERT_STATUS)
+		return 1;
+	return 0;
 }
 
 /**
@@ -689,11 +702,15 @@ static inline int scsw_tm_is_valid_ectl(union scsw *scsw)
  */
 static inline int scsw_tm_is_valid_pno(union scsw *scsw)
 {
-	return (scsw->tm.fctl != 0) &&
-	       (scsw->tm.stctl & SCSW_STCTL_STATUS_PEND) &&
-	       (!(scsw->tm.stctl & SCSW_STCTL_INTER_STATUS) ||
-		 ((scsw->tm.stctl & SCSW_STCTL_INTER_STATUS) &&
-		  (scsw->tm.actl & SCSW_ACTL_SUSPENDED)));
+	if (!scsw->tm.fctl)
+		return 0;
+	if (!(scsw->tm.stctl & SCSW_STCTL_STATUS_PEND))
+		return 0;
+	if (!(scsw->tm.stctl & SCSW_STCTL_INTER_STATUS))
+		return 1;
+	if (scsw->tm.actl & SCSW_ACTL_SUSPENDED)
+		return 1;
+	return 0;
 }
 
 /**
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-04-07  2:19 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-28  6:19 [PATCH V2] s390: Simplify the calculation of variables Haowen Bai
2022-04-04  9:10 [PATCH] " Heiko Carstens
2022-04-06  2:37 ` [PATCH V2] " Haowen Bai
2022-04-06  8:45   ` Heiko Carstens
2022-04-06 16:44     ` Peter Oberparleiter
2022-04-07  2:19       ` baihaowen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).