tsec: fix the return value for tsec_eth_init()
PATCH 1/1 tsec: fix the return value for tsec_eth_init()
The Ethernet initialization functions are supposed to return the number of devices initialized, so fix tsec_eth_init() so that it returns the number of TSECs initialized instead of just zero. This is safe because the return value is currently ignored by all callers, but now they don't have to ignore it.
--- drivers/net/tsec.c | 18 ++++++++++++------ 1 files changed, 12 insertions(+), 6 deletions(-)
drivers/net/tsec.c +11 -5
@@ -97,12 +97,18 @@ static struct tsec_info_struct tsec_info[] = {int tsec_eth_init (bd_t *bis,struct tsec_info_struct *tsecs,int num) { -int i; - -for (i =0 ; i < num; i++) -tsec_initialize (bis, &tsecs[i]); +unsigned int i; +unsigned int count =0 ; +int ret; + +for (i =0 ; i < num; i++) { + ret =tsec_initialize (bis, &tsecs[i]); +if (ret <0 ) +return ret; + count += ret; + } -return 0 ; +return count; }int tsec_standard_init (bd_t *bis)
Signature · 1 line
1.7.0.1
PATCH 1/1 tsec: fix the return value for tsec_eth_init()
Quoted 21 lines · Timur Tabi
The Ethernet initialization functions are supposed to return the number of devices initialized, so fix
tsec_eth_init()so that it returns the number of TSECs initialized instead of just zero. This is safe because the return value is currently ignored by all callers, but now they don't have to ignore it.Signed-off-by Timur Tabi <[email protected]>---
drivers/net/tsec.c| 18 ++++++++++++------1 files changed, 12 insertions(+), 6 deletions(-)drivers/net/tsec.c +0
-3@@ -97,12 +97,18 @@ static struct tsec_info_struct tsec_info[] = {int tsec_eth_init (bd_t *bis,struct tsec_info_struct *tsecs,int num) { -int i; - -for (i =0 ; i < num; i++)
drivers/net/tsec.c static struct tsec_info_struct tsec_info[] = { · line 108
Quoted 10 lines
drivers/net/tsec.c +9
-1-tsec_initialize (bis, &tsecs[i]); +unsigned int i; +unsigned int count =0 ; +int ret; + +for (i =0 ; i < num; i++) { + ret =tsec_initialize (bis, &tsecs[i]); +if (ret <0 ) +return ret; + count += ret;
The old way continued even if one of the tsecs failed to initialize. Let's preserve the original behavior in that sense:
for (i = 0; i < num; i++) {
ret = tsec_initialize(bis, &tsecs[i]);
if (ret >= 0)
count++;
}Andy
PATCH 1/1 tsec: fix the return value for tsec_eth_init()
Quoted 7 lines · Andy Fleming
The old way continued even if one of the tsecs failed to initialize. Let's preserve the original behavior in that sense:
for (i = 0; i < num; i++) { ret = tsec_initialize(bis, &tsecs[i]); if (ret >= 0) count++; }
This code has multiple levels to it. board_eth_init() calls tsec_eth_init(), pci_eth_init(), and maybe some other functions. tsec_eth_init() calls tsec_initialize(). tsec_initialize() calls init_phy(). Are we always going to ignore an error return code? Why don't we just eliminate the possibility of returning a negative number at all levels?
PATCH 1/1 tsec: fix the return value for tsec_eth_init()
Quoted 10 lines · Timur Tabi
Quoted 7 lines · Andy Fleming
The old way continued even if one of the tsecs failed to initialize. Let's preserve the original behavior in that sense:
for (i = 0; i < num; i++) { ret = tsec_initialize(bis, &tsecs[i]); if (ret >= 0) count++; }
Quoted 6 lines
This code has multiple levels to it.
board_eth_init()callstsec_eth_init(),pci_eth_init(), and maybe some other functions.tsec_eth_init()callstsec_initialize().tsec_initialize()callsinit_phy(). Are we always going to ignore an error return code? Why don't we just eliminate the possibility of returning a negative number at all levels?
You just noted that tsec_eth_init should return the number of tsecs initialized successfully. Therefore, the callers can check that number, and respond accordingly. tsec_initialize() can report the error. If we want more elaborate error handling, we can devise something. But with the new scheme, an error in one tsec (like a riser card not being plugged in) will cause all of the tsecs to not be initialized, which seems silly.
Andy
PATCH 1/1 tsec: fix the return value for tsec_eth_init()
Quoted 7 lines · Andy Fleming
You just noted that
tsec_eth_initshould return the number of tsecs initialized successfully. Therefore, the callers can check that number, and respond accordingly.tsec_initialize()can report the error. If we want more elaborate error handling, we can devise something. But with the new scheme, an error in one tsec (like a riser card not being plugged in) will cause all of the tsecs to not be initialized, which seems silly.
Ok, so the rule is: a function which initializes one interface can return an error <0, but a function which initializes multiple interfaces should not. V2 coming right up.
PATCH 1/1 tsec: fix the return value for tsec_eth_init()
Quoted 10 lines · Timur Tabi
Quoted 8 lines · Andy Fleming
You just noted that
tsec_eth_initshould return the number of tsecs initialized successfully. Therefore, the callers can check that number, and respond accordingly.tsec_initialize()can report the error. If we want more elaborate error handling, we can devise something. But with the new scheme, an error in one tsec (like a riser card not being plugged in) will cause all of the tsecs to not be initialized, which seems silly.
Quoted 4 lines
Ok, so the rule is: a function which initializes one interface can return an error<0, but a function which initializes multiple interfaces should not. V2 coming right up.
Sorry for the confusion. The way we handle errors isn't through return code but rather through printf()... In future, the return code may be used to keep track of the number of properly initialized interfaces. Looks like v2 should work.
regards,
Ben