aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
authorMatthijs Kooijman <matthijs@stdin.nl>2012-11-02 08:13:54 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-12-21 15:26:08 -0500
commit70ef69915b1fba4ad85aebe530caf156a144c2e5 (patch)
tree76f5b8f79658f5e98ec4373d4e87d7062a67e3f8 /drivers/media
parentd40fbf8d52ae6c9b7fe9d76eeab624afc3a3f1ea (diff)
[media] rc: Make probe cleanup goto labels more verbose
Before, labels were simply numbered. Now, the labels are named after the cleanup action they'll perform (first), based on how the winbond-cir driver does it. This makes the code a bit more clear and makes changes in the ordering of labels easier to review. This change is applied only to the rc drivers that do significant cleanup in their probe functions: ati-remote, ene-ir, fintek-cir, gpio-ir-recv, ite-cir, nuvoton-cir. This commit should not change any code, it just renames goto labels. [mchehab@redhat.com: removed changes at gpio-ir-recv.c, due to merge conflicts] Signed-off-by: Matthijs Kooijman <matthijs@stdin.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/rc/ati_remote.c27
-rw-r--r--drivers/media/rc/ene_ir.c20
-rw-r--r--drivers/media/rc/fintek-cir.c20
-rw-r--r--drivers/media/rc/ite-cir.c18
-rw-r--r--drivers/media/rc/nuvoton-cir.c30
5 files changed, 60 insertions, 55 deletions
diff --git a/drivers/media/rc/ati_remote.c b/drivers/media/rc/ati_remote.c
index 2d6fb26a0170..4d6a63fe6c5e 100644
--- a/drivers/media/rc/ati_remote.c
+++ b/drivers/media/rc/ati_remote.c
@@ -872,11 +872,11 @@ static int ati_remote_probe(struct usb_interface *interface,
872 ati_remote = kzalloc(sizeof (struct ati_remote), GFP_KERNEL); 872 ati_remote = kzalloc(sizeof (struct ati_remote), GFP_KERNEL);
873 rc_dev = rc_allocate_device(); 873 rc_dev = rc_allocate_device();
874 if (!ati_remote || !rc_dev) 874 if (!ati_remote || !rc_dev)
875 goto fail1; 875 goto exit_free_dev_rdev;
876 876
877 /* Allocate URB buffers, URBs */ 877 /* Allocate URB buffers, URBs */
878 if (ati_remote_alloc_buffers(udev, ati_remote)) 878 if (ati_remote_alloc_buffers(udev, ati_remote))
879 goto fail2; 879 goto exit_free_buffers;
880 880
881 ati_remote->endpoint_in = endpoint_in; 881 ati_remote->endpoint_in = endpoint_in;
882 ati_remote->endpoint_out = endpoint_out; 882 ati_remote->endpoint_out = endpoint_out;
@@ -924,12 +924,12 @@ static int ati_remote_probe(struct usb_interface *interface,
924 /* Device Hardware Initialization - fills in ati_remote->idev from udev. */ 924 /* Device Hardware Initialization - fills in ati_remote->idev from udev. */
925 err = ati_remote_initialize(ati_remote); 925 err = ati_remote_initialize(ati_remote);
926 if (err) 926 if (err)
927 goto fail3; 927 goto exit_kill_urbs;
928 928
929 /* Set up and register rc device */ 929 /* Set up and register rc device */
930 err = rc_register_device(ati_remote->rdev); 930 err = rc_register_device(ati_remote->rdev);
931 if (err) 931 if (err)
932 goto fail3; 932 goto exit_kill_urbs;
933 933
934 /* use our delay for rc_dev */ 934 /* use our delay for rc_dev */
935 ati_remote->rdev->input_dev->rep[REP_DELAY] = repeat_delay; 935 ati_remote->rdev->input_dev->rep[REP_DELAY] = repeat_delay;
@@ -939,7 +939,7 @@ static int ati_remote_probe(struct usb_interface *interface,
939 input_dev = input_allocate_device(); 939 input_dev = input_allocate_device();
940 if (!input_dev) { 940 if (!input_dev) {
941 err = -ENOMEM; 941 err = -ENOMEM;
942 goto fail4; 942 goto exit_unregister_device;
943 } 943 }
944 944
945 ati_remote->idev = input_dev; 945 ati_remote->idev = input_dev;
@@ -947,19 +947,24 @@ static int ati_remote_probe(struct usb_interface *interface,
947 err = input_register_device(input_dev); 947 err = input_register_device(input_dev);
948 948
949 if (err) 949 if (err)
950 goto fail5; 950 goto exit_free_input_device;
951 } 951 }
952 952
953 usb_set_intfdata(interface, ati_remote); 953 usb_set_intfdata(interface, ati_remote);
954 return 0; 954 return 0;
955 955
956 fail5: input_free_device(input_dev); 956 exit_free_input_device:
957 fail4: rc_unregister_device(rc_dev); 957 input_free_device(input_dev);
958 exit_unregister_device:
959 rc_unregister_device(rc_dev);
958 rc_dev = NULL; 960 rc_dev = NULL;
959 fail3: usb_kill_urb(ati_remote->irq_urb); 961 exit_kill_urbs:
962 usb_kill_urb(ati_remote->irq_urb);
960 usb_kill_urb(ati_remote->out_urb); 963 usb_kill_urb(ati_remote->out_urb);
961 fail2: ati_remote_free_buffers(ati_remote); 964 exit_free_buffers:
962 fail1: rc_free_device(rc_dev); 965 ati_remote_free_buffers(ati_remote);
966 exit_free_dev_rdev:
967 rc_free_device(rc_dev);
963 kfree(ati_remote); 968 kfree(ati_remote);
964 return err; 969 return err;
965} 970}
diff --git a/drivers/media/rc/ene_ir.c b/drivers/media/rc/ene_ir.c
index 22231dd4f62b..f7fdfea49ab1 100644
--- a/drivers/media/rc/ene_ir.c
+++ b/drivers/media/rc/ene_ir.c
@@ -1003,7 +1003,7 @@ static int ene_probe(struct pnp_dev *pnp_dev, const struct pnp_device_id *id)
1003 dev = kzalloc(sizeof(struct ene_device), GFP_KERNEL); 1003 dev = kzalloc(sizeof(struct ene_device), GFP_KERNEL);
1004 rdev = rc_allocate_device(); 1004 rdev = rc_allocate_device();
1005 if (!dev || !rdev) 1005 if (!dev || !rdev)
1006 goto failure; 1006 goto exit_free_dev_rdev;
1007 1007
1008 /* validate resources */ 1008 /* validate resources */
1009 error = -ENODEV; 1009 error = -ENODEV;
@@ -1014,10 +1014,10 @@ static int ene_probe(struct pnp_dev *pnp_dev, const struct pnp_device_id *id)
1014 1014
1015 if (!pnp_port_valid(pnp_dev, 0) || 1015 if (!pnp_port_valid(pnp_dev, 0) ||
1016 pnp_port_len(pnp_dev, 0) < ENE_IO_SIZE) 1016 pnp_port_len(pnp_dev, 0) < ENE_IO_SIZE)
1017 goto failure; 1017 goto exit_free_dev_rdev;
1018 1018
1019 if (!pnp_irq_valid(pnp_dev, 0)) 1019 if (!pnp_irq_valid(pnp_dev, 0))
1020 goto failure; 1020 goto exit_free_dev_rdev;
1021 1021
1022 spin_lock_init(&dev->hw_lock); 1022 spin_lock_init(&dev->hw_lock);
1023 1023
@@ -1033,7 +1033,7 @@ static int ene_probe(struct pnp_dev *pnp_dev, const struct pnp_device_id *id)
1033 /* detect hardware version and features */ 1033 /* detect hardware version and features */
1034 error = ene_hw_detect(dev); 1034 error = ene_hw_detect(dev);
1035 if (error) 1035 if (error)
1036 goto failure; 1036 goto exit_free_dev_rdev;
1037 1037
1038 if (!dev->hw_learning_and_tx_capable && txsim) { 1038 if (!dev->hw_learning_and_tx_capable && txsim) {
1039 dev->hw_learning_and_tx_capable = true; 1039 dev->hw_learning_and_tx_capable = true;
@@ -1078,27 +1078,27 @@ static int ene_probe(struct pnp_dev *pnp_dev, const struct pnp_device_id *id)
1078 /* claim the resources */ 1078 /* claim the resources */
1079 error = -EBUSY; 1079 error = -EBUSY;
1080 if (!request_region(dev->hw_io, ENE_IO_SIZE, ENE_DRIVER_NAME)) { 1080 if (!request_region(dev->hw_io, ENE_IO_SIZE, ENE_DRIVER_NAME)) {
1081 goto failure; 1081 goto exit_free_dev_rdev;
1082 } 1082 }
1083 1083
1084 dev->irq = pnp_irq(pnp_dev, 0); 1084 dev->irq = pnp_irq(pnp_dev, 0);
1085 if (request_irq(dev->irq, ene_isr, 1085 if (request_irq(dev->irq, ene_isr,
1086 IRQF_SHARED, ENE_DRIVER_NAME, (void *)dev)) { 1086 IRQF_SHARED, ENE_DRIVER_NAME, (void *)dev)) {
1087 goto failure2; 1087 goto exit_release_hw_io;
1088 } 1088 }
1089 1089
1090 error = rc_register_device(rdev); 1090 error = rc_register_device(rdev);
1091 if (error < 0) 1091 if (error < 0)
1092 goto failure3; 1092 goto exit_free_irq;
1093 1093
1094 pr_notice("driver has been successfully loaded\n"); 1094 pr_notice("driver has been successfully loaded\n");
1095 return 0; 1095 return 0;
1096 1096
1097failure3: 1097exit_free_irq:
1098 free_irq(dev->irq, dev); 1098 free_irq(dev->irq, dev);
1099failure2: 1099exit_release_hw_io:
1100 release_region(dev->hw_io, ENE_IO_SIZE); 1100 release_region(dev->hw_io, ENE_IO_SIZE);
1101failure: 1101exit_free_dev_rdev:
1102 rc_free_device(rdev); 1102 rc_free_device(rdev);
1103 kfree(dev); 1103 kfree(dev);
1104 return error; 1104 return error;
diff --git a/drivers/media/rc/fintek-cir.c b/drivers/media/rc/fintek-cir.c
index 936c3f79b62c..3d5e57cacf31 100644
--- a/drivers/media/rc/fintek-cir.c
+++ b/drivers/media/rc/fintek-cir.c
@@ -500,18 +500,18 @@ static int fintek_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id
500 /* input device for IR remote (and tx) */ 500 /* input device for IR remote (and tx) */
501 rdev = rc_allocate_device(); 501 rdev = rc_allocate_device();
502 if (!rdev) 502 if (!rdev)
503 goto failure; 503 goto exit_free_dev_rdev;
504 504
505 ret = -ENODEV; 505 ret = -ENODEV;
506 /* validate pnp resources */ 506 /* validate pnp resources */
507 if (!pnp_port_valid(pdev, 0)) { 507 if (!pnp_port_valid(pdev, 0)) {
508 dev_err(&pdev->dev, "IR PNP Port not valid!\n"); 508 dev_err(&pdev->dev, "IR PNP Port not valid!\n");
509 goto failure; 509 goto exit_free_dev_rdev;
510 } 510 }
511 511
512 if (!pnp_irq_valid(pdev, 0)) { 512 if (!pnp_irq_valid(pdev, 0)) {
513 dev_err(&pdev->dev, "IR PNP IRQ not valid!\n"); 513 dev_err(&pdev->dev, "IR PNP IRQ not valid!\n");
514 goto failure; 514 goto exit_free_dev_rdev;
515 } 515 }
516 516
517 fintek->cir_addr = pnp_port_start(pdev, 0); 517 fintek->cir_addr = pnp_port_start(pdev, 0);
@@ -528,7 +528,7 @@ static int fintek_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id
528 528
529 ret = fintek_hw_detect(fintek); 529 ret = fintek_hw_detect(fintek);
530 if (ret) 530 if (ret)
531 goto failure; 531 goto exit_free_dev_rdev;
532 532
533 /* Initialize CIR & CIR Wake Logical Devices */ 533 /* Initialize CIR & CIR Wake Logical Devices */
534 fintek_config_mode_enable(fintek); 534 fintek_config_mode_enable(fintek);
@@ -561,15 +561,15 @@ static int fintek_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id
561 /* now claim resources */ 561 /* now claim resources */
562 if (!request_region(fintek->cir_addr, 562 if (!request_region(fintek->cir_addr,
563 fintek->cir_port_len, FINTEK_DRIVER_NAME)) 563 fintek->cir_port_len, FINTEK_DRIVER_NAME))
564 goto failure; 564 goto exit_free_dev_rdev;
565 565
566 if (request_irq(fintek->cir_irq, fintek_cir_isr, IRQF_SHARED, 566 if (request_irq(fintek->cir_irq, fintek_cir_isr, IRQF_SHARED,
567 FINTEK_DRIVER_NAME, (void *)fintek)) 567 FINTEK_DRIVER_NAME, (void *)fintek))
568 goto failure2; 568 goto exit_free_cir_addr;
569 569
570 ret = rc_register_device(rdev); 570 ret = rc_register_device(rdev);
571 if (ret) 571 if (ret)
572 goto failure3; 572 goto exit_free_irq;
573 573
574 device_init_wakeup(&pdev->dev, true); 574 device_init_wakeup(&pdev->dev, true);
575 fintek->rdev = rdev; 575 fintek->rdev = rdev;
@@ -579,11 +579,11 @@ static int fintek_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id
579 579
580 return 0; 580 return 0;
581 581
582failure3: 582exit_free_irq:
583 free_irq(fintek->cir_irq, fintek); 583 free_irq(fintek->cir_irq, fintek);
584failure2: 584exit_free_cir_addr:
585 release_region(fintek->cir_addr, fintek->cir_port_len); 585 release_region(fintek->cir_addr, fintek->cir_port_len);
586failure: 586exit_free_dev_rdev:
587 rc_free_device(rdev); 587 rc_free_device(rdev);
588 kfree(fintek); 588 kfree(fintek);
589 589
diff --git a/drivers/media/rc/ite-cir.c b/drivers/media/rc/ite-cir.c
index 5e5a7f2b8184..8e0e661b5ef9 100644
--- a/drivers/media/rc/ite-cir.c
+++ b/drivers/media/rc/ite-cir.c
@@ -1472,7 +1472,7 @@ static int ite_probe(struct pnp_dev *pdev, const struct pnp_device_id
1472 /* input device for IR remote (and tx) */ 1472 /* input device for IR remote (and tx) */
1473 rdev = rc_allocate_device(); 1473 rdev = rc_allocate_device();
1474 if (!rdev) 1474 if (!rdev)
1475 goto failure; 1475 goto exit_free_dev_rdev;
1476 itdev->rdev = rdev; 1476 itdev->rdev = rdev;
1477 1477
1478 ret = -ENODEV; 1478 ret = -ENODEV;
@@ -1498,12 +1498,12 @@ static int ite_probe(struct pnp_dev *pdev, const struct pnp_device_id
1498 if (!pnp_port_valid(pdev, io_rsrc_no) || 1498 if (!pnp_port_valid(pdev, io_rsrc_no) ||
1499 pnp_port_len(pdev, io_rsrc_no) != dev_desc->io_region_size) { 1499 pnp_port_len(pdev, io_rsrc_no) != dev_desc->io_region_size) {
1500 dev_err(&pdev->dev, "IR PNP Port not valid!\n"); 1500 dev_err(&pdev->dev, "IR PNP Port not valid!\n");
1501 goto failure; 1501 goto exit_free_dev_rdev;
1502 } 1502 }
1503 1503
1504 if (!pnp_irq_valid(pdev, 0)) { 1504 if (!pnp_irq_valid(pdev, 0)) {
1505 dev_err(&pdev->dev, "PNP IRQ not valid!\n"); 1505 dev_err(&pdev->dev, "PNP IRQ not valid!\n");
1506 goto failure; 1506 goto exit_free_dev_rdev;
1507 } 1507 }
1508 1508
1509 /* store resource values */ 1509 /* store resource values */
@@ -1595,25 +1595,25 @@ static int ite_probe(struct pnp_dev *pdev, const struct pnp_device_id
1595 /* now claim resources */ 1595 /* now claim resources */
1596 if (!request_region(itdev->cir_addr, 1596 if (!request_region(itdev->cir_addr,
1597 dev_desc->io_region_size, ITE_DRIVER_NAME)) 1597 dev_desc->io_region_size, ITE_DRIVER_NAME))
1598 goto failure; 1598 goto exit_free_dev_rdev;
1599 1599
1600 if (request_irq(itdev->cir_irq, ite_cir_isr, IRQF_SHARED, 1600 if (request_irq(itdev->cir_irq, ite_cir_isr, IRQF_SHARED,
1601 ITE_DRIVER_NAME, (void *)itdev)) 1601 ITE_DRIVER_NAME, (void *)itdev))
1602 goto failure2; 1602 goto exit_release_cir_addr;
1603 1603
1604 ret = rc_register_device(rdev); 1604 ret = rc_register_device(rdev);
1605 if (ret) 1605 if (ret)
1606 goto failure3; 1606 goto exit_free_irq;
1607 1607
1608 ite_pr(KERN_NOTICE, "driver has been successfully loaded\n"); 1608 ite_pr(KERN_NOTICE, "driver has been successfully loaded\n");
1609 1609
1610 return 0; 1610 return 0;
1611 1611
1612failure3: 1612exit_free_irq:
1613 free_irq(itdev->cir_irq, itdev); 1613 free_irq(itdev->cir_irq, itdev);
1614failure2: 1614exit_release_cir_addr:
1615 release_region(itdev->cir_addr, itdev->params.io_region_size); 1615 release_region(itdev->cir_addr, itdev->params.io_region_size);
1616failure: 1616exit_free_dev_rdev:
1617 rc_free_device(rdev); 1617 rc_free_device(rdev);
1618 kfree(itdev); 1618 kfree(itdev);
1619 1619
diff --git a/drivers/media/rc/nuvoton-cir.c b/drivers/media/rc/nuvoton-cir.c
index e4ea89a11eed..3477e231c182 100644
--- a/drivers/media/rc/nuvoton-cir.c
+++ b/drivers/media/rc/nuvoton-cir.c
@@ -986,25 +986,25 @@ static int nvt_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id)
986 /* input device for IR remote (and tx) */ 986 /* input device for IR remote (and tx) */
987 rdev = rc_allocate_device(); 987 rdev = rc_allocate_device();
988 if (!rdev) 988 if (!rdev)
989 goto failure; 989 goto exit_free_dev_rdev;
990 990
991 ret = -ENODEV; 991 ret = -ENODEV;
992 /* validate pnp resources */ 992 /* validate pnp resources */
993 if (!pnp_port_valid(pdev, 0) || 993 if (!pnp_port_valid(pdev, 0) ||
994 pnp_port_len(pdev, 0) < CIR_IOREG_LENGTH) { 994 pnp_port_len(pdev, 0) < CIR_IOREG_LENGTH) {
995 dev_err(&pdev->dev, "IR PNP Port not valid!\n"); 995 dev_err(&pdev->dev, "IR PNP Port not valid!\n");
996 goto failure; 996 goto exit_free_dev_rdev;
997 } 997 }
998 998
999 if (!pnp_irq_valid(pdev, 0)) { 999 if (!pnp_irq_valid(pdev, 0)) {
1000 dev_err(&pdev->dev, "PNP IRQ not valid!\n"); 1000 dev_err(&pdev->dev, "PNP IRQ not valid!\n");
1001 goto failure; 1001 goto exit_free_dev_rdev;
1002 } 1002 }
1003 1003
1004 if (!pnp_port_valid(pdev, 1) || 1004 if (!pnp_port_valid(pdev, 1) ||
1005 pnp_port_len(pdev, 1) < CIR_IOREG_LENGTH) { 1005 pnp_port_len(pdev, 1) < CIR_IOREG_LENGTH) {
1006 dev_err(&pdev->dev, "Wake PNP Port not valid!\n"); 1006 dev_err(&pdev->dev, "Wake PNP Port not valid!\n");
1007 goto failure; 1007 goto exit_free_dev_rdev;
1008 } 1008 }
1009 1009
1010 nvt->cir_addr = pnp_port_start(pdev, 0); 1010 nvt->cir_addr = pnp_port_start(pdev, 0);
@@ -1027,7 +1027,7 @@ static int nvt_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id)
1027 1027
1028 ret = nvt_hw_detect(nvt); 1028 ret = nvt_hw_detect(nvt);
1029 if (ret) 1029 if (ret)
1030 goto failure; 1030 goto exit_free_dev_rdev;
1031 1031
1032 /* Initialize CIR & CIR Wake Logical Devices */ 1032 /* Initialize CIR & CIR Wake Logical Devices */
1033 nvt_efm_enable(nvt); 1033 nvt_efm_enable(nvt);
@@ -1070,23 +1070,23 @@ static int nvt_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id)
1070 /* now claim resources */ 1070 /* now claim resources */
1071 if (!request_region(nvt->cir_addr, 1071 if (!request_region(nvt->cir_addr,
1072 CIR_IOREG_LENGTH, NVT_DRIVER_NAME)) 1072 CIR_IOREG_LENGTH, NVT_DRIVER_NAME))
1073 goto failure; 1073 goto exit_free_dev_rdev;
1074 1074
1075 if (request_irq(nvt->cir_irq, nvt_cir_isr, IRQF_SHARED, 1075 if (request_irq(nvt->cir_irq, nvt_cir_isr, IRQF_SHARED,
1076 NVT_DRIVER_NAME, (void *)nvt)) 1076 NVT_DRIVER_NAME, (void *)nvt))
1077 goto failure2; 1077 goto exit_release_cir_addr;
1078 1078
1079 if (!request_region(nvt->cir_wake_addr, 1079 if (!request_region(nvt->cir_wake_addr,
1080 CIR_IOREG_LENGTH, NVT_DRIVER_NAME)) 1080 CIR_IOREG_LENGTH, NVT_DRIVER_NAME))
1081 goto failure3; 1081 goto exit_free_irq;
1082 1082
1083 if (request_irq(nvt->cir_wake_irq, nvt_cir_wake_isr, IRQF_SHARED, 1083 if (request_irq(nvt->cir_wake_irq, nvt_cir_wake_isr, IRQF_SHARED,
1084 NVT_DRIVER_NAME, (void *)nvt)) 1084 NVT_DRIVER_NAME, (void *)nvt))
1085 goto failure4; 1085 goto exit_release_cir_wake_addr;
1086 1086
1087 ret = rc_register_device(rdev); 1087 ret = rc_register_device(rdev);
1088 if (ret) 1088 if (ret)
1089 goto failure5; 1089 goto exit_free_wake_irq;
1090 1090
1091 device_init_wakeup(&pdev->dev, true); 1091 device_init_wakeup(&pdev->dev, true);
1092 nvt->rdev = rdev; 1092 nvt->rdev = rdev;
@@ -1098,15 +1098,15 @@ static int nvt_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id)
1098 1098
1099 return 0; 1099 return 0;
1100 1100
1101failure5: 1101exit_free_wake_irq:
1102 free_irq(nvt->cir_wake_irq, nvt); 1102 free_irq(nvt->cir_wake_irq, nvt);
1103failure4: 1103exit_release_cir_wake_addr:
1104 release_region(nvt->cir_wake_addr, CIR_IOREG_LENGTH); 1104 release_region(nvt->cir_wake_addr, CIR_IOREG_LENGTH);
1105failure3: 1105exit_free_irq:
1106 free_irq(nvt->cir_irq, nvt); 1106 free_irq(nvt->cir_irq, nvt);
1107failure2: 1107exit_release_cir_addr:
1108 release_region(nvt->cir_addr, CIR_IOREG_LENGTH); 1108 release_region(nvt->cir_addr, CIR_IOREG_LENGTH);
1109failure: 1109exit_free_dev_rdev:
1110 rc_free_device(rdev); 1110 rc_free_device(rdev);
1111 kfree(nvt); 1111 kfree(nvt);
1112 1112