diff options
Diffstat (limited to 'post/post.c')
| -rw-r--r-- | post/post.c | 17 | 
1 files changed, 15 insertions, 2 deletions
| diff --git a/post/post.c b/post/post.c index c016c3ae4..d31829ba1 100644 --- a/post/post.c +++ b/post/post.c @@ -238,14 +238,20 @@ static int post_run_single (struct post_test *test,  		if (test_flags & POST_PREREL) {  			if ((*test->test) (flags) == 0)  				post_log_mark_succ ( test->testid ); -			else if (test_flags & POST_CRITICAL) -				gd->flags |= GD_FLG_POSTFAIL; +			else { +				if (test_flags & POST_CRITICAL) +					gd->flags |= GD_FLG_POSTFAIL; +				if (test_flags & POST_STOP) +					gd->flags |= GD_FLG_POSTSTOP; +			}  		} else {  		if ((*test->test) (flags) != 0) {  			post_log ("FAILED\n");  			show_boot_progress (-32);  			if (test_flags & POST_CRITICAL)  				gd->flags |= GD_FLG_POSTFAIL; +			if (test_flags & POST_STOP) +				gd->flags |= GD_FLG_POSTSTOP;  		}  		else  			post_log ("PASSED\n"); @@ -271,6 +277,9 @@ int post_run (char *name, int flags)  	if (name == NULL) {  		unsigned int last; +		if (gd->flags & GD_FLG_POSTSTOP) +			return 0; +  		if (post_bootmode_get (&last) & POST_POWERTEST) {  			if (last & POST_FAIL_SAVE) {  				last &= ~POST_FAIL_SAVE; @@ -285,6 +294,8 @@ int post_run (char *name, int flags)  						 flags | POST_REBOOT, last);  				for (i = last + 1; i < post_list_size; i++) { +					if (gd->flags & GD_FLG_POSTSTOP) +						break;  					post_run_single (post_list + i,  							 test_flags[i],  							 flags, i); @@ -292,6 +303,8 @@ int post_run (char *name, int flags)  			}  		} else {  			for (i = 0; i < post_list_size; i++) { +				if (gd->flags & GD_FLG_POSTSTOP) +					break;  				post_run_single (post_list + i,  						 test_flags[i],  						 flags, i); |