On Mon, 7 Dec 2020 19:40:36 +0100 Thomas Huth <th...@redhat.com> wrote:
> On 07/12/2020 17.34, Thomas Huth wrote: > > On 07/12/2020 17.30, Cornelia Huck wrote: > >> On Mon, 7 Dec 2020 15:28:47 +0100 > >> Thomas Huth <th...@redhat.com> wrote: > >> > >>> On 04/12/2020 13.14, Cornelia Huck wrote: > >>>> Hotplug a virtio-net-ccw device, and then hotunplug it again. > >>>> > >>>> Signed-off-by: Cornelia Huck <coh...@redhat.com> > >>>> --- > > > [...] > >>>> + exec_command_and_wait_for_pattern(self, 'ls > >>>> /sys/bus/ccw/devices/', > >>>> + '0.0.4711') > >>>> + # and detach it again > >>>> + exec_command_and_wait_for_pattern(self, 'dmesg -c', ' ') > >>> > >>> If adapt my above change, you could also get rid of this dmesg -c here > >>> (since it's done in the while loop already) > >> > >> I don't think so (there are two CRWs posted, and the loop might have > >> caught the first one only.) > > > > Oh, you're right. So let's better be safe than sorry and keep this dmesg > > -c. > > Ok, as we had to discover during some testing, it's a bad idea to only wait > for ' ' after the 'dmesg -c' since it matches too early, so that the device > gets added while the dmesg command is still running. > > The following code is working for me instead: > > # add another device > exec_command_and_wait_for_pattern(self, > 'dmesg -c > /dev/null; echo dm-clear\ 1', 'dm-clear 1') > self.vm.command('device_add', driver='virtio-net-ccw', > devno='fe.0.4711', id='net_4711') > exec_command_and_wait_for_pattern(self, > 'while ! (dmesg -c | grep CRW) ; do sleep 1 ; done', > 'CRW reports') > exec_command_and_wait_for_pattern(self, 'ls /sys/bus/ccw/devices/', > '0.0.4711') > # and detach it again > exec_command_and_wait_for_pattern(self, > 'dmesg -c > /dev/null; echo dm-clear\ 2', 'dm-clear 2') > self.vm.command('device_del', id='net_4711') > self.vm.event_wait(name='DEVICE_DELETED', > match={'data': {'device': 'net_4711'}}) > exec_command_and_wait_for_pattern(self, > 'while ! (dmesg -c | grep CRW) ; do sleep 1 ; done', > 'CRW reports') > exec_command_and_wait_for_pattern(self, > 'ls /sys/bus/ccw/devices/0.0.4711', > 'No such file or directory') Thanks for tracking this down, this works for me as well. I'll send a v3.