Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit acf1c02f authored by Russell King's avatar Russell King Committed by David S. Miller
Browse files

sfp: fix RX_LOS signal handling



The options word is a be16 quantity, so we need to test the flags
having converted the endian-ness.  Convert the flag bits to be16,
which can be optimised by the compiler, rather than converting a
variable at runtime.

Reported-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a0da456b
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -355,7 +355,7 @@ static void sfp_sm_link_check_los(struct sfp *sfp)
	 * SFP_OPTIONS_LOS_NORMAL are set?  For now, we assume
	 * the same as SFP_OPTIONS_LOS_NORMAL set.
	 */
	if (sfp->id.ext.options & SFP_OPTIONS_LOS_INVERTED)
	if (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_INVERTED))
		los ^= SFP_F_LOS;

	if (los)
@@ -582,7 +582,8 @@ static void sfp_sm_event(struct sfp *sfp, unsigned int event)
		if (event == SFP_E_TX_FAULT)
			sfp_sm_fault(sfp, true);
		else if (event ==
			 (sfp->id.ext.options & SFP_OPTIONS_LOS_INVERTED ?
			 (sfp->id.ext.options &
			  cpu_to_be16(SFP_OPTIONS_LOS_INVERTED) ?
			  SFP_E_LOS_HIGH : SFP_E_LOS_LOW))
			sfp_sm_link_up(sfp);
		break;
@@ -592,7 +593,8 @@ static void sfp_sm_event(struct sfp *sfp, unsigned int event)
			sfp_sm_link_down(sfp);
			sfp_sm_fault(sfp, true);
		} else if (event ==
			   (sfp->id.ext.options & SFP_OPTIONS_LOS_INVERTED ?
			   (sfp->id.ext.options &
			    cpu_to_be16(SFP_OPTIONS_LOS_INVERTED) ?
			    SFP_E_LOS_LOW : SFP_E_LOS_HIGH)) {
			sfp_sm_link_down(sfp);
			sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0);