Hi Dave! We have had issues when installing Debian's sparc64 port on SPARC machines with virtualization support. In order to be able to install Linux into an LDOM container, both the modules sunvdc and sunvnet need to be loaded to enable block device and networking support within the virtual machine. Unfortunately, these modules are never loaded automatically despite being present and the hardware supporting it. After some discussion in Debian's bug tracker [1], Ben Hutchings, Debian's kernel maintainer, mentioned that this is a result of the VIO bus implementation on sparc/sparc64 not supporting module aliases and consequently automatic loading. Ben has provided a minimal and dirty patch which enables aliases for vio on sparc/sparc64, but he says the better solution would be to merge VIO implementations on both sparc/sparc64 and PowerPC, the latter already supporting module aliases and auto loading. A quick hotfix as Ben suggested would be great for the time being as it would unbreak the Debian installation within LDOMs, so I was wondering whether you could merge the patch? Any other suggestion? Thanks, Adrian > [1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=815977#40 -- .''`. John Paul Adrian Glaubitz : :' : Debian Developer - glaubitz@xxxxxxxxxx `. `' Freie Universitaet Berlin - glaubitz@xxxxxxxxxxxxxxxxxxx `- GPG: 62FF 8A75 84E0 2956 9546 0006 7426 3B37 F5B5 F913
From: Ben Hutchings <ben@xxxxxxxxxxxxxxx> Date: Mon, 11 Apr 2016 00:30:34 +0100 Subject: sparc: vio: Add modalias attribute to support auto-loading drivers Bug-Debian: https://bugs.debian.org/815977 Add a modalias attribute for vio devices, matching the syntax supported by file2alias and the PowerPC vio implementation. Signed-off-by: Ben Hutchings <ben@xxxxxxxxxxxxxxx> --- --- a/arch/sparc/kernel/vio.c +++ b/arch/sparc/kernel/vio.c @@ -105,9 +105,31 @@ static ssize_t type_show(struct device *dev, return sprintf(buf, "%s\n", vdev->type); } +static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + const struct vio_dev *vdev = to_vio_dev(dev); + struct device_node *dn; + const char *cp; + + dn = dev->of_node; + if (!dn) { + strcpy(buf, "\n"); + return strlen(buf); + } + cp = of_get_property(dn, "compatible", NULL); + if (!cp) { + strcpy(buf, "\n"); + return strlen(buf); + } + + return sprintf(buf, "vio:T%sS%s\n", vdev->type, cp); +} + static struct device_attribute vio_dev_attrs[] = { __ATTR_RO(devspec), __ATTR_RO(type), + __ATTR_RO(modalias), __ATTR_NULL };