// SPDX-License-Identifier: GPL-2.0+ /* * test_ida.c: Test the IDA API * Copyright (c) 2016-2018 Microsoft Corporation * Copyright (c) 2018 Oracle Corporation * Author: Matthew Wilcox <[email protected]> */ #include <linux/idr.h> #include <linux/module.h> static unsigned int tests_run; static unsigned int tests_passed; #ifdef __KERNEL__ static void ida_dump(struct ida *ida) { … } #endif #define IDA_BUG_ON(ida, x) … /* * Straightforward checks that allocating and freeing IDs work. */ static void ida_check_alloc(struct ida *ida) { … } /* Destroy an IDA with a single entry at @base */ static void ida_check_destroy_1(struct ida *ida, unsigned int base) { … } /* Check that ida_destroy and ida_is_empty work */ static void ida_check_destroy(struct ida *ida) { … } /* * Check what happens when we fill a leaf and then delete it. This may * discover mishandling of IDR_FREE. */ static void ida_check_leaf(struct ida *ida, unsigned int base) { … } /* * Check allocations up to and slightly above the maximum allowed (2^31-1) ID. * Allocating up to 2^31-1 should succeed, and then allocating the next one * should fail. */ static void ida_check_max(struct ida *ida) { … } /* * Check handling of conversions between exceptional entries and full bitmaps. */ static void ida_check_conv(struct ida *ida) { … } /* * Check various situations where we attempt to free an ID we don't own. */ static void ida_check_bad_free(struct ida *ida) { … } static DEFINE_IDA(ida); static int ida_checks(void) { … } static void ida_exit(void) { … } module_init(…) …; module_exit(ida_exit); MODULE_AUTHOR(…) …; MODULE_DESCRIPTION(…) …; MODULE_LICENSE(…) …;