diff options
Diffstat (limited to 'hw')
-rw-r--r-- | hw/s390x/css.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/hw/s390x/css.c b/hw/s390x/css.c index c03bb20bc9..d94498a97b 100644 --- a/hw/s390x/css.c +++ b/hw/s390x/css.c @@ -1302,6 +1302,27 @@ bool css_schid_final(int m, uint8_t cssid, uint8_t ssid, uint16_t schid) (MAX_SCHID + 1) / sizeof(unsigned long)); } +unsigned int css_find_free_chpid(uint8_t cssid) +{ + CssImage *css = channel_subsys.css[cssid]; + unsigned int chpid; + + if (!css) { + return MAX_CHPID + 1; + } + + for (chpid = 0; chpid <= MAX_CHPID; chpid++) { + /* skip reserved chpid */ + if (chpid == VIRTIO_CCW_CHPID) { + continue; + } + if (!css->chpids[chpid].in_use) { + return chpid; + } + } + return MAX_CHPID + 1; +} + static int css_add_virtual_chpid(uint8_t cssid, uint8_t chpid, uint8_t type) { CssImage *css; |