예제 #1
0
static int proc_write(struct file *filp, const char __user *buff,
                      unsigned long len, void *data)
{
    unsigned int page_no = 0, clen = 0;

    if (copy_from_user(&buffer, buff, len))
        return -EFAULT;
    sscanf(buffer, "%u %u", &page_no, &clen);

    if (table[page_no]) {
        used_size -= (unsigned long)ksize(table[page_no]);
        kfree(table[page_no]);
    }
    if (!(table[page_no] = kmalloc(clen, GFP_KERNEL))) {
        printk(KERN_INFO "Error allocating mem for page: %u\n", page_no);
    } else {
        used_size += (unsigned long)ksize(table[page_no]);
    }

    count++;
    sprintf(buffer, "%lu %lu %lu\n", count, used_size, used_size >> 10);

    relay_write(relay, buffer, strlen(buffer));

    return len;
}
예제 #2
0
static ssize_t proc_write(struct file *filp, const char __user *buff,
			unsigned long len, void *data)
{
	unsigned int page_no = 0, clen = 0;
	unsigned long used_size;
	
	if (copy_from_user(&buffer, buff, len)) {
		pr_info("Error copying buffer from user: len=%lu\n", len);
		return -EFAULT;
	}
	//pr_info("buffer=[%s]\n", buffer);
	sscanf(buffer, "%u %u", &page_no, &clen);

	//temp
	//buffer[len] = '\0';

	if (table[page_no])
		tlsf_free(table[page_no], mem_pool);
	if (!(table[page_no] = tlsf_malloc(clen, mem_pool)))
		pr_info("Error allocating mem for page: %u\n", page_no);
	used_size = (unsigned long)tlsf_get_used_size(mem_pool);

	count++;
        //spin_lock(&write_lock);
	//sprintf(buffer, "%lu\n", used_size);
	sprintf(buffer, "%lu %lu %lu\n", count, used_size, used_size >> 10);
	relay_write(relay, buffer, strlen(buffer));
        //relay_write(relay, &used_size, sizeof(unsigned long));
        //spin_unlock(&write_lock);
	return len;
}
예제 #3
0
파일: spectral.c 프로젝트: Jalil89/openwrt
static void ath_debug_send_fft_sample(struct ath_softc *sc,
				      struct fft_sample_tlv *fft_sample_tlv)
{
	int length;
	if (!sc->rfs_chan_spec_scan)
		return;

	length = __be16_to_cpu(fft_sample_tlv->length) +
		 sizeof(*fft_sample_tlv);
	relay_write(sc->rfs_chan_spec_scan, fft_sample_tlv, length);
}
예제 #4
0
파일: console.c 프로젝트: drthth/busware
int cmd_relay(int argc, char *argv[]) {
	unsigned char pin,value;
	unsigned short module;
	
	module = MODULE1;
	if(!(module_exists(module) && (module_profile_id(module) == PROFILE_RELAY))) {
		cmd_print("No relay available.");
		return(0);
	}

	if (argc == 2) {
		pin = ustrtoul(argv[1],NULL,0);
		cmd_print("\r\nrelay module: %d pin: %d value: %d",module,pin, relay_read(module,pin));

	} else if (argc == 3) {
		pin = ustrtoul(argv[1],NULL,0);
		value = ustrtoul(argv[2],NULL,16);
		relay_write(module,pin,value);
	}
	return(0);
}
예제 #5
0
static void kvm_add_trace(void *probe_private, void *call_data,
			  const char *format, va_list *args)
{
	struct kvm_trace_probe *p = probe_private;
	struct kvm_trace *kt = kvm_trace;
	struct kvm_trace_rec rec;
	struct kvm_vcpu *vcpu;
	int    i, size;
	u32    extra;

	if (unlikely(kt->trace_state != KVM_TRACE_STATE_RUNNING))
		return;

	rec.rec_val	= TRACE_REC_EVENT_ID(va_arg(*args, u32));
	vcpu		= va_arg(*args, struct kvm_vcpu *);
	rec.pid		= current->tgid;
	rec.vcpu_id	= vcpu->vcpu_id;

	extra   	= va_arg(*args, u32);
	WARN_ON(!(extra <= KVM_TRC_EXTRA_MAX));
	extra 		= min_t(u32, extra, KVM_TRC_EXTRA_MAX);

	rec.rec_val |= TRACE_REC_TCS(p->timestamp_in)
			| TRACE_REC_NUM_DATA_ARGS(extra);

	if (p->timestamp_in) {
		rec.u.timestamp.timestamp = ktime_to_ns(ktime_get());

		for (i = 0; i < extra; i++)
			rec.u.timestamp.extra_u32[i] = va_arg(*args, u32);
	} else {
		for (i = 0; i < extra; i++)
			rec.u.notimestamp.extra_u32[i] = va_arg(*args, u32);
	}

	size = calc_rec_size(p->timestamp_in, extra * sizeof(u32));
	relay_write(kt->rchan, &rec, size);
}
예제 #6
0
static int __init my_init(void)
{
	int j, k;
	char data[64];
	spinlock_t dumb_lock;
	mychan = relay_open(fname, NULL, SB_SIZE, N_SB, &relay_callbacks, NULL);

	/* can't use smp_processor_id() properly otherwise */
	spin_lock_init(&dumb_lock);
	for (k = 0; k < 10; k++) {	/* do this for a minute */
		spin_lock(&dumb_lock);
		for (j = 0; j < 10; j++) {
			memset(data, 0, 64);
			sprintf(data, "data=%d\n", j * k);
			relay_write(mychan, data, 64);
		}
		printk(KERN_INFO "Relay Channel %s loaded on cpu=%d.\n", fname,
		       smp_processor_id());
		spin_unlock(&dumb_lock);
		msleep(6000);
	}
	return 0;
}