[i-g-t] Revert "tests/gem_ctx_param_basic: fix invalid params"
diff mbox

Message ID 20150807125357.GH6150@boom
State New
Headers show

Commit Message

David Weinehall Aug. 7, 2015, 12:53 p.m. UTC
On Thu, Aug 06, 2015 at 11:33:00PM +0200, Daniel Vetter wrote:
> This reverts commit 0b45b0746f45deea11670a8b2c949776bbbef55c.
> 
> The point of testing for LAST_FLAG + 1 is to catch abi extensions -
> despite our best efforts we really suck at properly reviewing for test
> coverage when extending ABI.
> 
> The real bug here is that David Weinhall hasn't submitted updated igts
> for the NO_ZEROMAP feature yet. Imo the right course of action is to
> revert that feature if the testcase don't show up within a few days.

The reason I never submitted it was probably because of Chris's strong
opposition to the feature in the first place; I've had the testcase
laying around on my computer for quite a while.

Anyhow, here's a slightly modified version of that test -- hopefully
not breaking anything.


Signed-off-by: David Weinehall <david.weinehall@linux.intel.com>

Comments

Daniel Vetter Aug. 7, 2015, 1:13 p.m. UTC | #1
On Fri, Aug 07, 2015 at 03:53:57PM +0300, David Weinehall wrote:
> On Thu, Aug 06, 2015 at 11:33:00PM +0200, Daniel Vetter wrote:
> > This reverts commit 0b45b0746f45deea11670a8b2c949776bbbef55c.
> > 
> > The point of testing for LAST_FLAG + 1 is to catch abi extensions -
> > despite our best efforts we really suck at properly reviewing for test
> > coverage when extending ABI.
> > 
> > The real bug here is that David Weinhall hasn't submitted updated igts
> > for the NO_ZEROMAP feature yet. Imo the right course of action is to
> > revert that feature if the testcase don't show up within a few days.
> 
> The reason I never submitted it was probably because of Chris's strong
> opposition to the feature in the first place; I've had the testcase
> laying around on my computer for quite a while.
> 
> Anyhow, here's a slightly modified version of that test -- hopefully
> not breaking anything.
> 
> 
> Signed-off-by: David Weinehall <david.weinehall@linux.intel.com>

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=90808

btw this is first priority for bug scrub, finding bugs. Also this is a
regression, which actually makes it even more important than just basic
bug scrubbing. Note that bug fixing itself is only about 3rd tier
priority, i.e. something you can do when you have free time by accident.

Oh and the bug is a regression, but not correctly marked as such. That
means QA fail or bug scrub fail, either way we need to figure out what
went wrong here.

Please discuss this with Christophe Prigent as our permanent bug scrub
leader, figure out what needs to be fixed in bkms and present the solution
in next week's bug scrub coordination meeting on Thu.

Thanks, Daniel

> 
> diff --git a/lib/ioctl_wrappers.h b/lib/ioctl_wrappers.h
> index bc5d4bd827cf..f4deca6bd79e 100644
> --- a/lib/ioctl_wrappers.h
> +++ b/lib/ioctl_wrappers.h
> @@ -102,6 +102,7 @@ struct local_i915_gem_context_param {
>  	uint32_t size;
>  	uint64_t param;
>  #define LOCAL_CONTEXT_PARAM_BAN_PERIOD 0x1
> +#define LOCAL_CONTEXT_PARAM_NO_ZEROMAP 0x2
>  	uint64_t value;
>  };
>  void gem_context_require_ban_period(int fd);
> diff --git a/tests/gem_ctx_param_basic.c b/tests/gem_ctx_param_basic.c
> index b44b37cf0538..1e7e8ff40703 100644
> --- a/tests/gem_ctx_param_basic.c
> +++ b/tests/gem_ctx_param_basic.c
> @@ -57,7 +57,7 @@ igt_main
>  		ctx = gem_context_create(fd);
>  	}
>  
> -	ctx_param.param  = LOCAL_CONTEXT_PARAM_BAN_PERIOD;
> +	ctx_param.param = LOCAL_CONTEXT_PARAM_BAN_PERIOD;
>  
>  	igt_subtest("basic") {
>  		ctx_param.context = ctx;
> @@ -98,21 +98,31 @@ igt_main
>  		ctx_param.size = 0;
>  	}
>  
> -	ctx_param.param  = LOCAL_CONTEXT_PARAM_BAN_PERIOD + 1;
> +	ctx_param.param = LOCAL_CONTEXT_PARAM_BAN_PERIOD;
>  
> -	igt_subtest("invalid-param-get") {
> -		ctx_param.context = ctx;
> -		TEST_FAIL(LOCAL_IOCTL_I915_GEM_CONTEXT_GETPARAM, EINVAL);
> +	igt_subtest("non-root-set") {
> +		igt_fork(child, 1) {
> +			igt_drop_root();
> +
> +			ctx_param.context = ctx;
> +			TEST_SUCCESS(LOCAL_IOCTL_I915_GEM_CONTEXT_GETPARAM);
> +			ctx_param.value--;
> +			TEST_FAIL(LOCAL_IOCTL_I915_GEM_CONTEXT_SETPARAM, EPERM);
> +		}
> +
> +		igt_waitchildren();
>  	}
>  
> -	igt_subtest("invalid-param-set") {
> +	igt_subtest("root-set") {
>  		ctx_param.context = ctx;
> -		TEST_FAIL(LOCAL_IOCTL_I915_GEM_CONTEXT_SETPARAM, EINVAL);
> +		TEST_SUCCESS(LOCAL_IOCTL_I915_GEM_CONTEXT_GETPARAM);
> +		ctx_param.value--;
> +		TEST_SUCCESS(LOCAL_IOCTL_I915_GEM_CONTEXT_SETPARAM);
>  	}
>  
> -	ctx_param.param  = LOCAL_CONTEXT_PARAM_BAN_PERIOD;
> +	ctx_param.param = LOCAL_CONTEXT_PARAM_NO_ZEROMAP;
>  
> -	igt_subtest("non-root-set") {
> +	igt_subtest("non-root-set-no-zeromap") {
>  		igt_fork(child, 1) {
>  			igt_drop_root();
>  
> @@ -125,13 +135,32 @@ igt_main
>  		igt_waitchildren();
>  	}
>  
> -	igt_subtest("root-set") {
> +	igt_subtest("root-set-no-zeromap-enabled") {
>  		ctx_param.context = ctx;
>  		TEST_SUCCESS(LOCAL_IOCTL_I915_GEM_CONTEXT_GETPARAM);
> -		ctx_param.value--;
> +		ctx_param.value = 1;
> +		TEST_SUCCESS(LOCAL_IOCTL_I915_GEM_CONTEXT_SETPARAM);
> +	}
> +
> +	igt_subtest("root-set-no-zeromap-disabled") {
> +		ctx_param.context = ctx;
> +		TEST_SUCCESS(LOCAL_IOCTL_I915_GEM_CONTEXT_GETPARAM);
> +		ctx_param.value = 0;
>  		TEST_SUCCESS(LOCAL_IOCTL_I915_GEM_CONTEXT_SETPARAM);
>  	}
>  
> +	ctx_param.param = LOCAL_CONTEXT_PARAM_NO_ZEROMAP + 1;
> +
> +	igt_subtest("invalid-param-get") {
> +		ctx_param.context = ctx;
> +		TEST_FAIL(LOCAL_IOCTL_I915_GEM_CONTEXT_GETPARAM, EINVAL);
> +	}
> +
> +	igt_subtest("invalid-param-set") {
> +		ctx_param.context = ctx;
> +		TEST_FAIL(LOCAL_IOCTL_I915_GEM_CONTEXT_SETPARAM, EINVAL);
> +	}
> +
>  	igt_fixture
>  		close(fd);
>  }
Ander Conselvan de Oliveira Aug. 21, 2015, 1:26 p.m. UTC | #2
On Fri, 2015-08-07 at 15:53 +0300, David Weinehall wrote:
> On Thu, Aug 06, 2015 at 11:33:00PM +0200, Daniel Vetter wrote:
> > This reverts commit 0b45b0746f45deea11670a8b2c949776bbbef55c.
> > 
> > The point of testing for LAST_FLAG + 1 is to catch abi extensions -
> > despite our best efforts we really suck at properly reviewing for test
> > coverage when extending ABI.
> > 
> > The real bug here is that David Weinhall hasn't submitted updated igts
> > for the NO_ZEROMAP feature yet. Imo the right course of action is to
> > revert that feature if the testcase don't show up within a few days.
> 
> The reason I never submitted it was probably because of Chris's strong
> opposition to the feature in the first place; I've had the testcase
> laying around on my computer for quite a while.
> 
> Anyhow, here's a slightly modified version of that test -- hopefully
> not breaking anything.
> 
> 
> Signed-off-by: David Weinehall <david.weinehall@linux.intel.com>
> 
> diff --git a/lib/ioctl_wrappers.h b/lib/ioctl_wrappers.h
> index bc5d4bd827cf..f4deca6bd79e 100644
> --- a/lib/ioctl_wrappers.h
> +++ b/lib/ioctl_wrappers.h
> @@ -102,6 +102,7 @@ struct local_i915_gem_context_param {
>  	uint32_t size;
>  	uint64_t param;
>  #define LOCAL_CONTEXT_PARAM_BAN_PERIOD 0x1
> +#define LOCAL_CONTEXT_PARAM_NO_ZEROMAP 0x2
>  	uint64_t value;
>  };
>  void gem_context_require_ban_period(int fd);
> diff --git a/tests/gem_ctx_param_basic.c b/tests/gem_ctx_param_basic.c
> index b44b37cf0538..1e7e8ff40703 100644
> --- a/tests/gem_ctx_param_basic.c
> +++ b/tests/gem_ctx_param_basic.c
> @@ -57,7 +57,7 @@ igt_main
>  		ctx = gem_context_create(fd);
>  	}
>  
> -	ctx_param.param  = LOCAL_CONTEXT_PARAM_BAN_PERIOD;
> +	ctx_param.param = LOCAL_CONTEXT_PARAM_BAN_PERIOD;
>  
>  	igt_subtest("basic") {
>  		ctx_param.context = ctx;
> @@ -98,21 +98,31 @@ igt_main

[...]

> -	ctx_param.param  = LOCAL_CONTEXT_PARAM_BAN_PERIOD;
> +	ctx_param.param = LOCAL_CONTEXT_PARAM_NO_ZEROMAP;
>  
> -	igt_subtest("non-root-set") {
> +	igt_subtest("non-root-set-no-zeromap") {
>  		igt_fork(child, 1) {
>  			igt_drop_root();

 		ctx_param.context = ctx;
		TEST_FAIL(LOCAL_IOCTL_I915_GEM_CONTEXT_SETPARAM, EINVAL);
		TEST_SUCCESS(LOCAL_IOCTL_I915_GEM_CONTEXT_GETPARAM);
		ctx_param.value--;
		TEST_SUCCESS(LOCAL_IOCTL_I915_GEM_CONTEXT_SETPARAM);

(I've added the code missing from the context)

The code in i915_gem_context_setparam_ioctl() that handles CONTEXT_PARAM_NO_ZEROMAP never returns
EPERM, so this test always fails.

Cheers,
Ander
Ander Conselvan de Oliveira Aug. 24, 2015, 7:39 a.m. UTC | #3
On Fri, 2015-08-21 at 16:26 +0300, Ander Conselvan De Oliveira wrote:
> On Fri, 2015-08-07 at 15:53 +0300, David Weinehall wrote:
> > On Thu, Aug 06, 2015 at 11:33:00PM +0200, Daniel Vetter wrote:
> > > This reverts commit 0b45b0746f45deea11670a8b2c949776bbbef55c.
> > > 
> > > The point of testing for LAST_FLAG + 1 is to catch abi extensions -
> > > despite our best efforts we really suck at properly reviewing for test
> > > coverage when extending ABI.
> > > 
> > > The real bug here is that David Weinhall hasn't submitted updated igts
> > > for the NO_ZEROMAP feature yet. Imo the right course of action is to
> > > revert that feature if the testcase don't show up within a few days.
> > 
> > The reason I never submitted it was probably because of Chris's strong
> > opposition to the feature in the first place; I've had the testcase
> > laying around on my computer for quite a while.
> > 
> > Anyhow, here's a slightly modified version of that test -- hopefully
> > not breaking anything.
> > 
> > 
> > Signed-off-by: David Weinehall <david.weinehall@linux.intel.com>
> > 
> > diff --git a/lib/ioctl_wrappers.h b/lib/ioctl_wrappers.h
> > index bc5d4bd827cf..f4deca6bd79e 100644
> > --- a/lib/ioctl_wrappers.h
> > +++ b/lib/ioctl_wrappers.h
> > @@ -102,6 +102,7 @@ struct local_i915_gem_context_param {
> >  	uint32_t size;
> >  	uint64_t param;
> >  #define LOCAL_CONTEXT_PARAM_BAN_PERIOD 0x1
> > +#define LOCAL_CONTEXT_PARAM_NO_ZEROMAP 0x2
> >  	uint64_t value;
> >  };
> >  void gem_context_require_ban_period(int fd);
> > diff --git a/tests/gem_ctx_param_basic.c b/tests/gem_ctx_param_basic.c
> > index b44b37cf0538..1e7e8ff40703 100644
> > --- a/tests/gem_ctx_param_basic.c
> > +++ b/tests/gem_ctx_param_basic.c
> > @@ -57,7 +57,7 @@ igt_main
> >  		ctx = gem_context_create(fd);
> >  	}
> >  
> > -	ctx_param.param  = LOCAL_CONTEXT_PARAM_BAN_PERIOD;
> > +	ctx_param.param = LOCAL_CONTEXT_PARAM_BAN_PERIOD;
> >  
> >  	igt_subtest("basic") {
> >  		ctx_param.context = ctx;
> > @@ -98,21 +98,31 @@ igt_main
> 
> [...]
> 
> > -	ctx_param.param  = LOCAL_CONTEXT_PARAM_BAN_PERIOD;
> > +	ctx_param.param = LOCAL_CONTEXT_PARAM_NO_ZEROMAP;
> >  
> > -	igt_subtest("non-root-set") {
> > +	igt_subtest("non-root-set-no-zeromap") {
> >  		igt_fork(child, 1) {
> >  			igt_drop_root();
> 
>  		ctx_param.context = ctx;
> 		TEST_FAIL(LOCAL_IOCTL_I915_GEM_CONTEXT_SETPARAM, EINVAL);
> 		TEST_SUCCESS(LOCAL_IOCTL_I915_GEM_CONTEXT_GETPARAM);
> 		ctx_param.value--;
> 		TEST_SUCCESS(LOCAL_IOCTL_I915_GEM_CONTEXT_SETPARAM);
> 
> (I've added the code missing from the context)

Except I added the wrong code. Here's what is in i-g-t now:

        ctx_param.param = LOCAL_CONTEXT_PARAM_NO_ZEROMAP;

        igt_subtest("non-root-set-no-zeromap") {
                igt_fork(child, 1) {
                        igt_drop_root();

                        ctx_param.context = ctx;
                        TEST_SUCCESS(LOCAL_IOCTL_I915_GEM_CONTEXT_GETPARAM);
                        ctx_param.value--;
                        TEST_FAIL(LOCAL_IOCTL_I915_GEM_CONTEXT_SETPARAM, EPERM); 
                }

                igt_waitchildren();
        }

> The code in i915_gem_context_setparam_ioctl() that handles CONTEXT_PARAM_NO_ZEROMAP never returns
> EPERM, so this test always fails.

Ander

Patch
diff mbox

diff --git a/lib/ioctl_wrappers.h b/lib/ioctl_wrappers.h
index bc5d4bd827cf..f4deca6bd79e 100644
--- a/lib/ioctl_wrappers.h
+++ b/lib/ioctl_wrappers.h
@@ -102,6 +102,7 @@  struct local_i915_gem_context_param {
 	uint32_t size;
 	uint64_t param;
 #define LOCAL_CONTEXT_PARAM_BAN_PERIOD 0x1
+#define LOCAL_CONTEXT_PARAM_NO_ZEROMAP 0x2
 	uint64_t value;
 };
 void gem_context_require_ban_period(int fd);
diff --git a/tests/gem_ctx_param_basic.c b/tests/gem_ctx_param_basic.c
index b44b37cf0538..1e7e8ff40703 100644
--- a/tests/gem_ctx_param_basic.c
+++ b/tests/gem_ctx_param_basic.c
@@ -57,7 +57,7 @@  igt_main
 		ctx = gem_context_create(fd);
 	}
 
-	ctx_param.param  = LOCAL_CONTEXT_PARAM_BAN_PERIOD;
+	ctx_param.param = LOCAL_CONTEXT_PARAM_BAN_PERIOD;
 
 	igt_subtest("basic") {
 		ctx_param.context = ctx;
@@ -98,21 +98,31 @@  igt_main
 		ctx_param.size = 0;
 	}
 
-	ctx_param.param  = LOCAL_CONTEXT_PARAM_BAN_PERIOD + 1;
+	ctx_param.param = LOCAL_CONTEXT_PARAM_BAN_PERIOD;
 
-	igt_subtest("invalid-param-get") {
-		ctx_param.context = ctx;
-		TEST_FAIL(LOCAL_IOCTL_I915_GEM_CONTEXT_GETPARAM, EINVAL);
+	igt_subtest("non-root-set") {
+		igt_fork(child, 1) {
+			igt_drop_root();
+
+			ctx_param.context = ctx;
+			TEST_SUCCESS(LOCAL_IOCTL_I915_GEM_CONTEXT_GETPARAM);
+			ctx_param.value--;
+			TEST_FAIL(LOCAL_IOCTL_I915_GEM_CONTEXT_SETPARAM, EPERM);
+		}
+
+		igt_waitchildren();
 	}
 
-	igt_subtest("invalid-param-set") {
+	igt_subtest("root-set") {
 		ctx_param.context = ctx;
-		TEST_FAIL(LOCAL_IOCTL_I915_GEM_CONTEXT_SETPARAM, EINVAL);
+		TEST_SUCCESS(LOCAL_IOCTL_I915_GEM_CONTEXT_GETPARAM);
+		ctx_param.value--;
+		TEST_SUCCESS(LOCAL_IOCTL_I915_GEM_CONTEXT_SETPARAM);
 	}
 
-	ctx_param.param  = LOCAL_CONTEXT_PARAM_BAN_PERIOD;
+	ctx_param.param = LOCAL_CONTEXT_PARAM_NO_ZEROMAP;
 
-	igt_subtest("non-root-set") {
+	igt_subtest("non-root-set-no-zeromap") {
 		igt_fork(child, 1) {
 			igt_drop_root();
 
@@ -125,13 +135,32 @@  igt_main
 		igt_waitchildren();
 	}
 
-	igt_subtest("root-set") {
+	igt_subtest("root-set-no-zeromap-enabled") {
 		ctx_param.context = ctx;
 		TEST_SUCCESS(LOCAL_IOCTL_I915_GEM_CONTEXT_GETPARAM);
-		ctx_param.value--;
+		ctx_param.value = 1;
+		TEST_SUCCESS(LOCAL_IOCTL_I915_GEM_CONTEXT_SETPARAM);
+	}
+
+	igt_subtest("root-set-no-zeromap-disabled") {
+		ctx_param.context = ctx;
+		TEST_SUCCESS(LOCAL_IOCTL_I915_GEM_CONTEXT_GETPARAM);
+		ctx_param.value = 0;
 		TEST_SUCCESS(LOCAL_IOCTL_I915_GEM_CONTEXT_SETPARAM);
 	}
 
+	ctx_param.param = LOCAL_CONTEXT_PARAM_NO_ZEROMAP + 1;
+
+	igt_subtest("invalid-param-get") {
+		ctx_param.context = ctx;
+		TEST_FAIL(LOCAL_IOCTL_I915_GEM_CONTEXT_GETPARAM, EINVAL);
+	}
+
+	igt_subtest("invalid-param-set") {
+		ctx_param.context = ctx;
+		TEST_FAIL(LOCAL_IOCTL_I915_GEM_CONTEXT_SETPARAM, EINVAL);
+	}
+
 	igt_fixture
 		close(fd);
 }