| /* | 
 |  * Block utility functions | 
 |  * | 
 |  * Copyright IBM, Corp. 2011 | 
 |  * Copyright (c) 2020 Coiby Xu <coiby.xu@gmail.com> | 
 |  * | 
 |  * This work is licensed under the terms of the GNU GPL, version 2 or later. | 
 |  * See the COPYING file in the top-level directory. | 
 |  */ | 
 |  | 
 | #include "qemu/osdep.h" | 
 | #include "qapi/error.h" | 
 | #include "block-helpers.h" | 
 |  | 
 | /** | 
 |  * check_block_size: | 
 |  * @name: The name of the property being validated | 
 |  * @value: The block size in bytes | 
 |  * @errp: A pointer to an area to store an error | 
 |  * | 
 |  * This function checks that the block size meets the following conditions: | 
 |  * 1. At least MIN_BLOCK_SIZE | 
 |  * 2. No larger than MAX_BLOCK_SIZE | 
 |  * 3. A power of 2 | 
 |  * | 
 |  * Returns: true on success, false on failure | 
 |  */ | 
 | bool check_block_size(const char *name, int64_t value, Error **errp) | 
 | { | 
 |     if (!value) { | 
 |         /* unset */ | 
 |         return true; | 
 |     } | 
 |  | 
 |     if (value < MIN_BLOCK_SIZE || value > MAX_BLOCK_SIZE | 
 |         || (value & (value - 1))) { | 
 |         error_setg(errp, | 
 |                    "parameter %s must be a power of 2 between %" PRId64 | 
 |                    " and %" PRId64, | 
 |                    name, MIN_BLOCK_SIZE, MAX_BLOCK_SIZE); | 
 |         return false; | 
 |     } | 
 |     return true; | 
 | } |