From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rusty Russell Subject: Re: [PATCHv2] virtio_console: Add support for remoteproc serial Date: Thu, 20 Sep 2012 10:10:39 +0930 Message-ID: <871uhxplvb.fsf@rustcorp.com.au> References: <1348073458-17592-1-git-send-email-sjur.brandeland@stericsson.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1348073458-17592-1-git-send-email-sjur.brandeland@stericsson.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org Cc: Sjur =?utf-8?Q?Br=C3=A6ndeland?= , "Michael S. Tsirkin" , Linus Walleij , linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, Amit Shah , Sjur =?utf-8?Q?Br=C3=A6ndeland?= List-Id: virtualization@lists.linuxfoundation.org c2p1ci5icmFuZGVsYW5kQHN0ZXJpY3Nzb24uY29tIHdyaXRlczoKCj4gRnJvbTogU2p1ciBCcsOm bmRlbGFuZCA8c2p1ci5icmFuZGVsYW5kQHN0ZXJpY3Nzb24uY29tPgo+Cj4gQWRkIGEgc2ltcGxl IHNlcmlhbCBjb25uZWN0aW9uIGRyaXZlciBjYWxsZWQKPiBWSVJUSU9fSURfUlBST0NfU0VSSUFM ICgweEIpIGZvciBjb21tdW5pY2F0aW5nIHdpdGggYQo+IHJlbW90ZSBwcm9jZXNzb3IgaW4gYW4g YXN5bW1ldHJpYyBtdWx0aS1wcm9jZXNzaW5nCj4gY29uZmlndXJhdGlvbi4KPgo+IFRoaXMgaW1w bGVtZW50YXRpb24gcmV1c2VzIHRoZSBleGlzdGluZyB2aXJ0aW9fY29uc29sZQo+IGltcGxlbWVu dGF0aW9uLCBhbmQgYWRkcyBzdXBwb3J0IGZvciBETUEgYWxsb2NhdGlvbgo+IG9mIGRhdGEgYnVm ZmVycyBhbmQgZGlzYWJsZXMgdXNlIG9mIHR0eSBjb25zb2xlIGFuZAo+IHRoZSB2aXJ0aW8gY29u dHJvbCBxdWV1ZS4KPgo+IFRoaXMgZW5hYmxlcyB1c2Ugb2YgdGhlIGV4aXNpbmcgdmlydGlvX2Nv bnNvbGUgY29kZSBpbgo+IHRoZSByZW1vdGVwcm9jIGZyYW1ld29yay4KCk9LLCBJJ2xsIGxldCBB bWl0IGNvbW1lbnQgb24gdGhlIGNvbnNvbGUgY2hhbmdlcywgYnV0IHNvbWUgbWlub3Igc3R5bGUK Y29tbWVudHMgYmVsb3c6Cgo+ICsjaWYgSVNfRU5BQkxFRChDT05GSUdfUkVNT1RFUFJPQykKPiAr c3RhdGljIGlubGluZSBib29sIGlzX3Jwcm9jX3NlcmlhbChzdHJ1Y3QgdmlydGlvX2RldmljZSAq dmRldikKPiArewo+ICsJcmV0dXJuIHZkZXYtPmlkLmRldmljZSA9PSBWSVJUSU9fSURfUlBST0Nf U0VSSUFMOwo+ICt9Cj4gKyNlbHNlCj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19ycHJvY19zZXJp YWwoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4gK3sKPiArCXJldHVybiBmYWxzZTsKPiAr fQo+ICsjZW5kaWYKCkkgcHJlZmVyIHRvIGF2b2lkIGlubGluZSBpbiBDIGZpbGVzLiAgVGhlIGNv bXBpbGVyIGtub3dzLCBhbmQgd2l0aAppbmxpbmUgeW91IGdldCBubyB3YXJuaW5nIGlmIGl0IGJl Y29tZXMgdW51c2VkLiAgQWxzbywgY29uc3Qgc3RydWN0CnZpcnRpb19kZXZpY2UgKi4KCj4gKy8q IEFsbG9jYXRlIGRhdGEgYnVmZmVyIGZyb20gRE1BIG1lbW9yeSBpZiByZXF1ZXN0ZWQgKi8KPiAr c3RhdGljIGlubGluZSB2b2lkICoKPiArYWxsb2NfZGF0YWJ1ZihzdHJ1Y3QgdmlydGlvX2Rldmlj ZSAqdmRldiwgc2l6ZV90IHNpemUsIGdmcF90IGZsYWcpCj4gK3sKPiArCWlmIChpc19ycHJvY19z ZXJpYWwodmRldikpIHsKPiArCQlkbWFfYWRkcl90IGRtYTsKPiArCQlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSAmdmRldi0+ZGV2Owo+ICsJCS8qCj4gKwkJICogQWxsb2NhdGUgRE1BIG1lbW9yeSBmcm9t IGFuY2VzdG9ycy4gRmluZGluZyB0aGUgYW5jZXN0b3IKPiArCQkgKiBpcyBhIGJpdCBxdWlya3kg d2hlbiBETUFfTUVNT1JZX0lOQ0xVREVTX0NISUxEUkVOIGlzIG5vdAo+ICsJCSAqIGltcGxlbWVu dGVkLgo+ICsJCSAqLwo+ICsJCWRldiA9IGRldi0+cGFyZW50ID8gZGV2LT5wYXJlbnQgOiBkZXY7 Cj4gKwkJZGV2ID0gZGV2LT5wYXJlbnQgPyBkZXYtPnBhcmVudCA6IGRldjsKPiArCQlyZXR1cm4g ZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgJmRtYSwgZmxhZyk7CgpXb3csIHVwIDIgbGV2 ZWxzPyAgV2h5IDI/ICBXaGF0J3Mgc3BlY2lhbCBhYm91dCB0aGUgZ3JhbmRwYXJlbnRzPwoKPiAt c3RhdGljIHZvaWQgZnJlZV9idWYoc3RydWN0IHBvcnRfYnVmZmVyICpidWYpCj4gK3N0YXRpYyB2 b2lkCj4gK2ZyZWVfYnVmKHN0cnVjdCB2aXJ0cXVldWUgKnZxLCBzdHJ1Y3QgcG9ydF9idWZmZXIg KmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplKQo+ICB7CgpHZW5lcmFsbHkgcHJlZmVyIHRvIGluZGVudCBi dWYgYW5kIGJ1Zl9zaXplLCByYXRoZXIgdGhhbiBicmVhayBhdApmcmVlX2J1Zi4KCj4gKwlidWYg PSBhbGxvY19kYXRhYnVmKHZkZXYsIGJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKPiAgCj4gLQlidWYg PSBrbWFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKPiAgCWlmICghYnVmKQo+ICAJCXJldHVybiAt RU5PTUVNOwoKVGhpcyBlZmZlY3RpdmVseSBhZGRzIGEgYmxhbmsgbGluZSBiZXR3ZWVuICJidWYg PSAuLi4iIGFuZCAiaWYgKCFidWYpIiwKYnV0IHRoZXkncmUgYWRqYWNlbnQgYmVjYXVzZSB0aGV5 J3JlIGxvZ2ljYWxseSBncm91cGVkLgoKPiBAQCAtNzY3LDYgKzgyNiw3IEBAIHN0YXRpYyBpbnQg cG9ydF9mb3BzX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAp Cj4gIAlzcGluX3VubG9ja19pcnEoJnBvcnQtPmluYnVmX2xvY2spOwo+ICAKPiAgCXNwaW5fbG9j a19pcnEoJnBvcnQtPm91dHZxX2xvY2spOwo+ICsKPiAgCXJlY2xhaW1fY29uc3VtZWRfYnVmZmVy cyhwb3J0KTsKPiAgCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+b3V0dnFfbG9jayk7Cj4gIAoKV2Vp cmQgd2hpdGVzcGFjZSBhZGRpdGlvbi4gIEkga25vdyB5b3UncmUgZG9pbmcgdGhhdCBzaW1wbHkg dG8gY2hlY2sgaWYKSSdtIHJlYWRpbmcsIHJpZ2h0PwoKPiBAQCAtMTY4OCw3ICsxNzY4LDcgQEAg c3RhdGljIHZvaWQgcmVtb3ZlX2NvbnRyb2xxX2RhdGEoc3RydWN0IHBvcnRzX2RldmljZSAqcG9y dGRldikKPiAgICogY29uZmlnIHNwYWNlIHRvIHNlZSBob3cgbWFueSBwb3J0cyB0aGUgaG9zdCBo YXMgc3Bhd25lZC4gIFdlCj4gICAqIGluaXRpYWxpemUgZWFjaCBwb3J0IGZvdW5kLgo+ICAgKi8K PiAtc3RhdGljIGludCBfX2RldmluaXQgdmlydGNvbnNfcHJvYmUoc3RydWN0IHZpcnRpb19kZXZp Y2UgKnZkZXYpCj4gK3N0YXRpYyBpbnQgdmlydGNvbnNfcHJvYmUoc3RydWN0IHZpcnRpb19kZXZp Y2UgKnZkZXYpCj4gIHsKPiAgCXN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXY7Cj4gIAlpbnQg ZXJyOwoKTm90IHN1cmUgYWJvdXQgdGhpcyBjaGFuZ2UuICBJZiB5b3UgYWN0dWFsbHkgdHVybiBv ZmYgQ09ORklHX0hPVFBMVUcsCkkgd291bGRuJ3QgdGhpbmsgdGhhdCByZW1vdGVwcm9jIHdvdWxk IHdvcmsgYXQgYWxsIGFueSBtb3JlLCBzaW5jZSBpdApuZWVkcyB0aGUgZHJpdmVyIGNvcmUgdG8g bWF0Y2ggdXAgZGV2aWNlcz8KCj4gQEAgLTE3MjQsMTAgKzE4MDQsMTIgQEAgc3RhdGljIGludCBf X2RldmluaXQgdmlydGNvbnNfcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4gIAo+ ICAJbXVsdGlwb3J0ID0gZmFsc2U7Cj4gIAlwb3J0ZGV2LT5jb25maWcubWF4X25yX3BvcnRzID0g MTsKPiAtCWlmICh2aXJ0aW9fY29uZmlnX3ZhbCh2ZGV2LCBWSVJUSU9fQ09OU09MRV9GX01VTFRJ UE9SVCwKPiAtCQkJICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZywK PiAtCQkJCSAgICAgICBtYXhfbnJfcG9ydHMpLAo+IC0JCQkgICAgICAmcG9ydGRldi0+Y29uZmln Lm1heF9ucl9wb3J0cykgPT0gMCkKPiArCWlmIChpc19ycHJvY19zZXJpYWwodmRldikpCj4gKwkJ bXVsdGlwb3J0ID0gZmFsc2U7Cj4gKwllbHNlIGlmICh2aXJ0aW9fY29uZmlnX3ZhbCh2ZGV2LCBW SVJUSU9fQ09OU09MRV9GX01VTFRJUE9SVCwKPiArCQkJCSAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRp b19jb25zb2xlX2NvbmZpZywKPiArCQkJCQkgICBtYXhfbnJfcG9ydHMpLAo+ICsJCQkJICAmcG9y dGRldi0+Y29uZmlnLm1heF9ucl9wb3J0cykgPT0gMCkKPiAgCQltdWx0aXBvcnQgPSB0cnVlOwoK VGhpcyBpcyBhIGJpdCB3ZWlyZCwgdG8gZG91YmxlLWFzc2lnbiBtdWx0aXBvcnQgPSBmYWxzZTsg aXQgbG9va3MgdGFja2VkCm9uLgoKSG93IGFib3V0OgoKICAgICAgICAvKiBEb24ndCB0ZXN0IE1V TFRJUE9SVCBhdCBhbGwgaWYgd2UncmUgcnByb2M6IG5vdCBhIHZhbGlkIGZlYXR1cmUhICovCiAg ICAgICAgaWYgKCFpc19ycHJvY19zZXJpYWwodmRldikKICAgICAgICAgICAgICYmIHZpcnRpb19j b25maWdfdmFsKHZkZXYsIFZJUlRJT19DT05TT0xFX0ZfTVVMVElQT1JULAoJCQkJICBvZmZzZXRv ZihzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29uZmlnLAoJCQkJCSAgIG1heF9ucl9wb3J0cyksCgkJ CQkgICZwb3J0ZGV2LT5jb25maWcubWF4X25yX3BvcnRzKSA9PSAwKSB7CiAgICAgICAgICAgICAg ICBtdWx0aXBvcnQgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBtdWx0 aXBvcnQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHBvcnRkZXYtPmNvbmZpZy5tYXhfbnJfcG9y dHMgPSAxOwogICAgICAgIH0KCj4gIAllcnIgPSBpbml0X3Zxcyhwb3J0ZGV2KTsKPiBAQCAtMTgz OCw2ICsxOTIwLDE2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmVhdHVyZXNbXSA9IHsKPiAgCVZJ UlRJT19DT05TT0xFX0ZfTVVMVElQT1JULAo+ICB9Owo+ICAKPiArc3RhdGljIHN0cnVjdCB2aXJ0 aW9fZGV2aWNlX2lkIHJwcm9jX3NlcmlhbF9pZF90YWJsZVtdID0gewo+ICsjaWYgSVNfRU5BQkxF RChDT05GSUdfUkVNT1RFUFJPQykKPiArCXsgVklSVElPX0lEX1JQUk9DX1NFUklBTCwgVklSVElP X0RFVl9BTllfSUQgfSwKPiArI2VuZGlmCj4gKwl7IDAgfSwKPiArfTsKPiArCj4gK3N0YXRpYyB1 bnNpZ25lZCBpbnQgcnByb2Nfc2VyaWFsX2ZlYXR1cmVzW10gPSB7Cj4gK307Cj4gKwo+ICAjaWZk ZWYgQ09ORklHX1BNCj4gIHN0YXRpYyBpbnQgdmlydGNvbnNfZnJlZXplKHN0cnVjdCB2aXJ0aW9f ZGV2aWNlICp2ZGV2KQo+ICB7Cj4gQEAgLTE5MjIsNiArMjAxNCwxNiBAQCBzdGF0aWMgc3RydWN0 IHZpcnRpb19kcml2ZXIgdmlydGlvX2NvbnNvbGUgPSB7Cj4gICNlbmRpZgo+ICB9Owo+ICAKPiAr c3RhdGljIHN0cnVjdCB2aXJ0aW9fZHJpdmVyIHZpcnRpb19ycHJvY19zZXJpYWwgPSB7Cj4gKwku ZmVhdHVyZV90YWJsZSA9IHJwcm9jX3NlcmlhbF9mZWF0dXJlcywKPiArCS5mZWF0dXJlX3RhYmxl X3NpemUgPSBBUlJBWV9TSVpFKHJwcm9jX3NlcmlhbF9mZWF0dXJlcyksCj4gKwkuZHJpdmVyLm5h bWUgPQkidmlydGlvX3Jwcm9jX3NlcmlhbCIsCj4gKwkuZHJpdmVyLm93bmVyID0JVEhJU19NT0RV TEUsCj4gKwkuaWRfdGFibGUgPQlycHJvY19zZXJpYWxfaWRfdGFibGUsCj4gKwkucHJvYmUgPQl2 aXJ0Y29uc19wcm9iZSwKPiArCS5yZW1vdmUgPQl2aXJ0Y29uc19yZW1vdmUsCj4gK307Cj4gKwo+ ICBzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCj4gIHsKPiAgCWludCBlcnI7Cj4gQEAgLTE5 NDEsMTIgKzIwNDMsMTYgQEAgc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQo+ICAJSU5JVF9M SVNUX0hFQUQoJnBkcnZkYXRhLmNvbnNvbGVzKTsKPiAgCUlOSVRfTElTVF9IRUFEKCZwZHJ2ZGF0 YS5wb3J0ZGV2cyk7Cj4gIAo+IC0JcmV0dXJuIHJlZ2lzdGVyX3ZpcnRpb19kcml2ZXIoJnZpcnRp b19jb25zb2xlKTsKPiArCWVyciA9IHJlZ2lzdGVyX3ZpcnRpb19kcml2ZXIoJnZpcnRpb19jb25z b2xlKTsKPiArCWlmIChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCXJldHVybiByZWdpc3Rlcl92 aXJ0aW9fZHJpdmVyKCZ2aXJ0aW9fcnByb2Nfc2VyaWFsKTsKCkhtbSwgd2UgbmVlZCB0byBjbGVh bnVwIGlmIHRoZSBzZWNvbmQgcmVnaXN0ZXIgZmFpbHMuCgo+ICAjZGVmaW5lIFZJUlRJT19JRF9S UE1TRwkJNyAvKiB2aXJ0aW8gcmVtb3RlIHByb2Nlc3NvciBtZXNzYWdpbmcgKi8KPiAgI2RlZmlu ZSBWSVJUSU9fSURfU0NTSQkJOCAvKiB2aXJ0aW8gc2NzaSAqLwo+ICAjZGVmaW5lIFZJUlRJT19J RF85UAkJOSAvKiA5cCB2aXJ0aW8gY29uc29sZSAqLwo+ICsjZGVmaW5lIFZJUlRJT19JRF9SUFJP Q19TRVJJQUwJMHhCIC8qIHZpcnRpbyByZW1vdGVwcm9jIHNlcmlhbCBsaW5rICovCgpQcmVmZXIg ZGVjaW1hbCBoZXJlLi4uCgpDaGVlcnMsClJ1c3R5LgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpWaXJ0dWFsaXphdGlvbiBtYWlsaW5nIGxpc3QKVmlydHVh bGl6YXRpb25AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZv dW5kYXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8vdmlydHVhbGl6YXRpb24= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753469Ab2ITAmY (ORCPT ); Wed, 19 Sep 2012 20:42:24 -0400 Received: from ozlabs.org ([203.10.76.45]:57829 "EHLO ozlabs.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753350Ab2ITAmL convert rfc822-to-8bit (ORCPT ); Wed, 19 Sep 2012 20:42:11 -0400 From: Rusty Russell To: sjur.brandeland@stericsson.com Cc: Sjur =?utf-8?Q?Br=C3=A6ndeland?= , linux-kernel@vger.kernel.org, Linus Walleij , virtualization@lists.linux-foundation.org, Sjur =?utf-8?Q?Br=C3=A6ndeland?= , "Michael S. Tsirkin" , Amit Shah , Ohad Ben-Cohen Subject: Re: [PATCHv2] virtio_console: Add support for remoteproc serial In-Reply-To: <1348073458-17592-1-git-send-email-sjur.brandeland@stericsson.com> References: <1348073458-17592-1-git-send-email-sjur.brandeland@stericsson.com> User-Agent: Notmuch/0.13.2 (http://notmuchmail.org) Emacs/23.3.1 (i686-pc-linux-gnu) Date: Thu, 20 Sep 2012 10:10:39 +0930 Message-ID: <871uhxplvb.fsf@rustcorp.com.au> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org sjur.brandeland@stericsson.com writes: > From: Sjur Brændeland > > Add a simple serial connection driver called > VIRTIO_ID_RPROC_SERIAL (0xB) for communicating with a > remote processor in an asymmetric multi-processing > configuration. > > This implementation reuses the existing virtio_console > implementation, and adds support for DMA allocation > of data buffers and disables use of tty console and > the virtio control queue. > > This enables use of the exising virtio_console code in > the remoteproc framework. OK, I'll let Amit comment on the console changes, but some minor style comments below: > +#if IS_ENABLED(CONFIG_REMOTEPROC) > +static inline bool is_rproc_serial(struct virtio_device *vdev) > +{ > + return vdev->id.device == VIRTIO_ID_RPROC_SERIAL; > +} > +#else > +static inline bool is_rproc_serial(struct virtio_device *vdev) > +{ > + return false; > +} > +#endif I prefer to avoid inline in C files. The compiler knows, and with inline you get no warning if it becomes unused. Also, const struct virtio_device *. > +/* Allocate data buffer from DMA memory if requested */ > +static inline void * > +alloc_databuf(struct virtio_device *vdev, size_t size, gfp_t flag) > +{ > + if (is_rproc_serial(vdev)) { > + dma_addr_t dma; > + struct device *dev = &vdev->dev; > + /* > + * Allocate DMA memory from ancestors. Finding the ancestor > + * is a bit quirky when DMA_MEMORY_INCLUDES_CHILDREN is not > + * implemented. > + */ > + dev = dev->parent ? dev->parent : dev; > + dev = dev->parent ? dev->parent : dev; > + return dma_alloc_coherent(dev, size, &dma, flag); Wow, up 2 levels? Why 2? What's special about the grandparents? > -static void free_buf(struct port_buffer *buf) > +static void > +free_buf(struct virtqueue *vq, struct port_buffer *buf, size_t buf_size) > { Generally prefer to indent buf and buf_size, rather than break at free_buf. > + buf = alloc_databuf(vdev, buf_size, GFP_KERNEL); > > - buf = kmalloc(count, GFP_KERNEL); > if (!buf) > return -ENOMEM; This effectively adds a blank line between "buf = ..." and "if (!buf)", but they're adjacent because they're logically grouped. > @@ -767,6 +826,7 @@ static int port_fops_release(struct inode *inode, struct file *filp) > spin_unlock_irq(&port->inbuf_lock); > > spin_lock_irq(&port->outvq_lock); > + > reclaim_consumed_buffers(port); > spin_unlock_irq(&port->outvq_lock); > Weird whitespace addition. I know you're doing that simply to check if I'm reading, right? > @@ -1688,7 +1768,7 @@ static void remove_controlq_data(struct ports_device *portdev) > * config space to see how many ports the host has spawned. We > * initialize each port found. > */ > -static int __devinit virtcons_probe(struct virtio_device *vdev) > +static int virtcons_probe(struct virtio_device *vdev) > { > struct ports_device *portdev; > int err; Not sure about this change. If you actually turn off CONFIG_HOTPLUG, I wouldn't think that remoteproc would work at all any more, since it needs the driver core to match up devices? > @@ -1724,10 +1804,12 @@ static int __devinit virtcons_probe(struct virtio_device *vdev) > > multiport = false; > portdev->config.max_nr_ports = 1; > - if (virtio_config_val(vdev, VIRTIO_CONSOLE_F_MULTIPORT, > - offsetof(struct virtio_console_config, > - max_nr_ports), > - &portdev->config.max_nr_ports) == 0) > + if (is_rproc_serial(vdev)) > + multiport = false; > + else if (virtio_config_val(vdev, VIRTIO_CONSOLE_F_MULTIPORT, > + offsetof(struct virtio_console_config, > + max_nr_ports), > + &portdev->config.max_nr_ports) == 0) > multiport = true; This is a bit weird, to double-assign multiport = false; it looks tacked on. How about: /* Don't test MULTIPORT at all if we're rproc: not a valid feature! */ if (!is_rproc_serial(vdev) && virtio_config_val(vdev, VIRTIO_CONSOLE_F_MULTIPORT, offsetof(struct virtio_console_config, max_nr_ports), &portdev->config.max_nr_ports) == 0) { multiport = true; } else { multiport = false; portdev->config.max_nr_ports = 1; } > err = init_vqs(portdev); > @@ -1838,6 +1920,16 @@ static unsigned int features[] = { > VIRTIO_CONSOLE_F_MULTIPORT, > }; > > +static struct virtio_device_id rproc_serial_id_table[] = { > +#if IS_ENABLED(CONFIG_REMOTEPROC) > + { VIRTIO_ID_RPROC_SERIAL, VIRTIO_DEV_ANY_ID }, > +#endif > + { 0 }, > +}; > + > +static unsigned int rproc_serial_features[] = { > +}; > + > #ifdef CONFIG_PM > static int virtcons_freeze(struct virtio_device *vdev) > { > @@ -1922,6 +2014,16 @@ static struct virtio_driver virtio_console = { > #endif > }; > > +static struct virtio_driver virtio_rproc_serial = { > + .feature_table = rproc_serial_features, > + .feature_table_size = ARRAY_SIZE(rproc_serial_features), > + .driver.name = "virtio_rproc_serial", > + .driver.owner = THIS_MODULE, > + .id_table = rproc_serial_id_table, > + .probe = virtcons_probe, > + .remove = virtcons_remove, > +}; > + > static int __init init(void) > { > int err; > @@ -1941,12 +2043,16 @@ static int __init init(void) > INIT_LIST_HEAD(&pdrvdata.consoles); > INIT_LIST_HEAD(&pdrvdata.portdevs); > > - return register_virtio_driver(&virtio_console); > + err = register_virtio_driver(&virtio_console); > + if (err) > + return err; > + return register_virtio_driver(&virtio_rproc_serial); Hmm, we need to cleanup if the second register fails. > #define VIRTIO_ID_RPMSG 7 /* virtio remote processor messaging */ > #define VIRTIO_ID_SCSI 8 /* virtio scsi */ > #define VIRTIO_ID_9P 9 /* 9p virtio console */ > +#define VIRTIO_ID_RPROC_SERIAL 0xB /* virtio remoteproc serial link */ Prefer decimal here... Cheers, Rusty.