diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2017-02-25 17:49:34 +0100 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2017-02-25 18:03:12 +0100 |
| commit | 3f447f5105beff5d4a82461a09fddc448761bcdd (patch) | |
| tree | 9552a7a4bd0853c9741dbd9f325583320fc7dfea | |
| parent | 8466ba397d04f24e97b06f4117e8f0ab2c1e0e48 (diff) | |
| download | dev-cyber-3f447f5105beff5d4a82461a09fddc448761bcdd.tar.xz dev-cyber-3f447f5105beff5d4a82461a09fddc448761bcdd.zip | |
cyber_file: enable large-chunk CYBER readsv42.1337.666
Allowing for reading CYBER in much larger chunks boosts read perfomance
on the Designated CYBER Test System (DCTS) from 4.2 Gibibyte per second
to 6.66 Gibibyte per second. All hail CYBER!
| -rw-r--r-- | README.rst | 2 | ||||
| -rw-r--r-- | src/cyber.c | 2 | ||||
| -rw-r--r-- | src/cyber_file.c | 15 |
3 files changed, 13 insertions, 6 deletions
@@ -12,7 +12,7 @@ Purism Librem 13): - High throughput access to **CYBER** space - - Up-to 4.2 Gibibyte per second read speed + - Up-to 6.66 Gibibyte per second read speed - Up-to 12 Gibibyte per second write speed - Unlimited storage diff --git a/src/cyber.c b/src/cyber.c index 3f454af..c19d9ec 100644 --- a/src/cyber.c +++ b/src/cyber.c @@ -25,5 +25,5 @@ MODULE_LICENSE("GPL v2"); MODULE_AUTHOR("Felix Morgner"); -MODULE_VERSION("42.1337"); +MODULE_VERSION("42.1337.666"); MODULE_DESCRIPTION("Add CYBER to your system"); diff --git a/src/cyber_file.c b/src/cyber_file.c index d7264c1..deaed39 100644 --- a/src/cyber_file.c +++ b/src/cyber_file.c @@ -39,12 +39,19 @@ int cyber_file_open(struct inode * inode, struct file * file) ssize_t cyber_file_read(struct file * file, char __user * buffer, size_t size, loff_t * offset) { - int const cybers = (size > PAGE_SIZE ? PAGE_SIZE : size) / 8; - if(copy_to_user(buffer, cyberSpace, cybers * 8)) + int const cyberChunks = (size + PAGE_SIZE - 1) / PAGE_SIZE; + int const cybersPerChunk = (size > PAGE_SIZE ? PAGE_SIZE : size) / 8; + int remainingChunks = cyberChunks; + + for(; remainingChunks > 0; --remainingChunks) { - return -EFAULT; + if(copy_to_user(buffer, cyberSpace, cybersPerChunk * 8)) + { + return -EFAULT; + } } - return cybers * 8; + + return cyberChunks * cybersPerChunk * 8; } ssize_t cyber_file_write(struct file * file, char __user const * buffer, size_t size, loff_t * offset) |
