forked from Qortal/Brooklyn
7d3018da4c
* NVME, SATA NAND Security added * Qortal Core exception fetcher is now redone. * Update DT overlays for firmware * Fix for bvb clockj settings * Fix for no audio for sissy desktop porn watchers -_- ( thanks crowetic for watching gay porn and reporting me that bug asshat ) * Normalize the fetch() stream while doing a peer to peer handshake for nodes * Fix for RNG token editing error while performing a SHA256 encryption * Now under voltage errors will blink red led constantly for 5 minutes then go solid. * Improve kernel thread scaling for Qortal 2.0 core * HDMI circuit is now enabled at power up instead. * Added KMS * Added line replication instead of interpolation for VC4 GPU resulting in slightly better frame rates * Fix for long and doubles * Backplane clock is now set at standard rate * Capped HVEC clocks * Add support for Creative Cinema webcam for donkers who like sharing dick pics. *looks at crowetic* * More scanline XGA modes for people who have weird ass monitors of all sorts. * TX/RX flow control support is now 100% stable. No lags over 1Gbps ethernet. ( Hello Qortal 3.0 ) * Using flush cache instead of fetch for QC 2.0 resulting in performance gains * VC4 clock is now enforced for desktop oriented images. * Ondemand governor now waits for 2 seconds instead of 0.5ms to scale down to the lowest safest clock freq preventing lags to the core. * Timeout of OC set at 35ms from 90ms resulting in way better clocks and sync for Qortal 2.0 core
107 lines
2.2 KiB
C
107 lines
2.2 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
#define _GNU_SOURCE
|
|
#define __EXPORTED_HEADERS__
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <string.h>
|
|
#include <errno.h>
|
|
#include <fcntl.h>
|
|
#include <malloc.h>
|
|
|
|
#include <sys/ioctl.h>
|
|
#include <sys/syscall.h>
|
|
#include <linux/memfd.h>
|
|
#include <linux/udmabuf.h>
|
|
|
|
#define TEST_PREFIX "drivers/dma-buf/udmabuf"
|
|
#define NUM_PAGES 4
|
|
|
|
static int memfd_create(const char *name, unsigned int flags)
|
|
{
|
|
return syscall(__NR_memfd_create, name, flags);
|
|
}
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
struct udmabuf_create create;
|
|
int devfd, memfd, buf, ret;
|
|
off_t size;
|
|
void *mem;
|
|
|
|
devfd = open("/dev/udmabuf", O_RDWR);
|
|
if (devfd < 0) {
|
|
printf("%s: [skip,no-udmabuf]\n", TEST_PREFIX);
|
|
exit(77);
|
|
}
|
|
|
|
memfd = memfd_create("udmabuf-test", MFD_ALLOW_SEALING);
|
|
if (memfd < 0) {
|
|
printf("%s: [skip,no-memfd]\n", TEST_PREFIX);
|
|
exit(77);
|
|
}
|
|
|
|
ret = fcntl(memfd, F_ADD_SEALS, F_SEAL_SHRINK);
|
|
if (ret < 0) {
|
|
printf("%s: [skip,fcntl-add-seals]\n", TEST_PREFIX);
|
|
exit(77);
|
|
}
|
|
|
|
|
|
size = getpagesize() * NUM_PAGES;
|
|
ret = ftruncate(memfd, size);
|
|
if (ret == -1) {
|
|
printf("%s: [FAIL,memfd-truncate]\n", TEST_PREFIX);
|
|
exit(1);
|
|
}
|
|
|
|
memset(&create, 0, sizeof(create));
|
|
|
|
/* should fail (offset not page aligned) */
|
|
create.memfd = memfd;
|
|
create.offset = getpagesize()/2;
|
|
create.size = getpagesize();
|
|
buf = ioctl(devfd, UDMABUF_CREATE, &create);
|
|
if (buf >= 0) {
|
|
printf("%s: [FAIL,test-1]\n", TEST_PREFIX);
|
|
exit(1);
|
|
}
|
|
|
|
/* should fail (size not multiple of page) */
|
|
create.memfd = memfd;
|
|
create.offset = 0;
|
|
create.size = getpagesize()/2;
|
|
buf = ioctl(devfd, UDMABUF_CREATE, &create);
|
|
if (buf >= 0) {
|
|
printf("%s: [FAIL,test-2]\n", TEST_PREFIX);
|
|
exit(1);
|
|
}
|
|
|
|
/* should fail (not memfd) */
|
|
create.memfd = 0; /* stdin */
|
|
create.offset = 0;
|
|
create.size = size;
|
|
buf = ioctl(devfd, UDMABUF_CREATE, &create);
|
|
if (buf >= 0) {
|
|
printf("%s: [FAIL,test-3]\n", TEST_PREFIX);
|
|
exit(1);
|
|
}
|
|
|
|
/* should work */
|
|
create.memfd = memfd;
|
|
create.offset = 0;
|
|
create.size = size;
|
|
buf = ioctl(devfd, UDMABUF_CREATE, &create);
|
|
if (buf < 0) {
|
|
printf("%s: [FAIL,test-4]\n", TEST_PREFIX);
|
|
exit(1);
|
|
}
|
|
|
|
fprintf(stderr, "%s: ok\n", TEST_PREFIX);
|
|
close(buf);
|
|
close(memfd);
|
|
close(devfd);
|
|
return 0;
|
|
}
|