| 207 | } |
| 208 | |
| 209 | static int test_full_page_reg(int bgid) |
| 210 | { |
| 211 | #if defined(__hppa__) |
| 212 | return T_EXIT_SKIP; |
| 213 | #else |
| 214 | struct io_uring ring; |
| 215 | int ret; |
| 216 | void *ptr; |
| 217 | struct io_uring_buf_reg reg = { }; |
| 218 | int entries = pagesize / sizeof(struct io_uring_buf); |
| 219 | |
| 220 | ret = io_uring_queue_init(1, &ring, 0); |
| 221 | if (ret) { |
| 222 | fprintf(stderr, "queue init failed %d\n", ret); |
| 223 | return T_EXIT_FAIL; |
| 224 | } |
| 225 | |
| 226 | ret = posix_memalign(&ptr, pagesize, pagesize * 2); |
| 227 | if (ret) { |
| 228 | fprintf(stderr, "posix_memalign failed %d\n", ret); |
| 229 | goto err; |
| 230 | } |
| 231 | |
| 232 | ret = mprotect(ptr + pagesize, pagesize, PROT_NONE); |
| 233 | if (ret) { |
| 234 | fprintf(stderr, "mprotect failed %d\n", errno); |
| 235 | goto err1; |
| 236 | } |
| 237 | |
| 238 | reg.ring_addr = (unsigned long) ptr; |
| 239 | reg.ring_entries = entries; |
| 240 | reg.bgid = bgid; |
| 241 | |
| 242 | ret = io_uring_register_buf_ring(&ring, ®, 0); |
| 243 | if (ret) |
| 244 | fprintf(stderr, "register buf ring failed %d\n", ret); |
| 245 | |
| 246 | if (mprotect(ptr + pagesize, pagesize, PROT_READ | PROT_WRITE)) |
| 247 | fprintf(stderr, "reverting mprotect failed %d\n", errno); |
| 248 | |
| 249 | err1: |
| 250 | free(ptr); |
| 251 | err: |
| 252 | io_uring_queue_exit(&ring); |
| 253 | return ret ? T_EXIT_FAIL : T_EXIT_PASS; |
| 254 | #endif |
| 255 | } |
| 256 | |
| 257 | static int test_one_read(int fd, int bgid, struct io_uring *ring) |
| 258 | { |
no test coverage detected