23 #include <linux/kernel.h> 24 #include <linux/module.h> 26 #include <linux/cdev.h> 27 #include <linux/smp.h> 28 #include <linux/types.h> 29 #include <linux/time.h> 30 #include <linux/uaccess.h> 31 #include <linux/device.h> 32 #include <linux/slab.h> 43 #define NUM(dev) (MINOR(dev) & 0xf) 58 size_t len, loff_t *
offset);
60 size_t len, loff_t *
offset);
102 printk(KERN_WARNING
"Can't create cdev for kemd%d.\n",
i);
103 for (
i -= 1;
i > 0;
i--)
124 kfree(rbs[
i].kr_buf);
144 printk(KERN_WARNING
"Can't allocate buffers %dth obj.\n",
i);
145 for (j = 0; j <
i; j++)
146 kfree(rbs[j].kr_buf);
157 printk(KERN_INFO
"Number of CPUs: %d.\n",
kemd_nr_cpus);
161 printk(KERN_WARNING
"Can't allocate kemd_rbs.\n");
166 printk(KERN_WARNING
"Can't allocate kemd_rbs.\n");
172 printk(KERN_WARNING
"Can't allocate mem for kemd_devices.\n");
186 printk(KERN_INFO
"Init devno: %d.\n", devno);
189 printk(KERN_WARNING
"Can't get major %d.\n",
kemd_major);
195 printk(KERN_WARNING
"Can't init kemd chrdevs.\n");
221 printk(KERN_INFO
"kemd cleanup.\n");
224 printk(KERN_INFO
"devs destroyed.\n");
227 printk(KERN_INFO
"chrdev unreg.\n");
230 printk(KERN_INFO
"kfree kemd_devices.\n");
234 printk(KERN_INFO
"kfree kemd_rbs.\n");
245 if (atomic_read(&kemd_dev->
kd_busy) != 0)
249 atomic_inc(&kemd_dev->
kd_busy);
261 atomic_dec(&kemd_dev->
kd_busy);
267 size_t len, loff_t *
offset)
273 unsigned int nr_ents;
274 unsigned int nr_written;
278 kemd_dev = (
struct kem_dev *)filp->private_data;
281 nr_ents = len /
sizeof(*
ent);
283 nr_written = atomic_read(&
rb->kr_written);
284 if (nr_ents > nr_written)
285 nr_ents = nr_written;
290 for (
i = 0;
i < nr_ents;
i++) {
291 ent = &
rb->kr_buf[
rb->kr_read_idx];
292 err = copy_to_user(
buf,
ent,
sizeof(*
ent));
294 bytes_read = -EFAULT;
298 bytes_read +=
sizeof(*ent);
301 atomic_dec(&
rb->kr_written);
309 size_t len, loff_t *off)
static void ptr(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
#define KEMD_READ_PORTION
static void kemd_cleanup_module(void)
static int kemd_release(struct inode *inode, struct file *filp)
module_init(kemd_init_module)
module_exit(kemd_cleanup_module)
static int kemd_open(struct inode *inode, struct file *filp)
static ssize_t kemd_read(struct file *filp, char *buf, size_t len, loff_t *offset)
static void kemd_dev_destroy(int i)
static struct file_operations kemd_fops
static m0_bindex_t offset
static void kemd_devs_destroy(void)
static struct kem_dev * kemd_devices
static int kemd_init_module(void)
static int kemd_devs_create(void)
static ssize_t kemd_write(struct file *filp, const char *buf, size_t len, loff_t *offset)
int kemd_rbs_init(struct kem_rb *rbs)
void kemd_rbs_free(struct kem_rb *rbs)
static int kemd_dev_create(int i)