Re: Accessing filesystem from a KLD

2005-07-02 Thread Seb
Andrey Simonenko wrote :
 You got page fault from namei(), which is called from vn_open() to lookup
 a path name.  namei() tries to obtain a reference on current directory for
 the current thread.  This current directory (fd_cdir field) is NULL in
 your kthread.  At this point a page fault in kernel address space is
 generated.

You were right :) It works now.

 Can you change fd_cdir in kthread to rootvnode I don't know, haven't
 checked this yet.  

It works - and that's what NDISulator does. You also need to set fd_rdir.

Thanks !

Mike Silbersack wrote :
 Ask [EMAIL PROTECTED] for his code that does exactly what you're 
 asking for. :)

I've looked at Damien's source, but AFAIK in his driver, the firmware is 
loaded from userspace through an ioctl call on the network interface.

___
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to [EMAIL PROTECTED]


Re: Accessing filesystem from a KLD

2005-06-29 Thread Seb
 There's also a desire to provide an easier to use interface for
 drivers to load, for example, firmware.

Is there an existing development ?
I think I'll separate retreiving firmware from the filesystem in another KLD, 
so maybe I should contact the developers...

___
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to [EMAIL PROTECTED]


Re: Accessing filesystem from a KLD

2005-06-29 Thread Seb
 Why not to use VOP_READ?  See how it is called in dev/md.c:mdstart_vnode,
 check kern/vfs_vnops.c:vn_open_cred for information how to lookup a file
 name and open it.

That's what I do, however I use the wrapper functions vn_open(), vn_rdwr() and 
so.

But I have a problem, when I call this code :

void *request_firmware(const char *name, size_t *size)
{
int flags;
char filename[40];
struct nameidata nd;
struct thread *td = curthread;
[...]
NDINIT(nd, LOOKUP, FOLLOW, UIO_SYSSPACE, filename[0], td);
flags = FREAD;
vn_open(nd, flags, 0, -1);
[...]
}

from the KLD handler function (for testing) it works. But when I call it from 
a thread created by kthread_create() in another KLD, I have a page fault.
A few printfs show that the call to vn_open() is responsible for the fault.
I have not forgotten to lock Giant in my kernel thread.
Any ideas ?
Thanks,
Sebastien

___
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to [EMAIL PROTECTED]


Accessing filesystem from a KLD

2005-06-25 Thread Seb
Hello,
How can I access the filesystem from a kernel module ?
In fact, I want my device driver to retreive a firmware image stored on the 
filesystem (instead of putting the firmware data in a static array at 
compile-time) for memory usage and legal concerns. Blocking calls are OK.
I have searched the manpages and the web, but I haven't found anything 
relevant.
Thanks,
Sebastien

___
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to [EMAIL PROTECTED]