I am writing a driver that maps kernel memory to user space using the 
devmap() framework. This works well if the length parameter for mmap() 
is page-aligned. If not, EINVAL is returned by mmap().

I am running SXCE snv_66. Looking at the current version of 
uts/common/vm/seg_dev.c, where the device drivers devmap() callback is 
called, I see:
                 if ((ret = cdev_devmap(dev, dhp, map_off,
                     resid_len, &map_len, get_udatamodel())) != 0) {
                         free_devmap_handle(dhp_head);
                         return (ENXIO);
                 }

                 if (map_len & PAGEOFFSET) {
                         free_devmap_handle(dhp_head);
                         return (EINVAL);
                 }

Why does map_len have to be page-aligned? devmap(9E) doesn't mention 
this (says it has to be <= the mmap() len), and the example there does 
no alignment, too. Also, I tried and returned ptob(btopr((len)), but it 
did not fix the problem (and violated the maplen <= len constraint - but 
  ptob(btop((len)) wouldn't make sense, either).

The problem must be somewhere else in the path. Can anyone give me a 
pointer?

  thanks, Joachim

-- 
Joachim Worringen, Software Architect, Dolphin Interconnect Solutions
phone ++49/(0)228/324 08 17 - http://www.dolphinics.com
_______________________________________________
driver-discuss mailing list
driver-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/driver-discuss

Reply via email to