Commit Graph

3850 Commits

Author SHA1 Message Date
Pawel Dziepak
278f66b6b1 x86[_64]: Enable NX on non-boot CPUs as soon as possible 2013-09-17 14:40:17 +02:00
François Revol
c55cff0acc Whitespace cleanup 2013-09-17 13:51:38 +02:00
François Revol
228524afb6 Merge branch 'master' into sam460ex 2013-09-17 13:22:26 +02:00
Ithamar R. Adema
f2479c22a8 device_manager: Move init_node_tree to after kdl cmd registration
This helps when debugging, since when a driver/module causes a crash
while registering with the device manager, you can actually look at
the device manager state ;-)
2013-09-17 05:52:54 +02:00
Ithamar R. Adema
af1c0b55ca ARM: kernel: fix timer resolution and implement basic timekeeping.
The previously used method for programming the timer did not take
into account that our timespec is 64bit while the register we poke
it into is 32 bit. Since the PXA (SoC in Verdex target) has a limited
scale of resolution (us,ms,second) we dynamicly determine the one
that we can most closely match, and set that.

For f.ex. snooze to work however, we also need system_time to work.
The current implementation uses a system timer at microsecond
resolution to keep track of time.

Although the code is far from perfect, committing it now before
it gets lost, since I'm working on the infrastructure code
to properly factor out the SoC specific code out of the core
ARM architecture code (so the kernel can support more then
our poor old Verdex QEMU target ;))
2013-09-17 03:03:17 +02:00
Ithamar R. Adema
fda9d308e1 ARM: kernel: Fix compilation issue with new gas.
Turns out the new gas does not like spaces :(
2013-09-14 17:27:17 +02:00
Pawel Dziepak
b8dc812f3e x86[_64]: Enable NX on non-boot CPUs as soon as possible 2013-09-14 05:28:50 +02:00
François Revol
c14bca2958 Merge branch 'master' into sam460ex 2013-09-14 01:16:51 +02:00
Ingo Weinhold
cf70d345b2 Merge remote-tracking branch 'haiku/master' into package-management
This reverts 8f7f28a7c3 (OpenGL: Upgrade
to
Mesa 9.2).

Conflicts:
	build/jam/BuildFeatures
	build/jam/HaikuImage
	build/jam/OptionalPackages
	build/scripts/build_cross_tools_gcc4
	src/add-ons/opengl/swpipe/Jamfile
	src/apps/diskusage/Jamfile
	src/kits/tracker/ContainerWindow.cpp
	src/kits/tracker/DeskWindow.cpp
	src/kits/tracker/Jamfile
2013-09-13 01:02:28 +02:00
Ingo Weinhold
cc0838da34 VFS boot: Mount packagefs when booting off an image
... and the mounted boot volume looks like a PM Haiku. This gets the CD
boot going.
2013-09-13 00:06:21 +02:00
Ingo Weinhold
b1c3379c7e _user_debug_output(): Fix for long strings
The wrong length was passed to debug_puts().
2013-09-11 04:43:47 +02:00
Siarzhuk Zharski
726e47bb80 vfs:Remove extra put_vnode call on error B_LINK_LIMIT exit
Fixing the autoconf test: attempt to create file in place of already
existing symlink. On error exit put_vnode was called explicitly before
returning error. The second, implicit call to put_vnode was issued on
destroying the VNodePutter instance that references the same vnode. At
this time the vnode has references count equal to 0 so corresponding
panic was executed. Great thanks to Ingo for pointing it out!

Fixes #9140.
2013-09-10 19:47:36 +02:00
Jérôme Duval
c4a8ae38d4 realtime_sem: fixed a compiler warning.
* the variable is initialized anyway on the success code path.
2013-09-07 11:34:21 +02:00
Oliver Tappe
64c4bd1dc2 2nd attempt at fixing build of btrfs and packagefs.
* adding zlib to the kernel unfortunately introduces a cyclic dependency
  with respect to the zlib, haiku and haiku_devel packages (AFAICS)
* circumvent this by building kernel_zlib as a static library again,
  this time with PIC, such that it can be used by kernel add-ons
2013-09-02 12:03:05 +02:00
Oliver Tappe
0cb3f70926 Revert "Fix build problems of btrfs and packagefs for x86_64."
This reverts commit f272e63f393449d3a816970ca632764895a78cd6.
2013-09-02 12:03:05 +02:00
Pawel Dziepak
35cc5c9897 vfs: Allow non-null-terminated UNIX socket pathnames
This patch fix one of the compatibility issues mentioned in #3255. It
allows applications to call bind() or connect() passing an sockaddr_un
structure with a pathname that is not null-terminated.

Some systems did not require pathname in sockaddr_un::sun_path to be
null-terminated, instead the end of the string is determined by the size
of the structure passed as an argument of bind() or connect().

The standard is a bit vague in this matter but suggest that the path
should be null-terminated and the functions bind() and connect() should
be given sizeof(sockaddr_un) as a structure size.
2013-08-31 05:41:12 +02:00
Oliver Tappe
c5c787ea41 Fix build problems of btrfs and packagefs for x86_64.
* Both filesystems used to link to a static kernel-zlib, which 
  was being built with -fno-pic. This doesn't work on x86_64 as the 
  filesystem add-ons are meant to be relocatable, which requires their 
  code to be compiled as position independent.
  Solve that by moving zlib into the kernel, so any add-on can just use
  it from there (packagefs is mandatory, so we can't really do without 
  zlib anyway).
2013-08-29 22:44:50 +02:00
Jérôme Duval
eb5639c43e device_manager: tune the search paths
* the Virtio RNG PCI device has the class 0, so can't be found using usual
paths. Add 0 to _AlwaysRegisterDynamic() and "busses/virtio" in _GetNextDriverPath()
for non generic drivers to help finding virtio_pci.
* The RNG Virtio device is generic and needs "busses/random" to find virtio_rng.
2013-08-29 18:47:45 +02:00
Jérôme Duval
0edcbd2754 apic: serialize writes to x2apic MSR...
as required by the specifications (it isn't needed with memory mapped i/o).
2013-08-26 21:48:33 +02:00
Jérôme Duval
787773400c Added x2APIC support.
* Mostly useful for virtualization at the moment. Works in QEmu.
* Can be enabled by safemode settings/menu.
* Please note that x2APIC normally requires use of VT-d interrupt remapping feature
on real hardware, which we don't support yet.
2013-08-26 21:08:21 +02:00
Ingo Weinhold
e64db4da44 Also mount the packagefs at ~/config 2013-08-25 18:23:11 +02:00
Ingo Weinhold
a56422b448 VFS: fs_mount(): fix FS name leak
Fixes #9909.
2013-08-01 15:43:24 +02:00
Ingo Weinhold
b0944c78b0 More work towards hybrid support
* All packaging architecture dependent variables do now have a
  respective suffix and are set up for each configured packaging
  architecture, save for the kernel and boot loader variables, which
  are still only set up for the primary architecture.
  For convenience TARGET_PACKAGING_ARCH, TARGET_ARCH, TARGET_LIBSUPC++,
  and TARGET_LIBSTDC++ are set to the respective values for the primary
  packaging architecture by default.
* Introduce a set of MultiArch* rules to help with building targets for
  multiple packaging architectures. Generally the respective targets are
  (additionally) gristed with the packaging architecture. For libraries
  the additional grist is usually omitted for the primary architecture
  (e.g. libroot.so and <x86>libroot.so for x86_gcc2/x86 hybrid), so that
  Jamfiles for targets built only for the primary architecture don't
  need to be changed.
* Add multi-arch build support for all targets needed for the stage 1
  cross devel package as well as for libbe (untested).
2013-08-01 08:54:06 +02:00
Jérôme Duval
46f7a54d8c MSI: Use the effective APIC id of the boot CPU for the address destination.
* This should only affect systems where the CPU ids aren't sequential (mostly
non Intel).
* Fixes #9807.
2013-07-29 17:36:03 +02:00
Ingo Weinhold
5163e1c62d Revert "Introduce vnode op supports_operation(), fix devfs_io()"
This reverts commit 98a5231fe5.
2013-07-27 23:31:23 +02:00
Ingo Weinhold
98a5231fe5 Introduce vnode op supports_operation(), fix devfs_io()
devfs_io() can't fall back to calling vfs_synchronous_io(), if the
device driver doesn't support handling requests asynchronously. The
presence of the io() hook leads the VFS (do_iterative_fd_io()) to
believe that asynchronous handling is supported and set a
finished-callback on the request which calls the io() hook to start the
next chunk. Thus, instead of iterating through the request in a loop
the iteration happens recursively. For sufficiently fragmented requests
the stack may overflow (ticket #9900).

* Introduce a new vnode operation supports_operation(). It can be called
  by the VFS to determine whether a present hook is actually currently
  supported for a given vnode.
* devfs: implement the new hook and remove the fallback handling in
  devfs_io().
* vfs_request_io.cpp: use the new hook to determine whether the io()
  hook is really supported.
2013-07-27 17:45:59 +02:00
Alex Smith
271b27d5a3 x86_64: Set vector in iframe/debug state to 99 for syscalls.
Although syscalls are done through SYSCALL and therefore don't actually
have an interrupt number, set it to 99 (the syscall vector on 32-bit)
in the iframe so that a syscall frame can be identified. Also added
vector/error_code to x86_64_debug_cpu_state for Debugger to use, not
sure why I didn't put them there in the first place.
2013-07-25 20:04:25 +01:00
Ingo Weinhold
4387d6b33f Merge remote-tracking branch 'remotes/haiku/master' into package-management 2013-07-11 18:09:03 +02:00
Ingo Weinhold
02b151d3e3 MultiAddressSpaceLocker::AddAreaCacheAndLock(): race condition
* Add a VMArea* version of AddArea().
* AddAreaCacheAndLock(): Use the new AddArea() version. This not only
  saves the ID hash table lookup, but also fixes a race condition with
  delete_area(). delete_area() removes the area from the hash before
  removing it from its cache, so iterating through the cache's areas
  can turn up an area that no longer is in the hash. In that case we
  would fail immediately. The new AddArea() won't fail in this
  situation, though.

Fixes #9686: vm_copy_area() could fail for the "commpage" area. That's
an area all teams share, so any team terminating while another one was
fork()ing could trigger it.
2013-07-11 17:56:26 +02:00
Ingo Weinhold
7bea0205ed vm_page_allocate_page_run(): fix debug output 2013-07-11 17:56:20 +02:00
Ingo Weinhold
c53508b730 kernel tracing: implement fallback for meta data allocation
We the meta data area couldn't be allocated in any of the supported
(reattachable) places, just use a static allocation. The tracing feature
wouldn't be available at all in such a case.
2013-07-11 17:56:13 +02:00
Jérôme Duval
86340fcef3 kernel/int.cpp: typo fix 2013-07-09 23:53:26 +02:00
Ingo Weinhold
7e78b434f4 Merge remote-tracking branch 'haiku/master' into package-management
Conflicts:
	build/jam/HaikuImage
	build/jam/OptionalPackageDependencies
	build/jam/OptionalPackages
	build/scripts/build_cross_tools_gcc4
	src/add-ons/translators/icns/Jamfile
	src/add-ons/translators/jpeg/Jamfile
2013-07-08 14:01:00 +02:00
Jérôme Duval
d3b108c53d virtio_scsi: added to the image.
* device_manager: scans busses/scsi for generic drivers.
2013-07-02 22:48:25 +02:00
Jérôme Duval
3c47ce8421 DMAResource: mutex_lock() before calling mutex_destroy(). 2013-07-02 19:00:43 +02:00
Ingo Weinhold
2eb2b522bf Enforce team and thread limits
Also fixes incorrect team accounting in case of error when creating
a team. The previously incremented sUsedTeams wasn't decremented again.
2013-07-02 01:57:30 +02:00
Ingo Weinhold
cbcde3ba80 kernel team.cpp: fix unbalanced io_context ref management
... in case of team creation error. Once assigned to Team::io_context
the Team object takes responsibility of the I/O context object and
releases the reference on destruction. load_image_internal() and
fork_team() were thus releasing one reference too many.

Fixes #9851.
2013-07-02 01:57:30 +02:00
Ingo Weinhold
8c974aa800 node monitor: add TODO regarding the syscalls 2013-06-27 21:57:43 +02:00
Ingo Weinhold
0d603ac65c Fix node monitoring slot accounting for stop_watching()
NodeMonitorService::RemoveUserListeners() didn't decrement
io_context::num_monitors when removing a listener, so limit checks
would be off afterwards.
2013-06-27 21:57:43 +02:00
Jérôme Duval
6121ae660c device_manager: init DMAResource::fScratchVecs. 2013-06-15 16:26:50 +02:00
François Revol
a442699e34 PPC: Use asm_defs.h instead of hardcoded defines 2013-06-01 19:32:43 +02:00
François Revol
d4659184b8 PPC: Add a 44x version of arch_exceptions.S
For now just a copy of the classic code.
2013-06-01 19:18:12 +02:00
François Revol
b8ded2f897 Merge branch 'master' into sam460ex 2013-05-27 17:45:55 +02:00
Jérôme Duval
78b461d6a1 Merge branch 'virtio' 2013-05-26 17:12:25 +02:00
Jérôme Duval
3aae21ab63 virtio: integrate into the build and image
* device_manager: scans busses/virtio for network device types
  and scsi controllers.
2013-05-26 16:05:53 +02:00
Ingo Weinhold
5261923e87 Add dvprintf() 2013-05-25 01:12:29 +02:00
Pawel Dziepak
6c9c8a037c vm: fix area insertion logic
* When looking for a place for new area the size of the area to be
   inserted instead of the next area size was used to check whether
   we are already past the upper bound.
 * There was an attempt to insert area even if we were past the
   upper bound.
2013-05-22 19:31:26 +02:00
Ingo Weinhold
c663ca2171 Merge branch 'master' into package-management
Conflicts:
	build/jam/HaikuImage
	src/system/kernel/arch/x86/64/arch.S
2013-05-12 00:18:19 +02:00
Ingo Weinhold
1848fdc329 util/khash: Add hash_hash_string_part() 2013-05-11 23:17:55 +02:00
Ingo Weinhold
7c6bff1734 Complete outsourcing of zlib
* Add optional packages Zlib and Zlib-devel.
* Simplify the build feature section for zlib and also extract the
  source package.
* Replace all remaining references to the zlib instance in the tree and
  remove it.
2013-05-06 04:37:18 +02:00
Rene Gollent
1b17f7ab00 Fix x86-64 build. 2013-05-05 16:57:51 -04:00
Ingo Weinhold
5af6169bb2 x86[-64]: Fix arch_cpu_user_strlcpy() for small buffers
The case for small buffers was broken, since scasb operates on edi/rdi,
not esi/rsi.
2013-05-05 15:46:32 -04:00
Ingo Weinhold
bcbf22a316 x86[-64]: Fix arch_cpu_user_strlcpy() for small buffers
The case for small buffers was broken, since scasb operates on edi/rdi,
not esi/rsi.
2013-05-05 18:01:12 +02:00
Ingo Weinhold
25a7b01d15 Merge branch 'master' into package-management
Additional changes:
* Add src/system/kernel/lib/zlib, which builds a kernel version of zlib,
  needed by packagefs.
* BuildFeatures: Add a build feature "gcc2" to allow for easier checks.
* Referenceable.cpp: Include <OS.h> instead of <debugger.h>. The latter
  is not needed and prevents building for the build platform.
* zlib/zutil.h: Fix gcc 2 build. We really should use the external
  package instead.

Conflicts:
	.gitignore
	build/jam/BuildSetup
	build/jam/FileRules
	build/jam/FloppyBootImage
	build/jam/HaikuImage
	build/jam/ImageRules
	build/jam/KernelRules
	build/jam/NetBootArchive
	build/jam/OptionalBuildFeatures
	build/jam/OptionalLibPackages
	build/jam/OptionalPackageDependencies
	build/jam/OptionalPackages
	build/scripts/build_haiku_image
	configure
	data/bin/installoptionalpackage
	data/system/boot/Bootscript
	headers/os/app/Message.h
	headers/os/package/PackageInfo.h
	headers/os/package/PackageInfoAttributes.h
	headers/os/package/PackageInfoSet.h
	headers/os/package/PackageRoster.h
	headers/os/package/PackageVersion.h
	headers/os/package/hpkg/PackageInfoAttributeValue.h
	headers/os/storage/FindDirectory.h
	headers/os/storage/Node.h
	headers/os/support/StringList.h
	headers/private/system/directories.h
	src/add-ons/kernel/drivers/audio/ac97/es1370/Jamfile
	src/add-ons/kernel/file_systems/packagefs/AttributeIndex.cpp
	src/add-ons/kernel/file_systems/packagefs/Jamfile
	src/add-ons/kernel/file_systems/packagefs/Package.cpp
	src/add-ons/kernel/file_systems/packagefs/Package.h
	src/add-ons/kernel/file_systems/packagefs/PackageDomain.cpp
	src/add-ons/kernel/file_systems/packagefs/PackageDomain.h
	src/add-ons/kernel/file_systems/packagefs/PackageFSRoot.cpp
	src/add-ons/kernel/file_systems/packagefs/PackageLinkDirectory.cpp
	src/add-ons/kernel/file_systems/packagefs/PackageLinkDirectory.h
	src/add-ons/kernel/file_systems/packagefs/PackageLinkSymlink.cpp
	src/add-ons/kernel/file_systems/packagefs/PackageLinkSymlink.h
	src/add-ons/kernel/file_systems/packagefs/PackageLinksDirectory.cpp
	src/add-ons/kernel/file_systems/packagefs/PackageNode.h
	src/add-ons/kernel/file_systems/packagefs/ResolvableFamily.cpp
	src/add-ons/kernel/file_systems/packagefs/Version.cpp
	src/add-ons/kernel/file_systems/packagefs/Version.h
	src/add-ons/kernel/file_systems/packagefs/Volume.cpp
	src/add-ons/kernel/file_systems/packagefs/Volume.h
	src/add-ons/kernel/file_systems/packagefs/kernel_interface.cpp
	src/add-ons/kernel/file_systems/userlandfs/shared/driver_settings.c
	src/apps/deskbar/BarApp.cpp
	src/apps/deskbar/BarMenuBar.cpp
	src/apps/deskbar/BarMenuBar.h
	src/apps/deskbar/BarView.cpp
	src/apps/deskbar/BarView.h
	src/apps/deskbar/BarWindow.cpp
	src/apps/deskbar/BarWindow.h
	src/apps/deskbar/DeskbarMenu.cpp
	src/apps/deskbar/DeskbarMenu.h
	src/apps/deskbar/DeskbarUtils.cpp
	src/apps/deskbar/DeskbarUtils.h
	src/apps/deskbar/ExpandoMenuBar.cpp
	src/apps/deskbar/ExpandoMenuBar.h
	src/apps/deskbar/TeamMenu.cpp
	src/apps/processcontroller/ProcessController.cpp
	src/apps/remotedesktop/RemoteDesktop.cpp
	src/bin/bash/config-top.h
	src/bin/finddir.c
	src/bin/package/Jamfile
	src/bin/package/command_add.cpp
	src/bin/package/command_create.cpp
	src/bin/package/command_list.cpp
	src/bin/package_repo/command_list.cpp
	src/bin/pkgman/command_refresh.cpp
	src/build/libbe/support/Jamfile
	src/build/libpackage/Jamfile
	src/build/libroot/Jamfile
	src/build/libroot/fs.cpp
	src/build/libroot/remapped_functions.h
	src/kits/locale/MutableLocaleRoster.cpp
	src/kits/opengl/GLRendererRoster.cpp
	src/kits/package/PackageInfo.cpp
	src/kits/package/PackageInfoSet.cpp
	src/kits/package/PackageRoster.cpp
	src/kits/package/PackageVersion.cpp
	src/kits/package/RepositoryCache.cpp
	src/kits/package/hpkg/PackageWriterImpl.cpp
	src/kits/package/hpkg/ReaderImplBase.cpp
	src/kits/package/hpkg/WriterImplBase.cpp
	src/kits/print/PrintTransport.cpp
	src/kits/print/Printer.cpp
	src/kits/screensaver/ScreenSaverRunner.cpp
	src/kits/support/StringList.cpp
	src/kits/tracker/ContainerWindow.cpp
	src/kits/tracker/DeskWindow.cpp
	src/kits/tracker/PoseView.cpp
	src/libs/print/libprint/Transport.cpp
	src/preferences/printers/AddPrinterDialog.cpp
	src/preferences/screensaver/ScreenSaverWindow.cpp
	src/servers/debug/DebugServer.cpp
	src/servers/input/AddOnManager.cpp
	src/servers/media_addon/MediaAddonServer.cpp
	src/system/boot/Jamfile
	src/system/boot/loader/Jamfile
	src/system/boot/loader/loader.cpp
	src/system/boot/loader/vfs.cpp
	src/system/kernel/fs/vfs.cpp
	src/system/kernel/fs/vfs_boot.cpp
	src/system/libroot/os/find_directory.cpp
	src/system/runtime_loader/runtime_loader.cpp
	src/tools/package/Jamfile
2013-05-05 15:03:26 +02:00
Jérôme Duval
3756e0ac38 kernel: use uint64 instead of int64 to avoid narrowing conversion warnings.
* gdb_register is used only in arch_debug.cpp
2013-04-29 21:20:35 +02:00
Jérôme Duval
311e148798 vfs: fixed two warnings.
* warnings about comparison between signed and unsigned integer expressions.
2013-04-29 20:57:34 +02:00
Michael Lotz
a064168869 Fix truncation of comparison value introduced in 848acd67.
Casting the difference of the two off_t values to size_t may truncate
the result. Doing so before the comparison will therefore break it.
Instead cast the size to off_t to get around the signed versus unsigned
integer expression comparison and then cast the result of the comparison
to size_t again. Should fix #9714.
2013-04-27 18:42:05 +02:00
Jérôme Duval
32d7bcb470 VMAnonymousCache.cpp: use off_t instead of page_num_t
* use off_t instead of page_num_t to fit in swap_hash_key struct.
* this fixes narrowing conversion and signedness warnings on GCC 4.7.
2013-04-27 14:43:20 +02:00
Jerome Duval
dc0e22d800 Revert "VMAnonymousCache.cpp: changed page_index type to page_num_t"
This reverts commit f7176b0ee5. Citing Ingo:
"off_t is the correct type to use for addressing pages in a cache/file,
which page_num_t should only be used for physical pages." I'll see how to
fix the GCC 4.7 warnings differently :)
2013-04-27 13:36:49 +02:00
Jérôme Duval
f7176b0ee5 VMAnonymousCache.cpp: changed page_index type to page_num_t
* consistently use page_num_t for page numbers and off_t for offsets and sizes.
2013-04-26 21:17:39 +02:00
Jérôme Duval
848acd672c devfs: casts as size_t before comparing.
* error: comparison between signed and unsigned integer expressions.
2013-04-26 21:17:34 +02:00
Jérôme Duval
d762df1df1 GCC 4.7.x doesn't allow setting a field in a referenced packed struct.
* error message: error: cannot bind packed field
'args->kernel_args::platform_args.platform_kernel_args::apm' to 'apm_info&'
* the reason would be that the reference doesn't have alignment information anymore.
* changed the reference to const for read access, and use the long form for setting a field.
2013-04-26 21:17:31 +02:00
Pawel Dziepak
902d41fc75 util: Use real_time_clock() in secure PRNG 2013-04-24 14:05:28 +02:00
Pawel Dziepak
c36a000cb4 vm: Fix off-by-one mistakes in _InsertAreaSlot 2013-04-24 14:05:27 +02:00
Pawel Dziepak
0fef11f1a8 arch: some CPUID leaves may be not available 2013-04-23 02:43:26 +02:00
Rene Gollent
c24adb2950 Rework DefaultNotificationService registration.
- Instead of implicitly registering and unregistering a service
  instance on construction/destruction, DefaultNotificationService
  now exports explicit Register()/Unregister() calls, which subclasses
  are expected to call when they're ready.

- Adjust all implementing subclasses. Resolves an issue with deadlocks
  when booting a DEBUG=1 build.
2013-04-22 18:42:21 -04:00
Ingo Weinhold
237127fbe4 Fix _user_entry_ref_to_path() in chroot
* Add "bool kernel" parameter to vfs_entry_ref_to_path(), so it can be
  specified for which I/O context the entry ref shall be translated.
* _user_entry_ref_to_path(): Use the calling team's I/O context instead
  of the kernel's. Fixes the bug that in a chroot the syscall would
  return a path for outside the chroot.
2013-04-22 18:06:28 +02:00
Pawel Dziepak
be573dcd88 arch: make sure not to set NX-bit when it is reserved 2013-04-22 17:36:36 +02:00
François Revol
3060b78cfc PPC: Setup debug UART for kernel when booted from U-Boot
Welcome to kernel debugger output!
\o/
2013-04-21 03:29:48 +02:00
François Revol
2e27c020cb U-Boot: Factor-out debug UART setup from FDT for kernel use 2013-04-21 03:28:01 +02:00
François Revol
18ea985add U-Boot: PPC: set gFDT when passed to the kernel. 2013-04-21 02:08:24 +02:00
François Revol
eecde8e37c Merge branch 'master' into sam460ex 2013-04-21 01:34:20 +02:00
Pawel Dziepak
103977d0a9 arch: NX is initialized too early on non-boot CPUs 2013-04-18 00:15:57 +02:00
Pawel Dziepak
84bb91df83 arch: use PRNGs from kernel utils for initializing stack pointer 2013-04-16 22:35:10 +02:00
Pawel Dziepak
8614737f71 elf: restore correct region protection after relocation 2013-04-16 03:44:38 +02:00
Pawel Dziepak
db1ca60528 runtime_loader: randomize position of runtime_loader
* make runtime_loader a dynammically linked object
 * add kernel support for loading user images that need to be relocated
 * load runtime_loader at random address
2013-04-16 02:29:05 +02:00
Pawel Dziepak
cf35dcc5bc vm: make aslr use more secure PRNG 2013-04-11 17:16:49 +02:00
Pawel Dziepak
d0a8e6ef2b vm: remove unused static function log2() 2013-04-11 12:32:32 +02:00
Pawel Dziepak
87d1bdb87c util: add secure pseudorandom number generator 2013-04-11 12:31:58 +02:00
Pawel Dziepak
69042ecd1b util: style fixes 2013-04-11 12:15:47 +02:00
Pawel Dziepak
d9fa99bb60 scheduler: let schedulers use kernel utils for random numbers 2013-04-11 04:37:23 +02:00
Pawel Dziepak
5c455f803f vm: let aslr use kernel utils for random numbers 2013-04-11 04:35:11 +02:00
Pawel Dziepak
6003243ef3 util: introduce kernel utils for pseudorandom number generation
Currently there are two generators. The fast one is the same one the scheduler
is using. The standard one is the same algorithm libroot's rand() uses. Should
there be a need for more cryptographically PRNG MD4 or MD5 might be a good
candidates.
2013-04-11 04:34:59 +02:00
Pawel Dziepak
feae2b5a00 vm: force userland to use B_RANDOMIZED_* address specifications 2013-04-09 23:25:19 +02:00
Pawel Dziepak
bf65fc1dfe vm: remove B_RANDOMIZED_IMAGE_ADDRESS address specification
This address specification is actually not needed since PIC images can be
located anywhere. Only their size is restriced but that is the compiler and
linker concern. Thanks to Alex Smith for pointing that out.
2013-04-09 22:09:13 +02:00
Pawel Dziepak
d57105534b vm: several improvements to VMUserAddressSpace::_InsertAreaSlot implementation
* B_BASE_ADDRESS honors requested alignment
 * end of range is honored
 * B_BASE_ADDRESS reuses B_ANY_ADDRESS code
2013-04-08 23:56:10 +02:00
Ingo Weinhold
5b6fb78c40 VFS: _kern_open_dir(): Fix NULL path case
It would create an empty path buffer and pass that on to dir_open(),
which accepts NULL, but not empty paths.
2013-04-05 19:19:20 +02:00
Ingo Weinhold
d482342399 VM: Fix vm_block_address_range() area protection
B_ALREADY_WIRED, which was erroneously passed for the area protection
parameter to map_backing_store(), has the value 7 which implies user
readable and writable. Hence the address ranges around 0xdeadbeef and
0xcccccccc could actually be read and written from anywhere.
2013-04-05 16:58:50 +02:00
Pawel Dziepak
65ed4fa908 vm: implement B_RANDOMIZED_IMAGE_ADDRESS address specification
On some 64 bit architectures program and library images have to be mapped in
the lower 2 GB of the address space (due to instruction pointer relative
addressing). Address specification B_RANDOMIZED_IMAGE_ADDRESS ensures that
created area satisfies that requirement.
2013-04-04 20:54:02 +02:00
Pawel Dziepak
f697412ff8 vm: place commpage and team data near the top of user address space
Placing commpage and team user data somewhere at the top of the user accessible
virtual address space prevents these areas from conflicting with elf images
that require to be mapped at exact address (in most cases: runtime_loader).
2013-04-04 15:27:24 +02:00
Pawel Dziepak
ffbf0328d2 debug: update debug kit to correctly recognize commpage 2013-04-04 15:27:23 +02:00
Pawel Dziepak
e85e399fd7 commpage: randomize position of commpage
This patch introduces randomization of commpage position. From now on commpage
table contains offsets from begining to of the commpage to the particular
commpage entry. Similary addresses of symbols in ELF memory image "commpage"
are just offsets from the begining of the commpage.

This patch also updates KDL so that commpage entries are recognized and shown
correctly in stack trace. An update of Debugger is yet to be done.
2013-04-04 15:27:22 +02:00
Pawel Dziepak
966f207668 x86: enable data execution prevention
Set execute disable bit for any page that belongs to area with neither
B_EXECUTE_AREA nor B_KERNEL_EXECUTE_AREA set.

In order to take advanage of NX bit in 32 bit protected mode PAE must be
enabled. Thus, from now on it is also enabled when the CPU supports NX bit.

vm_page_fault() takes additional argument which indicates whether page fault
was caused by an illegal instruction fetch.
2013-04-04 15:22:23 +02:00
Pawel Dziepak
211f71325a x86: move x86_userspace_thread_exit() from user stack to commpage
x86_userspace_thread_exit() is a stub originally placed at the bottom of
each thread user stack that ensures any thread invokes exit_thread() upon
returning from its main higher level function.

Putting anything that is expected to be executed on a stack causes problems
when implementing data execution prevention. Code of x86_userspace_thread_exit()
is now moved to commpage which seems to be much more appropriate place for it.
2013-04-04 15:16:27 +02:00
Pawel Dziepak
02cceebe40 team: randomize position of team user data
When forking a process team user data area is not cloned but a new one is
created instead. However, the new one has to be at exactly the same address
parent's team user data area is. When process is exec then team user data
area may be recreated at random position.

This patch also make sure that instances of struct user_thread in team user
data are each in separate cache line in order to prevent false sharing since
these data are very likely to be accessed simultaneously from threads executing
on different CPUs. This change however reduces the number of threads process
can create. It is fixed by reserving 512kB of address space in case team user
data area needs to grow.
2013-04-04 15:16:25 +02:00
Pawel Dziepak
17c189899a thread: randomize user stack position
Use B_RANDOMIZE_BASE_ADDRESS for creating both main and other threads user
stack.
2013-04-04 15:16:22 +02:00
Pawel Dziepak
b3e4c67739 vm: implement B_RANDOMIZED_ANY_ADDRESS address specification
Randomized equivalent of B_ANY_ADDRESS. When a free space is found (as in
B_ANY_ADDRESS) the base adress is then randomized using _RandomizeAddress
pretty much like it is done in B_RANDOMIZED_BASE_ADDRESS.
2013-04-04 15:16:21 +02:00
Pawel Dziepak
f9bab525f6 vm: implement B_RANDOMIZED_BASE_ADDRESS address specification
B_RAND_BASE_ADDRESS is basically B_BASE_ADDRESS with non-deterministic created
area's base address.

Initial start address is randomized and then the algorithm looks for a large
enough free space in the interval [randomized start, end]. If it fails then
the search is repeated in the interval [original start, randomized start]. In
case it also fails the algorithm falls back to B_ANY_ADDRESS
(B_RANDOMIZED_ANY_ADDRESS when it is implemented) just like B_BASE_ADDRESS does.

Randomization range is limited by kMaxRandomize and kMaxInitialRandomize.
2013-04-04 15:16:21 +02:00
Pawel Dziepak
3b4269ecf5 arch: randomize initial user stack pointer
Inside the page randomization of initial user stack pointer is not only a part
of ASLR implementation but also a performance improvement that helps
eliminating aligned 64 kB data access.

Minimal user stack size is increased to 8 kB in order to ensure that regardless
of initial stack pointer value there is still enough space on stack.
2013-04-04 15:16:20 +02:00
François Revol
d4eea7d43c Merge branch 'master' into sam460ex 2013-03-28 09:47:50 +01:00
Alex Smith
5e0c3db286 Account for the physical map area in the kernel VM space. Fixes #9547.
The physical memory map area was not included in the kernel virtual
address space range (it was below KERNEL_BASE). This caused problems
if an I/O operation took place on physical memory mapped there (the
bad address error seen in #9547 was occurring in lock_memory_etc()).
Changed KERNEL_BASE and KERNEL_SIZE to cover the area and add a null
area that covers all of it. Also changed X86VMTranslationMap64Bit to
handle large pages in Query(), as the physical map area uses large
pages.
2013-03-22 18:30:01 +00:00
Alex Smith
8627383bf7 Fixed compilation errors with ENABLE_TRACING set. 2013-03-22 16:46:09 +00:00
Alex Smith
1aef6664d1 Fixed compilation of VFS/IORequest trace messages. 2013-03-22 14:14:33 +00:00
Pawel Dziepak
1a0386d743 Fix #8661: fcntl(fd, F_GETLK, ...) violates POSIX
The standard states that F_GETLK should check whether given lock would be
blocked by another one and return description of the conflicting one (or
set l_type to F_UNLCK if there is no collision).

Current implementation of F_GETLK performs completely different actions, it
"Retrieves the first lock that has been set by the current team". Moreover,
if there are no locks (advisory_locking == NULL) an error is returned
instead of l_type set to F_UNLCK.
2013-03-12 17:35:54 +01:00
François Revol
8b72ce2651 Merge branch 'master' into sam460ex 2013-03-12 03:24:15 +01:00
Pawel Dziepak
7f61e6e4e5 Merge branch 'nfs4'
Conflicts:
	build/jam/HaikuImage
2013-03-11 13:00:55 +01:00
François Revol
05e65058fe U-Boot: cleanup 2013-02-18 02:41:16 +01:00
François Revol
aa9d092029 U-Boot: implement of_get_next_device() in the OF wrapper 2013-02-18 02:40:16 +01:00
François Revol
219f59da1f U-Boot: bail out in of_init() if no FDT passed 2013-02-18 00:52:31 +01:00
François Revol
307c6177df U-Boot: cleanup OpenFirmware wrapper tracing 2013-02-18 00:47:22 +01:00
François Revol
5bdc10121b U-Boot: use FDT call directly in of_init() in OF wrapper
This avoids calling dprintf() and allows calling it earlier.
2013-02-18 00:42:10 +01:00
François Revol
28d1701896 Merge branch 'master' into sam460ex 2012-12-29 11:55:24 +01:00
Hamish Morrison
d1f280c805 Add support for pthread_attr_get/setguardsize()
* Added the aforementioned functions.
* create_area_etc() now takes a guard size parameter.
* The thread_info::stack_base/end range now refers to the usable range
  only.
2012-12-28 18:02:58 +00:00
François Revol
98191ec624 Merge branch 'master' into sam460ex 2012-12-19 15:44:14 +01:00
Sergei Reznikov
b7b5d7636b 64-bit fixes for kernel with KDEBUG_LEVEL = 0
Signed-off-by: Alex Smith <alex@alex-smith.me.uk>
2012-12-18 14:56:16 +00:00
François Revol
97b9539c65 Merge branch 'master' into sam460ex 2012-12-06 00:12:40 +01:00
Michael Lotz
760de9b200 Tiny code style cleanup. 2012-12-04 23:38:11 +01:00
Michael Lotz
85db228177 Style cleanup only. 2012-12-04 23:38:10 +01:00
Michael Lotz
1ed5f66cd4 Add missing function end macro. 2012-12-04 23:38:09 +01:00
Michael Lotz
2b5d52a174 Whitespace cleanup only. 2012-12-04 23:38:09 +01:00
Michael Lotz
f0422c6f9f Only set the physical address if the entry is mapped.
Otherwise, even when the address was 0, we would possibly set the
physical address to != 0 as we always applied the page offset.
2012-12-04 23:38:08 +01:00
Michael Lotz
926d1024d0 Fix wrong address mask (page directory vs. page table). 2012-12-04 23:38:07 +01:00
Michael Lotz
fd6e3a11e2 Use the existing ARM MMU definitions and remove duplicates. 2012-12-04 23:38:06 +01:00
Michael Lotz
50c463f4f1 Header cleanup, rename macros for more consistency. 2012-12-04 23:38:03 +01:00
Michael Lotz
eca34ad168 Print page and cache using initial commands in panic message. 2012-12-04 23:36:09 +01:00
Michael Lotz
d50875de46 Use format macros in debug output. 2012-12-04 23:36:08 +01:00
Michael Lotz
67d9fcc3ba Whitespace cleanup, no functional change. 2012-12-04 23:35:40 +01:00
Rene Gollent
86f0f139a9 Fix kernel build with KDEBUG_LEVEL 0. 2012-11-30 18:23:15 -05:00
Michael Lotz
fed8bb7dff Fix index range for ARM MMU coarse page tables.
As there are only 8 bits for the index in the coarse page table entries
the maximum index is 256. This makes us correctly move to the next page
directory once we've run through all entries. Fixes missing unmap of
pages that crossed that boundary and consequent panic "page still has
mappings" when the page was removed from a cache.
2012-11-30 22:09:07 +01:00
François Revol
c435277d49 Merge branch 'master' into sam460ex 2012-11-29 16:06:28 +01:00
Michael Lotz
94b364b469 Add blue_screen and frame_buffer_console into the bootloader.
These can be used for on-screen debug output with relatively little
effort, as they just need a plain framebuffer definition to work.

Some stubs are added to not clutter up the kernel sources with too
many ifdefs.
2012-11-27 22:41:47 +01:00
François Revol
77d95e1d47 Merge branch 'master' into sam460ex
Conflicts:
	src/system/boot/platform/u-boot/arch/ppc/Jamfile
2012-11-18 23:10:49 +01:00
Alex Smith
11c9f9a1d6 Merge branch 'master' into x86_64
Conflicts:
	build/jam/FloppyBootImage
	build/jam/OptionalBuildFeatures
	build/jam/OptionalPackages
	headers/private/shared/cpu_type.h
	src/bin/ps.c
	src/bin/sysinfo.cpp
	src/kits/tracker/PoseView.cpp
	src/preferences/appearance/DecorSettingsView.cpp
	src/preferences/virtualmemory/Settings.cpp
	src/servers/input/AddOnManager.cpp
	src/servers/input/InputServer.cpp
	src/servers/input/InputServerMethod.cpp
	src/system/boot/Jamfile
	src/system/boot/platform/raspberrypi_arm/mmu.cpp
	src/system/boot/platform/u-boot/arch/arm/Jamfile
	src/system/kernel/arch/x86/arch_cpu.cpp
	src/system/kernel/arch/x86/arch_thread.cpp
	src/system/kernel/cache/block_cache.cpp
	src/system/kernel/vm/VMAnonymousCache.cpp
2012-11-18 14:02:07 +00:00
François Revol
2b3046e60d Merge branch 'master' into sam460ex 2012-11-16 00:09:54 +01:00
Michael Lotz
963d68a632 Fix typo. 2012-11-14 15:16:47 +01:00
Michael Lotz
ad53cd29cb Fix iterator in hash_remove_current() to not skip elements.
When iterator->current is NULL, hash_next() assumes we've reached the
end of a bucket (linked list) and moves to the next one. Wehn the first
element of a linked list was removed in hash_remove_current()
iterator->current was set to NULL, causing the next call to hash_next()
to skip over the rest of the list of that bucket.

To fix this we now decrement iterator->bucket by one, so the next call
to hash_next() correctly arrives at the new first element of the same
bucket. Doing it this way avoids having to search backwards through the
table to find the actual previous item.

This caused modules to be skipped in module_init_post_boot_device()
when normalizing module image paths so some of the module images ended
up non-normalized. This could then cause images to be loaded a second
time for modules that were part of an actually already loaded image.
This setup is present for the PCI module with the pci/x86 submodule
and would lead to a second copy of the PCI module image to be loaded
but without being initialized, eventually leading to #8684.

The affected module images were pretty much random, as it depended on
the order in which they were loaded from the file system, in this case
the boot floppy archive of the El-Torito boot part of ISO and anyboot
images. The r1alpha4 release images unfortunately had the module files
ordered in the archive just so that the PCI module image would be
skipped, allowing #8684 to happen on many systems with MSI support.

Since the block cache uses hash_remove_current() as well in some cases,
it is possible that transactions in its list could've been skipped.
Cursory testing didn't reveal this to be a usual case, and it is
possible that in the pattern it is used there, the bug wouldn't be
triggered at all. It's still possible that it caused rare misbehaviour
though.
2012-11-14 15:09:54 +01:00
François Revol
dd686298c5 Merge branch 'master' into sam460ex 2012-11-13 12:51:50 +01:00
Ithamar R. Adema
4b2a1d798b ARM: implement arch_cpu_user_memcpy/memset/strlcpy functions
Remove the dummies from the C code and implement them in assembly,
due to the label referencing issues with the fault handler.

This code is ripe for optimisation, my ARM assembly is pretty
basic ;)

Does work though, and gets us one step closer to a full arch.
2012-11-12 20:03:48 +01:00
François Revol
13abd68fc3 Merge branch 'master' into sam460ex 2012-11-10 20:36:35 +01:00
Ithamar R. Adema
3d49fa31ec VMCache: Fix broken trace statements 2012-11-10 00:32:30 +01:00
François Revol
8e75bf5845 Merge branch 'master' into sam460ex 2012-11-09 10:56:13 +01:00
Jerome Duval
5ad12a800d vm_page_allocate_page_run: use a mask to enforce the boundary
* use a mask to enforce the boundary as suggested by Ingo. Thanks!
2012-11-09 00:21:41 +01:00
François Revol
17c270bd4f Merge branch 'master' into sam460ex 2012-11-08 10:25:41 +01:00
czeidler
9abf4591d5 Ok there are some more, thanks Rene. 2012-11-07 21:45:43 +01:00
czeidler
71d45a0f76 Coding style. 2012-11-07 21:37:40 +01:00
Ithamar R. Adema
e2b8ceb23c ARM/int: remove CPU fault handler debug output 2012-11-07 17:08:15 +01:00
Ithamar R. Adema
f86b582848 ARM: Cleanup of port support code.
This also implements the fault handler correctly now, and cleans up the
exception handling. Seems a lot more stable now, no unexpected panics or
faults happening anymore.
2012-11-07 16:24:22 +01:00
Ithamar R. Adema
0cf5ecba12 ARM: Add asm_offsets.cpp
This will generate asm_offsets.h which makes our assembly code
easier to maintain by preventing hardcoded offsets for fields within structures.

(copied from X86 and removed the X86 specifics)
2012-11-07 16:24:22 +01:00
Ithamar R. Adema
ff163585ec ARM/threads: Disable debug output
Tracing was accidently switched on by a previous commit.
2012-11-07 16:24:21 +01:00
Ithamar R. Adema
0e5d97e97e ARM/vm: small formatting change and trace fix.
Copy some minor changes over from the X86 paging implementation to keep
the two reasonably aligned. Smaller diff ;-)
2012-11-07 16:24:21 +01:00
François Revol
597636d909 Merge branch 'master' into sam460ex 2012-11-06 20:17:17 +01:00
François Revol
2d014a2886 U-Boot: Fix linking the kernel by adding FDT support
Add FDT support to the kernel,
move fdt_support.cpp and declare gFDT there for the kernel.
2012-11-06 19:43:12 +01:00
Jerome Duval
8ddec5b565 vm_page_allocate_page_run: fix previous commit
* remove superfluous codes
* when aligning, sPhysicalPageOffset would be substracted twice
+alpha4

Signed-off-by: Ingo Weinhold <ingo_weinhold at gmx dot de>
2012-11-06 19:40:47 +01:00
François Revol
f24f590392 U-Boot: implement part of the OpenFirmware wrapper
We'll see later on if it's really useful to keep it around.
2012-11-06 16:41:36 +01:00
François Revol
11e7e1aa75 Merge branch 'master' into sam460ex 2012-11-06 13:35:30 +01:00
Jérôme Duval
f5a14b17df vm_page_allocate_page_run: fix for aligned page allocations
* don't enforce a zero boundary or a zero alignment
* when going to the next range, takes alignment into account.
  It could previously just be enforced again through alignment and loop infinite.
* it should help with some FreeBSD based drivers
2012-11-06 00:41:08 +01:00
François Revol
5130ac0445 Merge branch 'master' into sam460ex 2012-11-05 15:42:03 +01:00
Ithamar R. Adema
de4f3cf3a7 ARM: only warn if unknown memory types are being mapped.
This is a workaround for missing writecombine & friends support. Needs
proper fixing, but too many other things to do atm to focus on that...
2012-11-05 01:45:25 +01:00
Ithamar R. Adema
4fc1dadd58 ARM: add context switch implementation 2012-11-05 01:45:25 +01:00
Ithamar R. Adema
f8b47f2b2a ARM: fixup interrupt enable/disable/restore functions 2012-11-05 01:45:25 +01:00
Ithamar R. Adema
02081e0950 ARM: Initial implementation of interrupt/exception handling.
This contains both the common ARM(v5) vector handling as well as
the PXA(verdex) specific interrupt controller code, to be seperated
when ARM support for FDT is implemented.

Functional enough to handle interrupts, needs work on KDL support.
2012-11-05 01:45:24 +01:00
Ithamar R. Adema
be7195d0f7 ARM: add initial timer support.
Currently hardcoded to PXA (verdex) support, needs SoC abstraction
for seperating implementations, best done using FDT code as committed
by Francois.
2012-11-05 01:45:24 +01:00
Ithamar R. Adema
d09e7b5b90 ARM: mark pages found in query as present 2012-11-05 01:45:24 +01:00
Ithamar R. Adema
b867e1156e fix a TRACE() formatting string 2012-11-05 01:45:23 +01:00
Ithamar R. Adema
457556ca12 Fix variable name in TRACE() statement
Signed-off-by: Ithamar R. Adema <ithamar@upgrade-android.com>
2012-11-05 01:45:23 +01:00
François Revol
04d6229ef8 Merge branch 'master' into sam460ex 2012-11-04 15:10:36 +01:00
Jérôme Duval
12e574a316 enlarge the buffer for the CPU features string
* 256 bytes wasn't enough for i5-2557m
2012-11-04 10:35:40 +01:00
Fredrik Holmqvist
9b0d045c59 Update to ACPICA 20121018.
This is an update from 20120711 and A LOT has happened since then. See
    https://acpica.org/download/changes.txt for all the changes.
2012-11-03 22:46:22 +01:00
François Revol
813cf8cdba Merge branch 'master' into sam460ex 2012-10-09 14:26:57 +02:00
Axel Dörfler
9b9cb227c7 Consolidated and fixed device_geometry computation.
* The only implementation that would accept more than 2 TB was the one in
  scsi_disk. But even that one was limited to 63 TB.
* Now there is a new utility function devfs_compute_geometry_size() which
  does it correctly for sizes up to 2^64 which should be good enough for
  quite some time :-)
* This fixes bug #8992.
2012-10-08 13:59:16 +02:00
François Revol
3d0f413d21 Merge branch 'master' into sam460ex 2012-10-03 22:52:25 +02:00
Prasad Joshi
45132e2b22 ps: fix uid and gid in the ps output
The function fill_team_info() completely ignored the user id and the
group id of the process (fields info->uid and info->gid respectively).
Since the info structure was zeroed earlier, the ps output showed uid
and gid of each process equal to zero.

The patch fixes the problem by properly initializing the members with
effective uid and gid. Now the output is correct.

Fixes #8995.

Signed-off-by: Ryan Leavengood <leavengood@gmail.com>
2012-10-03 15:45:56 -04:00
François Revol
0e5f979720 PPC: Add a stub PPCUBoot platform class
* use the platform field in arch_kernel_args to determine which platform to instanciate
2012-09-22 22:12:56 +02:00
François Revol
9a713d9417 U-Boot: PPC: stub out OF calls
* For now this allows linking the kernel and the pci bus manager.
* Could later on be turned into a wrapper to FDT methods since the
concepts are similar.
2012-09-22 20:45:25 +02:00
Axel Dörfler
8c3a938fc3 cache_abort_sub_transaction() did not maintain num_blocks.
* When a block was only used in a sub-transaction, it was thrown away,
  but the transaction::num_blocks field was not decremented.
* This caused transactions never considered finished which eventually
  led to bug #8942. This does not explain the disk corruption occurring
  in #8969, though.
2012-09-19 20:06:19 +02:00
Alexander von Gluck IV
58f219d49f beagleboard: Fix build, missing header 2012-09-15 12:50:08 -05:00
Ingo Weinhold
1bd0748253 Fix crash in MemoryManager::PerformMaintenance()
sFreeAreaCount wasn't decremented after removing an area from
sFreeAreas, thus causing the loop to continue until enountering and
crashing on a NULL pointer after removing the last area. Introduce
helper methods _PushFreeArea() and _PopFreeArea() to ensure this cannot
easily happen again.

Fixes ticket #8972.
2012-09-11 22:31:19 +02:00
Alexander von Gluck IV
534268052d Kernel VM: Utilize swap_auto option
* Refine the swap logic a little
* Refine header copyright to preferred format
  I had hamishm's verbal permission to change his entry
2012-09-07 00:13:14 +00:00
Alexander von Gluck IV
4517ef5728 Kernel VM: A few changes as per Axel in #7742
* Avoid floating point numbers in the kernel
* Warning would always show if custom swap file in use
* Don't change a custom swap file size if low space occurs
* Ram > 1GB? Don't double the memory for the automatic size
2012-09-04 15:35:10 -05:00
Alexander von Gluck IV
3e01905aca Kernel VM: Add compatibility logic
* If old-format swap config file found, parse it properly
2012-09-04 13:27:33 -05:00
Alexander von Gluck IV
0606074fd9 Kernel VM: Improve swap file selection
* Heavily based on Hamish Morrison's GCI work with some
  modified logic and cleanup. #3723
* Adds automatic swap as well as user specified swap
* Limits:
  Automatic: (ram * 2) up to 25% of the disk
  User: user specified up to 90% of the disk
* Supports changing the swap disk location
2012-09-04 12:31:56 -05:00
Alexander von Gluck IV
3d87b8120c Kernel VM: Style cleanup; No functional change 2012-09-04 08:42:36 -05:00
Axel Dörfler
098967cee1 Fixed the new issue in #8910 from r44585.
* The ASSERT() I introduced in r44585 was incorrect: when the sub transaction
  used block_cache_get_empty() to get the block, there is no original_data for
  a reason.
* Added a test case that reproduces this situation.
* The block must be moved to the unused list in this situation, though, or else
  it might contain invalid data. Since the block can only be allocated in the
  current transaction, this should not be a problem, though, AFAICT.
2012-09-04 01:00:33 +02:00
Yongcong Du
19187c464b x86: Initialize IA32_MSR_ENERGY_PERF_BIAS
The lowest 4 bits of the MSR serves as a hint to the hardware to
favor performance or energy saving. 0 means a hint preference for
highest performance while 15 corresponds to the maximum energy
savings. A value of 7 translates into a hint to balance performance
with energy savings.

The default reset value of the MSR is 0. If BIOS doesn't intialize
the MSR, the hardware will run in performance state. This patch
initialize the MSR with value of 7 for balance between performance
and energy savings

Signed-off-by: Fredrik Holmqvist <fredrik.holmqvist@gmail.com>
2012-08-29 22:11:56 +02:00
Axel Dörfler
713945cecb The original_data could be freed late.
* In cache_abort_sub_transaction(), the original_data can already be freed
  when the block is being removed from the transaction.
* block_cache::_GetUnusedBlock() no longer frees original/parent data - it
  now requires them to be freed already (it makes no sense to have them still
  around at this point).
* AFAICT the previous version did not have any negative consequences besides
  freeing the original data late.
2012-08-27 20:00:06 +02:00
Axel Dörfler
9089ab06bd Minor block cache refactoring.
* Extracted a write_blocks_in_previous_transaction() function out of
  cache_end_transaction(), and cache_detach_sub_transaction().
2012-08-27 12:46:22 +02:00
Axel Dörfler
dd9d610500 Fixed broken block list introduced in hrev44357.
* cache_abort_sub_transaction() was setting the transaction_next pointer to
  NULL in order to remove a block from a transaction -- however, it forgot to
  actually remove it from the transaction's block list.
* Minor restructuring.
2012-08-27 12:42:48 +02:00
Axel Dörfler
153d895337 Fixed broken discard handling in cache_start_sub_transaction().
* This actually resolves a TODO.
2012-08-27 12:38:35 +02:00
Axel Dörfler
8f9dac699d Cleanup, no functional change intended. 2012-08-27 11:21:42 +02:00
Edward Robbins
6912e7dc03 getrlimit with RLIMIT_STACK now returns USER_MAIN_THREAD_STACK_SIZE
Signed-off-by: Rene Gollent <anevilyak@gmail.com>
2012-08-24 18:29:59 -04:00
Alex Smith
d2a1be1c4e Cleaner separation of 32-/64-bit specific CPU/interrupt code.
Renamed {32,64}/int.cpp to {32,64}/descriptors.cpp, which now contain
functions for GDT and TSS setup that were previously in arch_cpu.cpp,
as well as the IDT setup code. These get called from the init functions
in arch_cpu.cpp, rather than having a bunch of ifdef'd chunks of code
for 32/64.
2012-08-18 17:43:40 +01:00
Rene Gollent
1e068aea46 Slight improvement to tracing output.
- If a trace entry has a stack trace, attempt to demangle the associated symbols.
  Could be enhanced further to also demangle the arguments but doesn't yet.
  Interestingly there are some mangled symbols that our demangler appears to
  not handle correctly (gcc4).
2012-08-19 16:04:36 -04:00
Alex Smith
e688bf23d4 Merge branch 'master' into x86_64
Conflicts:
	src/servers/app/ServerWindow.cpp
2012-08-16 21:11:15 +01:00
Alex Smith
c864ba1a2d Build a separate libsupc++ for the kernel with correct flags.
Kernel mode code on x86_64 needs to be built with -mno-red-zone as
interrupts would corrupt the red zone if it were in use. However, the
kernel is linked with libsupc++, which was not compiled with
-mno-red-zone. If an interrupt occurred in libsupc++ code the red zone
would get corrupted. This was causing random panics, particularly under
heavy system load. Therefore, on x86_64 a separate build of libsupc++
with -mno-red-zone is now done for the kernel to use. Note: this commit
will require a rerun of configure and rebuild of cross tools.
2012-08-16 13:57:04 +01:00
Michael Lotz
c936a02360 Move MSI initialization before IO-APIC to fix missing init.
Initializing the IO-APIC will initialize the PCI module, which does
read the MSI config of the devices only when MSIs are available.
Since we initialized them only after that, that condition wasn't met.
Later, due to the uninitialized arch info, MSIs were still marked as
available (0xcc = 204 MSIs). Due to the also uninitialized configured
count, they were always deemed busy however, in effect just breaking
MSI support whereever IO-APICs were available.
2012-08-16 00:31:18 +02:00
Alex Smith
4efc3430a0 Fixed possible NULL dereference in vm_page_fault.
This bug was introduced by changing IS_USER_ADDRESS to check against
USER_BASE AND USER_TOP rather than just !IS_KERNEL_ADDRESS. Faults
on addresses outside both the user and kernel address spaces (i.e. the
gap between user and kernel) would result in addressSpace being NULL,
but addressSpace was being used without checking for NULL at one point.
2012-08-14 17:46:09 +01:00
Alex Smith
a53cfbf491 Jump to the fault handler for GPFs in the debugger.
If an uncanonical address is accessed a general protection fault will
be raised. When in the debugger, uncanonical address faults should be
handled by the fault handler (if any).
2012-08-14 16:03:33 +01:00
Alex Smith
fa6327c9f4 Compile remaining x86 bits for x86_64.
The IOAPIC and IRQ routing code now gets compiled for x86_64, though
they won't be used yet as there is no ACPI support currently.
2012-08-09 13:18:53 +01:00
Alex Smith
f3e4f18be7 Debugging fixes.
* INT3 had the wrong DPL set in the IDT, could not be raised from
  userland.
* Need the debug server running.
2012-08-09 09:17:04 +01:00
Alex Smith
8a1903353e Implemented user debugging support for x86_64.
Reused x86 arch_user_debugger.cpp, with a few minor changes to make
the code work for both 32 and 64 bit. Something isn't quite working
right, if a breakpoint is hit the kernel will hang. Other than that
everything appears to work correctly.
2012-08-07 20:20:42 +01:00
Alex Smith
cc30eec43d System call restart support. 2012-08-05 14:20:37 +01:00
Alex Smith
f429464535 User symbol lookup works now on x86_64. 2012-08-05 08:12:39 +01:00
Alex Smith
25871c6895 Removed Thread::fault_callback, no longer necessary now that vm86 is gone. 2012-08-04 11:02:54 +01:00
Pawel Dziepak
24128e493f nfs4: Send the server client's network address 2012-08-04 04:40:22 +02:00
Alex Smith
74bda98cb2 Killed off vm86 code, no longer being used. 2012-08-03 16:49:15 +01:00
Alex Smith
d93ed09564 Improved safety for user memory accesses.
* Changed IS_USER_ADDRESS to check an address using USER_BASE and
  USER_SIZE, rather than just !IS_KERNEL_ADDRESS. The old check would
  allow user buffers to point into the physical memory map area.
* Added an unmapped hole at the end of the bottom half of the address
  space which catches buffers that cross into the uncanonical address
  region. This also removes the need to check for uncanonical return
  addresses in the syscall handler, it is no longer possible for the
  return address to be uncanonical under normal circumstances. All
  cases in which the return address might be changed by the kernel
  are still handled via the IRET path.
2012-08-02 09:32:33 +01:00
Alex Smith
9a5503d01c Different uname machine type for x86_64.
* Added B_64_BIT_PC_PLATFORM platform type.
* Return "x86_64" as the machine type for that platform in uname.
2012-08-01 11:13:14 +01:00
Alex Smith
02dd3236d2 Better names for syscall/signal functions copied to the commpage. 2012-07-30 21:56:50 +01:00
Alex Smith
c0d28c0199 Implemented signals for x86_64. 2012-07-30 13:52:51 +01:00
Alex Smith
afde37ff9b Prevent allocating address 0 when inserting an area with B_ANY_ADDRESS.
The USER_BASE_ANY definition exists to specify where to start searching
for B_ANY_ADDRESS allocations, but this was not being used correctly.
On x86_64, this was causing the runtime loader's heap to be allocated
at address 0 so NULL pointer accesses were not getting caught.
2012-07-29 14:31:11 +01:00
Alex Smith
03add8e7c2 Implemented TLS for x86_64. 2012-07-29 11:39:01 +01:00
Alex Smith
6e2f6d1ace Changed cookie type for get_next_area_info() to ssize_t.
The cookie is used to store the base address of the area that was just
visited. On 64-bit systems, int32 is not sufficient. Therefore, changed
to ssize_t which retains compatibility on x86 while expanding to a
sufficient size on x86_64.
2012-07-29 09:31:14 +01:00
Alex Smith
0efc5e72dc Merge branch 'master' into x86_64 2012-07-28 16:29:41 +01:00
Alex Smith
ce35b7a68a Fixed broken build for x86. 2012-07-25 15:00:50 +01:00
Alex Smith
6f1f972caf Finished system call handler.
The interrupt and system call handlers now perform all the necessary
kernel entry/exit work, and the system call handler now handles calls
with more than 6 arguments. Debugging and system call tracing hooks
are not yet called, will be added when user debugging gets implemented.
2012-07-25 08:56:47 +01:00
Axel Dörfler
846b2f90f6 Changed the kernel's file_map.cpp to be usable from the fs_shell as well.
* This should reduce our maintenance burden a tiny bit :-)
* It also fixes a bug in the fs_shell, see hrev43395.
2012-07-24 16:00:22 +02:00
Alex Smith
370ab57d49 Initial userland support for x86_64.
Userland switch is implemented, as is basic system call support (using
SYSCALL/SYSRET). The system call handler is not yet complete: it doesn't
handle more than 6 arguments, and does not perform all the necessary kernel
entry/exit work (neither does the interrupt handler). However, this is
sufficient for runtime_loader to start and print some debug output.
2012-07-23 17:12:12 +01:00
Alex Smith
07c6bd65b8 Format string fixes for TRACE_{THREAD,TEAM}. 2012-07-23 14:20:29 +01:00
Alex Smith
aef19e3c95 Implemented creation and destruction of user translation maps. 2012-07-22 13:07:44 +01:00
Alex Smith
5afce632f3 Demangle symbols in stack traces.
Since the demangle debugger extension now gets loaded when booting
from an image, use it in stack traces. Can't print argument values
like on x86, however, since x86_64 uses registers to pass the first
6 arguments rather than the stack we can't easily get to them.
2012-07-22 12:13:04 +01:00
Alex Smith
59ae45c1ab Fixed commpage for x86_64.
Since the commpage is at a kernel address, changed 64-bit paging code
to match x86's behaviour of allowing user-accessible mappings to be
created in the kernel portion of the address space. This is also
required by some drivers.
2012-07-21 16:18:10 +01:00
Alex Smith
195a0f350e Changed argument type of fcntl syscall from uint32 to size_t.
Since this argument may be used to pass pointers, uint32 is not
correct for 64-bit. Effectively no change on 32-bit targets, both
size_t and uint32 are unsigned long there.
2012-07-21 14:33:27 +01:00
Alex Smith
5234e66d32 Optimized memcpy/memset for x86_64. 2012-07-21 11:55:13 +01:00
Alex Smith
6497f6b1ec Moved the exception handling functions to arch_int.cpp, shared between x86 and x86_64. 2012-07-21 09:11:09 +01:00
Alex Smith
82694bd124 Merge branch 'master' into x86_64
Conflicts:
	headers/posix/arch/x86_64/arch_setjmp.h
	src/system/kernel/cache/block_cache.cpp
2012-07-20 18:33:46 +01:00
Alex Smith
d7ec2fa3bf A couple of format string fixes for tracing printfs. 2012-07-20 17:37:37 +01:00
Alex Smith
2865db34c8 Compile msi.cpp for x86_64.
Needed to link the PCI module, not enabling it yet though, I'm not
sure whether everything needed for it is in place yet.
2012-07-20 11:53:46 +01:00
Axel Dörfler
752f5c972f cache_abort_[sub_]transaction() did not work correctly.
* cache_abort_transaction() left the block dirty which was causing bug
  #8123 as well.
* cache_abort_sub_transaction() did, in addition to not clearing the dirty
  flag, not reset the block's transaction member either if the block was
  not part of the parent transaction.
2012-07-20 00:03:38 +02:00
Axel Dörfler
0579a69564 Added a bit of documentation, minor cleanup.
* Documented the cached_block::transaction, and previous_transaction
  members.
2012-07-20 00:03:37 +02:00
Andreas Henriksson
8959a4e0c3 An unused dirty block would put again into the unused list.
* This could cause bug #8123. While this fixes the crash, one underlying
  problem is still there, as dirty blocks should never leave a transaction.
2012-07-19 23:44:25 +02:00
Alex Smith
385d69fc01 Made it possible to build kernel modules for x86_64.
Added the necessary build flags for modules, and added a module (dpc)
to the floppy image for x86_64 builds for testing purposes. The module
gets loaded correctly and its code runs without issue. Only non-trivial
addition is the different method for generating kernel.so, this is
explained in the kernel Jamfile.
2012-07-19 17:53:46 +01:00
Alex Smith
0cbce9aa47 A few 64-bit fixes for ELF/module code. 2012-07-19 12:45:17 +01:00
Alex Smith
b2cd72d8f3 Implemented arch_debug_call_with_fault_handler for x86_64. 2012-07-14 09:23:48 +01:00
Alex Smith
368f253347 Merge branch 'master' into x86_64 2012-07-14 08:49:14 +01:00
Alex Smith
bcb07a319b Implemented the rest of the kernel debugger functions for x86_64.
Merged with the x86 implementations, mostly the same except for a
few differences. GDB stub is currently broken, will investigate
later.
2012-07-13 14:09:09 +01:00
Ingo Weinhold
e6418c88b5 Declare syscall_numbers.h include for x86_signals_asm.S
Fixes #8718 (again).
2012-07-13 07:08:52 +02:00
Fredrik Holmqvist
a51a5f3e1e Fixes to Haiku specific code to work with ACPICA 20120711. 2012-07-12 18:32:56 +02:00
Alex Smith
8a65fedaaa Merge branch 'master' into x86_64
Conflicts:
	src/system/kernel/arch/x86/arch_debug.cpp
2012-07-12 16:32:12 +01:00
Alex Smith
7dc738b0fb Fixed ordering of registers in arch_debug_gdb_get_registers.
Current code was sending EAX, EBX, ECX, EDX..., GDB (all versions as far
as I can tell) expects EAX, ECX, EDX, EBX... Also added missing FS and GS.
2012-07-12 15:59:50 +01:00
Alex Smith
4ebc6dfa68 Moved some 32-bit specific stuff to the 32 subdirectory. 2012-07-12 14:23:55 +01:00
Alex Smith
6e06fa6f7e Added missing validity check on relocation address. 2012-07-12 14:06:29 +01:00
Alex Smith
98614a9658 Merge branch 'master' into x86_64 2012-07-12 11:33:39 +01:00
Alex Smith
c3f0fd28cd Fixed formatting of output in some debugger commands.
Currently all debugger commands assume 32-bit pointers when formatting their
output. This means that on x86_64 the output is incorrectly formatted. Fixed
this by adding a B_PRINTF_POINTER_WIDTH definition (16 on 64-bit, 8 on
32-bit), and using this to correctly format the output. Not all commands have
been fixed yet, but all VM, slab, VFS, team, thread and image commands should
be correct.
2012-07-12 11:29:33 +01:00
Ingo Weinhold
8c51cca27e Fix accidental partial revert of 0174267 2012-07-12 11:06:10 +02:00
Ingo Weinhold
b1700b2cd1 Declare syscall_numbers.h include for x86_signals.cpp
Fixes #8718.
2012-07-12 10:54:30 +02:00
Ingo Weinhold
e2d2662bc4 Automatic whitespace cleanup 2012-07-12 10:53:42 +02:00
Alex Smith
76a1175dbe Support for SMP on x86_64.
No major changes to the kernel: just compiled in arch_smp.cpp and fixed the
IDT load in arch_cpu_init_percpu to use the correct limit for x86_64 (uses
sizeof(interrupt_descriptor)). In the boot loader, changed smp_boot_other_cpus
to construct a temporary GDT and get the page directory address from CR3, as
what's in kernel_args will be 64-bit stuff and will not work to switch the
CPUs into 32-bit mode in the trampoline code. Refactored 64-bit kernel entry
code to not use the stack after disabling paging, as the secondary CPUs are
given a 32-bit virtual stack address by the SMP trampoline code which will
no longer work.
2012-07-11 18:29:15 +01:00
Fredrik Holmqvist
0174267ad4 Move ACPICA files into acpica subdir and use acpica subdir layout.
This matches layout in ACPICA and keeps a cleaner boundry between
Haiku and ACPICA code. The only haiku specific file in ACPICA is
achaiku.h and it will hopefully be included upstream soon.

Merging will be simpler as we can just replace acpica contents and
fix Jamfile and build errors in our code.
2012-07-11 18:50:06 +02:00
Alex Smith
659bacac26 Compile arch_real_time_clock.cpp and arch_system_info.cpp for x86_64. 2012-07-11 14:43:44 +01:00
Alex Smith
d776fd53f7 Implemented arch_cpu_user_*() for x86_64, based on the x86 versions. 2012-07-11 14:19:19 +01:00