[uml-devel] Using __initcall from um/drivers/chan_kern.c / fun with keyboard

2005-10-03 Thread Nelson Castillo
Hi, I'm sending a patch that allows me to query the
number of keys pressed by the user (I'll copy [4]).

Actually, I'm counting scancodes and some keys
send more than one.

It works well.

--
# cat /proc/keystrokes
29
--

I read [1] and skimmed over [2] and I think I'm using
the __init and __initcall macros well, but I get this
error when I try to use them:

CC  arch/um/drivers/chan_kern.o
arch/um/drivers/chan_kern.c:111: error: `proc_kst_init' undeclared
here (not in a function)
arch/um/drivers/chan_kern.c:98: warning: `proc_kts_init' defined but not used
make[1]: *** [arch/um/drivers/chan_kern.o] Error 1
make: *** [arch/um/drivers] Error 2

98   : static int __init proc_kts_init(void)
99   : {

111 : __initcall(proc_kst_init);

What should I do/try?

Can I use these macros in um/drivers/chan_kern.c?

Related questions:

* Is there a better place to to this in UML?

* What would be the right place to do in
   ix86 (or arch independant)?

  Blaisorblade told me to it in serio[3], but I don't know
  where I should put the hooks. I think I can also use
  drivers/char/keyboard.c

[1]http://people.netfilter.org/~rusty/unreliable-guides/kernel-hacking/routines-init-again.html
[2]http://geek.vtnet.ca/doc/initcall/review.html
[3]http://marc.theaimsgroup.com/?l=user-mode-linux-userm=112827478307626w=2
[4]http://bodq.vstu.edu.ua/activity/data/k.html

--
Homepage : http://geocities.com/arhuaco

The first principle is that you must not fool yourself
and you are the easiest person to fool.
 -- Richard Feynman.
diff -u linux-2.6.13.2.orig/arch/um/drivers/chan_kern.c linux-2.6.13.2/arch/um/drivers/chan_kern.c
--- linux-2.6.13.2.orig/arch/um/drivers/chan_kern.c	2005-09-16 20:02:12.0 -0500
+++ linux-2.6.13.2/arch/um/drivers/chan_kern.c	2005-10-03 00:22:14.0 -0500
@@ -19,6 +19,101 @@
 #include line.h
 #include os.h
 
+#define CONFIG_PROC_KSTROKES
+
+/*
+ * I'm trying to learn how to intercept keyboard keystrokes in
+ * Linux. I want to gather some statistics. 
+ *
+ * For instance, a count of each pressed key (A-Z). I guess I will
+ * have to do ( counter % 100) on each counter for security reasons.
+ * 
+ * Arhuaco. Oct 2 / 2005.
+ */
+
+#ifdef CONFIG_PROC_KSTROKES
+
+#define KST_DEBUG 1
+#define KST_LOG_LEN 32
+
+#include linux/seq_file.h
+#include linux/proc_fs.h
+#include linux/init.h 
+
+/*
+ * Do we need this to use __init and __initcall?
+ * #include linux/module.h  */ 
+
+unsigned int kst_count = 0;
+
+#if KST_DEBUG 
+char kst_log[KST_LOG_LEN];
+int  kst_actual = 0;
+#endif
+
+static int proc_kst_show(struct seq_file *m, void *v)
+{
+  #if KST_DEBUG 
+int error = 0;
+int i;
+
+error =
+  #endif
+
+  seq_printf(m, %d\n, kst_count);
+
+  #if KST_DEBUG 
+
+  for (i = 0; !error  i  KST_LOG_LEN; i++)
+  {
+if (i)
+  error = seq_putc(m, ' ');
+
+if (!error)
+  error = seq_printf(m, %x, kst_log[i]);
+  }
+
+  if (!error)
+seq_printf(m, \nactual %d\n, kst_actual);
+
+  #endif
+
+  return 0;
+}
+
+static int proc_kst_open(struct inode *inode, struct file *file)
+{
+  return single_open(file, proc_kst_show, NULL);
+}
+
+static struct file_operations proc_kst_operations = {
+  .open = proc_kst_open,
+  .read = seq_read,
+  .llseek   = seq_lseek,
+  .release  = single_release,
+};
+
+
+static int /*__init*/ proc_kts_init(void)
+{
+  struct proc_dir_entry *e;
+
+  e = create_proc_entry(keystrokes, 0, NULL);
+
+  if (e)
+e-proc_fops = proc_kst_operations;
+  else
+printk(KERN_ERR chan_kern.c : /proc/keystrokes creation failed \n);
+
+  return 0;
+}
+
+/* __initcall(proc_kst_init);  == Make it work */
+
+int kst_did_init = 0;
+
+#endif /* CONFIG_PROC_KSTROKES */
+
 #ifdef CONFIG_NOCONFIG_CHAN
 
 /* The printk's here are wrong because we are complaining that there is no
@@ -113,6 +208,22 @@
 		return(0);
 	else if(n == 0)
 		return(-EIO);
+
+#ifdef CONFIG_PROC_KSTROKES
+  kst_count ++;
+
+  if (!kst_did_init) /* TODO: use __initcall */
+  {
+proc_kts_init();
+kst_did_init = 1;
+  }
+  
+  #if KST_DEBUG 
+kst_log[kst_actual] = *c_out;
+kst_actual  = (kst_actual + 1) % KST_LOG_LEN;
+  #endif
+#endif
+
 	return(n);
 }
 

--- linux-2.6.13.2.orig/arch/um/drivers/chan_kern.c	2005-09-16 20:02:12.0 -0500
+++ linux-2.6.13.2/arch/um/drivers/chan_kern.c	2005-10-03 00:57:26.0 -0500
@@ -19,6 +19,99 @@
 #include line.h
 #include os.h
 
+#define CONFIG_PROC_KSTROKES
+
+/*
+ * I'm trying to learn how to intercept keyboard keystrokes in
+ * Linux. I want to gather some statistics. 
+ *
+ * For instance, a count of each pressed key (A-Z). I guess I will
+ * have to do ( counter % 100) on each counter for security reasons.
+ * 
+ * Arhuaco. Oct 2 / 2005.
+ */
+
+#ifdef CONFIG_PROC_KSTROKES
+
+#define KST_DEBUG 1
+#define KST_LOG_LEN 32
+
+#include linux/seq_file.h
+#include linux/proc_fs.h
+#include linux/init.h 
+
+/*
+ * Do we need this to use __init and __initcall?
+ * #include linux/module.h  */ 
+

Re: [uml-devel] Clearing kmalloc_ok during shutdown is broken - malloc will clear our data.

2005-10-03 Thread Blaisorblade
On Monday 03 October 2005 15:40, Allan Graves wrote:
 I'm not understanding why glibc would break the registers at will.
  From setjmp:
 /* NOTE: The machine-dependent definitions of `__sigsetjmp'
assume that a `jmp_buf' begins with a `__jmp_buf' and that
`__mask_was_saved' follows it.  Do not move these members
or add others before it.  */

 Seems to indicate to me that this isn't gonna change,
the comments above are mostly relative to the definitions of __sigsetjmp, i.e. 
to glibc internal code. Also, it's related to the layout of the structure, 
while our main problem is not the structure layout.
 and I'm using the 
 bits/setjmp.h defines, so if they do change, the code should just follow
 along with the change.  Am I missing something?
I didn't even see those constants - I stopped earlier, at __jmp_buf_tag. Given 
that it feels like a Glibc private thing, I worried.

Since those constants are explicitly exported, I guess that's for userspace 
programs as well, so Glibc provides that API as a public one.
-- 
Inform me of my mistakes, so I can keep imitating Homer Simpson's Doh!.
Paolo Giarrusso, aka Blaisorblade (Skype ID PaoloGiarrusso, ICQ 215621894)
http://www.user-mode-linux.org/~blaisorblade





___ 
Yahoo! Mail: gratis 1GB per i messaggi e allegati da 10MB 
http://mail.yahoo.it



---
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
___
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel


Re: [uml-devel] Using __initcall from um/drivers/chan_kern.c / fun with keyboard

2005-10-03 Thread Blaisorblade
On Monday 03 October 2005 08:02, Nelson Castillo wrote:
 Hi, I'm sending a patch that allows me to query the
 number of keys pressed by the user (I'll copy [4]).


 --
 # cat /proc/keystrokes
 29
 --

 I read [1] and skimmed over [2] and I think I'm using
 the __init and __initcall macros well, but I get this
 error when I try to use them:

 CC  arch/um/drivers/chan_kern.o
 arch/um/drivers/chan_kern.c:111: error: `proc_kst_init' undeclared
 here (not in a function)
 arch/um/drivers/chan_kern.c:98: warning: `proc_kts_init' defined but not
If you pasted the correct error message and the correct code, they both say 
kst on one line and kts on the other. You have a trivial typo.

 What should I do/try?

 Can I use these macros in um/drivers/chan_kern.c?
Yes, take the right include and you can (use linux/init.h, not 
arch/um/include/init.h)

   Blaisorblade told me to it in serio[3], but I don't know
   where I should put the hooks. I think I can also use
   drivers/char/keyboard.c
If it's arch-independent, you maybe can. But you'd better ask this on LKML, 
probably.
-- 
Inform me of my mistakes, so I can keep imitating Homer Simpson's Doh!.
Paolo Giarrusso, aka Blaisorblade (Skype ID PaoloGiarrusso, ICQ 215621894)
http://www.user-mode-linux.org/~blaisorblade


___ 
Yahoo! Messenger: chiamate gratuite in tutto il mondo 
http://it.messenger.yahoo.com



---
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
___
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel


Re: [uml-devel] a question about sigsetjmp() in copy_from/to_user()

2005-10-03 Thread Blaisorblade
On Sunday 02 October 2005 20:31, Jeff Dike wrote:
 On Sun, Oct 02, 2005 at 12:23:14PM +0200, Blaisorblade wrote:
  Sorry, any reference will fault, unless it is done on a allocated present
  page, which the UML kernel freed but the host didn't. And remember, btw,
  you've planned to make this impossible...

 You are not making any sense t me here.

/dev/anon - when the UML kernel frees a page, we ask the host to free it too.

  Sorry, Jeff, which page are you going to evict? It can be a dirty page.
  Unless you mean that since that page is still accounted in the FS, Linux
  will leave a RAM page free to allow it to be re-read, while still
  swapping the page.

 Swapped pages are accounted in the FS all the time and there's obviously
 no dedicated page left free for them when they are next pulled in.  All
 disk-based filesystems account pages that are on disk and not in memory.
 tmpfs is no different, except that its disk is the swap partition.
Exactly what I knew...

However, I was in error...

I just saw that filling the disk, or tmpfs, is rather different than going 
OOM. OOM causes SIGKILL, while SIGBUS (as you correctly said) comes from full 
disk/partition, or filled disk quota. I only checked tmpfs, but that gives at 
least a feeling.
-- 
Inform me of my mistakes, so I can keep imitating Homer Simpson's Doh!.
Paolo Giarrusso, aka Blaisorblade (Skype ID PaoloGiarrusso, ICQ 215621894)
http://www.user-mode-linux.org/~blaisorblade






___ 
Yahoo! Mail: gratis 1GB per i messaggi e allegati da 10MB 
http://mail.yahoo.it



---
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
___
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel


[uml-devel] Re: UML/2.6.14-rc3 doesn't work fixes

2005-10-03 Thread Blaisorblade
On Sunday 02 October 2005 22:54, Al Viro wrote:
 BTW, speaking of Kbuild cleanups (and that one is definitely 2.6.15
 fodder): patch below
   * kills messing with lib vs. core for uml-amd64 (we don't need that
 anymore)
I'm even curious why we needed that in first place.

   * kills symlinks in arch/um/sys-*/
   * kills foo.c-dir - we simply give HOST_OBJS=list of pathnames
 under arch/$(SUBARCH) and that's it (no SYMLINKS either)

 Price: use of make feature I really, really hate - $(eval ...). 
I looked at make Changelog, time ago, and this feature was added in make 3.80, 
so you'd need to update Documentation/Changes.

Make 3.80 was released in 2002-10-03, so I hope it's not a problem (should 
check on Debian Woody though, maybe).

 I'm using 
 it to generate and process

 bar-y := ../../$(SUBARCH)/foo/bar.o
 ...

 for all HOST_OBJS elements.  If there are better suggestions, I'd be glad
 to hear them...

The first thing is that HOST_OBJS is totally confusing... SUBARCH_OBJS or 
something else is better.

The second is that, even if x86_64 uses things such as  (from 
arch/x86_64/mm/Makefile):

obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o
hugetlbpage-y = ../../i386/mm/hugetlbpage.o
(because hugetlbpage.o is conditional)

we could as well do 

subarch-y := ../../$(SUBARCH)/name
(even with foreach)

for most things (see arch/x86_64/oprofile/Makefile), and for highmem and 
module I'd just do that by hand:

highmem-y := $(SUBARCH_DIR)/mm/highmem.o
module-y := $(SUBARCH_DIR)/kernel/module.o

with SUBARCH_DIR defined in arch/um/Makefile.
-- 
Inform me of my mistakes, so I can keep imitating Homer Simpson's Doh!.
Paolo Giarrusso, aka Blaisorblade (Skype ID PaoloGiarrusso, ICQ 215621894)
http://www.user-mode-linux.org/~blaisorblade






___ 
Yahoo! Mail: gratis 1GB per i messaggi e allegati da 10MB 
http://mail.yahoo.it



---
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
___
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel


Re: [uml-devel] Using __initcall from um/drivers/chan_kern.c / fun with keyboard

2005-10-03 Thread Nelson Castillo
On 10/3/05, Blaisorblade [EMAIL PROTECTED] wrote:
You have a trivial typo.

Yup :( Thanks.

--
Homepage : http://geocities.com/arhuaco

The first principle is that you must not fool yourself
and you are the easiest person to fool.
 -- Richard Feynman.


---
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
___
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel


Re: [uml-devel] a question about sigsetjmp() in copy_from/to_user()

2005-10-03 Thread Jeff Dike
On Mon, Oct 03, 2005 at 08:35:54PM +0200, Blaisorblade wrote:
 /dev/anon - when the UML kernel frees a page, we ask the host to free it too.

Yeah, /dev/anon is a completely different story, but I thought we were talking
about normal tmpfs.

Jeff


---
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
___
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel


[uml-devel] Re: UML/2.6.14-rc3 doesn't work fixes

2005-10-03 Thread Al Viro
On Mon, Oct 03, 2005 at 08:30:23PM +0200, Blaisorblade wrote:
 The second is that, even if x86_64 uses things such as  (from 
 arch/x86_64/mm/Makefile):
 
 obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o
 hugetlbpage-y = ../../i386/mm/hugetlbpage.o
 (because hugetlbpage.o is conditional)
 
 we could as well do 
 
 subarch-y := ../../$(SUBARCH)/name
 (even with foreach)

Err...  Kbuild won't know what to do with your subarch-y.  The way it works
is simple - we are saying that e.g. bitops.o is a multi-part object with
only one part, namely ../../i386/lib/bitops.o.  Said part is built by the
normal Kbuild logics and then we get (dummy) linking, creating bitops.o.

 for most things (see arch/x86_64/oprofile/Makefile), and for highmem and 
 module I'd just do that by hand:
 
 highmem-y := $(SUBARCH_DIR)/mm/highmem.o
 module-y := $(SUBARCH_DIR)/kernel/module.o
 
 with SUBARCH_DIR defined in arch/um/Makefile.

Hrm...   That just might be usable, _if_ we never run into modular suckers;
in that case we can do the following:

ifneq ($(subarch-objs-y),)
obj-y += subarch.o
subarch-y = $(addprefix ../../$(SUBARCH),$(subarch-objs-y))
endif

in arch/um/scripts/Makefile.rules with

subarch-y = .
subarch-$(CONFIG_MODULE) += kernel/module.o
etc. in arch/um/sys-.../Makefile

The thing is, if we _ever_ need a potentially modular object pulled from
the underlying architecture that trick will break.  So far we do not and
since $(eval...) *is* a vile mess straight from the GNU intestine...


---
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
___
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel