Revision 0a4c56c80f90797e9b9f8426c6aae4c0cf1c9785 authored by Linus Torvalds on 29 August 2020, 20:50:56 UTC, committed by Linus Torvalds on 29 August 2020, 20:50:56 UTC
Commit ef91bb196b0d ("kernel.h: Silence sparse warning in
lower_32_bits") caused new warnings to show in the fsldma driver, but
that commit was not to blame: it only exposed some very incorrect code
that tried to take the low 32 bits of an address.

That made no sense for multiple reasons, the most notable one being that
that code was intentionally limited to only 32-bit ppc builds, so "only
low 32 bits of an address" was completely nonsensical.  There were no
high bits to mask off to begin with.

But even more importantly fropm a correctness standpoint, turning the
address into an integer then caused the subsequent address arithmetic to
be completely wrong too, and the "+1" actually incremented the address
by one, rather than by four.

Which again was incorrect, since the code was reading two 32-bit values
and trying to make a 64-bit end result of it all.  Surprisingly, the
iowrite64() did not suffer from the same odd and incorrect model.

This code has never worked, but it's questionable whether anybody cared:
of the two users that actually read the 64-bit value (by way of some C
preprocessor hackery and eventually the 'get_cdar()' inline function),
one of them explicitly ignored the value, and the other one might just
happen to work despite the incorrect value being read.

This patch at least makes it not fail the build any more, and makes the
logic superficially sane.  Whether it makes any difference to the code
_working_ or not shall remain a mystery.

Compile-tested-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent e77aee1
Raw File
Kconfig
# SPDX-License-Identifier: GPL-2.0-only
#
# Asynchronous Transfer Mode (ATM)
#

config ATM
	tristate "Asynchronous Transfer Mode (ATM)"
	help
	  ATM is a high-speed networking technology for Local Area Networks
	  and Wide Area Networks.  It uses a fixed packet size and is
	  connection oriented, allowing for the negotiation of minimum
	  bandwidth requirements.

	  In order to participate in an ATM network, your Linux box needs an
	  ATM networking card. If you have that, say Y here and to the driver
	  of your ATM card below.

	  Note that you need a set of user-space programs to actually make use
	  of ATM.  See the file <file:Documentation/networking/atm.rst> for
	  further details.

config ATM_CLIP
	tristate "Classical IP over ATM"
	depends on ATM && INET
	help
	  Classical IP over ATM for PVCs and SVCs, supporting InARP and
	  ATMARP. If you want to communication with other IP hosts on your ATM
	  network, you will typically either say Y here or to "LAN Emulation
	  (LANE)" below.

config ATM_CLIP_NO_ICMP
	bool "Do NOT send ICMP if no neighbour"
	depends on ATM_CLIP
	help
	  Normally, an "ICMP host unreachable" message is sent if a neighbour
	  cannot be reached because there is no VC to it in the kernel's
	  ATMARP table. This may cause problems when ATMARP table entries are
	  briefly removed during revalidation. If you say Y here, packets to
	  such neighbours are silently discarded instead.

config ATM_LANE
	tristate "LAN Emulation (LANE) support"
	depends on ATM
	help
	  LAN Emulation emulates services of existing LANs across an ATM
	  network. Besides operating as a normal ATM end station client, Linux
	  LANE client can also act as an proxy client bridging packets between
	  ELAN and Ethernet segments. You need LANE if you want to try MPOA.

config ATM_MPOA
	tristate "Multi-Protocol Over ATM (MPOA) support"
	depends on ATM && INET && ATM_LANE!=n
	help
	  Multi-Protocol Over ATM allows ATM edge devices such as routers,
	  bridges and ATM attached hosts establish direct ATM VCs across
	  subnetwork boundaries. These shortcut connections bypass routers
	  enhancing overall network performance.

config ATM_BR2684
	tristate "RFC1483/2684 Bridged protocols"
	depends on ATM && INET
	help
	  ATM PVCs can carry ethernet PDUs according to RFC2684 (formerly 1483)
	  This device will act like an ethernet from the kernels point of view,
	  with the traffic being carried by ATM PVCs (currently 1 PVC/device).
	  This is sometimes used over DSL lines.  If in doubt, say N.

config ATM_BR2684_IPFILTER
	bool "Per-VC IP filter kludge"
	depends on ATM_BR2684
	help
	  This is an experimental mechanism for users who need to terminate a
	  large number of IP-only vcc's.  Do not enable this unless you are sure
	  you know what you are doing.
back to top