cregit-Linux how code gets into the kernel

Release 4.10 tools/testing/selftests/powerpc/vphn/test-vphn.c

#include <stdio.h>
#include <byteswap.h>
#include "utils.h"
#include "subunit.h"

#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__

#define cpu_to_be32(x)		bswap_32(x)

#define be32_to_cpu(x)		bswap_32(x)

#define be16_to_cpup(x)		bswap_16(*x)

#define cpu_to_be64(x)		bswap_64(x)
#else

#define cpu_to_be32(x)		(x)

#define be32_to_cpu(x)		(x)

#define be16_to_cpup(x)		(*x)

#define cpu_to_be64(x)		(x)
#endif

#include "vphn.c"


static struct test {
	
char *descr;
	
long input[VPHN_REGISTER_COUNT];
	
u32 expected[VPHN_ASSOC_BUFSIZE];
} 
all_tests[] = {
	{
		"vphn: no data",
		{
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
                },
		{
			0x00000000
		}
	},
	{
		"vphn: 1 x 16-bit value",
		{
			0x8001ffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
                },
		{
			0x00000001,
			0x00000001
		}
	},
	{
		"vphn: 2 x 16-bit values",
		{
			0x80018002ffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
                },
		{
			0x00000002,
			0x00000001,
			0x00000002
		}
	},
	{
		"vphn: 3 x 16-bit values",
		{
			0x800180028003ffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
                },
		{
			0x00000003,
			0x00000001,
			0x00000002,
			0x00000003
		}
	},
	{
		"vphn: 4 x 16-bit values",
		{
			0x8001800280038004,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
                },
		{
			0x00000004,
			0x00000001,
			0x00000002,
			0x00000003,
			0x00000004
		}
	},
	{
		/* Parsing the next 16-bit value out of the next 64-bit input
                 * value.
                 */
		"vphn: 5 x 16-bit values",
		{
			0x8001800280038004,
			0x8005ffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
                },
		{
			0x00000005,
			0x00000001,
			0x00000002,
			0x00000003,
			0x00000004,
			0x00000005
		}
	},
	{
		/* Parse at most 6 x 64-bit input values */
		"vphn: 24 x 16-bit values",
		{
			0x8001800280038004,
			0x8005800680078008,
			0x8009800a800b800c,
			0x800d800e800f8010,
			0x8011801280138014,
			0x8015801680178018
		},
		{
			0x00000018,
			0x00000001,
			0x00000002,
			0x00000003,
			0x00000004,
			0x00000005,
			0x00000006,
			0x00000007,
			0x00000008,
			0x00000009,
			0x0000000a,
			0x0000000b,
			0x0000000c,
			0x0000000d,
			0x0000000e,
			0x0000000f,
			0x00000010,
			0x00000011,
			0x00000012,
			0x00000013,
			0x00000014,
			0x00000015,
			0x00000016,
			0x00000017,
			0x00000018
		}
	},
	{
		"vphn: 1 x 32-bit value",
		{
			0x00000001ffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff
		},
		{
			0x00000001,
			0x00000001
		}
	},
	{
		"vphn: 2 x 32-bit values",
		{
			0x0000000100000002,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff
		},
		{
			0x00000002,
			0x00000001,
			0x00000002
		}
	},
	{
		/* Parsing the next 32-bit value out of the next 64-bit input
                 * value.
                 */
		"vphn: 3 x 32-bit values",
		{
			0x0000000100000002,
			0x00000003ffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff
		},
		{
			0x00000003,
			0x00000001,
			0x00000002,
			0x00000003
		}
	},
	{
		/* Parse at most 6 x 64-bit input values */
		"vphn: 12 x 32-bit values",
		{
			0x0000000100000002,
			0x0000000300000004,
			0x0000000500000006,
			0x0000000700000008,
			0x000000090000000a,
			0x0000000b0000000c
		},
		{
			0x0000000c,
			0x00000001,
			0x00000002,
			0x00000003,
			0x00000004,
			0x00000005,
			0x00000006,
			0x00000007,
			0x00000008,
			0x00000009,
			0x0000000a,
			0x0000000b,
			0x0000000c
		}
	},
	{
		"vphn: 16-bit value followed by 32-bit value",
		{
			0x800100000002ffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff
		},
		{
			0x00000002,
			0x00000001,
			0x00000002
		}
	},
	{
		"vphn: 32-bit value followed by 16-bit value",
		{
			0x000000018002ffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff
		},
		{
			0x00000002,
			0x00000001,
			0x00000002
		}
	},
	{
		/* Parse a 32-bit value split accross two consecutives 64-bit
                 * input values.
                 */
		"vphn: 16-bit value followed by 2 x 32-bit values",
		{
			0x8001000000020000,
			0x0003ffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff
		},
		{
			0x00000003,
			0x00000001,
			0x00000002,
			0x00000003,
			0x00000004,
			0x00000005
		}
	},
	{
		/* The lower bits in 0x0001ffff don't get mixed up with the
                 * 0xffff terminator.
                 */
		"vphn: 32-bit value has all ones in 16 lower bits",
		{
			0x0001ffff80028003,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff,
			0xffffffffffffffff
		},
		{
			0x00000003,
			0x0001ffff,
			0x00000002,
			0x00000003
		}
	},
	{
		/* The following input doesn't follow the specification.
                 */
		"vphn: last 32-bit value is truncated",
		{
			0x0000000100000002,
			0x0000000300000004,
			0x0000000500000006,
			0x0000000700000008,
			0x000000090000000a,
			0x0000000b800c2bad
		},
		{
			0x0000000c,
			0x00000001,
			0x00000002,
			0x00000003,
			0x00000004,
			0x00000005,
			0x00000006,
			0x00000007,
			0x00000008,
			0x00000009,
			0x0000000a,
			0x0000000b,
			0x0000000c
		}
	},
	{
		"vphn: garbage after terminator",
		{
			0xffff2bad2bad2bad,
			0x2bad2bad2bad2bad,
			0x2bad2bad2bad2bad,
			0x2bad2bad2bad2bad,
			0x2bad2bad2bad2bad,
			0x2bad2bad2bad2bad
		},
		{
			0x00000000
		}
	},
	{
		NULL
	}
};


static int test_one(struct test *test) { __be32 output[VPHN_ASSOC_BUFSIZE] = { 0 }; int i, len; vphn_unpack_associativity(test->input, output); len = be32_to_cpu(output[0]); if (len != test->expected[0]) { printf("expected %d elements, got %d\n", test->expected[0], len); return 1; } for (i = 1; i < len; i++) { u32 val = be32_to_cpu(output[i]); if (val != test->expected[i]) { printf("element #%d is 0x%x, should be 0x%x\n", i, val, test->expected[i]); return 1; } } return 0; }

Contributors

PersonTokensPropCommitsCommitProp
greg kurzgreg kurz136100.00%1100.00%
Total136100.00%1100.00%


static int test_vphn(void) { static struct test *test; for (test = all_tests; test->descr; test++) { int ret; ret = test_one(test); test_finish(test->descr, ret); if (ret) return ret; } return 0; }

Contributors

PersonTokensPropCommitsCommitProp
greg kurzgreg kurz58100.00%1100.00%
Total58100.00%1100.00%


int main(int argc, char **argv) { return test_harness(test_vphn, "test-vphn"); }

Contributors

PersonTokensPropCommitsCommitProp
greg kurzgreg kurz21100.00%1100.00%
Total21100.00%1100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
greg kurzgreg kurz868100.00%1100.00%
Total868100.00%1100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.