Commit Graph

2328 Commits

Author SHA1 Message Date
Ingo Weinhold
d6778355ee * <DiskDeviceTypes.h>: Removed kPartitionTypeIntel{Primary,Logical} constants.
* Added new header headers/private/system/disk_device_types.h, which defines
  the <DiskDeviceTypes.h> constants as macros and which can be used where the
  constants cannot be used. The constants are defined using the macros, so now
  there's only one place where the string literals should be specified.
* Use the macros in the partitioning systems. I was too lazy to also adjust the
  file systems -- most of them seem to hard-code the string literal yet.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33386 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-01 03:07:42 +00:00
Ingo Weinhold
a9689e8492 * VFS:
- Fixed vfs_get_vnode_from_fd() return type.
  - Added vfs_open_vnode().
  - Added a "bool traverseLeafLink" parameter to vfs_get_fs_node_from_path().
    It was always resolving symlinks.
* device manager/devfs:
  - devfs: get_node_for_path() no longer resolves leaf symlinks. That still
    doesn't help with file disk devices, as creating partition wouldn't work
    anyway.
  - Pulled the module-related implementation part of BaseDevice into new class
    AbstractModuleDevice and made all methods of BaseDevice virtual. Small
    adjustments to devfs to be happy with the new BaseDevice interface.
  - Added BaseDevice subclass FileDevice, which maps the interface to a file's
    file descriptor. Still got a few TODOs, but should basically work.
  - Use FileDevice for publishing file disk devices in devfs. Now those do
    actually work, though there's some BFS trouble with one of the images I
    tested.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33385 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-01 03:06:34 +00:00
Ingo Weinhold
3c4721f516 The B_DISK_DEVICE_IS_FILE flag is cleared by KDiskDevice and needs to be reset.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33383 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-01 03:04:32 +00:00
Ingo Weinhold
80ea5e3508 Fixed incorrect return value of _user_get_file_disk_device_path().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33382 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-01 03:03:56 +00:00
Ingo Weinhold
c51d6579e4 Fixed incorrect uses of user_{strl,mem}cpy() in the kernel debugger. This could
break stack traces.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33381 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-01 03:03:16 +00:00
Ingo Weinhold
be51dd0f4c Added debug_strlcpy() for use in the kernel debugger.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33380 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-01 03:02:34 +00:00
Ingo Weinhold
268335a069 After creating a userland thread we didn't set up the breakpoints for it.
Fixes #4665.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33369 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-30 08:40:55 +00:00
Stefano Ceccherini
fee1bc8eed Back to timer 2, since timer 0 doesn't work at all.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33368 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-30 06:34:15 +00:00
Stefano Ceccherini
ea40a61a84 Some big changes, still not working on my laptop, since hpet interrupts
aren't routed correctly over the 8259, it seems.
- Removed passing the hpet_regs around, since there's a static variable.
- Added lots of debug dprintfs.
- Fixed setting the timer interrupt to edge
- Timer is initialized once.
- Use the timer 0 instead of 2.
- Renamed register definitions to be more readable
- Use 64 bits registers and unions where applicable.
- Other things I don't remember


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33345 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-29 08:36:36 +00:00
Stefano Ceccherini
8593bcad87 Use the hpet defines in the source.
Also shortened some defines using "TN" instead of "TIMER". It's also
the same scheme used in the specs


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33334 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-28 13:14:16 +00:00
Ingo Weinhold
ac106be534 Inherit the disable_debugger() flag to a fork()ed child. load_image() doesn't
-- I'm undecided whether it should, too. Fixes #4642.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33330 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-28 02:54:38 +00:00
Stefano Ceccherini
6dc4fd11a2 Uncommented the hpet timer from the timers list.
Lowered its priority of hpet timer so it doesn't get picked up first
(yet)
Changed the debug output to be conditional.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33292 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-25 10:48:37 +00:00
Stefano Ceccherini
6d92e80531 - Moved timer conversion to a method, and added LL to the conversion
factor to avoid compiler issues.
- Removed some useless and commented debug stuff.
- Now prints also the global HPET configuration.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33291 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-25 10:36:39 +00:00
Stefano Ceccherini
4687d95b68 Renamed x86_hpet.c to x86_hpet.cpp and fixed the compile errors.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33290 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-25 09:50:32 +00:00
Stefano Ceccherini
8626c1aa5f the HPET timers resolution is REALLY high. The time conversion was off by
1000. XenServer boots correctly and in reasonable time,
now (meaning hpet timers work). I guess on real hw the bios doesn't
correctly program the hpet timers, so we'll need a bit more work.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33289 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-25 09:49:02 +00:00
Stefano Ceccherini
9ea40f7802 Cosmetics.
XenServer actually boots (but slow as hell) with hpet timers enabled, real hardware does
not.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33287 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-25 08:29:42 +00:00
Stefano Ceccherini
d54e62b2c8 Added dumping the timer configuration, and the possibility to use any of
the hpet timer, not just the first 3.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33285 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-25 05:08:22 +00:00
Stefano Ceccherini
b1c4413c56 Turns out the selection sort algorithm was broken for more than... 2 entries,
if they were not already ordered. Or, to say id differently, it was completely
broken.
Luckily no one noticed....
Also disabled again printing the timers, since it could print not available ones.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33235 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-22 19:58:40 +00:00
Stefano Ceccherini
7ddaf32ecc Second (or third) try at getting the timers ordered by priority, in
r33218 I had ordered the timers in the wrong order.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33225 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-21 14:44:11 +00:00
Stefano Ceccherini
ca7ba3eb23 pretty much reverted r33218.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33224 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-21 13:16:13 +00:00
Stefano Ceccherini
77a9df0a47 Disable tracing.
Wow! 4 commits for a simple thing.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33223 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-21 10:21:57 +00:00
Stefano Ceccherini
249346009f Fix for the fix. The previous commit actually broke initalizing timers.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33222 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-21 10:21:00 +00:00
Stefano Ceccherini
9091ba579c Don't print an error if the initialization actually succeeded.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33221 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-21 10:18:56 +00:00
Stefano Ceccherini
cb35a69347 Introduce the PIT commands as defines and used them in the pit timer
module. They should be used also in the bootloader.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33220 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-21 10:14:15 +00:00
Stefano Ceccherini
bf7902cb4b Fix build with tracing enabled
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33219 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-21 09:50:30 +00:00
Stefano Ceccherini
bed1c0d42e Sort timers by priority before initializing them, so we avoid initializing
timers which we will never use.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33218 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-21 09:49:41 +00:00
Stefano Ceccherini
e5f7219f3a Fixed typo for real. Also disabled tracing for HPET
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33157 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-16 20:23:06 +00:00
Stefano Ceccherini
1412a38e9b Fixed build with tracing enabled.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33153 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-16 12:20:27 +00:00
Stefano Ceccherini
483651906f Fix typo
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33152 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-16 10:40:12 +00:00
Stefano Ceccherini
e08bb3e0f2 Removed leftover
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33151 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-16 10:16:35 +00:00
Stefano Ceccherini
1d5026909d Basically reverted previous commit, since at that point we haven't yet
checked the existence of the apics.
Moved the code to disable the local apic from arch_timer.c to arch_int.cpp, so
we also avoid installing the interrupt handler for it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33149 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-15 20:22:04 +00:00
Stefano Ceccherini
44f6eb85bd removed the 'smp' part from apic_smp_init_timer(), since it's used also without smp (I guess this was a leftover)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33148 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-15 20:00:57 +00:00
Jérôme Duval
40d6120c3b Patch from Vincent Duvert (edited by myself): Implement reboot via ACPI (#4459)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33135 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-14 17:37:53 +00:00
Stefano Ceccherini
da11bb8dcb Use TRACE() instead of dprintf()
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33134 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-14 11:54:48 +00:00
Stefano Ceccherini
4f5ca99156 Added dprintf() to be able to see which driver hangs on load
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33133 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-14 11:47:16 +00:00
Stefano Ceccherini
f0bf38026a Add safemode option to disable the use of APIC timers
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33132 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-14 09:02:15 +00:00
Michael Lotz
1bcca32a9e * Also take into account that the alignment due to B_ANY_KERNEL_BLOCK_ADDRESS
can cause overflows.
* Added a generic IS_VALID_SPOT() macro that checks for overflows and checks if
  the area will fit with the given constraints.
* Use the macro to simplify the places where these checks are necessary.
* Use the provided "end" limit instead of the address space end. It currently
  doesn't matter but makes more sense.
* Rename newBase variables to alignedBase as that's what they are.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33061 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-11 07:29:36 +00:00
Michael Lotz
e717a35b6f * Change the way we check for enough available space when searching for spots
to insert areas so we don't overflow.
* Consequently use the area end (base + size - 1) where appropriate which
  prevents overflows in a few places.
* Properly check for reaching the address space end.
* If we've already found a spot we don't need to recheck if we've found one.
* Simplify the B_EXACT_ADDRESS checks down to a simpler single if statement
  instead of the four seperate ones.
* Properly calculate the search end for B_EXACT_ADDRESS as well, it's also
  base + size - 1.
* Block the full last page now that this actually works without overflowing.
* Some style changes and added spacing.

This should now really fix #2550. Previously the overflow protection didn't
actually work because on allocation we overflowed and completely missed the
protecting area.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33037 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-10 17:58:19 +00:00
Michael Lotz
5332eb402b Style fix. I really tried hard, but still failed...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33034 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-10 02:11:40 +00:00
Michael Lotz
65b5e4d7ed Make use of the address range blocking to guarantee that accessing 0xdeadbeef
and 0xcccccccc (and 64 pages thereafter) in any way will always lead to a crash.
Before it could happen that these ranges were allocated for an area and then
accessing these would not be as evident anymore. Only enabled when the
corresponding paranoid setting is enabled (which it currently is).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33033 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-10 02:09:16 +00:00
Michael Lotz
9aff7f1593 Block the very last page of kernel address space. The problem here is that non
of the VM functions handling areas are overflow safe. If an area is created that
spans across the last page many places will run into an integer overflow. This
mostly concerns the area allocation path in find_and_insert_area_slot() and also
vm_create_anonymous_area() where the loop for mapping pages for B_FULL_LOCK
areas overflows and runs more times than it should leading to #2550.
This could be seen as a workaround. The real fix would be to make everything
overflow safe. The thing is that this does also concern the user of the area
which could easily have forgotten to check for overflows as well, so I am a bit
uneasy with handing out areas that could easily lead to such hard to debug
problems. Since this is really an edge case and this single step safes quite a
bit of extra checks I'd actually be OK with keeping it that way.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33032 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-10 02:03:31 +00:00
Michael Lotz
3794518c2d Also check for read-protection of an area. Adjusted naming from read-only to
write-protected and read-protected.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33031 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-10 01:47:22 +00:00
Michael Lotz
0f4242de40 Implement a vm_block_address_range() function which creates an area with no
mapped pages and a non-read and non-write protection to block a certain address
range from being used by anything.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33030 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-10 01:40:46 +00:00
Michael Lotz
1a053eedc0 Revert r32994 and add a comment to explain the intention. Thanks Ingo for the
clarification.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33001 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-08 16:24:43 +00:00
Michael Lotz
fbcf5f3f92 Don't know what this was supposed to do, but with the VADDR_TO_PDENT() it would
end up as 0 again in any case. It certainly looks correct without it, removing
so it doesn't confuse the next one reading over it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32994 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-08 03:51:17 +00:00
Michael Lotz
257f000bd2 * When reserving pages and there aren't yet enough free pages, only steal as
many pages as are actually missing, not the full count.
* Take into account that free_page_queue_count() can be less than sReservedPages
  (when some of the reserved pages have been allocated already) in
  vm_page_num_unused_pages(). Before it could return negative and therefore
  wrapped numbers.
* Simplify the page scrubber loop by continuing early. Also avoids a needless
  interrupt spin lock acquisition when there's nothing to do.
* Some minor coding style cleanup.
* Fix a typo.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32980 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-07 02:08:09 +00:00
Michael Lotz
1dd6345561 If the boot volume is BFS and read-only mount it with the write_overlay. This
allows for BFS based LiveCDs. Still this whole name matching feels hacky.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32976 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-06 23:15:23 +00:00
Michael Lotz
da3412492a When we actually delete the area, we can obviously not access the next pointer
stored in there anymore.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32951 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-06 05:04:55 +00:00
Michael Lotz
c39414002f Give an IORequest user the possibility to suppress child finish notifications.
This allows for synchronous uses where subrequests are forked off and waited on.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32936 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-05 01:16:56 +00:00
Michael Lotz
c24f6c7b06 When deleting all subrequests the pending children count should probably be
reset as well.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32935 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-05 00:26:29 +00:00