100 Commits
Author SHA1 Message Date
Helge Deller 4b088005c8 fbdev: stifb: Fix crash in stifb_blank()
Avoid a kernel crash in stifb by providing the correct pointer to the fb_info
struct. Prior to commit e2e0b838a1 ("video/sticore: Remove info field from
STI struct") the fb_info struct was at the beginning of the fb struct.

Fixes: e2e0b838a1 ("video/sticore: Remove info field from STI struct")
Signed-off-by: Helge Deller <[email protected]>
Cc: Thomas Zimmermann <[email protected]>
2024-01-23 09:13:24 +01:00
Helge Deller 2bebc3cd48 Revert "firmware/sysfb: Clear screen_info state after consuming it"
This reverts commit df67699c9c.

Jens Axboe reported a regression that his machine is failing to show a
console, or in fact anything, on current -git. There's no output and no
console after:

Loading Linux 6.7.0+ ...
Loading initial ramdisk ...

Signed-off-by: Helge Deller <[email protected]>
Cc: Thomas Zimmermann <[email protected]>
Cc: Jens Axboe <[email protected]>
2024-01-19 22:22:26 +01:00
Helge Deller 6472036581 parisc/power: Fix power soft-off button emulation on qemu
Make sure to start the kthread to check the power button on qemu as
well if the power button address was provided.
This fixes the qemu built-in system_powerdown runtime command.

Fixes: d0c2194729 ("parisc/power: Add power soft-off when running on qemu")
Signed-off-by: Helge Deller <[email protected]>
Cc: [email protected] # v6.0+
2024-01-07 22:59:16 +01:00
Helge Deller 735ae74f73 parisc/firmware: Fix F-extend for PDC addresses
When running with narrow firmware (64-bit kernel using a 32-bit
firmware), extend PDC addresses into the 0xfffffff0.00000000
region instead of the 0xf0f0f0f0.00000000 region.

This fixes the power button on the C3700 machine in qemu (64-bit CPU
with 32-bit firmware), and my assumption is that the previous code was
really never used (because most 64-bit machines have a 64-bit firmware),
or it just worked on very old machines because they may only decode
40-bit of virtual addresses.

Cc: [email protected]
Signed-off-by: Helge Deller <[email protected]>
2024-01-07 22:59:16 +01:00
Helge Deller 753547de0d linux/export: Ensure natural alignment of kcrctab array
The ___kcrctab section holds an array of 32-bit CRC values.
Add a .balign 4 to tell the linker the correct memory alignment.

Fixes: f3304ecd7f ("linux/export: use inline assembler to populate symbol CRCs")
Signed-off-by: Helge Deller <[email protected]>
Signed-off-by: Masahiro Yamada <[email protected]>
2023-12-29 01:25:58 +09:00
Helge Deller f6847807c2 linux/export: Fix alignment for 64-bit ksymtab entries
An alignment of 4 bytes is wrong for 64-bit platforms which don't define
CONFIG_HAVE_ARCH_PREL32_RELOCATIONS (which then store 64-bit pointers).
Fix their alignment to 8 bytes.

Fixes: ddb5cdbafa ("kbuild: generate KSYMTAB entries by modpost")
Signed-off-by: Helge Deller <[email protected]>
Signed-off-by: Masahiro Yamada <[email protected]>
2023-12-23 23:24:03 +09:00
Helge Deller 4876357561 parisc: Fix asm operand number out of range build error in bug table
Build is broken if CONFIG_DEBUG_BUGVERBOSE=n.
Fix it be using the correct asm operand number.

Signed-off-by: Helge Deller <[email protected]>
Reported-by: Linux Kernel Functional Testing <[email protected]>
Fixes: fe76a1349f ("parisc: Use natural CPU alignment for bug_table")
Cc: [email protected]   # v6.0+
2023-11-27 11:01:38 +01:00
Helge Deller 4326683851 parisc: Reduce size of the bug_table on 64-bit kernel by half
Enable GENERIC_BUG_RELATIVE_POINTERS which will store 32-bit relative
offsets to the bug address and the source file name instead of 64-bit
absolute addresses. This effectively reduces the size of the
bug_table[] array by half on 64-bit kernels.

Signed-off-by: Helge Deller <[email protected]>
2023-11-25 09:43:18 +01:00
Helge Deller e5f3e299a2 parisc: Drop the HP-UX ENOSYM and EREMOTERELEASE error codes
Those return codes are only defined for the parisc architecture and
are leftovers from when we wanted to be HP-UX compatible.

They are not returned by any Linux kernel syscall but do trigger
problems with the glibc strerrorname_np() and strerror() functions as
reported in glibc issue #31080.

There is no need to keep them, so simply remove them.

Signed-off-by: Helge Deller <[email protected]>
Reported-by: Bruno Haible <[email protected]>
Closes: https://sourceware.org/bugzilla/show_bug.cgi?id=31080
Cc: [email protected]
2023-11-25 09:43:18 +01:00
Helge Deller fe76a1349f parisc: Use natural CPU alignment for bug_table
Make sure that the __bug_table section gets 32- or 64-bit aligned,
depending if a 32- or 64-bit kernel is being built.
Mark it non-writeable and use .blockz instead of the .org assembler
directive to pad the struct.

Signed-off-by: Helge Deller <[email protected]>
Cc: [email protected]   # v6.0+
2023-11-25 09:43:18 +01:00
Helge Deller c9fcb2b65c parisc: Ensure 32-bit alignment on parisc unwind section
Make sure the .PARISC.unwind section will be 32-bit aligned.

Signed-off-by: Helge Deller <[email protected]>
Cc: [email protected]   # v6.0+
2023-11-25 09:43:17 +01:00
Helge Deller b28fc0d873 parisc: Mark lock_aligned variables 16-byte aligned on SMP
On parisc we need 16-byte alignment for variables which are used for
locking. Mark the __lock_aligned attribute acordingly so that the
.data..lock_aligned section will get that alignment in the generated
object files.

Signed-off-by: Helge Deller <[email protected]>
Cc: [email protected]   # v6.0+
2023-11-25 09:43:17 +01:00
Helge Deller 07eecff8ae parisc: Mark jump_table naturally aligned
The jump_table stores two 32-bit words and one 32- (on 32-bit kernel)
or one 64-bit word (on 64-bit kernel).
Ensure that the last word is always 64-bit aligned on a 64-bit kernel
by aligning the whole structure on sizeof(long).

Signed-off-by: Helge Deller <[email protected]>
Cc: [email protected]   # v6.0+
2023-11-25 09:43:17 +01:00
Helge Deller 33f806da2d parisc: Mark altinstructions read-only and 32-bit aligned
Signed-off-by: Helge Deller <[email protected]>
Cc: [email protected]   # v6.0+
2023-11-25 09:43:17 +01:00
Helge Deller a80aeb8654 parisc: Mark ex_table entries 32-bit aligned in uaccess.h
Add an align statement to tell the linker that all ex_table entries and as
such the whole ex_table section should be 32-bit aligned in vmlinux and modules.

Signed-off-by: Helge Deller <[email protected]>
Cc: [email protected]   # v6.0+
2023-11-25 09:43:17 +01:00
Helge Deller e11d4cccd0 parisc: Mark ex_table entries 32-bit aligned in assembly.h
Add an align statement to tell the linker that all ex_table entries and as
such the whole ex_table section should be 32-bit aligned in vmlinux and modules.

Signed-off-by: Helge Deller <[email protected]>
Cc: [email protected]   # v6.0+
2023-11-25 09:43:17 +01:00
Helge Deller 793838138c prctl: Disable prctl(PR_SET_MDWE) on parisc
systemd-254 tries to use prctl(PR_SET_MDWE) for it's MemoryDenyWriteExecute
functionality, but fails on parisc which still needs executable stacks in
certain combinations of gcc/glibc/kernel.

Disable prctl(PR_SET_MDWE) by returning -EINVAL for now on parisc, until
userspace has catched up.

Signed-off-by: Helge Deller <[email protected]>
Co-developed-by: Linus Torvalds <[email protected]>
Reported-by: Sam James <[email protected]>
Closes: https://github.com/systemd/systemd/issues/29775
Tested-by: Sam James <[email protected]>
Link: https://lore.kernel.org/all/[email protected]/
Cc: <[email protected]> # v6.3+
2023-11-18 19:35:31 +01:00
Helge Deller 6ad6e15a9c parisc/power: Fix power soft-off when running on qemu
Firmware returns the physical address of the power switch,
so need to use gsc_writel() instead of direct memory access.

Fixes: d0c2194729 ("parisc/power: Add power soft-off when running on qemu")
Signed-off-by: Helge Deller <[email protected]>
Cc: [email protected] # v6.0+
2023-11-18 18:59:30 +01:00
Helge Deller 5f74f820f6 parisc: fix mmap_base calculation when stack grows upwards
Matoro reported various userspace crashes on the parisc platform with kernel
6.6 and bisected it to commit 3033cd4307 ("parisc: Use generic mmap top-down
layout and brk randomization").

That commit switched parisc to use the common infrastructure to calculate
mmap_base, but missed that the mmap_base() function takes care for
architectures where the stack grows downwards only.

Fix the mmap_base() calculation to include the stack-grows-upwards case
and thus fix the userspace crashes on parisc.

Link: https://lkml.kernel.org/r/ZVH2qeS1bG7/1J/l@p100
Fixes: 3033cd4307 ("parisc: Use generic mmap top-down layout and brk randomization")
Signed-off-by: Helge Deller <[email protected]>
Reported-by: matoro <[email protected]>
Tested-by: matoro <[email protected]>
Cc: <[email protected]>	[6.6+]
Signed-off-by: Andrew Morton <[email protected]>
2023-11-15 15:30:09 -08:00
Helge Deller a406b8b424 parisc: Prevent booting 64-bit kernels on PA1.x machines
Bail out early with error message when trying to boot a 64-bit kernel on
32-bit machines. This fixes the previous commit to include the check for
true 64-bit kernels as well.

Signed-off-by: Helge Deller <[email protected]>
Fixes: 591d2108f3 ("parisc: Add runtime check to prevent PA2.0 kernels on PA1.x machines")
Cc:  <[email protected]> # v6.0+
2023-11-10 16:17:32 +01:00
Helge Deller 166b0110d1 parisc/pgtable: Do not drop upper 5 address bits of physical address
When calculating the pfn for the iitlbt/idtlbt instruction, do not
drop the upper 5 address bits. This doesn't seem to have an effect
on physical hardware which uses less physical address bits, but in
qemu the missing bits are visible.

Signed-off-by: Helge Deller <[email protected]>
Cc:  <[email protected]>
2023-11-07 19:48:30 +01:00
Helge Deller 8a32aa17c1 fbdev: stifb: Make the STI next font pointer a 32-bit signed offset
The pointer to the next STI font is actually a signed 32-bit
offset. With this change the 64-bit kernel will correctly subract
the (signed 32-bit) offset instead of adding a (unsigned 32-bit)
offset. It has no effect on 32-bit kernels.

This fixes the stifb driver with a 64-bit kernel on qemu.

Signed-off-by: Helge Deller <[email protected]>
Cc: [email protected]
2023-10-30 14:54:41 +01:00
Helge Deller b63b4f1a79 parisc: Show default CPU PSW.W setting as reported by PDC
The last word shows the default PSW.W setting.

Signed-off-by: Helge Deller <[email protected]>
2023-10-30 14:54:41 +01:00
Helge Deller 6240553b52 parisc/pdc: Add width field to struct pdc_model
PDC2.0 specifies the additional PSW-bit field.

Signed-off-by: Helge Deller <[email protected]>
Cc: [email protected]
2023-10-30 14:54:41 +01:00
Helge Deller 86bb854d13 parisc/agp: Use 64-bit LE values in SBA IOMMU PDIR table
The PDIR table of the System Bus Adapter (SBA) I/O MMU uses 64-bit
little-endian pointers.

Signed-off-by: Helge Deller <[email protected]>
Cc: [email protected] # v6.4+
2023-10-30 14:54:41 +01:00
Helge Deller 9f5989d79d parisc/firmware: Use PDC constants for narrow/wide firmware
PDC uses the PDC_MODEL_OS64 and PDC_MODEL_OS32 constants, so use
those constants for the internal WIDE_FIRMWARE/NARROW_FIRMWARE too.

Signed-off-by: Helge Deller <[email protected]>
2023-10-30 14:54:41 +01:00
Helge Deller 06a2e4998a parisc: Move parisc_narrow_firmware variable to header file
Signed-off-by: Helge Deller <[email protected]>
2023-10-30 14:54:40 +01:00
Helge Deller fe0a9b8b22 parisc/power: Trivial whitespace cleanups and license update
Signed-off-by: Helge Deller <[email protected]>
2023-10-30 14:54:40 +01:00
Helge Deller d0c2194729 parisc/power: Add power soft-off when running on qemu
Signed-off-by: Helge Deller <[email protected]>
Cc: [email protected] # v6.0+
2023-10-30 14:54:40 +01:00
Helge Deller 01fef82673 parisc: Allow building uncompressed Linux kernel
Add HAVE_KERNEL_UNCOMPRESSED flag and fix build in boot
directory.

Signed-off-by: Helge Deller <[email protected]>
2023-10-30 14:54:40 +01:00
Helge Deller b9c515f7e3 parisc: Add some missing PDC functions and constants
Signed-off-by: Helge Deller <[email protected]>
2023-10-30 14:54:40 +01:00
Helge Deller 58ad89e866 parisc: sba-iommu: Fix comment when calculating IOC number
Signed-off-by: Helge Deller <[email protected]>
2023-10-30 14:54:40 +01:00
Helge Deller d3b3c637e4 parisc: Fix crash with nr_cpus=1 option
John David Anglin reported that giving "nr_cpus=1" on the command
line causes a crash, while "maxcpus=1" works.

Reported-by: John David Anglin <[email protected]>
Signed-off-by: Helge Deller <[email protected]>
Cc: [email protected] # v5.18+
2023-10-07 20:30:16 +02:00
Helge Deller 68ffa230da LoongArch: Fix lockdep static memory detection
Since commit 0a6b58c5cd ("lockdep: fix static memory detection even
more") the lockdep code uses is_kernel_core_data(), is_kernel_rodata()
and init_section_contains() to verify if a lock is located inside a
kernel static data section.

This change triggers a failure on LoongArch, for which the vmlinux.lds.S
script misses to put the locks (as part of in the .data.rel symbols)
into the Linux data section.

This patch fixes the lockdep problem by moving *(.data.rel*) symbols
into the kernel data section (from _sdata to _edata).

Additionally, move other wrongly assigned symbols too:
- altinstructions into the _initdata section,
- PLT symbols behind the read-only section, and
- *(.la_abs) into the data section.

Cc: stable <[email protected]> # v6.4+
Fixes: 0a6b58c5cd ("lockdep: fix static memory detection even more")
Reported-by: Guenter Roeck <[email protected]>
Tested-by: Guenter Roeck <[email protected]>
Signed-off-by: Helge Deller <[email protected]>
Signed-off-by: Huacai Chen <[email protected]>
2023-09-20 14:26:28 +08:00
Helge Deller e5ef93d02d parisc: BTLB: Initialize BTLB tables at CPU startup
Initialize the BTLB entries when starting up a CPU.
Note that BTLBs are not available on 64-bit CPUs.

Signed-off-by: Helge Deller <[email protected]>
2023-09-07 09:12:20 +02:00
Helge Deller 3756597a68 parisc: firmware: Simplify calling non-PA20 functions
Instead of usig #ifdefs, simply return PDC_BAD_PROC for functions
which aren't available on 64-bit CPUs.

Signed-off-by: Helge Deller <[email protected]>
2023-09-07 09:12:20 +02:00
Helge Deller 4695e45ec0 parisc: BTLB: _edata symbol has to be page aligned for BTLB support
Signed-off-by: Helge Deller <[email protected]>
2023-09-07 09:12:20 +02:00
Helge Deller 510610f96d parisc: BTLB: Add BTLB insert and purge firmware function wrappers
Signed-off-by: Helge Deller <[email protected]>
2023-09-07 09:12:20 +02:00
Helge Deller eda205211a parisc: BTLB: Clear possibly existing BTLB entries
Call PDC to remove all existing BTLB entries (which may exist from
some previous operating system runs) before switching to virtual mode.

Signed-off-by: Helge Deller <[email protected]>
2023-09-07 09:12:20 +02:00
Helge Deller 70bd68d5b6 parisc: Prepare for Block-TLB support on 32-bit kernel
Change HUGEPAGE_SIZE to become 4 MB on 32-bit kernels, which leads
that kernel code and kernel data will start on 4 MB boundaries.

Although a 32-bit kernel does not support huge pages, most
machines have support for Block-TLBs (BTLB) which allow to
configure the system to use large pages (block TLBs) to minimize
the TLB contention. This is done through calls to PDC and the
32-bit kernel can then call BTLB PDC functions to tell
the machine to optimize the TLBs.

Signed-off-by: Helge Deller <[email protected]>
2023-09-07 09:12:19 +02:00
Helge Deller 3f091387a3 parisc: shmparam.h: Document aliasing requirements of PA-RISC
Add some documentation why PA-RISC uses SHMLBA and SHM_COLOUR.

Signed-off-by: Helge Deller <[email protected]>
2023-09-07 08:00:32 +02:00
Helge Deller a9415b03f0 fbdev: neofb: Shorten Neomagic product name in info struct
Avoid those compiler warnings:
neofb.c:1959:3: warning: 'snprintf' will always be truncated;
   specified size is 16, but format string expands to at least 17 [-Wfortify-source]

Signed-off-by: Helge Deller <[email protected]>
Reported-by: Nathan Chancellor <[email protected]>
Reported-by: Nick Desaulniers <[email protected]>
Reviewed-by: Nick Desaulniers <[email protected]>
Link: https://lore.kernel.org/all/CAKwvOdn0xoVWjQ6ufM_rojtKb0f1i1hW-J_xYGfKDNFdHwaeHQ@mail.gmail.com/
Link: https://github.com/ClangBuiltLinux/linux/issues/1923
2023-09-01 00:29:33 +02:00
Helge Deller b1bef1388c parisc: irq: Make irq_stack_union static to avoid sparse warning
Signed-off-by: Helge Deller <[email protected]>
2023-08-31 22:36:12 +02:00
Helge Deller b137b9d60b parisc: drivers: Fix sparse warning
Fix "warning: directive in macro's argument list" warning.

Signed-off-by: Helge Deller <[email protected]>
2023-08-31 22:09:15 +02:00
Helge Deller 927c6c8aa2 parisc: iosapic.c: Fix sparse warnings
Signed-off-by: Helge Deller <[email protected]>
2023-08-31 21:42:42 +02:00
Helge Deller 9a47a710cf parisc: ccio-dma: Fix sparse warnings
Signed-off-by: Helge Deller <[email protected]>
2023-08-31 21:42:42 +02:00
Helge Deller c1ebb94071 parisc: sba-iommu: Fix sparse warnigs
Fix sparse warnings, as pdir is __le64 *.

Signed-off-by: Helge Deller <[email protected]>
2023-08-31 21:42:42 +02:00
Helge Deller eb3255ee8f parisc: sba: Fix compile warning wrt list of SBA devices
Fix this makecheck warning:
drivers/parisc/sba_iommu.c:98:19: warning: symbol 'sba_list'
	was not declared. Should it be static?

Signed-off-by: Helge Deller <[email protected]>
2023-08-31 21:42:42 +02:00
Helge Deller 6428bc7bd3 parisc: sba_iommu: Fix build warning if procfs if disabled
Clean up the code, e.g. make proc_mckinley_root static, drop the now
empty mckinley header file and remove some unneeded ifdefs around procfs
functions.

Signed-off-by: Helge Deller <[email protected]>
Reported-by: kernel test robot <[email protected]>
Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
Fixes: 77e0ddf097 ("parisc: ccio-dma: Create private runway procfs root entry")
2023-08-31 21:42:42 +02:00
Helge Deller 77e0ddf097 parisc: ccio-dma: Create private runway procfs root entry
Create an own procfs "runway" root entry for the CCIO driver.
No need to share it with the sba_iommu driver, as only one
of those busses can be active in one machine anyway.

Signed-off-by: Helge Deller <[email protected]>
Reported-by: kernel test robot <[email protected]>
Fixes: 547259580d ("parisc: Move proc_mckinley_root and proc_runway_root to sba_iommu")
Cc: <[email protected]> # v6.5
2023-08-28 18:00:27 +02:00
Helge Deller e0701e7b9f parisc: chassis: Do not overwrite string on LCD display
If we send a chassis code via PDC, PDC usually overwrites the
contents on the LCD display. Just call lcd_print() in this case
so that the LCD/LED driver prints the last string again.

Signed-off-by: Helge Deller <[email protected]>
2023-08-28 17:58:14 +02:00
Helge Deller 789e527adf parisc: led: Rewrite LED/LCD driver to utilizize Linux LED subsystem
Rewrite the whole driver and drop the own code to calculate load
average, disk and LAN load. Switch instead to use the in-kernel LED
subsystem, which gives us quite some advantages, e.g.
- existing triggers for heartbeat and disk/lan activity can be used
- users can configre the LEDs at will to any existing trigger via
  /sys/class/leds
- less overhead since we don't need to run own timers
- fully integrated in Linux and as such cleaner code.

Note that the driver now depends on CONFIG_LEDS_CLASS which has to
be built-in and not as module.

Signed-off-by: Helge Deller <[email protected]>
2023-08-28 17:58:14 +02:00
Helge Deller 4db89524b0 parisc: led: Fix LAN receive and transmit LEDs
Fix the LAN receive and LAN transmit LEDs, which where swapped
up to now.

Signed-off-by: Helge Deller <[email protected]>
Cc: <[email protected]>
2023-08-27 13:46:11 +02:00
Helge Deller d75ef5994d parisc: lasi: Initialize LASI driver via arch_initcall()
Move initialization code for LASI out of the GSC driver.
Since ASP and WAX have been moved in previous commits,
the GSC driver is now just a driver which provides library
functions for LASI, ASP and WAX and as such doesn't need
an own initialization function any longer.

Signed-off-by: Helge Deller <[email protected]>
2023-08-27 11:09:10 +02:00
Helge Deller ff0e833e98 parisc: asp: Initialize asp driver via arch_initcall()
Signed-off-by: Helge Deller <[email protected]>
2023-08-27 11:09:10 +02:00
Helge Deller ac65d9c90e parisc: wax: Initialize wax driver via arch_initcall()
Signed-off-by: Helge Deller <[email protected]>
2023-08-27 11:09:10 +02:00
Helge Deller 9c2ca106c9 parisc: iosapic: Convert I/O Sapic driver to use arch_initcall()
Signed-off-by: Helge Deller <[email protected]>
2023-08-27 10:54:10 +02:00
Helge Deller 53861a915a parisc: sba_iommu: Convert SBA IOMMU driver to use arch_initcall()
Signed-off-by: Helge Deller <[email protected]>
2023-08-27 09:38:32 +02:00
Helge Deller 3b425dd2ae parisc: led: Move register_led_regions() to late_initcall()
Signed-off-by: Helge Deller <[email protected]>
2023-08-27 09:36:23 +02:00
Helge Deller df3f93596c parisc: lba: Convert LBA PCI bus driver to use arch_initcall()
Signed-off-by: Helge Deller <[email protected]>
2023-08-27 09:25:48 +02:00
Helge Deller ba8723b1ed parisc: gsc: Convert GSC bus driver to use arch_initcall()
This conversion includes LASI, ASP and WAX drivers for now.

Signed-off-by: Helge Deller <[email protected]>
2023-08-27 09:17:37 +02:00
Helge Deller 63c1ce56ab parisc: ccio: Convert CCIO driver to use arch_initcall()
Signed-off-by: Helge Deller <[email protected]>
2023-08-27 09:17:37 +02:00
Helge Deller 5f4f870a44 parisc: eisa: Convert HP EISA bus driver to use arch_initcall()
Signed-off-by: Helge Deller <[email protected]>
2023-08-27 09:17:37 +02:00
Helge Deller 49663185d0 parisc: hppb: Convert HP PB bus driver to use arch_initcall()
Signed-off-by: Helge Deller <[email protected]>
2023-08-27 09:17:37 +02:00
Helge Deller 07c34e9fdc parisc: dino: Convert dino PCI bus driver to use arch_initcall()
Signed-off-by: Helge Deller <[email protected]>
2023-08-27 09:17:37 +02:00
Helge Deller 59bf860a97 parisc: Makefile: Adjust order in which drivers should be loaded
This is the order in which the drivers are initialized in setup.c.
The order is important when the drivers are convertet to use the
initcall_*() startup framework.

Signed-off-by: Helge Deller <[email protected]>
2023-08-27 09:17:37 +02:00
Helge Deller 358ad816e5 parisc: led: Reduce CPU overhead for disk & lan LED computation
Older PA-RISC machines have LEDs which show the disk- and LAN-activity.
The computation is done in software and takes quite some time, e.g. on a
J6500 this may take up to 60% time of one CPU if the machine is loaded
via network traffic.

Since most people don't care about the LEDs, start with LEDs disabled and
just show a CPU heartbeat LED. The disk and LAN LEDs can be turned on
manually via /proc/pdc/led.

Signed-off-by: Helge Deller <[email protected]>
Cc: <[email protected]>
2023-08-26 10:14:42 +02:00
Helge Deller 382d4cd184 lib/clz_ctz.c: Fix __clzdi2() and __ctzdi2() for 32-bit kernels
The gcc compiler translates on some architectures the 64-bit
__builtin_clzll() function to a call to the libgcc function __clzdi2(),
which should take a 64-bit parameter on 32- and 64-bit platforms.

But in the current kernel code, the built-in __clzdi2() function is
defined to operate (wrongly) on 32-bit parameters if BITS_PER_LONG ==
32, thus the return values on 32-bit kernels are in the range from
[0..31] instead of the expected [0..63] range.

This patch fixes the in-kernel functions __clzdi2() and __ctzdi2() to
take a 64-bit parameter on 32-bit kernels as well, thus it makes the
functions identical for 32- and 64-bit kernels.

This bug went unnoticed since kernel 3.11 for over 10 years, and here
are some possible reasons for that:

 a) Some architectures have assembly instructions to count the bits and
    which are used instead of calling __clzdi2(), e.g. on x86 the bsr
    instruction and on ppc cntlz is used. On such architectures the
    wrong __clzdi2() implementation isn't used and as such the bug has
    no effect and won't be noticed.

 b) Some architectures link to libgcc.a, and the in-kernel weak
    functions get replaced by the correct 64-bit variants from libgcc.a.

 c) __builtin_clzll() and __clzdi2() doesn't seem to be used in many
    places in the kernel, and most likely only in uncritical functions,
    e.g. when printing hex values via seq_put_hex_ll(). The wrong return
    value will still print the correct number, but just in a wrong
    formatting (e.g. with too many leading zeroes).

 d) 32-bit kernels aren't used that much any longer, so they are less
    tested.

A trivial testcase to verify if the currently running 32-bit kernel is
affected by the bug is to look at the output of /proc/self/maps:

Here the kernel uses a correct implementation of __clzdi2():

  root@debian:~# cat /proc/self/maps
  00010000-00019000 r-xp 00000000 08:05 787324     /usr/bin/cat
  00019000-0001a000 rwxp 00009000 08:05 787324     /usr/bin/cat
  0001a000-0003b000 rwxp 00000000 00:00 0          [heap]
  f7551000-f770d000 r-xp 00000000 08:05 794765     /usr/lib/hppa-linux-gnu/libc.so.6
  ...

and this kernel uses the broken implementation of __clzdi2():

  root@debian:~# cat /proc/self/maps
  0000000010000-0000000019000 r-xp 00000000 000000008:000000005 787324  /usr/bin/cat
  0000000019000-000000001a000 rwxp 000000009000 000000008:000000005 787324  /usr/bin/cat
  000000001a000-000000003b000 rwxp 00000000 00:00 0  [heap]
  00000000f73d1000-00000000f758d000 r-xp 00000000 000000008:000000005 794765  /usr/lib/hppa-linux-gnu/libc.so.6
  ...

Signed-off-by: Helge Deller <[email protected]>
Fixes: 4df87bb7b6 ("lib: add weak clz/ctz functions")
Cc: Chanho Min <[email protected]>
Cc: Geert Uytterhoeven <[email protected]>
Cc: [email protected] # v3.11+
Signed-off-by: Linus Torvalds <[email protected]>
2023-08-25 13:22:10 -07:00
Helge Deller 7db15418d3 nios2: fix flush_dcache_page() for usage from irq context
Since at least kernel 6.1, flush_dcache_page() is called with IRQs
disabled, e.g.  from aio_complete().

But the current implementation for flush_dcache_page() on NIOS2
unintentionally re-enables IRQs, which may lead to deadlocks.

Fix it by using xa_lock_irqsave() and xa_unlock_irqrestore() for the
flush_dcache_mmap_*lock() macros instead.

Link: https://lkml.kernel.org/r/ZOTF5WWURQNH9+iw@p100
Signed-off-by: Helge Deller <[email protected]>
Cc: Dinh Nguyen <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
2023-08-24 16:20:31 -07:00
Helge Deller 8f01caf0c5 parisc: Avoid ioremap() for same addresss in iosapic_register()
The LBA has already called ioremap() to get it's virtual address,
which can be used for the IOSAPIC as well.
Avoid calling ioremap() again and just reuse the correct
iomem address for the IOSAPIC.

Signed-off-by: Helge Deller <[email protected]>
2023-08-22 10:24:47 +02:00
Helge Deller 98a9d5f07e parisc: unaligned: Simplify 32-bit assembly in emulate_std()
No need to extract upper and lower 32bit values of the 64-bit value. Use
gcc's %R1 to access lower 32-bits and %1 to access upper 32-bits
instead.

Signed-off-by: Helge Deller <[email protected]>
2023-08-22 10:24:47 +02:00
Helge Deller 4800a6215e parisc: Wire up eBPF JIT compiler
Signed-off-by: Helge Deller <[email protected]>
2023-08-22 10:24:47 +02:00
Helge Deller 6b3cba3759 parisc: Fix comment on Elf64 function descriptor
The format of the Elf64 function descriptor is defined by the ABI.
Mention the various use cases in the comment.

Signed-off-by: Helge Deller <[email protected]>
2023-08-22 10:24:47 +02:00
Helge Deller 22de5d6262 parisc: Add eBPF JIT compiler glue code and Makefile
Signed-off-by: Helge Deller <[email protected]>
2023-08-22 10:24:47 +02:00
Helge Deller c95e269773 parisc: Add 64-bit eBPF JIT compiler
Signed-off-by: Helge Deller <[email protected]>
2023-08-22 10:24:46 +02:00
Helge Deller ceb0e72676 parisc: Add 32-bit eBPF JIT compiler
Signed-off-by: Helge Deller <[email protected]>
2023-08-22 10:24:46 +02:00
Helge Deller 3033cd4307 parisc: Use generic mmap top-down layout and brk randomization
parisc uses a top-down layout by default that exactly fits the generic
functions, so get rid of arch specific code and use the generic version
by selecting ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT.

Note that on parisc the stack always grows up and a "unlimited stack"
simply means that the value as defined in CONFIG_STACK_MAX_DEFAULT_SIZE_MB
should be used. So RLIM_INFINITY is not an indicator to use the legacy
memory layout.

Signed-off-by: Helge Deller <[email protected]>
2023-08-22 10:24:46 +02:00
Helge Deller 9f5ba4b3e1 parisc: Fix /proc/cpuinfo output for lscpu
The lscpu command is broken since commit cab56b51ec ("parisc: Fix
device names in /proc/iomem") added the PA pathname to all PA
devices, includig the CPUs.

lscpu parses /proc/cpuinfo and now believes it found different CPU
types since every CPU is listed with an unique identifier (PA
pathname).

Fix this problem by simply dropping the PA pathname when listing the
CPUs in /proc/cpuinfo. There is no need to show the pathname in this
procfs file.

Fixes: cab56b51ec ("parisc: Fix device names in /proc/iomem")
Signed-off-by: Helge Deller <[email protected]>
Cc: <[email protected]> # v4.9+
2023-08-22 10:24:46 +02:00
Helge Deller 0a6b58c5cd lockdep: fix static memory detection even more
On the parisc architecture, lockdep reports for all static objects which
are in the __initdata section (e.g. "setup_done" in devtmpfs,
"kthreadd_done" in init/main.c) this warning:

	INFO: trying to register non-static key.

The warning itself is wrong, because those objects are in the __initdata
section, but the section itself is on parisc outside of range from
_stext to _end, which is why the static_obj() functions returns a wrong
answer.

While fixing this issue, I noticed that the whole existing check can
be simplified a lot.
Instead of checking against the _stext and _end symbols (which include
code areas too) just check for the .data and .bss segments (since we check a
data object). This can be done with the existing is_kernel_core_data()
macro.

In addition objects in the __initdata section can be checked with
init_section_contains(), and is_kernel_rodata() allows keys to be in the
_ro_after_init section.

This partly reverts and simplifies commit bac59d18c7 ("x86/setup: Fix static
memory detection").

Link: https://lkml.kernel.org/r/ZNqrLRaOi/3wPAdp@p100
Fixes: bac59d18c7 ("x86/setup: Fix static memory detection")
Signed-off-by: Helge Deller <[email protected]>
Cc: Borislav Petkov <[email protected]>
Cc: Greg Kroah-Hartman <[email protected]>
Cc: Guenter Roeck <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: "Rafael J. Wysocki" <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
2023-08-21 13:46:24 -07:00
Helge Deller 51c70a09c3 parisc: Use page table locks only if DEBUG_KERNEL is enabled
The usage of page table locks in TLB fault handler is usually
only needed when debugging the kernel. So make this configuration
option dependend on DEBUG_KERNEL.

Signed-off-by: Helge Deller <[email protected]>
2023-08-20 20:23:46 +02:00
Helge Deller 75c6d0836e parisc: traps: Drop cpu_lpmc function pointer
This function pointer is only used by one function, so no need
to keep such an indirection.

Signed-off-by: Helge Deller <[email protected]>
2023-08-20 20:23:46 +02:00
Helge Deller 390a2086a4 parisc: Drop the pa7300lc LPMC handler
This was actually never really used, and the info it
prints won't help. Drop it.

Signed-off-by: Helge Deller <[email protected]>
2023-08-20 20:23:46 +02:00
Helge Deller e71d47dc2a parisc: lasi: Register LASI power-off feature as sys_off_handler
Prefer the Linux kernel sys_off_handler functionality over a
home-grown implementation.

Signed-off-by: Helge Deller <[email protected]>
2023-08-20 20:23:46 +02:00
Helge Deller b6594a17ec bpf/tests: Enhance output on error and fix typos
If a testcase returns a wrong (unexpected) value, print the expected and
returned value in hex notation in addition to the decimal notation.

This is very useful in tests which bit-shift hex values left or right and
helped me a lot while developing the JIT compiler for the hppa architecture.

Additionally fix two typos: dowrd -> dword, tall calls -> tail calls.

Signed-off-by: Helge Deller <[email protected]>
Signed-off-by: Daniel Borkmann <[email protected]>
Link: https://lore.kernel.org/bpf/ZN6ZAAVoWZpsD1Jf@p100
2023-08-18 17:08:42 +02:00
Helge Deller 7a894c8737 parisc: Fix CONFIG_TLB_PTLOCK to work with lightweight spinlock checks
For the TLB_PTLOCK checks we used an optimization to store the spc
register into the spinlock to unlock it. This optimization works as
long as the lightweight spinlock checks (CONFIG_LIGHTWEIGHT_SPINLOCK_CHECK)
aren't enabled, because they really check if the lock word is zero or
__ARCH_SPIN_LOCK_UNLOCKED_VAL and abort with a kernel crash
("Spinlock was trashed") otherwise.

Drop that optimization to make it possible to activate both checks
at the same time.

Noticed-by: Sam James <[email protected]>
Signed-off-by: Helge Deller <[email protected]>
Tested-by: Sam James <[email protected]>
Cc: [email protected] # v6.4+
Fixes: 15e64ef652 ("parisc: Add lightweight spinlock checks")
2023-08-14 09:54:49 +02:00
Helge Deller d863066e6c parisc: perf: Make cpu_device variable static
Signed-off-by: Helge Deller <[email protected]>
2023-08-10 23:00:18 +02:00
Helge Deller 2794f8ecb4 parisc: ftrace: Add declaration for ftrace_function_trampoline()
Make sparse happy by adding declaration for
ftrace_function_trampoline().

Signed-off-by: Helge Deller <[email protected]>
2023-08-10 22:51:54 +02:00
Helge Deller b967f48d02 parisc: boot: Nuke some sparse warnings in decompressor
Signed-off-by: Helge Deller <[email protected]>
2023-08-10 22:42:57 +02:00
Helge Deller 2c9227fd1c parisc: processor: Include asm/smp.h for init_per_cpu()
Fix sparse warning that init_per_cpu() isn't declared.

Signed-off-by: Helge Deller <[email protected]>
2023-08-10 22:32:24 +02:00
Helge Deller 66f80386a9 parisc: unaligned: Include linux/sysctl.h for unaligned_enabled
Fix sparse warning that unaligned_enabled wasn't declared.

Signed-off-by: Helge Deller <[email protected]>
2023-08-10 22:22:03 +02:00
Helge Deller 547259580d parisc: Move proc_mckinley_root and proc_runway_root to sba_iommu
Clean up the procfs root entries for gsc, runway, and mckinley busses.

Signed-off-by: Helge Deller <[email protected]>
2023-08-10 22:22:03 +02:00
Helge Deller a4c59c9adc parisc: dma: Add prototype for pcxl_dma_start
Signed-off-by: Helge Deller <[email protected]>
2023-08-10 19:12:16 +02:00
Helge Deller 388d5bdba3 parisc: parisc_ksyms: Include libgcc.h for libgcc prototypes
Signed-off-by: Helge Deller <[email protected]>
2023-08-10 18:34:05 +02:00
Helge Deller 438e9230d6 parisc: ucmpdi2: Fix no previous prototype for '__ucmpdi2' warning
Signed-off-by: Helge Deller <[email protected]>
2023-08-10 18:34:05 +02:00
Helge Deller eed869aaf1 parisc: firmware: Mark pdc_result buffers local
This fixes a sparse warning which suggest to make those static.

Signed-off-by: Helge Deller <[email protected]>
2023-08-10 17:32:10 +02:00
Helge Deller a07c03e806 parisc: firmware: Fix sparse context imbalance warnings
Tell sparse about correct context for pdc_cpu_rendezvous_*lock()
functions.

Signed-off-by: Helge Deller <[email protected]>
2023-08-10 17:32:10 +02:00
Helge Deller dc54a52a8c parisc: signal: Fix sparse incorrect type in assignment warning
Signed-off-by: Helge Deller <[email protected]>
2023-08-10 17:32:10 +02:00
Helge Deller b873bde585 parisc: ioremap: Fix sparse warnings
Fix sparse warning:
	incorrect type in assignment (different base types)
	expected unsigned long [usertype] addr
	got void *addr

Signed-off-by: Helge Deller <[email protected]>
2023-08-10 17:32:10 +02:00
Helge Deller aa1bb8b635 parisc: fault: Use C99 arrary initializers
Sparse wants C99 array initializers.

Signed-off-by: Helge Deller <[email protected]>
2023-08-10 17:32:09 +02:00
Helge Deller a0f4b7879f parisc: Fix lightweight spinlock checks to not break futexes
The lightweight spinlock checks verify that a spinlock has either value
0 (spinlock locked) and that not any other bits than in
__ARCH_SPIN_LOCK_UNLOCKED_VAL is set.

This breaks the current LWS code, which writes the address of the lock
into the lock word to unlock it, which was an optimization to save one
assembler instruction.

Fix it by making spinlock_types.h accessible for asm code, change the
LWS spinlock-unlocking code to write __ARCH_SPIN_LOCK_UNLOCKED_VAL into
the lock word, and add some missing lightweight spinlock checks to the
LWS path. Finally, make the spinlock checks dependend on DEBUG_KERNEL.

Noticed-by: John David Anglin <[email protected]>
Signed-off-by: Helge Deller <[email protected]>
Tested-by: John David Anglin <[email protected]>
Cc: [email protected] # v6.4+
Fixes: 15e64ef652 ("parisc: Add lightweight spinlock checks")
2023-08-10 17:32:09 +02:00