#
43ab9660 |
| 09-Jan-2013 |
Kenneth D. Merry <ken@FreeBSD.org> |
Fix a bug in the device pager code that can trigger an assertion in devfs if a particular race condition is hit in the device pager code.
This was a side effect of change 227530 which changed the de
Fix a bug in the device pager code that can trigger an assertion in devfs if a particular race condition is hit in the device pager code.
This was a side effect of change 227530 which changed the device pager interface to call a new destructor routine for the cdev. That destructor routine, old_dev_pager_dtor(), takes a VM object handle.
The object handle is cast to a struct cdev *, and passed into dev_rel().
That works in most cases, except the case in cdev_pager_allocate() where there is a race condition between two threads allocating an object backed by the same device. The loser of the race deallocates its object at the end of the function.
The problem is that before inserting the object into the dev_pager_object_list, the object's handle is changed from the struct cdev pointer to the object's own address. This is to avoid conflicts with the winner of the race, which already inserted an object in the list with a handle that is a pointer to the same cdev structure.
The object is then passed to vm_object_deallocate(), and eventually makes its way down to old_dev_pager_dtor(). That function passes the handle pointer (which is actually a VM object, not a struct cdev as usual) into dev_rel(). dev_rel() decrements the reference count in the assumed struct cdev (which happens to be 0), and that triggers the assertion in dev_rel() that the reference count is greater than or equal to 0.
The fix is to add a cdev pointer to the VM object, and use that pointer when calling the cdev_pg_dtor() routine.
vm_object.h: Add a struct cdev pointer to the VM object structure.
device_pager.c: In cdev_pager_allocate(), populate the new cdev pointer.
In dev_pager_dealloc(), use the new cdev pointer when calling the object's cdev_pg_dtor() routine.
Reviewed by: kib Sponsored by: Spectra Logic Corporation MFC after: 1 week
show more ...
|
Revision tags: release/9.1.0 |
|
#
300675f6 |
| 27-Nov-2012 |
Alexander Motin <mav@FreeBSD.org> |
MFC
|
#
e477abf7 |
| 27-Nov-2012 |
Alexander Motin <mav@FreeBSD.org> |
MFC @ r241285
|
#
32484645 |
| 17-Nov-2012 |
Neel Natu <neel@FreeBSD.org> |
IFC @ r243164
|
#
43f48b65 |
| 16-Nov-2012 |
Konstantin Belousov <kib@FreeBSD.org> |
Move the declaration of vm_phys_paddr_to_vm_page() from vm/vm_page.h to vm/vm_phys.h, where it belongs.
Requested and reviewed by: alc MFC after: 2 weeks
|
#
a10c6f55 |
| 11-Nov-2012 |
Neel Natu <neel@FreeBSD.org> |
IFC @ r242684
|
#
23090366 |
| 04-Nov-2012 |
Simon J. Gerraty <sjg@FreeBSD.org> |
Sync from head
|
#
d2679663 |
| 10-Aug-2012 |
Gleb Smirnoff <glebius@FreeBSD.org> |
Merge head r233826 through r239173.
|
#
1c771f92 |
| 05-Aug-2012 |
Konstantin Belousov <kib@FreeBSD.org> |
After the PHYS_TO_VM_PAGE() function was de-inlined, the main reason to pull vm_param.h was removed. Other big dependency of vm_page.h on vm_param.h are PA_LOCK* definitions, which are only needed f
After the PHYS_TO_VM_PAGE() function was de-inlined, the main reason to pull vm_param.h was removed. Other big dependency of vm_page.h on vm_param.h are PA_LOCK* definitions, which are only needed for in-kernel code, because modules use KBI-safe functions to lock the pages.
Stop including vm_param.h into vm_page.h. Include vm_param.h explicitely for the kernel code which needs it.
Suggested and reviewed by: alc MFC after: 2 weeks
show more ...
|
#
b652778e |
| 11-Jul-2012 |
Peter Grehan <grehan@FreeBSD.org> |
IFC @ r238370
|
#
2d5e7d2e |
| 30-May-2012 |
Will Andrews <will@FreeBSD.org> |
IFC @ r236291. Diff reductions to the enclosure driver made in r235911.
|
#
31ccd489 |
| 28-May-2012 |
Gleb Smirnoff <glebius@FreeBSD.org> |
Merge head r233826 through r236168.
|
#
df2f557d |
| 18-May-2012 |
Konstantin Belousov <kib@FreeBSD.org> |
Do not double-reference the found vm object in cdev_pager_lookup(). vm_pager_object_lookup() already referenced the object.
Note that there is no in-tree consumers of cdev_pager_lookup(). The only k
Do not double-reference the found vm object in cdev_pager_lookup(). vm_pager_object_lookup() already referenced the object.
Note that there is no in-tree consumers of cdev_pager_lookup(). The only known user of the function is i915 gem driver, which is not yet imported. This should make the KPI change minor.
Submitted by: avg MFC after: 1 week
show more ...
|
#
6a068746 |
| 15-May-2012 |
Alexander Motin <mav@FreeBSD.org> |
MFC
|
#
b7ac5a85 |
| 12-May-2012 |
Konstantin Belousov <kib@FreeBSD.org> |
Add new pager type, OBJT_MGTDEVICE. It provides the device pager which carries fictitous managed pages. In particular, the consumers of the new object type can remove all mappings of the device page
Add new pager type, OBJT_MGTDEVICE. It provides the device pager which carries fictitous managed pages. In particular, the consumers of the new object type can remove all mappings of the device page with pmap_remove_all().
The range of physical addresses used for fake page allocation shall be registered with vm_phys_fictitious_reg_range() interface to allow the PHYS_TO_VM_PAGE() to work in pmap.
Most likely, only i386 and amd64 pmaps can handle fictitious managed pages right now.
Sponsored by: The FreeBSD Foundation Reviewed by: alc MFC after: 1 month
show more ...
|
Revision tags: release/8.3.0_cvs, release/8.3.0 |
|
#
8fa0b743 |
| 23-Jan-2012 |
Xin LI <delphij@FreeBSD.org> |
IFC @230489 (pending review).
|
Revision tags: release/9.0.0 |
|
#
3ee1a36e |
| 22-Nov-2011 |
Peter Grehan <grehan@FreeBSD.org> |
IFC @ r227804
Pull in the virtio drivers from head.
|
#
286790a7 |
| 15-Nov-2011 |
Konstantin Belousov <kib@FreeBSD.org> |
Update the device pager interface, while keeping the compatibility layer for old KPI and KBI. New interface should be used together with d_mmap_single cdevsw method.
Device pager can be allocated w
Update the device pager interface, while keeping the compatibility layer for old KPI and KBI. New interface should be used together with d_mmap_single cdevsw method.
Device pager can be allocated with the cdev_pager_allocate(9) function, which takes struct cdev_pager_ops, containing constructor/destructor and page fault handler methods supplied by driver.
Constructor and destructor, called at the pager allocation and deallocation time, allow the driver to handle per-object private data.
The pager handler is called to handle page fault on the vm map entry backed by the driver pager. Driver shall return either the vm_page_t which should be mapped, or error code (which does not cause kernel panic anymore). The page handler interface has a placeholder to specify the access mode causing the fault, but currently PROT_READ is always passed there.
Sponsored by: The FreeBSD Foundation Reviewed by: alc MFC after: 1 month
show more ...
|
#
fab4c373 |
| 16-Sep-2011 |
Peter Grehan <grehan@FreeBSD.org> |
IFC @ r225592
sys/dev/bvm/bvm_console.c - move up to the new alt-break order.
|
#
cf914969 |
| 15-Aug-2011 |
Justin T. Gibbs <gibbs@FreeBSD.org> |
Integrate FreeBSD/head into projects/zfsd/head as of SVN revision 224870.
|
#
339772b0 |
| 30-Jul-2011 |
Konstantin Belousov <kib@FreeBSD.org> |
Fix a race in the device pager allocation. If another thread won and allocated the device pager for the given handle, then the object fictitious pages list and the object membership in the global obj
Fix a race in the device pager allocation. If another thread won and allocated the device pager for the given handle, then the object fictitious pages list and the object membership in the global object list still need to be initialized. Otherwise, dev_pager_dealloc() will traverse uninitialized pointers.
Reported and tested by: pho Reviewed by: jhb Approved by: re (kensmith) MFC after: 1 week
show more ...
|
#
bd2228ab |
| 19-Jul-2011 |
Peter Grehan <grehan@FreeBSD.org> |
IFC @ r224187
|
#
935205e2 |
| 17-Jul-2011 |
Justin T. Gibbs <gibbs@FreeBSD.org> |
Integrate from Head into ZFSD feature branch as of revision r224141.
|
#
91a1929f |
| 06-Jul-2011 |
Attilio Rao <attilio@FreeBSD.org> |
Handle a race between device_pager and devsw in a more graceful manner: return an error code rather than panic the kernel.
Sponsored by: Sandvine Incorporated Reviewed by: kib Tested by: pho MFC aft
Handle a race between device_pager and devsw in a more graceful manner: return an error code rather than panic the kernel.
Sponsored by: Sandvine Incorporated Reviewed by: kib Tested by: pho MFC after: 2 weeks
show more ...
|
#
db06a6f4 |
| 12-Mar-2011 |
Marcel Moolenaar <marcel@FreeBSD.org> |
Merge svn+ssh://svn.freebsd.org/base/head@219553
|